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 circuits;
 9pub mod nifs;
10
11#[derive(Debug, Clone, Eq, PartialEq)]
12pub struct CommittedInstance<C: CurveGroup> {
13    pub cmE: C,
14    pub u: C::ScalarField,
15    pub cmW: C,
16    pub x: Vec<C::ScalarField>,
17}
18
19impl<C: CurveGroup> CommittedInstance<C> {
20    pub fn empty() -> Self {
21        CommittedInstance {
22            cmE: C::zero(),
23            u: C::ScalarField::one(),
24            cmW: C::zero(),
25            x: Vec::new(),
26        }
27    }
28}
29
30#[derive(Debug, Clone, Eq, PartialEq)]
31pub struct Witness<C: CurveGroup> {
32    pub E: Vec<C::ScalarField>,
33    pub rE: C::ScalarField,
34    pub W: Vec<C::ScalarField>,
35    pub rW: C::ScalarField,
36}
37
38impl<C: CurveGroup> Witness<C>
39where
40    <C as Group>::ScalarField: Absorb,
41{
42    pub fn new(w: Vec<C::ScalarField>, e_len: usize) -> Self {
43        Self {
44            E: vec![C::ScalarField::zero(); e_len],
45            rE: C::ScalarField::one(),
46            W: w,
47            rW: C::ScalarField::one(),
48        }
49    }
50    pub fn commit(
51        &self,
52        params: &PedersenParams<C>,
53        x: Vec<C::ScalarField>,
54    ) -> CommittedInstance<C> {
55        let cmE = Pedersen::commit(params, &self.E, &self.rE);
56        let cmW = Pedersen::commit(params, &self.W, &self.rW);
57        CommittedInstance {
58            cmE,
59            u: C::ScalarField::one(),
60            cmW,
61            x,
62        }
63    }
64}