sonobe/src/lib.rs
src/lib.rsRaw
1#![allow(non_snake_case)]
2#![allow(non_upper_case_globals)]
3
4use ark_ec::CurveGroup;
5use ark_ff::PrimeField;
6use ark_std::{fmt::Debug, rand::RngCore};
7use thiserror::Error;
8
9pub mod transcript;
10use transcript::Transcript;
11pub mod ccs;
12pub mod pedersen;
13pub mod utils;
14
15#[derive(Debug, Error)]
16pub enum Error {
17 #[error("Relation not satisfied")]
18 NotSatisfied,
19}
20
21/// FoldingScheme defines trait that is implemented by the diverse folding schemes. It is defined
22/// over a cycle of curves (C1, C2), where:
23/// - C1 is the main curve, which ScalarField we use as our F for al the field operations
24/// - C2 is the auxiliary curve, which we use for the commitments, whose BaseField (for point
25/// coordinates) are in the C1::ScalarField.
26/// In other words, C1.Fq == C2.Fr, and C1.Fr == C2.Fq.
27pub trait FoldingScheme<C1: CurveGroup, C2: CurveGroup>: Clone + Debug
28where
29 C1: CurveGroup<BaseField = C2::ScalarField, ScalarField = C2::BaseField>,
30 C2::BaseField: PrimeField,
31{
32 type PreprocessorParam: Debug;
33 type ProverParam: Debug;
34 type VerifierParam: Debug;
35 type Witness: Debug;
36 type CommittedInstanceWithWitness: Debug;
37 type CommittedInstance: Clone + Debug;
38
39 fn preprocess(
40 prep_param: &Self::PreprocessorParam,
41 ) -> Result<(Self::ProverParam, Self::VerifierParam), Error>;
42
43 fn init_accumulator(
44 pp: &Self::ProverParam,
45 ) -> Result<Self::CommittedInstanceWithWitness, Error>;
46
47 fn prove(
48 pp: &Self::ProverParam,
49 running_instance: &mut Self::CommittedInstanceWithWitness,
50 incomming_instances: &[Self::Witness],
51 transcript: &mut impl Transcript<C1>,
52 ) -> Result<(), Error>;
53
54 fn verify(
55 vp: &Self::VerifierParam,
56 running_instance: &mut Self::CommittedInstance,
57 incomming_instances: &[Self::CommittedInstance],
58 transcript: &mut impl Transcript<C1>,
59 ) -> Result<(), Error>;
60}
61
62pub trait Decider<C: CurveGroup>: Clone + Debug {
63 type PreprocessorParam: Debug;
64 type ProverParam: Debug;
65 type VerifierParam: Debug;
66 type FreshInstance: Debug;
67 type PublicInput: Debug;
68 type CommittedInstanceWithWitness: Debug;
69 type CommittedInstance: Clone + Debug;
70
71 fn prove(
72 pp: &Self::ProverParam,
73 running_instance: &Self::CommittedInstanceWithWitness,
74 transcript: &mut impl Transcript<C>,
75 rng: impl RngCore,
76 ) -> Result<(), Error>;
77
78 fn verify(
79 vp: &Self::VerifierParam,
80 running_instance: &Self::CommittedInstance,
81 transcript: &mut impl Transcript<C>,
82 rng: impl RngCore,
83 ) -> Result<(), Error>;
84}