nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier > Class Template Reference

ppzkSNARK for R1CS More...

#include <r1cs_ppzksnark.hpp>

+ Collaboration diagram for nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >:

Public Types

typedef policy_type::auxiliary_input_type auxiliary_input_type
 
typedef policy_type::constraint_system_type constraint_system_type
 
typedef Generator generator_type
 
typedef policy_type::keypair_type keypair_type
 
typedef policy_type::primary_input_type primary_input_type
 
typedef policy_type::processed_verification_key_type processed_verification_key_type
 
typedef policy_type::proof_type proof_type
 
typedef Prover prover_type
 
typedef policy_type::proving_key_type proving_key_type
 
typedef policy_type::verification_key_type verification_key_type
 
typedef Verifier verifier_type
 

Static Public Member Functions

static keypair_type generate (const constraint_system_type &constraint_system)
 
static proof_type prove (const proving_key_type &pk, const primary_input_type &primary_input, const auxiliary_input_type &auxiliary_input)
 
static bool verify (const typename Verifier::processed_verification_key_type &pvk, const primary_input_type &primary_input, const proof_type &proof)
 
static bool verify (const typename Verifier::verification_key_type &vk, const primary_input_type &primary_input, const proof_type &proof)
 

Detailed Description

template<typename CurveType, typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
class nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >

ppzkSNARK for R1CS

Template Parameters
CurveType
Generator
Prover
VerifierThe implementation instantiates (a modification of) the protocol of [PGHR13], by following extending, and optimizing the approach described in [BCTV14].

Acronyms:

  • R1CS = "Rank-1 Constraint Systems"
  • ppzkSNARK = "PreProcessing Zero-Knowledge Succinct Non-interactive ARgument of Knowledge"

References: [BCTV14]: "Succinct Non-Interactive Zero Knowledge for a von Neumann Architecture", Eli Ben-Sasson, Alessandro Chiesa, Eran Tromer, Madars Virza, USENIX Security 2014, http://eprint.iacr.org/2013/879

[PGHR13]: "Pinocchio: Nearly practical verifiable computation", Bryan Parno, Craig Gentry, Jon Howell, Mariana Raykova, IEEE S&P 2013, https://eprint.iacr.org/2013/279

Member Typedef Documentation

◆ auxiliary_input_type

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
typedef policy_type::auxiliary_input_type nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::auxiliary_input_type

◆ constraint_system_type

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
typedef policy_type::constraint_system_type nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::constraint_system_type

◆ generator_type

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
typedef Generator nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::generator_type

◆ keypair_type

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
typedef policy_type::keypair_type nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::keypair_type

◆ primary_input_type

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
typedef policy_type::primary_input_type nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::primary_input_type

◆ processed_verification_key_type

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
typedef policy_type::processed_verification_key_type nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::processed_verification_key_type

◆ proof_type

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
typedef policy_type::proof_type nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::proof_type

◆ prover_type

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
typedef Prover nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::prover_type

◆ proving_key_type

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
typedef policy_type::proving_key_type nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::proving_key_type

◆ verification_key_type

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
typedef policy_type::verification_key_type nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::verification_key_type

◆ verifier_type

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
typedef Verifier nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::verifier_type

Member Function Documentation

◆ generate()

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
static keypair_type nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::generate ( const constraint_system_type constraint_system)
inlinestatic

◆ prove()

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
static proof_type nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::prove ( const proving_key_type pk,
const primary_input_type primary_input,
const auxiliary_input_type auxiliary_input 
)
inlinestatic

◆ verify() [1/2]

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
static bool nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::verify ( const typename Verifier::processed_verification_key_type &  pvk,
const primary_input_type primary_input,
const proof_type proof 
)
inlinestatic

◆ verify() [2/2]

template<typename CurveType , typename Generator = r1cs_ppzksnark_generator<CurveType>, typename Prover = r1cs_ppzksnark_prover<CurveType>, typename Verifier = r1cs_ppzksnark_verifier_strong_input_consistency<CurveType>>
static bool nil::crypto3::zk::snark::r1cs_ppzksnark< CurveType, Generator, Prover, Verifier >::verify ( const typename Verifier::verification_key_type &  vk,
const primary_input_type primary_input,
const proof_type proof 
)
inlinestatic

The documentation for this class was generated from the following file: