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(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}