arnaucube
arnaucube/sonobePublic Self-hosted repository
sonobe/src/folding/nova/mod.rs
src/folding/nova/mod.rsRaw
 1use ark_crypto_primitives::sponge::Absorb;
 2use ark_ec::{CurveGroup, Group};
 3use ark_std::fmt::Debug;
 4use ark_std::{One, Zero};
 5
 6use crate::pedersen::{Params as PedersenParams, Pedersen};
 7
 8pub mod nifs;
 9
10#[derive(Debug, Clone, Eq, PartialEq)]
11pub struct CommittedInstance<C: CurveGroup> {
12    pub cmE: C,
13    pub u: C::ScalarField,
14    pub cmW: C,
15    pub x: Vec<C::ScalarField>,
16}
17impl<C: CurveGroup> CommittedInstance<C> {
18    pub fn empty() -> Self {
19        CommittedInstance {
20            cmE: C::zero(),
21            u: C::ScalarField::one(),
22            cmW: C::zero(),
23            x: Vec::new(),
24        }
25    }
26}
27
28#[derive(Debug, Clone, Eq, PartialEq)]
29pub struct Witness<C: CurveGroup> {
30    pub E: Vec<C::ScalarField>,
31    pub rE: C::ScalarField,
32    pub W: Vec<C::ScalarField>,
33    pub rW: C::ScalarField,
34}
35
36impl<C: CurveGroup> Witness<C>
37where
38    <C as Group>::ScalarField: Absorb,
39{
40    pub fn new(w: Vec<C::ScalarField>, e_len: usize) -> Self {
41        Self {
42            E: vec![C::ScalarField::zero(); e_len],
43            rE: C::ScalarField::one(),
44            W: w,
45            rW: C::ScalarField::one(),
46        }
47    }
48    pub fn commit(
49        &self,
50        params: &PedersenParams<C>,
51        x: Vec<C::ScalarField>,
52    ) -> CommittedInstance<C> {
53        let cmE = Pedersen::commit(params, &self.E, &self.rE);
54        let cmW = Pedersen::commit(params, &self.W, &self.rW);
55        CommittedInstance {
56            cmE,
57            u: C::ScalarField::one(),
58            cmW,
59            x,
60        }
61    }
62}