Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
### Features

- [\#82](https://github.com/arkworks-rs/poly-commit/pull/82) Add multivariate opening challenge strategy. Integrate with sponge API.
- [\#171](https://github.com/arkworks-rs/poly-commit/pull/171) Add the pairing-based KZH-`k` multilinear polynomial commitment family.

### Improvements
- [\#152](https://github.com/arkworks-rs/poly-commit/issues/152) Expose `kzg10::open_with_witness_polynomial` and `open` downstream.
Expand Down
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ ark-std = { version = "0.5.0", default-features = false }
ark-relations = { version = "0.5.0", default-features = false }
ark-r1cs-std = { version = "0.5.0", default-features = false }
rand_chacha = { version = "0.3.0", default-features = false }
zeroize = { version = "1", default-features = false, features = ["alloc"] }

[profile.release]
opt-level = 3
Expand Down
38 changes: 35 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,18 @@

A polynomial commitment scheme is a cryptographic primitive that enables a party to commit to a polynomial over a given finite field, and then, later on, to reveal desired evaluations of the polynomial along with cryptographic proofs attesting to their correctness.

This library provides various constructions of polynomial commitment schemes. These constructions support committing to multiple polynomials at a time with differing degree bounds, batching multiple evaluation proofs for the same evaluation point into a single one, and batch verification of proofs.
This library provides several polynomial commitment constructions through a
shared interface. Support for degree bounds, hiding, and specialized batching
depends on the selected construction.

The key properties satisfied by the polynomial commitment schemes are **succinctness**, **extractability**, and **hiding**. See [the Marlin paper][marlin] for definitions of these properties.
The constructions target **succinctness** and **extractability**; some also
provide **hiding**. See [the Marlin paper][marlin] for definitions of these
properties.


### Supported Polynomial Commitment Schemes

The library supports six polynomial commitment schemes.
The library supports seven polynomial commitment schemes.

#### Inner-product-argument PC

Expand Down Expand Up @@ -75,6 +79,25 @@ Multilinear polynomial commitment, introduced with Hyrax zkSNARK. Relies on Pede
Riad S. Wahby, Ioanna Tzialla, abhi shelat, Justin Thaler, Michael Walfish
2018 IEEE Symposium on Security and Privacy

#### KZH-k multilinear PC

Pairing-based multilinear polynomial commitment family parameterized by tensor
arity `k`. This is the non-hiding construction from the papers below. Setup
creates a trusted SRS for one exact number of variables and does not provide
an updatable-ceremony interface. See the
[`kzh` module documentation](https://docs.rs/ark-poly-commit/latest/ark_poly_commit/kzh/)
for setup assumptions and the ways this implementation differs from the papers.

Select the family member with the const generic `KZH<E, P, const K: usize>`;
`KZH2`, `KZH3`, and `KZH4` are provided as convenience aliases.

[KZH-Fold: Accountable Voting from Sublinear Accumulation][kzh], George
Kadianakis, Arantxa Zapico, Hossein Hafezi, and Benedikt Bünz, CCS 2025.

[IronDict: Transparent Dictionaries from Polynomial Commitments][irondict],
Hossein Hafezi, Alireza Shirzad, Benedikt Bünz, and Joseph Bonneau,
USENIX Security 2026.

#### Ligero and Brakedown

Polynomial commitments based on linear codes and cryptographic hash functions. Construction details in the following papers.
Expand Down Expand Up @@ -292,6 +315,8 @@ Unless you explicitly state otherwise, any contribution that you submit to this
[brakedown]: https://ia.cr/2021/1043
[ligero]: https://ia.cr/2022/1608
[hyrax]: https://eprint.iacr.org/2017/1132
[kzh]: https://ia.cr/2025/144
[irondict]: https://eprint.iacr.org/2025/1580

## Reference papers

Expand Down Expand Up @@ -327,6 +352,13 @@ CCS 2017
Riad S. Wahby, Ioanna Tzialla, abhi shelat, Justin Thaler, Michael Walfish
2018 IEEE Symposium on Security and Privacy

[KZH-Fold: Accountable Voting from Sublinear Accumulation][kzh], George
Kadianakis, Arantxa Zapico, Hossein Hafezi, and Benedikt Bünz, CCS 2025.

[IronDict: Transparent Dictionaries from Polynomial Commitments][irondict],
Hossein Hafezi, Alireza Shirzad, Benedikt Bünz, and Joseph Bonneau,
USENIX Security 2026.

[Brakedown: Linear-time and field-agnostic SNARKs for R1CS][brakedown]
Alexander Golovnev, Jonathan Lee, Srinath Setty, Justin Thaler, Riad S. Wahby
CRYPTO 2023
Expand Down
6 changes: 6 additions & 0 deletions poly-commit/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ ark-ec.workspace = true
ark-poly.workspace = true
ark-crypto-primitives = { workspace = true, features = ["sponge", "merkle_tree"] }
ark-std.workspace = true
zeroize.workspace = true
ark-relations = { workspace = true, optional = true }
ark-r1cs-std = { workspace = true, optional = true }

Expand Down Expand Up @@ -47,6 +48,11 @@ name = "hyrax_times"
path = "benches/hyrax_times.rs"
harness = false

[[bench]]
name = "kzh_times"
path = "benches/kzh_times.rs"
harness = false

[[bench]]
name = "size"
path = "benches/size.rs"
Expand Down
Loading