Skip to content
This repository was archived by the owner on Sep 12, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1082 commits
Select commit Hold shift + click to select a range
64450e7
Relate SPHINCS completion charges to conditional coverage growth
TomWambsgans Sep 7, 2026
fb5971f
Connect SPHINCS occupancy growth to the concrete signing log
TomWambsgans Sep 7, 2026
48ab6d8
Prove adaptive binomial occupancy bounds for the retained SPHINCS game
TomWambsgans Sep 7, 2026
33a9790
Absorb uniform occupancy growth into the remaining signing budget
TomWambsgans Sep 7, 2026
cb005a5
Retain prefix occupancy after the signing limit is exceeded
TomWambsgans Sep 7, 2026
c446870
Bound adaptive world cover charges using the concrete query budget
TomWambsgans Sep 7, 2026
c0773a9
Absorb target coverage growth into the remaining signing budget
TomWambsgans Sep 7, 2026
9080c21
Account for adaptive whole-cache coverage using future signing attempts
TomWambsgans Sep 7, 2026
9415858
Bound adaptive fresh coverage with unused cache capacity
TomWambsgans Sep 7, 2026
b0b1d60
Refine cached target reuse by input and bound pair arrivals
TomWambsgans Sep 7, 2026
572ab1a
Bound future target increments and cached reuse arrivals
TomWambsgans Sep 7, 2026
607753a
Make adaptive reuse accounting independent of requested messages
TomWambsgans Sep 7, 2026
645df88
Absorb adaptive hash-query growth with cache pair reserves
TomWambsgans Sep 7, 2026
6cf894f
Charge adaptive reuse reserves to fresh message queries
TomWambsgans Sep 7, 2026
9699243
Connect signing reuse to a finite occupancy polynomial hierarchy
TomWambsgans Sep 7, 2026
8947f9f
Track cached-source correlations with mixed occupancy moments
TomWambsgans Sep 7, 2026
fae51b6
Close correlated cache growth in the mixed signing recurrence
TomWambsgans Sep 7, 2026
5f2b47a
Compose mixed occupancy bounds across adaptive signing and hashing
TomWambsgans Sep 7, 2026
01a6cf7
Reduce the adaptive mixed envelope to finite binomial sums
TomWambsgans Sep 7, 2026
c358b69
Bound the initial query envelope uniformly at the 127-bit budget
TomWambsgans Sep 7, 2026
15fb9d9
Close the adaptive occupancy numerical bound for the 127-bit budget
TomWambsgans Sep 7, 2026
cbeabeb
Bound target reuse by positive assignment counts
TomWambsgans Sep 7, 2026
21e02c5
Normalize target subset moments for adaptive reuse bounds
TomWambsgans Sep 7, 2026
725ba62
Close the conditional target mixed moment signing bound
TomWambsgans Sep 7, 2026
9ed0c7d
Prove finite target shape envelopes and positive commutation
TomWambsgans Sep 7, 2026
699337f
Compose concrete target moments through adaptive signing
TomWambsgans Sep 7, 2026
3e5d187
Reduce fresh target continuation averages to index moments
TomWambsgans Sep 7, 2026
65bbcb0
Bound raw index moments through actual adaptive signing
TomWambsgans Sep 7, 2026
fc105f4
Connect raw index continuation to the 127-bit numerical envelope
TomWambsgans Sep 7, 2026
86cefe7
Charge adaptive index envelopes to the actual signing query budget
TomWambsgans Sep 7, 2026
096dd84
Bound accumulated target coverage in the original SUF experiment
TomWambsgans Sep 7, 2026
145c9a5
Retain stopped signing reserves in the SUF bound
TomWambsgans Sep 7, 2026
2193f4b
Preserve unused target-arrival charges in the SUF bound
TomWambsgans Sep 7, 2026
89e7699
Carry stopped target coverage into the original SUF bound
TomWambsgans Sep 7, 2026
a76554d
Retain full signing execution reserves in the SUF bound
TomWambsgans Sep 7, 2026
cdc6a09
Retain the stopped accounting budget in the SUF inequality
TomWambsgans Sep 7, 2026
3033b75
Preserve raw index reserves across nonmessage queries
TomWambsgans Sep 7, 2026
f1e4e1d
Retain exact world-step and initial-envelope accounting
TomWambsgans Sep 7, 2026
c6b84aa
Retain the signing commutation gap in the SUF bound
TomWambsgans Sep 7, 2026
0c09f4c
Charge repeatable signing retries to the syntactic query budget
TomWambsgans Sep 7, 2026
917dcfd
Retain unused structural credit in the terminal SUF bound
TomWambsgans Sep 7, 2026
d6eafb3
Retain direct settled encoding credit in the SUF bound
TomWambsgans Sep 7, 2026
1d0a3c6
Restrict encoding settlement risk to distinct valid collision pairs
TomWambsgans Sep 7, 2026
e176543
Bound valid encoding collisions and fund capped settlement risk
TomWambsgans Sep 7, 2026
05ddb10
Transport collision funding into the concrete SUF bound
TomWambsgans Sep 7, 2026
e8e2a35
Carry collision reserves through joint before-failure accounting
TomWambsgans Sep 7, 2026
57776fd
Reserve every outer encoding query in the collision security bound
TomWambsgans Sep 7, 2026
dba2685
Refund pending parent inputs in the collision security bound
TomWambsgans Sep 7, 2026
b294130
Conserve parent reserves through the stopped SUF experiment
TomWambsgans Sep 7, 2026
4471030
Bound parent releases and absorb stopping losses in SUF accounting
TomWambsgans Sep 7, 2026
7eee56c
Retain parent credits through terminal and shared failures
TomWambsgans Sep 7, 2026
9dba9d7
Recover both parent reserves at shared failure
TomWambsgans Sep 8, 2026
ed728e9
Remove duplicate parent release charges
TomWambsgans Sep 8, 2026
e1116d4
Track remaining query budgets through adaptive coverage
TomWambsgans Sep 8, 2026
b60f187
Retain coverage capacity lost to nonmessage queries
TomWambsgans Sep 8, 2026
55ac3f7
Retain signing budget credits and tighten coverage bound
TomWambsgans Sep 8, 2026
41ba2cc
Retain coverage potential discarded at first stop
TomWambsgans Sep 8, 2026
d6d1eae
Combine collision and coverage in a bounded potential
TomWambsgans Sep 8, 2026
7cd820c
Extend joint collision coverage bound to all hash queries
TomWambsgans Sep 8, 2026
39f65df
Extend the joint collision coverage bound through signing
TomWambsgans Sep 8, 2026
100dd23
Fund joint signing coverage from the execution budget
TomWambsgans Sep 8, 2026
e3082f5
Compose the joint collision coverage bound in the original game
TomWambsgans Sep 8, 2026
706b5e3
Retain shared failure overlap in the joint hash bound
TomWambsgans Sep 8, 2026
86e3069
Recover unused signing forecasts at the end of the SUF game
TomWambsgans Sep 8, 2026
d80e2e9
Carry collision coverage overlaps into the original query reserves
TomWambsgans Sep 8, 2026
0ffc696
Fund shared parent refunds from the joint coverage overlap
TomWambsgans Sep 8, 2026
0403c8e
Fund terminal parent refunds within the joint collision coverage bound
TomWambsgans Sep 8, 2026
809208d
Pay terminal parent coverage from the adaptive collision overlap
TomWambsgans Sep 8, 2026
3d55e46
Pay outer encoding collisions from the existing query reserve
TomWambsgans Sep 8, 2026
50b4443
Bound fresh OTS encoding searches using the checked digit count
TomWambsgans Sep 8, 2026
b51a0e9
Pay signing encoding collisions from pre-encoding hashing
TomWambsgans Sep 8, 2026
1a8f6fd
Preserve FTS opening credit after signing encoding payments
TomWambsgans Sep 8, 2026
36930a7
Pay new target coverage from the signing survival reserve
TomWambsgans Sep 8, 2026
243c11e
Carry signing coverage payments through the adaptive security game
TomWambsgans Sep 8, 2026
ddd60f6
Pay adaptive coverage excess from the execution refund
TomWambsgans Sep 8, 2026
57bbeaf
Bound adaptive parent cross releases by cache pairs
TomWambsgans Sep 8, 2026
2f70a49
Retain unused coverage slack through the adaptive security game
TomWambsgans Sep 8, 2026
6e90b2a
Recover unused terminal coverage in the adaptive security bound
TomWambsgans Sep 8, 2026
a144ace
Recover signing and completion credits from the coverage refund
TomWambsgans Sep 8, 2026
0189589
Bound the joint coverage credit by the unused execution reserve
TomWambsgans Sep 8, 2026
82026d2
Retain terminal structural and coverage overlap in the SUF bound
TomWambsgans Sep 8, 2026
587eca4
Count distinct FTS leaves in conditional coverage bounds
TomWambsgans Sep 8, 2026
c228b2d
Retain fresh selection probability in signer coverage bounds
TomWambsgans Sep 8, 2026
7188cd2
Retain fresh selection mass in cache and target growth bounds
TomWambsgans Sep 8, 2026
95b870b
Retain fresh selection mass through signing envelopes
TomWambsgans Sep 8, 2026
990b2ce
Carry fresh selection gaps into adaptive coverage refunds
TomWambsgans Sep 8, 2026
6a3591c
Normalize fresh and cached digest selection
TomWambsgans Sep 8, 2026
671d69e
Carry exact digest reuse through adaptive signing bounds
TomWambsgans Sep 8, 2026
bdaaf8a
Quantify cached selection refunds in the SUF bound
TomWambsgans Sep 8, 2026
7572f60
Retain unused message-cache weight in signing bounds
TomWambsgans Sep 8, 2026
3440e27
Combine cached selection and unmatched reuse refunds
TomWambsgans Sep 8, 2026
741c604
Account for rejected message digests in selection bounds
TomWambsgans Sep 8, 2026
7feb5e9
Normalize cached digest reuse in selection bounds
TomWambsgans Sep 8, 2026
e3e3085
Preserve joint selection mass in signing refunds
TomWambsgans Sep 8, 2026
1861867
Use message cache counts in digest reuse bounds
TomWambsgans Sep 8, 2026
e37ffee
Bound monitored cache exceptions with fourth moments
TomWambsgans Sep 8, 2026
5009814
Bound adaptive message deficits in the concrete SUF game
TomWambsgans Sep 8, 2026
f0adcb7
Carry near-uniform digest reuse through adaptive execution
TomWambsgans Sep 8, 2026
50d7c5a
Apply near-uniform reuse to adaptive cached-target coverage
TomWambsgans Sep 8, 2026
68a0bac
Prove the near-uniform coverage rate and deficit stopping cost
TomWambsgans Sep 8, 2026
e3bc8b2
Preserve parent and structural accounting under deficit stopping
TomWambsgans Sep 8, 2026
a743f71
Account for deficit stopping across the adaptive forgery game
TomWambsgans Sep 8, 2026
b308bce
Record the paper route and open obligations for 127-bit SUF
TomWambsgans Sep 8, 2026
b158d94
Derive canonical OTS witness and paid primitive bounds on paper
TomWambsgans Sep 8, 2026
2a22403
Develop the cached-target and useful FTS paper route to 127 bits
TomWambsgans Sep 8, 2026
e2e0f6c
Replace the paper clock coupling with explicit discrete kernels
TomWambsgans Sep 8, 2026
6edb054
Bound raw target forecasts by uniform proposal moments
TomWambsgans Sep 9, 2026
89d3304
Preserve record distributions in the proposal bridge
TomWambsgans Sep 9, 2026
d2793db
Sharpen the paper primitive bound and prioritize the 127-bit proof
TomWambsgans Sep 9, 2026
86c5e4e
Connect proposal sampling to actual signing records
TomWambsgans Sep 9, 2026
d7c8136
Separate coverage and primitive histories in the 127-bit paper plan
TomWambsgans Sep 9, 2026
f6ce6f5
Preserve proposal lengths through the original adaptive execution
TomWambsgans Sep 9, 2026
bae5750
Make the 127-bit paper certificate invariant explicit
TomWambsgans Sep 9, 2026
df4f51c
Bank completed target certificates through actual signing records
TomWambsgans Sep 9, 2026
b82a053
Pay adaptive certificate creation with actual message calls
TomWambsgans Sep 9, 2026
fb7fbcd
Audit the original-experiment interfaces for the 127-bit paper plan
TomWambsgans Sep 9, 2026
106024f
Bound certificate creation by the original whole-game hash budget
TomWambsgans Sep 9, 2026
9f99bbf
Derive stopped 127-bit coverage from the message kernel on paper
TomWambsgans Sep 9, 2026
d2a7aae
Derive the large-budget 127-bit branch on paper
TomWambsgans Sep 9, 2026
a6fda18
Transfer small-budget SUF witnesses to the original game on paper
TomWambsgans Sep 9, 2026
d270733
Make the paper OTS likelihood projection explicit
TomWambsgans Sep 9, 2026
9713647
Pay adaptive certificate charges with the terminal proposal word
TomWambsgans Sep 9, 2026
f826deb
Simplify the 127-bit paper route with fixed-word variance
TomWambsgans Sep 9, 2026
2a9037e
Prove fixed-word full and near coverage bounds for the original signer
TomWambsgans Sep 9, 2026
4f84cb7
Specify the paper proof contract and exception bounds for 127-bit SUF
TomWambsgans Sep 9, 2026
e10094c
Bound proposal-prefix overflow in the original certificate game
TomWambsgans Sep 9, 2026
09dbcf6
Bound the original cached-index exception by a second-moment reserve
TomWambsgans Sep 9, 2026
f57f04d
Simplify the 127-bit paper plan with unit message payment
TomWambsgans Sep 9, 2026
ccb7d37
Transfer cache exceptions to the original certificate game
TomWambsgans Sep 9, 2026
6c263a9
Account for administrative stops in the original certificate game
TomWambsgans Sep 9, 2026
90eb52d
Unify full and near certificates with unit message payment
TomWambsgans Sep 9, 2026
e23a867
Derive paper coverage bounds with projected cache accounting
TomWambsgans Sep 9, 2026
6b7f4d5
Establish the OTS paper projection with exact cost accounting
TomWambsgans Sep 9, 2026
abe8ceb
Consolidate the paper-first route to 127-bit SUF
TomWambsgans Sep 9, 2026
69b5636
Prove signer frontier replacement with exact hash costs
TomWambsgans Sep 9, 2026
33d06d0
Specify sufficient paper contracts for 127-bit SUF
TomWambsgans Sep 9, 2026
088bb5d
Connect the frontier game to the original SUF distribution
TomWambsgans Sep 9, 2026
6d8ca2a
Audit the paper route to 127 bits and simplify sufficient bounds
TomWambsgans Sep 9, 2026
d6c38d1
Prove canonical graph sampling preserves the original SUF game
TomWambsgans Sep 9, 2026
bdeac0b
Prove exact reference encoding sampling and graph independence
TomWambsgans Sep 9, 2026
8e7c9b2
Derive conditional OTS restart with shared query costs on paper
TomWambsgans Sep 9, 2026
7733441
Preserve the original SUF game under full-table reference conditioning
TomWambsgans Sep 9, 2026
282bf0f
Erase private OTS oracle reads from the frontier signing game
TomWambsgans Sep 9, 2026
8e649e4
Clarify the paper proof gates for 127-bit SUF security
TomWambsgans Sep 9, 2026
16cd91c
Condition the complete reference family in the original SUF game
TomWambsgans Sep 9, 2026
a42f0a7
Specify the causal endpoint and verifier arguments on paper
TomWambsgans Sep 9, 2026
71718e2
Prove adaptive chain endpoint likelihood and cost transfer
TomWambsgans Sep 9, 2026
79db2e1
Audit the allocated OTS bound and prioritize the 127-bit interval
TomWambsgans Sep 9, 2026
7a0816c
Prove hidden-coordinate probe kernels for the 127-bit route
TomWambsgans Sep 9, 2026
296efff
Prove adaptive hidden-label sampling with retained stops
TomWambsgans Sep 9, 2026
7530108
Prove cached byte-oracle routing for the 127-bit argument
TomWambsgans Sep 9, 2026
53b35ae
Prove original-game graph and reference residual sampling
TomWambsgans Sep 9, 2026
3bf4e87
Connect private signing to native hidden-label disclosures
TomWambsgans Sep 9, 2026
fa004ed
Derive the initial hidden-coordinate prior on paper
TomWambsgans Sep 9, 2026
0ff1d9e
Derive the concrete hidden-coordinate prior for the original game
TomWambsgans Sep 9, 2026
84f8924
Prove joint adaptive hidden-label and residual-table completion
TomWambsgans Sep 9, 2026
7ac31a8
Prove concrete external byte execution under the joint prior
TomWambsgans Sep 9, 2026
a6e0d45
Move unrestricted encoding tails into the shared residual seed
TomWambsgans Sep 9, 2026
cffe013
Prove the adaptive encoding check under the prefix prior
TomWambsgans Sep 9, 2026
580cffc
Run private signing on the joint residual oracle
TomWambsgans Sep 9, 2026
aed2593
Retain signing history in the joint interleaved execution
TomWambsgans Sep 9, 2026
d741e4d
Retain original message traces in the interleaved interpreter
TomWambsgans Sep 10, 2026
966bf24
Compose retained source execution and transfer its hash budget
TomWambsgans Sep 10, 2026
8d7fb46
Project message histories and narrow the 127-bit comparisons
TomWambsgans Sep 10, 2026
3840315
Project certificate updates and bound message-preserving kernels
TomWambsgans Sep 10, 2026
78f77f9
Generalize signing-log growth after digest selection
TomWambsgans Sep 10, 2026
c012169
Extend certificate signing bounds to message-preserving completions
TomWambsgans Sep 10, 2026
9a13897
Prove deferred signing message kernels after adaptive histories
TomWambsgans Sep 10, 2026
201c2c8
Prove the retained signer certificate-monitor expectation
TomWambsgans Sep 10, 2026
e26a306
Prove certificate coverage for retained external queries
TomWambsgans Sep 10, 2026
a49d37e
Compose retained certificate bounds through adaptive execution
TomWambsgans Sep 10, 2026
b3bfd25
Pay retained certificate creation with recorded message calls
TomWambsgans Sep 10, 2026
4cf1ed7
Bind retained certificate resources to the original hash budget
TomWambsgans Sep 10, 2026
a1bca16
Audit shortcuts for the remaining 127-bit proof
TomWambsgans Sep 10, 2026
2d99862
Prove retained full-certificate coverage under the original budget
TomWambsgans Sep 10, 2026
d4330f8
Rule out removing the small-budget gap by sharpening proposal tails
TomWambsgans Sep 10, 2026
106c960
Prove native candidate invariants and local primitive hazards
TomWambsgans Sep 10, 2026
1a584e5
Compose native primitive and certificate security bounds
TomWambsgans Sep 10, 2026
c256143
Transfer original SUF success to the retained source game
TomWambsgans Sep 10, 2026
e248f90
Recover canonical signatures from retained verification
TomWambsgans Sep 10, 2026
01ee161
Prune SPHINCS proofs to 126-bit security and the 127-bit path
TomWambsgans Sep 10, 2026
fa7512e
Update proof guide after the SPHINCS cleanup
TomWambsgans Sep 10, 2026
f4e913b
Connect retained strong forgeries to full target certificates
TomWambsgans Sep 10, 2026
eaf6d13
Connect original SUF success to the native certificate bound
TomWambsgans Sep 10, 2026
8b757a6
Rule out native certificate monitor bookkeeping stops
TomWambsgans Sep 10, 2026
b6c44b3
Bound native proposal-prefix exceptions by 2^-700
TomWambsgans Sep 10, 2026
5e27d3f
Bound native cache-weight growth with second moments
TomWambsgans Sep 10, 2026
f31ee67
Prove the 127-bit SUF bound for large hash budgets
TomWambsgans Sep 10, 2026
e120b12
Connect OTS prefix queries to the original fixed-oracle game
TomWambsgans Sep 10, 2026
d0e4d37
Separate independent OTS prefix and reference-oracle seeds
TomWambsgans Sep 10, 2026
ec52b03
Reconstruct the original SUF game from the selected OTS endpoint
TomWambsgans Sep 10, 2026
19ec9b7
Connect the original SUF source to observed prefix likelihood
TomWambsgans Sep 10, 2026
601778c
Prove the capped OTS interface from the original hash budget
TomWambsgans Sep 10, 2026
157a2af
Prove one original budget for all OTS prefix charges
TomWambsgans Sep 10, 2026
73afa8b
Transfer the shared OTS budget through conditional ideal laws
TomWambsgans Sep 11, 2026
3af4f9d
Reserve all query classes in the conditional OTS budget
TomWambsgans Sep 11, 2026
fc26dd1
Prove the adaptive OTS first-contact probability bound
TomWambsgans Sep 11, 2026
67a4f53
Connect OTS first-contact probabilities to the shared budget
TomWambsgans Sep 11, 2026
5c9d726
Prove weighted two-edge transitions and adaptive hit moments
TomWambsgans Sep 11, 2026
d4b9507
Prove the adaptive two-edge bound with shared query allocation
TomWambsgans Sep 11, 2026
91637d1
Prove adaptive restart and preserve observable hash checkpoints
TomWambsgans Sep 11, 2026
c77ae51
Instantiate first-contact checkpoints with shared trace charges
TomWambsgans Sep 11, 2026
168ff70
Transport stopped contact charges through the original source law
TomWambsgans Sep 11, 2026
2ebc879
Prove the original distinct-chain contact bound with shared cost
TomWambsgans Sep 11, 2026
945e521
Prove encoding marker counts and conditioned row bounds
TomWambsgans Sep 11, 2026
b239a31
Erase hidden encoding rows from the causal program
TomWambsgans Sep 11, 2026
ec0f0a9
Connect the full lazy encoding table to the original experiment
TomWambsgans Sep 11, 2026
fea2d26
Bound adaptive encoding markers by the original query allocation
TomWambsgans Sep 11, 2026
11a6acf
Prove the marker-first contact bound with shared encoding cost
TomWambsgans Sep 11, 2026
f96a66e
Prove the contact-before-marker bound with shared prefix cost
TomWambsgans Sep 11, 2026
9f66af8
Join both marker-contact orders on the original trace
TomWambsgans Sep 11, 2026
31bb1fa
Connect the two-edge bound to the original full hash trace
TomWambsgans Sep 11, 2026
a6cb021
Extract reference openings and OTS witnesses from verifier layers
TomWambsgans Sep 11, 2026
e737066
Classify complete verification and recover its original source trace
TomWambsgans Sep 11, 2026
430992e
Connect original reference verification to signing replay
TomWambsgans Sep 11, 2026
13095b6
Classify original reference forgeries into coverage and primitive events
TomWambsgans Sep 11, 2026
cafd868
Bound original equal-encoding matches by shared query cost
TomWambsgans Sep 11, 2026
ed9b166
Connect original structural queries to lazy graph sampling
TomWambsgans Sep 11, 2026
7eef507
Bound original structural matches by shared other-query cost
TomWambsgans Sep 11, 2026
3279eef
Combine original primitive bounds with the small-budget reservation
TomWambsgans Sep 11, 2026
1430726
Bound full certificates on the original signing experiment
TomWambsgans Sep 11, 2026
11d71f9
Share the original message budget between primitive and certificate b…
TomWambsgans Sep 11, 2026
0a661bc
Bound original certificate cache history within the shared reserve
TomWambsgans Sep 11, 2026
c3c7df1
Discharge the original certificate proposal-prefix exception
TomWambsgans Sep 11, 2026
4cfe6ca
Connect original SUF probability to retained forgery cases
TomWambsgans Sep 11, 2026
3a923f0
Transfer retained certificates to the original SUF bound
TomWambsgans Sep 11, 2026
f01efa2
Continue hidden-secret guesses through signing disclosures
TomWambsgans Sep 11, 2026
f5dd976
Translate adaptive reference executions into continuing FTS guesses
TomWambsgans Sep 11, 2026
db9df74
Charge continuing FTS secret tests to the original hash budget
TomWambsgans Sep 11, 2026
8f8576a
Connect retained FTS forgery witnesses to distinct secret guesses
TomWambsgans Sep 11, 2026
be2ac6e
Bound two distinct FTS guesses on the retained forgery source
TomWambsgans Sep 11, 2026
3b4edac
Preserve budgets and likelihoods when forcing one FTS guess
TomWambsgans Sep 11, 2026
6d755ca
Reduce original SUF near guesses to explicit forced certificate games
TomWambsgans Sep 11, 2026
486e604
Defer residual hash sampling in the actual forced FTS game
TomWambsgans Sep 11, 2026
dbf6bc7
Prove 127 bits of classical SUF security for the SPHINCS instance
TomWambsgans Sep 11, 2026
b52c78f
Prune the SPHINCS proof to the declarations the 127-bit theorem uses
TomWambsgans Sep 11, 2026
b731676
Organize the SPHINCS proof by component and replace the planning note…
TomWambsgans Sep 11, 2026
fe59e4e
Drop imports already provided by other imports in the SPHINCS proof
TomWambsgans Sep 11, 2026
e6419b9
Reduce Statement.lean to the definitions and one claim
TomWambsgans Sep 12, 2026
b9f6a87
Separate the abstract chain tables from the one-time signature and au…
TomWambsgans Sep 12, 2026
c62aad6
Merge single-use modules under thirty lines into their importers
TomWambsgans Sep 12, 2026
7289b11
Explain the shape of the SPHINCS proof and the routes to simplify it
TomWambsgans Sep 12, 2026
9eb8147
Use one proposal model in both budget routes
TomWambsgans Sep 12, 2026
5f427fc
List where the SPHINCS proof hard-codes one-time-signature parameters
TomWambsgans Sep 12, 2026
ca24ee8
Fold three single-lemma modules into their importers
TomWambsgans Sep 12, 2026
a7ae7ab
Drop imports subsumed by a module's other imports
TomWambsgans Sep 12, 2026
22affb6
Simplify the SPHINCS statement and align the spec with the proven claim
TomWambsgans Sep 12, 2026
10ae0ee
Give the SPHINCS project the xmss top level
TomWambsgans Sep 12, 2026
2d6885a
Trim the SPHINCS statement's boilerplate and name spec symbols in its…
TomWambsgans Sep 12, 2026
f97d23c
Trim the XMSS statement's boilerplate and name spec symbols in its do…
TomWambsgans Sep 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ A minimal (zero-knowledge Virtual Machine, which is actually not ZK in the real
- `doc/leanvm/` is the LaTeX project describing the machine ISA and the snark that proves it. Its root is `doc/leanvm/main.tex`; build it with `cd doc/leanvm && latexmk -pdf main.tex`, which writes to the gitignored `doc/leanvm/.build/`. Sections live in `doc/leanvm/body/`, numbered `01`..`10` plus the lettered annexes `a` (ring switching), `b` (the PCS), and `c` (Flock), and every symbol is defined once in `doc/leanvm/preamble/macros.tex`. If latexmk fails oddly (a bibtex error, or a missing `main.log`) right after inputs are renamed or `refs.bib` is edited, remove `doc/leanvm/.build` and rerun; it has not reproduced on unchanged inputs. **Drafting one section:** each section file carries a `% !TeX root` comment pointing at its generated driver in `doc/leanvm/drafts/`, so the LaTeX build key (`F5`, or the extension's `cmd+alt+b`) compiles only that section, numbered as in the full document and with cross-references and citations resolved against `.build/main.aux`; in `main.tex` the same key builds everything. Run `doc/leanvm/make-drafts.sh` after adding, renaming or renumbering a section.
- `doc/xmss/` is the standalone specification of the concrete XMSS instance implemented by `crates/xmss`.
- `doc/sphincs/` is the standalone specification of the concrete SPHINCS+ instance we would use instead of XMSS where statelessness matters; its root is `doc/sphincs/main.tex`, built the same way as `doc/xmss`, and implemented by `crates/sphincs`. It shares XMSS's hash function, tweakable hash and target-sum code, so an aggregator implements one primitive.
- `formal/xmss/` is a Lean 4 proof (over VCVio) of that instance's classical random-oracle security, `xmss_has_127_bits_of_classical_security`. `XmssSecurity/Statement.lean` is the only module a reviewer has to read: the concrete parameters, the byte layout of every hash input, the three algorithms, the game, and the claim. `lake exe cache get` once, then `lake build`. SPHINCS has no formalization; its security section is a target, not a theorem.
- `formal/xmss/` is a Lean 4 proof (over VCVio) of that instance's classical random-oracle security, `xmss_has_127_bits_of_classical_security`. `formal/sphincs/` proves 127 bits of classical strong unforgeability in the random-oracle model for the SPHINCS instance, `sphincs_has_127_bits_of_classical_security`; `formal/sphincs/PROOF.md` explains the route, the module layout by component, and what to re-prove if the one-time signature changes. In both, `*/Statement.lean` defines the concrete parameters, the byte layout of every hash input, the three algorithms, the game, and the claim. `lake exe cache get` once, then `lake build`. Both root modules pin the axiom footprint of their theorem with `#guard_msgs`.
- The one hash function is BLAKE2s, in `primitives::hash`: scalar, streaming, keyed, and a lane-transposed batched form for the PCS Merkle tree. The VM proves one compression per opcode, and BLAKE2s takes the byte counter and final-block flag as ordinary compression inputs, so a single opcode is a complete hash for any length, with no tree structure to reproduce in-circuit.
- `crates/lean_compiler/zkDSL.md` documents the (pythonic) zkDSL (that compiles to the ISA that our VM runs, and that our snark proves).

Expand Down
20 changes: 10 additions & 10 deletions doc/sphincs/main.tex
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
\newcommand{\Sig}{\mathsf{Sig}}
\newcommand{\Ver}{\mathsf{Ver}}
\newcommand{\SIG}{\mathsf{SIG}}
\newcommand{\Forge}{\mathsf{Forge}}
\newcommand{\Chain}{\mathsf{Chain}}
\newcommand{\hash}{\mathsf{H}}
\newcommand{\LE}{\mathsf{LE}}
Expand Down Expand Up @@ -69,12 +70,12 @@

\begin{itemize}
\item \textbf{stateless}: supporting up to $2^{24}$ signatures.
\item \textbf{NIST security level~1}~\cite{NISTPQC} (TODO prove it)
\item \textbf{NIST security level~1}~\cite{NISTPQC}: 127 bits of classical strong unforgeability in the random-oracle model, proven in Lean (Section~\ref{sec:security}); the quantum analysis is still to do.
\item \textbf{public key: 32 bytes}.
\item \textbf{signature: 4924 bytes}.
\item \textbf{497 hashes per verification}.
\item signing costs 190K hashes with 1024 bytes of cached signer state, or 1.55M without.
\item \textbf{key generation costs 1.38M hashes}.
\item \textbf{key generation costs 1.38M hashes}, which is the one tree of layer $0$ and nothing else.
\end{itemize}
\end{abstract}

Expand Down Expand Up @@ -365,7 +366,7 @@ \section{Signing}
returning $\bot$ if $\OtsSign$ does.
\item Output $\sigma=\left(\rho,(s_\kappa,B_\kappa)_{\kappa<k-1},(c_\lay,\sigma_\lay,A_\lay)_{\lay<d}\right)$.
\end{enumerate}
$M_{-1}$ is computed and discarded: it is $\rootnode$ whenever the signer is honest. The signature is serialized as
$M_{-1}$ would be $\rootnode$ whenever the signer is honest, so the loop need not compute it. The signature is serialized as
\[
\rho
\concat s_0\concat B_{0,0}\concat\cdots\concat B_{0,a-1}
Expand Down Expand Up @@ -427,7 +428,7 @@ \section{Costs}
\end{center}

\begin{remark}[Test vectors]
Nothing implements this scheme yet, so the document carries no test vectors. One key pair, one message, and the resulting $\rho$, $\idx$, the $k$ indices $u_\kappa$, the $d$ counters $c_\lay$ and the 4924 signature bytes would pin every convention above, and should be added before anyone implements against it.
The document carries no test vectors yet. One key pair, one message, and the resulting $\rho$, $\idx$, the $k$ indices $u_\kappa$, the $d$ counters $c_\lay$ and the 4924 signature bytes would pin every convention above, and should be added before anyone implements against it.
\end{remark}

\section{Security}
Expand All @@ -436,25 +437,24 @@ \section{Security}
\subsection{Classical security}

\begin{definition}[Strong unforgeability in the ROM]
Let $\SIG=(\Gen,\Sig,\Ver)$ be a signature scheme whose algorithms use a hash function $\hash:\bits{*}\to\bits{256}$. Consider the following game between a signer and an adversary $\mathcal A$ (an arbitrary probabilistic algorithm with unbounded running time and memory), with $\hash$ sampled as a random oracle, that both signer and adversary can query. The signer first runs $(\pk,\sk)\gets\Gen$ and gives $\pk$ to $\mathcal A$. The adversary may then adaptively take any of the following actions:
Let $\SIG=(\Gen,\Sig,\Ver)$ be a signature scheme whose algorithms use a hash function $\hash:\bits{*}\to\bits{256}$. Consider the following game between a signer and an adversary $\mathcal A$ (an arbitrary probabilistic algorithm with unbounded running time and memory), with $\hash$ sampled as a random oracle that both may query. The signer runs $(\pk,\sk)\gets\Gen$ and gives $\pk$ to $\mathcal A$, which may then adaptively take any of the following actions:
\begin{enumerate}[leftmargin=2em]
\item Query the random oracle on any input and receive its 256-bit output.
\item Submit a message $m\in\bits{\lmsg}$ and receive $\sigma\gets\Sig(\sk,m)$ from the signer, which may be $\bot$. It may do so at most $\qs$ times, on any messages, the same one included: $\Sig$ keeps no state, so nothing here is used up.
\item Submit a message $m\in\bits{\lmsg}$ and receive $\sigma\gets\Sig(\sk,m)$ from the signer, which may be $\bot$. It may do so at most $\qs$ times.
\item Terminate with a claimed forgery $(m^*,\sigma^*)$.
\end{enumerate}
The adversary wins if $\Ver(\pk,m^*,\sigma^*)=1$ and the signer did not return $\sigma^*$ in response to a signing query for $m^*$, meaning:
\begin{itemize}[leftmargin=2em]
\item if the adversary never queried a signature for $m^*$;
\item or it did, but no answer it received was $\sigma^*$.
\end{itemize}

Call $\mathcal A$ $q$-bounded if the experiment makes at most $q$ random-oracle queries on every execution, counting those of key generation, signing, and the final verification of the claimed forgery. We say that $\SIG$ has $x$ bits of classical strong unforgeability in the ROM at $\qs$ signatures if every $q\geq1$ and every $q$-bounded $\mathcal A$ satisfy
Let $\Forge_{\SIG}(\qs,q)$ be the maximum winning probability of any adversary for which the total number of random-oracle queries made in the experiment, including during key generation, signing, and the final verification of the claimed forgery, is at most $q$ on every execution path; it is $0$ below what key generation and one verification already cost. An adversary that spends all $\qs$ signatures needs $q$ past $2^{58}$, the attempt caps bounding the loops, so that is where the claim is read. We say that $\SIG$ has $x$ bits of classical strong unforgeability in the ROM at $\qs$ signatures if
\[
\Pr[\mathcal A\text{ wins}]\leq\frac{q}{2^{x}}.
\max_{q\geq1}\frac{\Forge_{\SIG}(\qs,q)}{q}\leq 2^{-x}.
\]
\end{definition}

TODO prove 127 bits of classical strong unforgeability in the ROM at $\qs=2^{24}$ signatures.
That game, with the parameters and the algorithms above, is written out in Lean4 over the VCVio framework~\cite{VCVio} in \texttt{./formal/sphincs/SphincsSecurity/Statement.lean}, and \texttt{sphincs\_has\_127\_bits\_of\_classical\_security} proves $x=127$ at $\qs=2^{24}$: the one bit below $n$ is what the proof spends on union bounds and constants. The proof is in the classical random-oracle model with independently sampled secrets; the seed derivation of Remark~\ref{rem:seed} and the instantiation of $\hash$ by BLAKE2s are outside it.

\subsection{Quantum security}
\label{sec:quantum}
Expand Down
3 changes: 3 additions & 0 deletions formal/sphincs/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/.lake/
reach.txt
taint.txt
Loading
Loading