arnaucube
arnaucube/sonobePublic Self-hosted repository
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}