snark_verifier/pcs/
kzg.rs

1//! [KZG](<https://www.iacr.org/archive/asiacrypt2010/6477178/6477178.pdf>)
2//! polynomial commitment scheme and accumulation scheme.
3
4use crate::util::arithmetic::CurveAffine;
5
6mod accumulation;
7mod accumulator;
8mod decider;
9mod multiopen;
10
11pub use accumulation::{KzgAs, KzgAsProvingKey, KzgAsVerifyingKey};
12pub use accumulator::{KzgAccumulator, LimbsEncoding};
13pub use decider::KzgDecidingKey;
14pub use multiopen::{Bdfg21, Bdfg21Proof, Gwc19, Gwc19Proof};
15
16#[cfg(feature = "loader_halo2")]
17pub use accumulator::LimbsEncodingInstructions;
18use serde::{Deserialize, Serialize};
19
20/// KZG succinct verifying key.
21#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
22pub struct KzgSuccinctVerifyingKey<C: Copy> {
23    /// Generator.
24    pub g: C,
25}
26
27impl<C: CurveAffine> KzgSuccinctVerifyingKey<C> {
28    /// Initialize a [`KzgSuccinctVerifyingKey`].
29    pub fn new(g: C) -> Self {
30        Self { g }
31    }
32}
33
34impl<C: CurveAffine> From<C> for KzgSuccinctVerifyingKey<C> {
35    fn from(g: C) -> KzgSuccinctVerifyingKey<C> {
36        KzgSuccinctVerifyingKey::new(g)
37    }
38}