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(ck: &CommitmentKey<G>, S: &R1CSShape<G>) -> (Self::ProverKey, Self::VerifierKey);
23
24 /// Produces a new SNARK for a relaxed R1CS
25 fn prove(
26 ck: &CommitmentKey<G>,
27 pk: &Self::ProverKey,
28 U: &RelaxedR1CSInstance<G>,
29 W: &RelaxedR1CSWitness<G>,
30 ) -> Result<Self, NovaError>;
31
32 /// Verifies a SNARK for a relaxed R1CS
33 fn verify(&self, vk: &Self::VerifierKey, U: &RelaxedR1CSInstance<G>) -> Result<(), NovaError>;
34}