Sample report

What the report looks like.

Generated from deliberately vulnerable fictitious fixtures. The subject, ExampleCo, does not exist. Client fields are shown as redaction bars.

Quantum Readiness Report: executive summary

ExampleCo shielded pool.

Report header (redacted)
FieldValue
Client
Commit
TierStandard
Readiness score0 / 100 (Critical), a relative indicator from rule severities, not a certification
Findings48: 0 critical, 37 high, 7 medium, 1 low, 3 informational

What a quantum adversary can do: forge signatures and authorisations, open commitments to false values, forge pairing-based proofs, decrypt recorded traffic. What it cannot undo: blinded Pedersen commitments and Groth16 witnesses stay hidden.

Recommended first step: a two-week inventory and crypto-agility phase, then hybrid X25519 + ML-KEM-768 key exchange, then plan the proof-system and signature migration.

Findings by rule (excerpt)

Each finding names its impact and effort.

Excerpt of the findings table. Effort: S small, M medium, L large, XL extra large.
RuleSeverityTitleCountEffort
PQ-001HighQuantum-vulnerable signature scheme6L
PQ-002HighQuantum-vulnerable key exchange / public-key encryption2L
PQ-003HighHarvest-now-decrypt-later exposure1M
PQ-011HighPre-standard Kyber/Dilithium (round-3) parameters2M
PQ-014HighZK proof system relies on elliptic-curve or pairing assumptions2XL
PQ-007MediumUnchecked or observable decapsulation failure1S
PQ-008LowML-DSA deterministic signing (hedged recommended)1S
PQC-006InfoCircom: hash-based commitment (PQ-plausible building block)2S

Severity is always paired with a text label. The full sample has 21 rules plus per-rule detail with sources; this page shows an excerpt.

Circuit pre-audit output

A Circom pass on a toy circuit.

Unedited tool output on sample_vault.circom, a circuit written from scratch for this sample with two deliberate bugs. Verdict: FAIL, 1 critical, 6 medium, 1 low. This illustrates the format only, not detection performance.

zk-audit v0.1.0, 2026-10-23, engine Circomspect: all 8 findings
LineSeverityRuleDetail
8CriticalCA01The signal in is not constrained by the template.
11MediumCS0005The <-- operator does not constrain the assigned signal.
12MediumCS0013The <-- operator is not necessary here; <== would constrain it.
12MediumCS0006The signal inv is assigned but never read.
11MediumCS0006The signal out is assigned but never read inside the template.
10MediumCS0017Intermediate signals should occur in at least two constraints.
17MediumCS0006The signal unused is not used by the template.
11LowCS0003Comparisons with field elements greater than p/2 may produce unexpected results.

An unconstrained signal is elevated to critical; <-- warnings are review-level.

Sample · interactive

Walk through the audit of the sample circuit.

The same toy circuit as the output below, drawn as its constraint graph. Step through the five stages, or pick a signal or a finding to see the line it comes from. Sample data only: it shows how a report reads, not detection performance.

template SampleVault (main)component isBig = IsBig()<== · L21<-- · L11<-- · L12<== · L22amountunused1isBig.inCRITICAL1isBig.out3isBig.inv3allowed
constraint (<==)assignment only (<--)critical (text label too)review-level finding

FAIL: 1 critical, 6 medium, 1 low.

FAIL1 critical · 6 medium · 1 low

Pick a signal or a finding.

pragma circom 2.0.0; // SAMPLE ONLY. Written for zk-audit's public sample report; not derived from any client or third-party code.// A toy "vault withdrawal" gate with TWO deliberate bugs (see samples/README.md)://   1. `isBig.out` is assigned with `<--` and never constrained  -> under-constrained output//   2. `unused` is an input signal that no constraint touches   -> dangling signaltemplate IsBig() {    signal input in;    signal output out;    signal inv;    out <-- in > 100 ? 1 : 0;   // BUG 1: assignment without a constraint    inv <-- in;} template SampleVault() {    signal input amount;    signal input unused;        // BUG 2: never constrained    signal output allowed;     component isBig = IsBig();    isBig.in <== amount;    allowed <== isBig.out;} component main = SampleVault();

sample_vault.circom · written for this sample with two deliberate bugs. Without JavaScript this section shows the final stage.