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}