You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
New title: "Post-Quantum Multilinear Polynomial Commitments from FRI Folding in the Boolean-Kernel Basis" (also in README, CITATION.cff, the crate description and the project page).
Shorter abstract; plain-text abstract, keywords, category and license for ePrint in paper/EPRINT.md.
Author block with ORCID; acknowledgments with a statement on the use of generative AI tools.
Introduction: Figure 1 (the fold dictionary as a commutative diagram), a contribution paragraph on the Lean formalisation, a scope paragraph, and the statement that the paper is self-contained.
Scope statements in §5 (Remark on batching), §6, §7 and §8 point to the new §10.1 (Future work).
§10: future work (soundness, zero knowledge, implementation, formal verification, other domains) and §10.2 (Artefacts: repository, release, commands to reproduce each table and check, Lean toolchain).
Reference added: Libra (Xie et al., CRYPTO 2019).
Rust (breaking changes)
Compiler of CDHZ25 (Construction 11.7). Salted Merkle trees (leaf H_K0(a || b || salt), 32-byte salts from a keyed BLAKE3 stream), one round salt per round, challenges derived from all previous roots and salts; salts from a fresh operating-system seed per commitment and per opening (getrandom). Transcript label kbfold/v0.3/pcs.
Quartic extensionFp4 = F_p[i]/(i^4 - 7) and the trait ExtField; the protocol is generic in the challenge field (Fp2 or Fp4).
Challenge maps of the paper:phi from 64(e+1) bits (the integer reduced mod p^e, base-p digits), and pos (kappa blocks of m+R bits).
commit, open and verify return Result<_, Error>; the verifier never panics on malformed proofs. Proof gains round_salts, leaf salts in each opening, and to_bytes (canonical encoding).
#![forbid(unsafe_code)]; feature insecure-test-vectors (seeded provers, never for production).
Tests: completeness in both extensions, every single mutation of a proof rejected, lengths and random truncations without panic, fresh salts, invalid parameters; test vectors in rust/vectors/ (transcript challenges, complete proofs). CI runs the vector tests.
Paper (with the code)
§7: extension fields, salted trees, Fiat-Shamir by rounds, relation to the compiler of CDHZ25, proof format, tests.
Remark 7.30 (scope), introduction and §10.1 updated: the implementation follows the compiler; the conformance item leaves the future work.
§9: the measurements were recorded with version 0.1 (to be re-measured).
Benchmarks
Feature parallel (rayon): transforms, NTT, Merkle trees, folds and sumcheck on all cores; the proofs are identical (CI checks them against the test vectors).
examples/bench.rs: modes scaling, pq (F_{p^4}, 248 queries), salt, stop, rate, breakdown; CSV with thread count. bench/run_all.sh runs all of them, in both threading modes, and optionally the WHIR implementation as an external reference.
New measurements in rust/results/vm-2cpu/; the version 0.1 data move to rust/results/v0.1/.
Paper (§9, measurements of 0.3.0)
All tables re-measured with 0.3.0 (salted trees). New: post-quantum parameters (Table 3), cost of salts, parallel speed-up, and WHIR on the same machine (Table 6), with the three techniques behind its smaller proofs added to future work (§10.1).
Introduction and conclusion describe the new measurements; stray characters before §10.1 removed.
Committed levels and merged paths (proof 1147 -> 237 KiB at n = 20)
Committed levels (Params::fold_log, k = 4 by default): the prover commits to w_0, w_k, w_2k, ...; a leaf of w_j (j > 0) holds a coset of 2^k values and the verifier folds k times locally. The commitment tree keeps one fibre per leaf, ordered so that the fibres of a coset are consecutive (the committed string and the relation are unchanged).
Merged paths: the openings of one committed word are the distinct leaves in increasing order plus one merged authentication path; the verifier rejects unless every node is used exactly once.
Proof now has level0 and levels (LevelOpening: values, salts, nodes). The transcript absorbs k. Tests cover k = 1..4, all mutations of the new openings, and truncations; vectors regenerated.
examples/bench.rs: mode arity; breakdown measures the commitment tree.
Paper (committed levels)
§6.3 "Committing to fewer words": committed levels J, cosets, Lemma 6.x (local folding), the protocol Pi_eval^J and Lemma 6.x (skipping commitments, a reduction to Pi_eval for every transcript).
§7.9 "Committed levels": Theorem 7.x transfers soundness, binding, round-by-round knowledge soundness, the relaxed version (IOR over a disjoint-union alphabet, reordered implicit instance) and the post-quantum corollary with the same errors; Remark on parameters and merged paths. Reviewed by an independent pass; its corrections are included.
Lean: new module KBFold/Skip.lean formalises Lemma "Skipping commitments" and Theorem "Committed levels", item 1 (soundness far and close, evaluation binding), with the same axioms as the originals; the Lean appendix, lean/README.md and docs/LEAN_MAP.md list it.
§8 describes committed levels, leaf order and merged openings; §9 re-measured, with a new table on k; abstract and introduction give the headline numbers; notation table and Lean appendix updated.
Docs
docs/ROADMAP.md: version 1 (first ePrint submission) and version 2 (revision of the same entry).