Nova/src/traits/snark.rs
src/traits/snark.rsRaw
1//! This module defines a collection of traits that define the behavior of a zkSNARK for RelaxedR1CS
2use crate::{
3 errors::NovaError,
4 r1cs::{R1CSShape, RelaxedR1CSInstance, RelaxedR1CSWitness},
5 traits::Group,
6 CommitmentKey,
7};
8
9use serde::{Deserialize, Serialize};
10
11/// A trait that defines the behavior of a zkSNARK
12pub trait RelaxedR1CSSNARKTrait<G: Group>:
13 Sized + Send + Sync + Serialize + for<'de> Deserialize<'de>
14{
15 /// A type that represents the prover's key
16 type ProverKey: Send + Sync + Serialize + for<'de> Deserialize<'de>;
17
18 /// A type that represents the verifier's key
19 type VerifierKey: Send + Sync + Serialize + for<'de> Deserialize<'de>;
20
21 /// Produces the keys for the prover and the verifier
22 fn setup(
23 ck: &CommitmentKey<G>,
24 S: &R1CSShape<G>,
25 ) -> Result<(Self::ProverKey, Self::VerifierKey), NovaError>;
26
27 /// Produces a new SNARK for a relaxed R1CS
28 fn prove(
29 ck: &CommitmentKey<G>,
30 pk: &Self::ProverKey,
31 U: &RelaxedR1CSInstance<G>,
32 W: &RelaxedR1CSWitness<G>,
33 ) -> Result<Self, NovaError>;
34
35 /// Verifies a SNARK for a relaxed R1CS
36 fn verify(&self, vk: &Self::VerifierKey, U: &RelaxedR1CSInstance<G>) -> Result<(), NovaError>;
37}