This checklist maps the 2026 paper's actual construction to the current direct Qualtran implementation in this repo.
Its goal is not to restate the benchmark headline. Its goal is to answer:
- Which parts of the paper are explicitly implemented?
- Which parts are only approximately or structurally reconstructed?
- Which parts are still our own engineering search space rather than paper transcription?
Primary paper:
- Chevignard, Fouque, Schrottenloher, "Reducing the Number of Qubits in Quantum Discrete Logarithms on Elliptic Curves", ePrint 2026/280
The paper contains an internal tension that matters for our benchmarking:
- The abstract says that for
n = 256, the estimate is1098qubits with22independent runs and2^38.10Toffoli gates each. - The detailed Table 8 on page 27 shows:
P-224 -> 1098P-256 -> 1193P-384 -> 1494P-521 -> 1895
For our purposes this means:
1098is definitely paper-backed as a published number.- But
1098is not unambiguously the paper'sP-256/ secp256k1-comparable line. - For
P-256-style comparison, the detailed table currently points to1193, not1098.
So any external claim must specify whether it is comparing against:
- the abstract-level
n = 256headline, or - the detailed
P-256Table 8 row.
From the paper text we can now confirm the following high-level structure:
- The core target is point multiplication on a fixed point
kP, not explicit affine recovery of the point. - The paper computes projective coordinates directly in an RNS.
- The paper avoids modular inversion by compressing with a Legendre symbol,
reducing the problem to computing
XZ mod q. - The paper uses May-Schlieper compression plus the compressed Ekerå-Håstad algorithm.
- The low-space
XZ mod qcomputation is done via:- windowing
- a binary tree of point additions
- spooky pebbling
- RNS reconstruction
- The point addition formula is a degree-4 complete projective addition
formula from the cited source
[33], implemented reversibly as Algorithm 1. - The paper's detailed-table
P-224line is:1098qubits22runs2^38.10Toffoli gates per run
- The paper's detailed-table
P-256line is:1193qubits22runs2^39.98Toffoli gates per run
| Paper item | Paper status | Repo mapping | Mapping status | Notes |
|---|---|---|---|---|
Fixed-point multiplication kP in low-space Shor/Ekerå-Håstad setting |
Explicit in paper intro and Section 3/4 | qualtran_chevignard_backend.py top-level attack model | Partial |
We implement the fixed-point low-space family, but the exact paper call structure is still reconstructed. |
Complete projective point addition formula from [33] |
Explicit, Section 2.2 / Algorithm 1 | ProjectivePointAddBloq | Partial |
We model reversible projective point addition with explicit subkernels, but not as a literal line-by-line transcription of Algorithm 1. |
| Algorithm 1 uses 34 multiply-adds and 8 temporary registers | Explicit, Lemma 1 / Algorithm 1 | qualtran_chevignard_backend.py | Missing exact transcription |
Our point-add bloq models aggregate costs; it does not yet encode the exact 20 forward + 14 reverse multiply-add structure. |
RNS reconstruction of T(e) mod q |
Explicit, Section 2.3 / Algorithm 2 | qualtran_chevignard_independent_counter.py and qualtran_chevignard_backend.py | Partial |
We implement explicit residue-level kernels and reconstruction-style aggregation, but not a literal transcription of Algorithm 2 with quotient register structure. |
| Legendre-symbol hash family replacing affine recovery | Explicit, Section 4.1 | LegendreCompressionBloq and qualtran_chevignard_correctness.py | Implemented at family level |
The core XZ-to-Legendre idea is implemented and checked semantically. |
| Space-efficient Legendre / Jacobi circuit | Explicit, Section 4.2 / Algorithm 3/4 / Lemma 4 | LegendreAccumulatorBloq | Partial |
We model a direct Legendre stage, but not a literal bit-level reversible Jacobi circuit with the exact garbage-reuse scheme of Section 4.3. |
| Multi-addition with windowing | Explicit, Section 5.1 | LookupWindowBloq | Implemented at family level |
Windowed fixed-point accumulation is explicit in our backend. |
| Binary tree of additions | Explicit, Section 5.2 | FaithfulChevignardAttackBloq | Implemented structurally |
The attack is built as lookup -> tree-style projective accumulation -> compression. |
| Spooky pebbling strategy | Explicit, Section 5.4 / Lemma 7 / Cor. 1 | qualtran_chevignard_backend.py | Not literally transcribed |
We account for the low-space tree regime, but we do not yet encode the exact ghost-pebble strategy from [25] step by step. |
1098 / 22 / 2^38.10 reference point |
Explicit in abstract and in the detailed P-224 row of Table 8 |
qualtran_chevignard_candidate.py default config | Reproduced |
Default direct candidate reproduces 1098, 22 runs, and the same Toffoli scale. |
P-256 -> 1193 row |
Explicit in detailed Table 8 | chevignard_p256_table8_candidate.py and baselines.py | Profile added |
This is now the paper-backed detailed-table comparator we should use for P-256/secp256k1-style comparisons. |
| Repo kernel / knob | Paper-backed? | Status |
|---|---|---|
CarrylessResidueAddBloq |
Indirectly |
Reasonable residue-arithmetic building block; not named as a standalone primitive in the paper. |
ConstantResidueAddBloq |
Indirectly |
Same as above. |
RNSMultiplyBloq |
Yes, family-level |
The paper explicitly requires RNS arithmetic over small primes, but our exact kernel cost model is reconstructed. |
SpecialPrimeReduceBloq |
No clear paper commitment |
The paper focuses on prime-field arithmetic and RNS reconstruction; our special-prime strategy knob is an engineering choice. |
ProjectivePointAddBloq |
Yes, family-level |
Paper explicitly uses projective point addition, but our implementation is not a line-by-line Algorithm 1 transcription yet. |
LegendreAccumulatorBloq |
Yes, family-level |
Paper explicitly uses a Legendre/Jacobi stage, but our accumulator is still a modeled stage, not the exact reversible loop structure of Section 4. |
LegendreCompressionBloq |
Yes |
This maps directly to the paper's compression idea. |
LookupWindowBloq |
Yes |
Windowing is explicitly described in Section 5.1. |
CoordinatePackBloq / CoordinateUnpackBloq |
No |
These are our reconstruction/engineering choices. |
LookupPreparationBloq / LookupCleanupBloq |
No |
Our engineering choices for lookup materialization. |
QuotientFoldBloq |
No |
Our engineering choice for reduction folding. |
These dimensions are useful for search, but should not be presented as paper-provided constructions:
coordinate_packinglookup_materializationreduction_pipelineregister_sharing_strategy- multiple
legendre_strategyvariants - multiple
projective_schedulevariants - multiple
rns_variantlayouts beyond what is explicitly recoverable from the paper text
Current example: the 969 winner depends on:
coordinate_packing=xz_streamedreduction_pipeline=quotient_foldingregister_sharing_strategy=full_overlap
These are not yet paper-transcribed features. They are our current best reconstruction/search choices.
We can now say:
We implemented a direct Qualtran reconstruction of the Chevignard-style low-space family, reproduced a paper-backed
1098reference point, and verified both that reference point and our current969winner with two independent counting paths.
We should still avoid saying:
We have a line-by-line faithful transcription of the full Chevignard circuit.
or:
We have definitively beaten the paper on the paper's own exact
P-256implementation.
That is still too strong for two separate reasons:
- We do not yet have a line-by-line faithful transcription.
- The paper's own abstract/detail discrepancy means the correct external
comparator for
P-256is not just the1098headline.
- Translate Algorithm 1 into an explicit reversible subcircuit checklist:
- 20 forward multiply-adds
- 14 reverse multiply-adds
- 8 temporary registers
- Translate Algorithm 2 into an explicit reconstruction checklist:
- quotient register handling
- residue accumulation order
- reversible cleanup path
- Translate the Section 4.2 / 4.3 Jacobi/Legendre circuit into a direct reversible implementation checklist:
- fixed iteration count
- garbage-bit storage policy
- compact register reuse
- Replace paper-unbacked engineering knobs one by one with explicit paper-derived structure where possible.
- Identify which current low-width gains survive after that replacement.
We should only promote the 969 result to a paper-level external claim after:
- Algorithm 1 / 2 / 4 are explicitly transcribed or reconciled line-by-line.
- The
969winner still exists after removing or isolating non-paper-backed engineering knobs. - The second counting path continues to match the paper-faithful implementation exactly.
- Represent the exact
(X1:Y1:Z1) + (X2:Y2:Z2)formula from Section 2.2. - Encode the exact temporary-register structure
t0..t7. - Preserve the exact operation count:
- 20 forward multiply-adds
- 14 reverse multiply-adds
- 34 total multiply-adds
- Distinguish explicitly between:
- multiply-adds modulo the current modulus
- in-place additions
- in-place doublings / halvings
- Verify that the direct backend point-add implementation can be traced back to these exact steps rather than only to an aggregate cost model.
- Encode the exact reconstruction inputs:
-
[M]_q -
(w_p floor(2^u / p)) -
[w_p M_p]_q
-
- Encode the quotient register /
qMhandling explicitly. - Encode the reversible accumulation order explicitly.
- Verify the cleanup path against the paper's reversible reconstruction flow.
- Separate paper-specified reconstruction from our own reduction-pipeline search knobs.
- Encode the actual binary Jacobi loop structure from Section 4.2 / 4.3.
- Encode the exact fixed iteration budget implied by Heuristics 3 and 4.
- Encode the garbage-bit handling strategy explicitly.
- Encode the compact register-reuse policy explicitly.
- Verify that the current
LegendreAccumulatorBloqis replaced or wrapped by a paper-faithful reversible subroutine.
- Encode the exact windowed decomposition used in the paper.
- Record the paper's concrete window size used in Section 6 estimates:
-
window size = 16
-
- Separate this paper-specified windowing from our exploratory
w4/w5/w6search knobs.
- Encode the binary-tree structure on window outputs explicitly.
- Encode the root specialization that computes
[XZ]_p. - Encode the spooky-pebbling step logic explicitly, not only its asymptotic or aggregate effect.
- Verify node / phase / inverse-node counts against Table 3 where relevant.
- Reconcile the abstract
1098headline against detailed Table 8. - Build an explicit repo profile for the detailed
P-256 -> 1193row. - Decide which row is the correct external comparator for secp256k1 claims.
- Keep all external statements consistent with that decision.