Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
bacs_ppzksnark.hpp
Go to the documentation of this file.
1 
35 #ifndef BACS_PPZKSNARK_HPP_
36 #define BACS_PPZKSNARK_HPP_
37 
41 
42 namespace libsnark
43 {
44 
45 /******************************** Proving key ********************************/
46 
47 template<typename ppT> class bacs_ppzksnark_proving_key;
48 
49 template<typename ppT>
50 std::ostream &operator<<(
51  std::ostream &out, const bacs_ppzksnark_proving_key<ppT> &pk);
52 
53 template<typename ppT>
54 std::istream &operator>>(std::istream &in, bacs_ppzksnark_proving_key<ppT> &pk);
55 
59 template<typename ppT> class bacs_ppzksnark_proving_key
60 {
61 public:
64 
67  default;
69  default;
74  {
75  }
79  : circuit(std::move(circuit)), r1cs_pk(std::move(r1cs_pk))
80  {
81  }
82 
84  const bacs_ppzksnark_proving_key<ppT> &other) = default;
85 
86  size_t G1_size() const { return r1cs_pk.G1_size(); }
87 
88  size_t G2_size() const { return r1cs_pk.G2_size(); }
89 
90  size_t G1_sparse_size() const { return r1cs_pk.G1_sparse_size(); }
91 
92  size_t G2_sparse_size() const { return r1cs_pk.G2_sparse_size(); }
93 
94  size_t size_in_bits() const { return r1cs_pk.size_in_bits(); }
95 
96  void print_size() const { r1cs_pk.print_size(); }
97 
98  bool operator==(const bacs_ppzksnark_proving_key<ppT> &other) const;
99  friend std::ostream &operator<<<ppT>(
100  std::ostream &out, const bacs_ppzksnark_proving_key<ppT> &pk);
101  friend std::istream &operator>>
102  <ppT>(std::istream &in, bacs_ppzksnark_proving_key<ppT> &pk);
103 };
104 
105 /******************************* Verification key ****************************/
106 
110 template<typename ppT>
112 
113 /************************ Processed verification key *************************/
114 
122 template<typename ppT>
125 
126 /********************************** Key pair *********************************/
127 
132 template<typename ppT> class bacs_ppzksnark_keypair
133 {
134 public:
137 
143  : pk(pk), vk(vk)
144  {
145  }
146 
150  : pk(std::move(pk)), vk(std::move(vk))
151  {
152  }
153 };
154 
155 /*********************************** Proof ***********************************/
156 
160 template<typename ppT> using bacs_ppzksnark_proof = r1cs_ppzksnark_proof<ppT>;
161 
162 /***************************** Main algorithms *******************************/
163 
170 template<typename ppT>
172  const bacs_ppzksnark_circuit<ppT> &circuit);
173 
183 template<typename ppT>
186  const bacs_ppzksnark_primary_input<ppT> &primary_input,
187  const bacs_ppzksnark_auxiliary_input<ppT> &auxiliary_input);
188 
189 /*
190  Below are four variants of verifier algorithm for the BACS ppzkSNARK.
191 
192  These are the four cases that arise from the following two choices:
193 
194  (1) The verifier accepts a (non-processed) verification key or, instead, a
195  processed verification key. In the latter case, we call the algorithm an
196  "online verifier".
197 
198  (2) The verifier checks for "weak" input consistency or, instead, "strong"
199  input consistency. Strong input consistency requires that |primary_input| =
200  C.num_inputs, whereas weak input consistency requires that |primary_input| <=
201  C.num_inputs (and the primary input is implicitly padded with zeros up to
202  length C.num_inputs).
203  */
204 
210 template<typename ppT>
213  const bacs_ppzksnark_primary_input<ppT> &primary_input,
214  const bacs_ppzksnark_proof<ppT> &proof);
215 
221 template<typename ppT>
224  const bacs_ppzksnark_primary_input<ppT> &primary_input,
225  const bacs_ppzksnark_proof<ppT> &proof);
226 
230 template<typename ppT>
233 
239 template<typename ppT>
242  const bacs_ppzksnark_primary_input<ppT> &primary_input,
243  const bacs_ppzksnark_proof<ppT> &proof);
244 
250 template<typename ppT>
253  const bacs_ppzksnark_primary_input<ppT> &primary_input,
254  const bacs_ppzksnark_proof<ppT> &proof);
255 
256 } // namespace libsnark
257 
259 
260 #endif // BACS_PPZKSNARK_HPP_
libsnark::bacs_ppzksnark_keypair::bacs_ppzksnark_keypair
bacs_ppzksnark_keypair()
Definition: bacs_ppzksnark.hpp:138
libsnark::bacs_ppzksnark_keypair
Definition: bacs_ppzksnark.hpp:132
libsnark::bacs_ppzksnark_proving_key::G2_size
size_t G2_size() const
Definition: bacs_ppzksnark.hpp:88
libsnark::bacs_ppzksnark_proving_key::G1_sparse_size
size_t G1_sparse_size() const
Definition: bacs_ppzksnark.hpp:90
libsnark::bacs_ppzksnark_proving_key::bacs_ppzksnark_proving_key
bacs_ppzksnark_proving_key()
Definition: bacs_ppzksnark.hpp:65
libsnark::bacs_ppzksnark_proving_key::G1_size
size_t G1_size() const
Definition: bacs_ppzksnark.hpp:86
libsnark::bacs_circuit
Definition: bacs.hpp:89
libsnark::bacs_ppzksnark_proving_key::G2_sparse_size
size_t G2_sparse_size() const
Definition: bacs_ppzksnark.hpp:92
libsnark
Definition: accumulation_vector.hpp:18
libsnark::operator<<
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
libsnark::bacs_ppzksnark_proving_key::operator=
bacs_ppzksnark_proving_key< ppT > & operator=(const bacs_ppzksnark_proving_key< ppT > &other)=default
libsnark::r1cs_ppzksnark_processed_verification_key
Definition: r1cs_ppzksnark.hpp:231
libsnark::bacs_ppzksnark_proving_key::bacs_ppzksnark_proving_key
bacs_ppzksnark_proving_key(const bacs_ppzksnark_circuit< ppT > &circuit, const r1cs_ppzksnark_proving_key< ppT > &r1cs_pk)
Definition: bacs_ppzksnark.hpp:70
libsnark::bacs_ppzksnark_proving_key::operator==
bool operator==(const bacs_ppzksnark_proving_key< ppT > &other) const
libsnark::bacs_ppzksnark_proving_key::circuit
bacs_ppzksnark_circuit< ppT > circuit
Definition: bacs_ppzksnark.hpp:62
libsnark::r1cs_ppzksnark_proving_key
Definition: r1cs_ppzksnark.hpp:62
libsnark::bacs_ppzksnark_proving_key::r1cs_pk
r1cs_ppzksnark_proving_key< ppT > r1cs_pk
Definition: bacs_ppzksnark.hpp:63
libsnark::r1cs_ppzksnark_proof
Definition: r1cs_ppzksnark.hpp:298
libsnark::bacs_ppzksnark_keypair::bacs_ppzksnark_keypair
bacs_ppzksnark_keypair(const bacs_ppzksnark_proving_key< ppT > &pk, const bacs_ppzksnark_verification_key< ppT > &vk)
Definition: bacs_ppzksnark.hpp:140
libsnark::r1cs_ppzksnark_verification_key
Definition: r1cs_ppzksnark.hpp:152
libsnark::bacs_ppzksnark_proving_key
Definition: bacs_ppzksnark.hpp:47
libsnark::bacs_ppzksnark_verifier_strong_IC
bool bacs_ppzksnark_verifier_strong_IC(const bacs_ppzksnark_verification_key< ppT > &vk, const bacs_ppzksnark_primary_input< ppT > &primary_input, const bacs_ppzksnark_proof< ppT > &proof)
r1cs_ppzksnark.hpp
libsnark::bacs_ppzksnark_online_verifier_weak_IC
bool bacs_ppzksnark_online_verifier_weak_IC(const bacs_ppzksnark_processed_verification_key< ppT > &pvk, const bacs_ppzksnark_primary_input< ppT > &primary_input, const bacs_ppzksnark_proof< ppT > &proof)
libsnark::bacs_ppzksnark_prover
bacs_ppzksnark_proof< ppT > bacs_ppzksnark_prover(const bacs_ppzksnark_proving_key< ppT > &pk, const bacs_ppzksnark_primary_input< ppT > &primary_input, const bacs_ppzksnark_auxiliary_input< ppT > &auxiliary_input)
libsnark::operator>>
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
bacs.hpp
libsnark::bacs_ppzksnark_keypair::pk
bacs_ppzksnark_proving_key< ppT > pk
Definition: bacs_ppzksnark.hpp:135
libsnark::bacs_ppzksnark_auxiliary_input
bacs_auxiliary_input< libff::Fr< ppT > > bacs_ppzksnark_auxiliary_input
Definition: bacs_ppzksnark_params.hpp:32
libsnark::bacs_ppzksnark_verifier_weak_IC
bool bacs_ppzksnark_verifier_weak_IC(const bacs_ppzksnark_verification_key< ppT > &vk, const bacs_ppzksnark_primary_input< ppT > &primary_input, const bacs_ppzksnark_proof< ppT > &proof)
libsnark::bacs_ppzksnark_keypair::bacs_ppzksnark_keypair
bacs_ppzksnark_keypair(bacs_ppzksnark_proving_key< ppT > &&pk, bacs_ppzksnark_verification_key< ppT > &&vk)
Definition: bacs_ppzksnark.hpp:147
libsnark::bacs_ppzksnark_online_verifier_strong_IC
bool bacs_ppzksnark_online_verifier_strong_IC(const bacs_ppzksnark_processed_verification_key< ppT > &pvk, const bacs_ppzksnark_primary_input< ppT > &primary_input, const bacs_ppzksnark_proof< ppT > &proof)
bacs_ppzksnark.tcc
libsnark::bacs_ppzksnark_proving_key::print_size
void print_size() const
Definition: bacs_ppzksnark.hpp:96
libsnark::bacs_ppzksnark_verifier_process_vk
bacs_ppzksnark_processed_verification_key< ppT > bacs_ppzksnark_verifier_process_vk(const bacs_ppzksnark_verification_key< ppT > &vk)
bacs_ppzksnark_params.hpp
libsnark::bacs_ppzksnark_generator
bacs_ppzksnark_keypair< ppT > bacs_ppzksnark_generator(const bacs_ppzksnark_circuit< ppT > &circuit)
libsnark::bacs_ppzksnark_keypair::vk
bacs_ppzksnark_verification_key< ppT > vk
Definition: bacs_ppzksnark.hpp:136
libsnark::bacs_ppzksnark_primary_input
bacs_primary_input< libff::Fr< ppT > > bacs_ppzksnark_primary_input
Definition: bacs_ppzksnark_params.hpp:29
libsnark::bacs_ppzksnark_proving_key::size_in_bits
size_t size_in_bits() const
Definition: bacs_ppzksnark.hpp:94
libsnark::bacs_ppzksnark_proving_key::bacs_ppzksnark_proving_key
bacs_ppzksnark_proving_key(bacs_ppzksnark_circuit< ppT > &&circuit, r1cs_ppzksnark_proving_key< ppT > &&r1cs_pk)
Definition: bacs_ppzksnark.hpp:76