p3-binary-pcs 0.9.0-rc.1

Multilinear polynomial commitment over Plonky3 binary tower fields, via additive-domain proximity
docs.rs failed to build p3-binary-pcs-0.9.0-rc.1
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: p3-binary-pcs-0.8.0

p3-binary-pcs

A multilinear polynomial commitment scheme over the binary tower, committing via an additive-domain Reed–Solomon code (the Cantor domain from p3-binary-dft) and proving proximity BaseFold-style, folding the codeword in lockstep with a multilinear sumcheck. See Diamond, Posen, Succinct Arguments over Towers of Binary Fields (Binius), https://eprint.iacr.org/2023/1784, and Diamond, Posen, Polylogarithmic Proofs for Multilinears over Binary Towers (FRI-Binius, ring switching), https://eprint.iacr.org/2024/504. Parameters are derived only in the unique-decoding regime. The capacity bound is refuted over characteristic 2 with F_2-subspace domains, and the Cantor domain is one. The classical Johnson list-decoding radius remains unconditional; using it in a folding argument additionally needs the proven Reed--Solomon mutual-correlated-agreement bound. This BaseFold implementation nevertheless stays in unique decoding by design; the WHIR adapter below also accepts the Johnson regime.

The committed alphabet and the challenge field are separate choices. Columns and the base codeword live in the alphabet; every challenge, every folded codeword and every claimed value live in the challenge field. A narrower alphabet halves the bytes of the largest Merkle tree in the proof without moving a single soundness term, because every error is charged against the challenge field's width. Two constraints follow from the alphabet alone: the grinding witness is one of its elements, so its width caps the difficulty, and the base codeword lives on its additive domain, so num_variables + log_inv_rate must not exceed its bit width.

Two obligations the types do not carry:

  • Binding, not hiding. The final codeword travels in the clear and every query opening is a raw codeword symbol, so this must not be used where zero-knowledge is required.
  • Collision resistance is the caller's. The derived schedule prices the field's width and the query count, never the Merkle tree it is paired with.

BinaryPcsConfig delegates its algebraic budget to p3_security::binary::BinaryPcsRegime. The target covers the sum of opening-claim batching, every fold and sumcheck round, and query error. Query grinding applies only to queries; it runs after the alpha challenge, every fold, and absorption of the entire final codeword. This final-codeword binding changes the Fiat–Shamir transcript: proofs generated without it are not guaranteed to verify, although the proof's serialization layout is unchanged. When every base coset is queried, query error is zero and its reserved budget is released. PrescribedPointPcs::prescribed_security supplies this composed bound and the unique-decoding candidate bound to security-checked multi-STARK callers, which also need collision evidence.

This tightens previously accepted configurations and can change the derived query count and proof transcript. Opening protocols must also fit BinaryPcsConfig::max_opening_claims(); each current or successor-column evaluation consumes one claim. The limit is conservative, not a tight attack threshold. Use BinaryPcs::validate_opening_protocol to preflight a protocol, or try_open / try_open_at to receive typed errors without changing the challenger on rejection. The existing infallible open / open_at traits panic on invalid or over-budget protocols. Existing callers must handle this new rejection or choose a feasible target and protocol before opening.

WHIR over the additive domain

The whir module connects WHIR to the Cantor additive code. Commitments use the 64-bit polynomial-basis field. Challenges use its 192-bit cubic extension.

Queries follow a transcript-bound stratified schedule. Use recommended_cap_height to stop Merkle paths at its deepest stratum.

Unique decoding and the Johnson regime use proven bounds. The capacity regime is unsupported because its assumption is refuted for this domain.

This adapter is binding, not hiding.

Part of Plonky3, dual-licensed under MIT and Apache 2.0.