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.
| Field | Value |
|---|---|
| Client | |
| Commit | |
| Tier | Standard |
| Readiness score | 0 / 100 (Critical), a relative indicator from rule severities, not a certification |
| Findings | 48: 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.
| Rule | Severity | Title | Count | Effort |
|---|---|---|---|---|
| PQ-001 | High | Quantum-vulnerable signature scheme | 6 | L |
| PQ-002 | High | Quantum-vulnerable key exchange / public-key encryption | 2 | L |
| PQ-003 | High | Harvest-now-decrypt-later exposure | 1 | M |
| PQ-011 | High | Pre-standard Kyber/Dilithium (round-3) parameters | 2 | M |
| PQ-014 | High | ZK proof system relies on elliptic-curve or pairing assumptions | 2 | XL |
| PQ-007 | Medium | Unchecked or observable decapsulation failure | 1 | S |
| PQ-008 | Low | ML-DSA deterministic signing (hedged recommended) | 1 | S |
| PQC-006 | Info | Circom: hash-based commitment (PQ-plausible building block) | 2 | S |
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.
| Line | Severity | Rule | Detail |
|---|---|---|---|
| 8 | Critical | CA01 | The signal in is not constrained by the template. |
| 11 | Medium | CS0005 | The <-- operator does not constrain the assigned signal. |
| 12 | Medium | CS0013 | The <-- operator is not necessary here; <== would constrain it. |
| 12 | Medium | CS0006 | The signal inv is assigned but never read. |
| 11 | Medium | CS0006 | The signal out is assigned but never read inside the template. |
| 10 | Medium | CS0017 | Intermediate signals should occur in at least two constraints. |
| 17 | Medium | CS0006 | The signal unused is not used by the template. |
| 11 | Low | CS0003 | Comparisons 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.
<==)assignment only (<--)critical (text label too)review-level findingRead the circuit: two templates, six signals.
Draw every assignment. Solid lines are constraints (<==); dashed lines only assign a value (<--) and prove nothing.
The static engine (Circomspect) reports 7 findings at review level.
zk-audit elevates the signal the template never constrains to critical: a prover can set it freely.
FAIL: 1 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.