Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
721 commits
Select commit Hold shift + click to select a range
5e385f1
formal/sphincs: close the layer root cache quotient
TomWambsgans Aug 31, 2026
d02e5e3
formal/sphincs: couple stored layer root signing
TomWambsgans Aug 31, 2026
bc9113a
formal/sphincs: isolate the matching root layer
TomWambsgans Aug 31, 2026
eeb7710
formal/sphincs: lift root comparison through signing
TomWambsgans Aug 31, 2026
6b27b55
formal/sphincs: preserve stored roots through signing
TomWambsgans Aug 31, 2026
66849c7
formal/sphincs: track adaptive root guesses
TomWambsgans Aug 31, 2026
3bbd01c
formal/sphincs: couple wrong root guesses
TomWambsgans Aug 31, 2026
cd84621
formal/sphincs: strengthen the root cache quotient
TomWambsgans Aug 31, 2026
789a35f
formal/sphincs: prepare adaptive root query coupling
TomWambsgans Aug 31, 2026
65754c0
formal/sphincs: couple safe root hash queries
TomWambsgans Aug 31, 2026
183dd9d
formal/sphincs: couple root-aware hash planning
TomWambsgans Aug 31, 2026
321f97b
formal/sphincs: couple root-avoiding adaptive prefixes
TomWambsgans Aug 31, 2026
01aca95
formal/sphincs: classify earlier layer root guesses
TomWambsgans Aug 31, 2026
ff56f2c
formal/sphincs: project delayed root prefixes
TomWambsgans Aug 31, 2026
a8578c3
formal/sphincs: average delayed comparison roots
TomWambsgans Aug 31, 2026
0e868c6
formal/sphincs: bound symmetric root guesses
TomWambsgans Aug 31, 2026
de6fbad
formal/sphincs: retain root fiber weights
TomWambsgans Aug 31, 2026
58a0c5e
formal/sphincs: retain layer root position fibers
TomWambsgans Aug 31, 2026
3d71179
formal/sphincs: swap delayed root cache keys
TomWambsgans Aug 31, 2026
6b981ff
formal/sphincs: relate swapped hidden roots
TomWambsgans Aug 31, 2026
d17b47c
formal/sphincs: synchronize swapped root planning
TomWambsgans Aug 31, 2026
e714ef3
formal/sphincs: compose swapped root clean runs
TomWambsgans Aug 31, 2026
157e01a
formal/sphincs: relate swapped root caches
TomWambsgans Aug 31, 2026
0d875c0
formal/sphincs: couple swapped root reveals
TomWambsgans Aug 31, 2026
d933808
formal/sphincs: reveal swapped layer roots
TomWambsgans Aug 31, 2026
26d71e3
formal/sphincs: couple swapped root signer layer
TomWambsgans Aug 31, 2026
69bd9de
formal/sphincs: swap complete signer roots
TomWambsgans Aug 31, 2026
b0d79de
formal/sphincs: couple swapped root hash peeks
TomWambsgans Aug 31, 2026
8f6417d
formal/sphincs: invert the full root cache swap
TomWambsgans Aug 31, 2026
e486a2a
formal/sphincs: relate deferred swapped roots
TomWambsgans Aug 31, 2026
ed4929c
formal/sphincs: factor delayed root selection
TomWambsgans Aug 31, 2026
e2423c3
formal/sphincs: retain swapped signer continuations
TomWambsgans Aug 31, 2026
aec35c9
formal/sphincs: couple materialized root selection
TomWambsgans Aug 31, 2026
b842941
formal/sphincs: exchange delayed root prefixes
TomWambsgans Aug 31, 2026
805dcdc
formal/sphincs: absorb earlier comparison roots
TomWambsgans Aug 31, 2026
e2eaa37
formal/sphincs: bridge deferred root planning
TomWambsgans Aug 31, 2026
cc60e34
formal/sphincs: couple public root suffixes
TomWambsgans Aug 31, 2026
6bf7a5e
formal/sphincs: align root selection runners
TomWambsgans Aug 31, 2026
d3dd50c
formal/sphincs: retain selected root prefixes
TomWambsgans Aug 31, 2026
df0fe4c
formal/sphincs: retain root selection failures
TomWambsgans Aug 31, 2026
522dab6
formal/sphincs: align canonical root planning
TomWambsgans Aug 31, 2026
4772ced
formal/sphincs: couple root selection transitions
TomWambsgans Aug 31, 2026
ef4f96b
formal/sphincs: isolate unsafe root candidates
TomWambsgans Aug 31, 2026
21cfb79
formal/sphincs: lift delayed root selection
TomWambsgans Aug 31, 2026
3c0e560
formal/sphincs: project delayed root selection
TomWambsgans Aug 31, 2026
3ac5564
formal/sphincs: project materialized root failures
TomWambsgans Aug 31, 2026
f1bda34
formal/sphincs: weaken comparison root guards
TomWambsgans Aug 31, 2026
8b7ca2e
formal/sphincs: weight symmetric root matches
TomWambsgans Aug 31, 2026
ff48157
formal/sphincs: reduce root cache covariance
TomWambsgans Aug 31, 2026
d908983
formal/sphincs: instantiate delayed root families
TomWambsgans Aug 31, 2026
dd43b62
formal/sphincs: average delayed root production
TomWambsgans Sep 1, 2026
991ec52
formal/sphincs: expose delayed root boundary
TomWambsgans Sep 1, 2026
d0f7a1a
formal/sphincs: couple concrete root selection
TomWambsgans Sep 1, 2026
86c6322
formal/sphincs: isolate global root failure
TomWambsgans Sep 1, 2026
e6fe832
formal/sphincs: track successful root probes
TomWambsgans Sep 1, 2026
620e9d9
formal/sphincs: retain candidate source contexts
TomWambsgans Sep 1, 2026
05aeb83
formal/sphincs: align root source ordinals
TomWambsgans Sep 1, 2026
891f2c2
formal/sphincs: package global root split
TomWambsgans Sep 1, 2026
7f5723c
formal/sphincs: retain private stop chronology
TomWambsgans Sep 1, 2026
afa3cbe
formal/sphincs: prove source snapshot publication
TomWambsgans Sep 1, 2026
f7b26a6
formal/sphincs: prove terminal snapshot coupling
TomWambsgans Sep 1, 2026
b60a24b
formal/sphincs: factor observed clean runs
TomWambsgans Sep 1, 2026
9f95344
formal/sphincs: prove source stop chronology
TomWambsgans Sep 1, 2026
9368321
formal/sphincs: package selected snapshot hiddenness
TomWambsgans Sep 1, 2026
95376a9
formal/sphincs: isolate operational root coupling
TomWambsgans Sep 1, 2026
3262c7e
formal/sphincs: retain private witness values through binds
TomWambsgans Sep 1, 2026
5a54574
formal/sphincs: lift witness coupling through signer
TomWambsgans Sep 1, 2026
000484d
formal/sphincs: bridge witness plans to public execution
TomWambsgans Sep 1, 2026
e83d84d
formal/sphincs: couple root-aware public hash steps
TomWambsgans Sep 1, 2026
c658b48
formal/sphincs: define observed materialized comparison
TomWambsgans Sep 1, 2026
13f718d
formal/sphincs: project witness steps to observations
TomWambsgans Sep 1, 2026
57b6fa2
formal/sphincs: package adaptive root coupling invariants
TomWambsgans Sep 1, 2026
81fd37b
formal/sphincs: lift materialized root observations adaptively
TomWambsgans Sep 1, 2026
ab286eb
formal/sphincs: finish fixed-table root comparison
TomWambsgans Sep 1, 2026
1c22e21
formal/sphincs: lift root comparison through sampling
TomWambsgans Sep 1, 2026
6a19f19
formal/sphincs: expose clean root comparison failure
TomWambsgans Sep 1, 2026
95f7f45
formal/sphincs: bound on-demand root comparison
TomWambsgans Sep 1, 2026
8417df1
formal/sphincs: bound fresh root comparison
TomWambsgans Sep 1, 2026
e23541f
formal/sphincs: separate delayed root hits
TomWambsgans Sep 1, 2026
8aa5a32
formal/sphincs: classify successful doomed runs
TomWambsgans Sep 1, 2026
b2c48dc
formal/sphincs: index first hidden hits
TomWambsgans Sep 1, 2026
572a1db
formal/sphincs: retain successful first-hit gates
TomWambsgans Sep 1, 2026
806ea3b
formal/sphincs: preserve missing chain obstructions
TomWambsgans Sep 1, 2026
5248cce
formal/sphincs: distinguish stopped chain start hits
TomWambsgans Sep 1, 2026
9eaaee5
formal/sphincs: classify stopped candidate probes
TomWambsgans Sep 1, 2026
b0713db
formal/sphincs: preserve stopped source snapshots
TomWambsgans Sep 1, 2026
e09bdfb
formal/sphincs: retain selected stopped hits
TomWambsgans Sep 1, 2026
84340af
formal/sphincs: eliminate stopped terminal cases
TomWambsgans Sep 1, 2026
2619a40
formal/sphincs: split stopped hash boundaries
TomWambsgans Sep 1, 2026
c5e0cbb
formal/sphincs: add stopped adaptive finisher
TomWambsgans Sep 1, 2026
a0fb58c
formal/sphincs: close completable stopped hash step
TomWambsgans Sep 1, 2026
eb00443
formal/sphincs: cover administrative stopped hash cases
TomWambsgans Sep 1, 2026
f9b2adf
formal/sphincs: lift stopped classification through rest game
TomWambsgans Sep 1, 2026
375f6da
formal/sphincs: lift stopped relation through table sampling
TomWambsgans Sep 1, 2026
a5bd019
formal/sphincs: project stopped diagnostic events
TomWambsgans Sep 1, 2026
27e458a
formal/sphincs: project sampled first hidden hits
TomWambsgans Sep 1, 2026
ad438f6
Eliminate hidden chain starts from retained probes
TomWambsgans Sep 1, 2026
bf36aac
Project unreachable chain hits to probability zero
TomWambsgans Sep 1, 2026
e30bd7a
Preserve earlier misses in stopped snapshots
TomWambsgans Sep 1, 2026
88b949a
Project stopped hits to ordinal selections
TomWambsgans Sep 1, 2026
34df287
Sum stopped structural ordinals
TomWambsgans Sep 1, 2026
321b690
Couple stopped snapshots to ordinal selectors
TomWambsgans Sep 1, 2026
9561683
Close the stopped nonroot ordinal bound
TomWambsgans Sep 1, 2026
2d21540
Retain stopped ordinal candidate alignment
TomWambsgans Sep 1, 2026
b7b8860
Close the stopped nonroot diagnostic branch
TomWambsgans Sep 1, 2026
faef403
Retain the clean stopped prefix
TomWambsgans Sep 1, 2026
22836f4
Isolate the clean root diagnostic fiber
TomWambsgans Sep 1, 2026
57ad3b6
Account for the comparison root exception
TomWambsgans Sep 1, 2026
c167417
Project clean roots to the ordinal selector
TomWambsgans Sep 1, 2026
9503196
Normalize deferred root selection
TomWambsgans Sep 1, 2026
18195fa
Dominate the root selector event
TomWambsgans Sep 1, 2026
67f0737
Sample the selected root eagerly
TomWambsgans Sep 1, 2026
5ca64d4
Package the joint stopped root endpoint
TomWambsgans Sep 1, 2026
36f20a0
Preserve good roots through early resolution
TomWambsgans Sep 1, 2026
39ac75b
Retain success in stopped root fibers
TomWambsgans Sep 1, 2026
a5910d1
Align successful root diagnostics
TomWambsgans Sep 1, 2026
8f381d4
Track pending probes at ordinal selection
TomWambsgans Sep 1, 2026
d6a1a76
Add marginal coupling composition
TomWambsgans Sep 1, 2026
c47da39
Glue successful runs to covered ordinal selectors
TomWambsgans Sep 1, 2026
377fa48
Resolve the selected root inside the joint coupling
TomWambsgans Sep 1, 2026
af79c12
Share the observed root selection prefix
TomWambsgans Sep 1, 2026
4869353
Add the root aware selector marginal
TomWambsgans Sep 1, 2026
7440f63
Prove the root aware selector swap bound
TomWambsgans Sep 1, 2026
0977b85
Specialize the root aware cache family
TomWambsgans Sep 2, 2026
e221d65
Lift the root aware bound through public sampling
TomWambsgans Sep 2, 2026
ee06f55
Package the sampled root-aware shared experiment
TomWambsgans Sep 2, 2026
8bb674f
Prove the successful shared root semantics
TomWambsgans Sep 2, 2026
fa42072
Lift shared root semantics to the weighted endpoint
TomWambsgans Sep 2, 2026
8dfd325
Express the eager root endpoint through resolution
TomWambsgans Sep 2, 2026
7a2842e
Lift resolved root endpoint through public root
TomWambsgans Sep 2, 2026
521e451
Retain lazy state across position commutation
TomWambsgans Sep 2, 2026
02d37d0
Track observations across eager root installation
TomWambsgans Sep 2, 2026
26877b2
Couple synchronized lazy and eager suffixes
TomWambsgans Sep 2, 2026
66754d3
Lift synchronized root suffix through the boundary
TomWambsgans Sep 2, 2026
cd434f2
Synchronize delayed and eager root states
TomWambsgans Sep 2, 2026
cb75fd2
Hand target resolution to the synchronized suffix
TomWambsgans Sep 2, 2026
b4053e8
Preserve synchronized root finalization
TomWambsgans Sep 2, 2026
2542b0d
Preserve the successful root event
TomWambsgans Sep 2, 2026
29de066
Retain raw root selector alignment
TomWambsgans Sep 2, 2026
03aca22
Package the lazy eager root endpoint
TomWambsgans Sep 2, 2026
c89af5e
Reduce root transport to event indicators
TomWambsgans Sep 2, 2026
84c200f
Seal the root indicator endpoint
TomWambsgans Sep 2, 2026
e9c5cc1
Factor the fixed-root lazy eager bridge
TomWambsgans Sep 2, 2026
46a02a8
Connect the fixed-root bridge to production weight
TomWambsgans Sep 2, 2026
27d1c21
Seal the selected root handoff
TomWambsgans Sep 2, 2026
56c8bc9
Parameterize the ordinal diagnostic bound
TomWambsgans Sep 2, 2026
abb7893
Condition the adaptive root bridge
TomWambsgans Sep 2, 2026
4ec6b43
Define the adaptive selected root prefix
TomWambsgans Sep 2, 2026
59744e2
Preserve the fixed root at the selected handoff
TomWambsgans Sep 2, 2026
e3a04b0
Track support through the selected root suffix
TomWambsgans Sep 2, 2026
9539a78
Preserve chronology through adaptive root steps
TomWambsgans Sep 2, 2026
b77dadf
Seal probe-free adaptive prefix steps
TomWambsgans Sep 2, 2026
12017e1
Close the adaptive pure branch
TomWambsgans Sep 2, 2026
8c2277b
Expose the adaptive hash cutoff
TomWambsgans Sep 2, 2026
9967542
Extract the selected root witness
TomWambsgans Sep 2, 2026
832d492
Separate adaptive observation logs
TomWambsgans Sep 2, 2026
4d758b3
Close adaptive selected-root coupling
TomWambsgans Sep 2, 2026
bade0ba
Initialize adaptive root coupling
TomWambsgans Sep 2, 2026
72b1e0a
Start eager root normalization
TomWambsgans Sep 2, 2026
8ac085c
Normalize selected root boundary
TomWambsgans Sep 2, 2026
24eedd8
Bridge eager normalization to resolver recursion
TomWambsgans Sep 2, 2026
b99740a
Seal normalization synchronization bases
TomWambsgans Sep 2, 2026
1ce0e1c
Reuse canonical resolver synchronization
TomWambsgans Sep 2, 2026
29b0df7
Normalize selected root across signing
TomWambsgans Sep 2, 2026
58620d6
Gate delayed root normalization by its safe prefix
TomWambsgans Sep 2, 2026
f59ce5a
Prove safe delayed-root trace normalization
TomWambsgans Sep 2, 2026
3eac9d0
Eliminate unsafe delayed-root prefixes
TomWambsgans Sep 2, 2026
46dfe36
Strengthen delayed-root normalization to equality
TomWambsgans Sep 2, 2026
745d09b
Close dirty nonselected hash normalization
TomWambsgans Sep 2, 2026
9899262
Lift delayed observers through probe-free queries
TomWambsgans Sep 2, 2026
7e52fc8
Synchronize completion-safe observer boundaries
TomWambsgans Sep 2, 2026
f4de06b
Close selected hash observer synchronization
TomWambsgans Sep 2, 2026
c9c5382
Close selected-target hash neutrality
TomWambsgans Sep 2, 2026
cce9fb1
Add fixed-target observer neutrality
TomWambsgans Sep 2, 2026
d9cdb54
Prove fixed-position direct resolution commute
TomWambsgans Sep 2, 2026
4c226cf
Close pointwise hash neutrality
TomWambsgans Sep 2, 2026
0a10c16
Close structural adaptive normalization
TomWambsgans Sep 2, 2026
495c31b
Close arbitrary-context adaptive normalization
TomWambsgans Sep 2, 2026
99b9b9e
Normalize the initialized adaptive root proxy
TomWambsgans Sep 2, 2026
8413914
Expose the final eager proxy premise
TomWambsgans Sep 2, 2026
85c145a
Reduce the eager proxy through resolution
TomWambsgans Sep 2, 2026
dd3cd25
Canonicalize resolved adaptive contexts
TomWambsgans Sep 2, 2026
a30e990
Close the resolved selected hash boundary
TomWambsgans Sep 2, 2026
c7c8fe3
Close the reverse uniform constructor
TomWambsgans Sep 2, 2026
122c5c1
Separate reverse bridge probe budgets
TomWambsgans Sep 2, 2026
d25adff
Prepare exact reverse signer normalization
TomWambsgans Sep 2, 2026
35fa022
Land exact reverse signer coupling
TomWambsgans Sep 3, 2026
eff360e
Align delayed proxy with root-aware probes
TomWambsgans Sep 3, 2026
0f1d595
Close reverse fixed ordinal transport
TomWambsgans Sep 3, 2026
1fd601b
Close the fixed root endpoint
TomWambsgans Sep 3, 2026
c5626c9
Absorb the fixed root comparison exception
TomWambsgans Sep 3, 2026
e718a73
Add the common root production selector
TomWambsgans Sep 3, 2026
379458d
Normalize the root production sampler
TomWambsgans Sep 3, 2026
1a197b0
Lift root production normalization
TomWambsgans Sep 3, 2026
5249bd5
Synchronize the common production observer
TomWambsgans Sep 3, 2026
7029648
Retain common root selection fibers
TomWambsgans Sep 3, 2026
abfc0c3
Lift detailed root production normalization
TomWambsgans Sep 3, 2026
28e2795
Add the common root fiber experiment
TomWambsgans Sep 3, 2026
dc9451a
Prove one-cell permissive lazy factorization
TomWambsgans Sep 3, 2026
5c1ae06
Prove common production target-peek freedom
TomWambsgans Sep 3, 2026
6f1a0aa
Quotient hidden caches in permissive production
TomWambsgans Sep 3, 2026
c9cb31c
Lift hidden-cache quotient through selection
TomWambsgans Sep 3, 2026
4f09912
Keep lazy samples live across continuations
TomWambsgans Sep 3, 2026
95d1987
Commute hidden samples through production selection
TomWambsgans Sep 3, 2026
c620399
Commonize selected root production fibers
TomWambsgans Sep 3, 2026
a452254
Aggregate common root position fibers
TomWambsgans Sep 3, 2026
ef3f4b9
Sum structural first-hit ordinals
TomWambsgans Sep 3, 2026
b508be3
Package the nine-unit boundary arithmetic
TomWambsgans Sep 3, 2026
7e19de6
Aggregate canonical source ordinals
TomWambsgans Sep 3, 2026
28c2ad2
Close canonical nonroot source risk
TomWambsgans Sep 3, 2026
f8e4f2a
Reduce delayed roots to common fibers
TomWambsgans Sep 3, 2026
c5e5550
Split delayed root comparison risk
TomWambsgans Sep 3, 2026
8c6b946
Assemble delayed root probability bounds
TomWambsgans Sep 3, 2026
7a8b36d
Bridge deferred actions to permissive execution
TomWambsgans Sep 3, 2026
cd3cbd4
Isolate the delayed selector hash seam
TomWambsgans Sep 3, 2026
8ca42ad
Close the delayed hash action coupling
TomWambsgans Sep 3, 2026
d133221
Erase hidden targets from the delayed selector
TomWambsgans Sep 3, 2026
b818dce
Lift delayed target erasure through root production
TomWambsgans Sep 3, 2026
705e40f
Retain the delayed target probe through preloading
TomWambsgans Sep 3, 2026
b1094f5
Retain the selected target candidate
TomWambsgans Sep 3, 2026
7818029
Retain the delayed target through the common selector
TomWambsgans Sep 3, 2026
f7953e1
Reuse the materialized root selector for delayed production
TomWambsgans Sep 3, 2026
1b30d6a
Retain delayed selector candidate history
TomWambsgans Sep 3, 2026
f5c9e40
Package the delayed root guess event
TomWambsgans Sep 3, 2026
2c676aa
Start the permissive delayed root swap
TomWambsgans Sep 4, 2026
db2261b
Lift delayed root swap through signer layers
TomWambsgans Sep 4, 2026
423a880
Couple permissive root encoding through signing
TomWambsgans Sep 4, 2026
c35e708
Lift the permissive root swap through selection
TomWambsgans Sep 4, 2026
36116b6
Complete the fixed-output permissive root exchange
TomWambsgans Sep 4, 2026
993a986
Extract the permissive one-root guess bound
TomWambsgans Sep 4, 2026
ec98d30
Retain the delayed root witness through filtering
TomWambsgans Sep 4, 2026
7b62535
Close the delayed root exchange endpoint
TomWambsgans Sep 4, 2026
e223d84
Close the delayed root ordinal bound
TomWambsgans Sep 4, 2026
02adfb6
Assemble the canonical private witness bound
TomWambsgans Sep 4, 2026
8e1448d
Group the one-time terminal charge
TomWambsgans Sep 4, 2026
bdc5c93
Package the canonical private endpoint
TomWambsgans Sep 4, 2026
825961e
Expose the canonical boundary seam
TomWambsgans Sep 4, 2026
1300d30
Follow supported signer replies in root coupling
TomWambsgans Sep 4, 2026
40d498d
Count probe ordinals on supported signer paths
TomWambsgans Sep 4, 2026
d2df38d
Follow supported replies in stopped diagnostics
TomWambsgans Sep 4, 2026
21fae56
Follow supported replies through root diagnostics
TomWambsgans Sep 4, 2026
5053f71
Follow supported replies through finalization
TomWambsgans Sep 4, 2026
c44b4f6
Package combined boundary witness coverage
TomWambsgans Sep 4, 2026
4f9cfe5
Lift boundary witness coverage through retained execution
TomWambsgans Sep 4, 2026
6526ec5
Attach boundary witness lift to public root
TomWambsgans Sep 4, 2026
b17b0e9
Orient boundary domination toward canonical failure
TomWambsgans Sep 4, 2026
5f0676a
Project canonical boundary failure to Boolean endpoint
TomWambsgans Sep 4, 2026
fa3b4ce
Project root-aware ordinary failure to Boolean endpoint
TomWambsgans Sep 4, 2026
c96f40b
Prove 120-bit strong unforgeability for the concrete SPHINCS scheme
TomWambsgans Sep 4, 2026
a31ba7d
Prove 125-bit strong unforgeability for the concrete SPHINCS scheme
TomWambsgans Sep 4, 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`, and `formal/sphincs/` states the same kind of claim for the SPHINCS instance at 120 bits, with no proof yet. In both, `*/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`.
- 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
14 changes: 7 additions & 7 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 @@ -74,7 +75,7 @@
\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 @@ -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}, which states $x=120$ at $\qs=2^{24}$: the eight bits below $n$ are what a proof may spend on union bounds and constants. Nothing proves it yet.

\subsection{Quantum security}
\label{sec:quantum}
Expand Down
1 change: 1 addition & 0 deletions formal/sphincs/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/.lake/
703 changes: 703 additions & 0 deletions formal/sphincs/README.md

Large diffs are not rendered by default.

18 changes: 18 additions & 0 deletions formal/sphincs/SphincsSecurity.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import SphincsSecurity.Statement
import SphincsSecurity.Proof

namespace SphincsSecurity

/-!
The public security theorems for the statements in `SphincsSecurity.Statement`. The 125-bit proof combines the joint diagnostic and residual bounds with the forest, structural, encoding and message-collision bounds in the original SUF experiment.
-/

/-- `125` bits of classical strong unforgeability in the random-oracle model for the concrete SPHINCS instance, at `2^24` signing requests per key pair. -/
theorem sphincs_has_125_bits_of_classical_security : SphincsSecurity125Statement := by
exact Concrete.OtsProbeSimulation.Range125.security125_of_completed_joint_boundary

/-- `120` bits of classical strong unforgeability in the random-oracle model for the concrete SPHINCS instance, at `2^24` signatures per key pair. -/
theorem sphincs_has_120_bits_of_classical_security : SphincsSecurityStatement := by
exact Concrete.OtsProbeSimulation.security_of_completed_canonical_boundary

end SphincsSecurity
Loading
Loading