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}