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