Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
r1cs_ppzksnark.hpp
Go to the documentation of this file.
1 
47 #ifndef R1CS_PPZKSNARK_HPP_
48 #define R1CS_PPZKSNARK_HPP_
49 
50 #include <libff/algebra/curves/public_params.hpp>
55 #include <memory>
56 
57 namespace libsnark
58 {
59 
60 /******************************** Proving key ********************************/
61 
62 template<typename ppT> class r1cs_ppzksnark_proving_key;
63 
64 template<typename ppT>
65 std::ostream &operator<<(
66  std::ostream &out, const r1cs_ppzksnark_proving_key<ppT> &pk);
67 
68 template<typename ppT>
69 std::istream &operator>>(std::istream &in, r1cs_ppzksnark_proving_key<ppT> &pk);
70 
74 template<typename ppT> class r1cs_ppzksnark_proving_key
75 {
76 public:
80  libff::G1_vector<ppT> H_query;
81  libff::G1_vector<ppT> K_query;
82 
84 
87  const r1cs_ppzksnark_proving_key<ppT> &other) = default;
89  default;
91  default;
93  knowledge_commitment_vector<libff::G1<ppT>, libff::G1<ppT>> &&A_query,
94  knowledge_commitment_vector<libff::G2<ppT>, libff::G1<ppT>> &&B_query,
95  knowledge_commitment_vector<libff::G1<ppT>, libff::G1<ppT>> &&C_query,
96  libff::G1_vector<ppT> &&H_query,
97  libff::G1_vector<ppT> &&K_query,
99  : A_query(std::move(A_query))
100  , B_query(std::move(B_query))
101  , C_query(std::move(C_query))
102  , H_query(std::move(H_query))
103  , K_query(std::move(K_query))
104  , constraint_system(std::move(constraint_system)){};
105 
106  size_t G1_size() const
107  {
108  return 2 * (A_query.domain_size() + C_query.domain_size()) +
109  B_query.domain_size() + H_query.size() + K_query.size();
110  }
111 
112  size_t G2_size() const { return B_query.domain_size(); }
113 
114  size_t G1_sparse_size() const
115  {
116  return 2 * (A_query.size() + C_query.size()) + B_query.size() +
117  H_query.size() + K_query.size();
118  }
119 
120  size_t G2_sparse_size() const { return B_query.size(); }
121 
122  size_t size_in_bits() const
123  {
124  return A_query.size_in_bits() + B_query.size_in_bits() +
125  C_query.size_in_bits() + libff::size_in_bits(H_query) +
126  libff::size_in_bits(K_query);
127  }
128 
129  void print_size() const
130  {
131  libff::print_indent();
132  printf("* G1 elements in PK: %zu\n", this->G1_size());
133  libff::print_indent();
134  printf("* Non-zero G1 elements in PK: %zu\n", this->G1_sparse_size());
135  libff::print_indent();
136  printf("* G2 elements in PK: %zu\n", this->G2_size());
137  libff::print_indent();
138  printf("* Non-zero G2 elements in PK: %zu\n", this->G2_sparse_size());
139  libff::print_indent();
140  printf("* PK size in bits: %zu\n", this->size_in_bits());
141  }
142 
143  bool operator==(const r1cs_ppzksnark_proving_key<ppT> &other) const;
144  friend std::ostream &operator<<<ppT>(
145  std::ostream &out, const r1cs_ppzksnark_proving_key<ppT> &pk);
146  friend std::istream &operator>>
147  <ppT>(std::istream &in, r1cs_ppzksnark_proving_key<ppT> &pk);
148 };
149 
150 /******************************* Verification key ****************************/
151 
152 template<typename ppT> class r1cs_ppzksnark_verification_key;
153 
154 template<typename ppT>
155 std::ostream &operator<<(
156  std::ostream &out, const r1cs_ppzksnark_verification_key<ppT> &vk);
157 
158 template<typename ppT>
159 std::istream &operator>>(
160  std::istream &in, r1cs_ppzksnark_verification_key<ppT> &vk);
161 
165 template<typename ppT> class r1cs_ppzksnark_verification_key
166 {
167 public:
168  libff::G2<ppT> alphaA_g2;
169  libff::G1<ppT> alphaB_g1;
170  libff::G2<ppT> alphaC_g2;
171  libff::G2<ppT> gamma_g2;
172  libff::G1<ppT> gamma_beta_g1;
173  libff::G2<ppT> gamma_beta_g2;
174  libff::G2<ppT> rC_Z_g2;
175 
177 
180  const libff::G2<ppT> &alphaA_g2,
181  const libff::G1<ppT> &alphaB_g1,
182  const libff::G2<ppT> &alphaC_g2,
183  const libff::G2<ppT> &gamma_g2,
184  const libff::G1<ppT> &gamma_beta_g1,
185  const libff::G2<ppT> &gamma_beta_g2,
186  const libff::G2<ppT> &rC_Z_g2,
187  const accumulation_vector<libff::G1<ppT>> &eIC)
191  , gamma_g2(gamma_g2)
194  , rC_Z_g2(rC_Z_g2)
195  , encoded_IC_query(eIC){};
196 
197  size_t G1_size() const { return 2 + encoded_IC_query.size(); }
198 
199  size_t G2_size() const { return 5; }
200 
201  size_t size_in_bits() const
202  {
203  return (
204  2 * libff::G1<ppT>::size_in_bits() +
206  5 * libff::G2<ppT>::size_in_bits());
207  }
208 
209  void print_size() const
210  {
211  libff::print_indent();
212  printf("* G1 elements in VK: %zu\n", this->G1_size());
213  libff::print_indent();
214  printf("* G2 elements in VK: %zu\n", this->G2_size());
215  libff::print_indent();
216  printf("* VK size in bits: %zu\n", this->size_in_bits());
217  }
218 
219  bool operator==(const r1cs_ppzksnark_verification_key<ppT> &other) const;
220  friend std::ostream &operator<<<ppT>(
221  std::ostream &out, const r1cs_ppzksnark_verification_key<ppT> &vk);
222  friend std::istream &operator>>
223  <ppT>(std::istream &in, r1cs_ppzksnark_verification_key<ppT> &vk);
224 
226  const size_t input_size);
227 };
228 
229 /************************ Processed verification key *************************/
230 
231 template<typename ppT> class r1cs_ppzksnark_processed_verification_key;
232 
233 template<typename ppT>
234 std::ostream &operator<<(
235  std::ostream &out,
237 
238 template<typename ppT>
239 std::istream &operator>>(
240  std::istream &in, r1cs_ppzksnark_processed_verification_key<ppT> &pvk);
241 
249 template<typename ppT> class r1cs_ppzksnark_processed_verification_key
250 {
251 public:
252  libff::G2_precomp<ppT> pp_G2_one_precomp;
253  libff::G2_precomp<ppT> vk_alphaA_g2_precomp;
254  libff::G1_precomp<ppT> vk_alphaB_g1_precomp;
255  libff::G2_precomp<ppT> vk_alphaC_g2_precomp;
256  libff::G2_precomp<ppT> vk_rC_Z_g2_precomp;
257  libff::G2_precomp<ppT> vk_gamma_g2_precomp;
258  libff::G1_precomp<ppT> vk_gamma_beta_g1_precomp;
259  libff::G2_precomp<ppT> vk_gamma_beta_g2_precomp;
260 
262 
263  bool operator==(
264  const r1cs_ppzksnark_processed_verification_key &other) const;
265  friend std::ostream &operator<<<ppT>(
266  std::ostream &out,
268  friend std::istream &operator>><ppT>(
269  std::istream &in, r1cs_ppzksnark_processed_verification_key<ppT> &pvk);
270 };
271 
272 /********************************** Key pair *********************************/
273 
278 template<typename ppT> class r1cs_ppzksnark_keypair
279 {
280 public:
283 
284  r1cs_ppzksnark_keypair() = default;
285  r1cs_ppzksnark_keypair(const r1cs_ppzksnark_keypair<ppT> &other) = default;
289  : pk(std::move(pk)), vk(std::move(vk))
290  {
291  }
292 
294 };
295 
296 /*********************************** Proof ***********************************/
297 
298 template<typename ppT> class r1cs_ppzksnark_proof;
299 
300 template<typename ppT>
301 std::ostream &operator<<(
302  std::ostream &out, const r1cs_ppzksnark_proof<ppT> &proof);
303 
304 template<typename ppT>
305 std::istream &operator>>(std::istream &in, r1cs_ppzksnark_proof<ppT> &proof);
306 
314 template<typename ppT> class r1cs_ppzksnark_proof
315 {
316 public:
320  libff::G1<ppT> g_H;
321  libff::G1<ppT> g_K;
322 
324  {
325  // invalid proof with valid curve points
326  this->g_A.g = libff::G1<ppT>::one();
327  this->g_A.h = libff::G1<ppT>::one();
328  this->g_B.g = libff::G2<ppT>::one();
329  this->g_B.h = libff::G1<ppT>::one();
330  this->g_C.g = libff::G1<ppT>::one();
331  this->g_C.h = libff::G1<ppT>::one();
332  this->g_H = libff::G1<ppT>::one();
333  this->g_K = libff::G1<ppT>::one();
334  }
336  knowledge_commitment<libff::G1<ppT>, libff::G1<ppT>> &&g_A,
337  knowledge_commitment<libff::G2<ppT>, libff::G1<ppT>> &&g_B,
338  knowledge_commitment<libff::G1<ppT>, libff::G1<ppT>> &&g_C,
339  libff::G1<ppT> &&g_H,
340  libff::G1<ppT> &&g_K)
341  : g_A(std::move(g_A))
342  , g_B(std::move(g_B))
343  , g_C(std::move(g_C))
344  , g_H(std::move(g_H))
345  , g_K(std::move(g_K)){};
346 
347  size_t G1_size() const { return 7; }
348 
349  size_t G2_size() const { return 1; }
350 
351  size_t size_in_bits() const
352  {
353  return G1_size() * libff::G1<ppT>::size_in_bits() +
354  G2_size() * libff::G2<ppT>::size_in_bits();
355  }
356 
357  void print_size() const
358  {
359  libff::print_indent();
360  printf("* G1 elements in proof: %zu\n", this->G1_size());
361  libff::print_indent();
362  printf("* G2 elements in proof: %zu\n", this->G2_size());
363  libff::print_indent();
364  printf("* Proof size in bits: %zu\n", this->size_in_bits());
365  }
366 
367  bool is_well_formed() const
368  {
369  return (
370  g_A.g.is_well_formed() && g_A.h.is_well_formed() &&
371  g_B.g.is_well_formed() && g_B.h.is_well_formed() &&
372  g_C.g.is_well_formed() && g_C.h.is_well_formed() &&
373  g_H.is_well_formed() && g_K.is_well_formed());
374  }
375 
376  bool operator==(const r1cs_ppzksnark_proof<ppT> &other) const;
377  friend std::ostream &operator<<<ppT>(
378  std::ostream &out, const r1cs_ppzksnark_proof<ppT> &proof);
379  friend std::istream &operator>>
380  <ppT>(std::istream &in, r1cs_ppzksnark_proof<ppT> &proof);
381 };
382 
383 /***************************** Main algorithms *******************************/
384 
391 template<
392  typename ppT,
393  libff::multi_exp_base_form BaseForm = libff::multi_exp_base_form_normal>
394 r1cs_ppzksnark_keypair<ppT> r1cs_ppzksnark_generator(
395  const r1cs_ppzksnark_constraint_system<ppT> &cs);
396 
406 template<
407  typename ppT,
408  libff::multi_exp_method Method = libff::multi_exp_method_bos_coster,
409  libff::multi_exp_base_form BaseForm = libff::multi_exp_base_form_normal>
410 r1cs_ppzksnark_proof<ppT> r1cs_ppzksnark_prover(
411  const r1cs_ppzksnark_proving_key<ppT> &pk,
412  const r1cs_ppzksnark_primary_input<ppT> &primary_input,
413  const r1cs_ppzksnark_auxiliary_input<ppT> &auxiliary_input);
414 
415 /*
416  Below are four variants of verifier algorithm for the R1CS ppzkSNARK.
417 
418  These are the four cases that arise from the following two choices:
419 
420  (1) The verifier accepts a (non-processed) verification key or, instead, a
421  processed verification key. In the latter case, we call the algorithm an
422  "online verifier".
423 
424  (2) The verifier checks for "weak" input consistency or, instead, "strong"
425  input consistency. Strong input consistency requires that |primary_input| =
426  CS.num_inputs, whereas weak input consistency requires that |primary_input| <=
427  CS.num_inputs (and the primary input is implicitly padded with zeros up to
428  length CS.num_inputs).
429  */
430 
436 template<typename ppT>
438  const r1cs_ppzksnark_verification_key<ppT> &vk,
439  const r1cs_ppzksnark_primary_input<ppT> &primary_input,
440  const r1cs_ppzksnark_proof<ppT> &proof);
441 
447 template<typename ppT>
449  const r1cs_ppzksnark_verification_key<ppT> &vk,
450  const r1cs_ppzksnark_primary_input<ppT> &primary_input,
451  const r1cs_ppzksnark_proof<ppT> &proof);
452 
456 template<typename ppT>
457 r1cs_ppzksnark_processed_verification_key<ppT> r1cs_ppzksnark_verifier_process_vk(
458  const r1cs_ppzksnark_verification_key<ppT> &vk);
459 
465 template<typename ppT>
467  const r1cs_ppzksnark_processed_verification_key<ppT> &pvk,
468  const r1cs_ppzksnark_primary_input<ppT> &input,
469  const r1cs_ppzksnark_proof<ppT> &proof);
470 
476 template<typename ppT>
478  const r1cs_ppzksnark_processed_verification_key<ppT> &pvk,
479  const r1cs_ppzksnark_primary_input<ppT> &primary_input,
480  const r1cs_ppzksnark_proof<ppT> &proof);
481 
482 /****************************** Miscellaneous ********************************/
483 
492 template<typename ppT>
494  const r1cs_ppzksnark_verification_key<ppT> &vk,
495  const r1cs_ppzksnark_primary_input<ppT> &primary_input,
496  const r1cs_ppzksnark_proof<ppT> &proof);
497 
498 } // namespace libsnark
499 
501 
502 #endif // R1CS_PPZKSNARK_HPP_
libsnark::r1cs_ppzksnark_proving_key::size_in_bits
size_t size_in_bits() const
Definition: r1cs_ppzksnark.hpp:122
libsnark::knowledge_commitment::g
T1 g
Definition: knowledge_commitment.hpp:36
accumulation_vector.hpp
libsnark::r1cs_ppzksnark_online_verifier_strong_IC
bool r1cs_ppzksnark_online_verifier_strong_IC(const r1cs_ppzksnark_processed_verification_key< ppT > &pvk, const r1cs_ppzksnark_primary_input< ppT > &primary_input, const r1cs_ppzksnark_proof< ppT > &proof)
libsnark::r1cs_ppzksnark_affine_verifier_weak_IC
bool r1cs_ppzksnark_affine_verifier_weak_IC(const r1cs_ppzksnark_verification_key< ppT > &vk, const r1cs_ppzksnark_primary_input< ppT > &primary_input, const r1cs_ppzksnark_proof< ppT > &proof)
libsnark::r1cs_ppzksnark_proving_key::G1_size
size_t G1_size() const
Definition: r1cs_ppzksnark.hpp:106
libsnark::r1cs_ppzksnark_proving_key::constraint_system
r1cs_ppzksnark_constraint_system< ppT > constraint_system
Definition: r1cs_ppzksnark.hpp:83
libsnark
Definition: accumulation_vector.hpp:18
libsnark::r1cs_ppzksnark_proving_key::K_query
libff::G1_vector< ppT > K_query
Definition: r1cs_ppzksnark.hpp:81
libsnark::r1cs_ppzksnark_proof::r1cs_ppzksnark_proof
r1cs_ppzksnark_proof()
Definition: r1cs_ppzksnark.hpp:323
libsnark::operator<<
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
libsnark::r1cs_ppzksnark_keypair::vk
r1cs_ppzksnark_verification_key< ppT > vk
Definition: r1cs_ppzksnark.hpp:282
libsnark::r1cs_ppzksnark_proving_key::G1_sparse_size
size_t G1_sparse_size() const
Definition: r1cs_ppzksnark.hpp:114
libsnark::r1cs_ppzksnark_proving_key::H_query
libff::G1_vector< ppT > H_query
Definition: r1cs_ppzksnark.hpp:80
libsnark::r1cs_ppzksnark_verification_key::dummy_verification_key
static r1cs_ppzksnark_verification_key< ppT > dummy_verification_key(const size_t input_size)
libsnark::accumulation_vector
Definition: accumulation_vector.hpp:21
libsnark::r1cs_ppzksnark_proof::G1_size
size_t G1_size() const
Definition: r1cs_ppzksnark.hpp:347
libsnark::r1cs_ppzksnark_processed_verification_key::vk_rC_Z_g2_precomp
libff::G2_precomp< ppT > vk_rC_Z_g2_precomp
Definition: r1cs_ppzksnark.hpp:256
libsnark::r1cs_ppzksnark_proof::operator==
bool operator==(const r1cs_ppzksnark_proof< ppT > &other) const
libsnark::r1cs_ppzksnark_processed_verification_key
Definition: r1cs_ppzksnark.hpp:231
libsnark::r1cs_ppzksnark_proof::g_B
knowledge_commitment< libff::G2< ppT >, libff::G1< ppT > > g_B
Definition: r1cs_ppzksnark.hpp:318
libsnark::r1cs_ppzksnark_processed_verification_key::encoded_IC_query
accumulation_vector< libff::G1< ppT > > encoded_IC_query
Definition: r1cs_ppzksnark.hpp:261
libsnark::r1cs_ppzksnark_proving_key::A_query
knowledge_commitment_vector< libff::G1< ppT >, libff::G1< ppT > > A_query
Definition: r1cs_ppzksnark.hpp:77
libsnark::r1cs_ppzksnark_keypair::pk
r1cs_ppzksnark_proving_key< ppT > pk
Definition: r1cs_ppzksnark.hpp:281
libsnark::r1cs_ppzksnark_online_verifier_weak_IC
bool r1cs_ppzksnark_online_verifier_weak_IC(const r1cs_ppzksnark_processed_verification_key< ppT > &pvk, const r1cs_ppzksnark_primary_input< ppT > &input, const r1cs_ppzksnark_proof< ppT > &proof)
libsnark::knowledge_commitment
Definition: knowledge_commitment.hpp:34
libsnark::r1cs_ppzksnark_verification_key::encoded_IC_query
accumulation_vector< libff::G1< ppT > > encoded_IC_query
Definition: r1cs_ppzksnark.hpp:176
libsnark::r1cs_ppzksnark_processed_verification_key::vk_alphaB_g1_precomp
libff::G1_precomp< ppT > vk_alphaB_g1_precomp
Definition: r1cs_ppzksnark.hpp:254
libsnark::r1cs_ppzksnark_proof::g_C
knowledge_commitment< libff::G1< ppT >, libff::G1< ppT > > g_C
Definition: r1cs_ppzksnark.hpp:319
libsnark::r1cs_ppzksnark_verification_key::operator==
bool operator==(const r1cs_ppzksnark_verification_key< ppT > &other) const
libsnark::r1cs_ppzksnark_proving_key
Definition: r1cs_ppzksnark.hpp:62
libsnark::r1cs_ppzksnark_verification_key::gamma_g2
libff::G2< ppT > gamma_g2
Definition: r1cs_ppzksnark.hpp:171
libsnark::r1cs_ppzksnark_keypair::r1cs_ppzksnark_keypair
r1cs_ppzksnark_keypair(r1cs_ppzksnark_proving_key< ppT > &&pk, r1cs_ppzksnark_verification_key< ppT > &&vk)
Definition: r1cs_ppzksnark.hpp:286
libsnark::r1cs_ppzksnark_processed_verification_key::operator==
bool operator==(const r1cs_ppzksnark_processed_verification_key &other) const
libsnark::r1cs_ppzksnark_proving_key::operator==
bool operator==(const r1cs_ppzksnark_proving_key< ppT > &other) const
r1cs_ppzksnark_params.hpp
libsnark::r1cs_ppzksnark_proving_key::r1cs_ppzksnark_proving_key
r1cs_ppzksnark_proving_key()
Definition: r1cs_ppzksnark.hpp:85
libsnark::accumulation_vector::size_in_bits
size_t size_in_bits() const
libsnark::r1cs_ppzksnark_verifier_weak_IC
bool r1cs_ppzksnark_verifier_weak_IC(const r1cs_ppzksnark_verification_key< ppT > &vk, const r1cs_ppzksnark_primary_input< ppT > &primary_input, const r1cs_ppzksnark_proof< ppT > &proof)
libsnark::r1cs_ppzksnark_proof
Definition: r1cs_ppzksnark.hpp:298
libsnark::r1cs_ppzksnark_verification_key
Definition: r1cs_ppzksnark.hpp:152
libsnark::r1cs_ppzksnark_processed_verification_key::vk_alphaC_g2_precomp
libff::G2_precomp< ppT > vk_alphaC_g2_precomp
Definition: r1cs_ppzksnark.hpp:255
libsnark::r1cs_ppzksnark_proving_key::r1cs_ppzksnark_proving_key
r1cs_ppzksnark_proving_key(knowledge_commitment_vector< libff::G1< ppT >, libff::G1< ppT >> &&A_query, knowledge_commitment_vector< libff::G2< ppT >, libff::G1< ppT >> &&B_query, knowledge_commitment_vector< libff::G1< ppT >, libff::G1< ppT >> &&C_query, libff::G1_vector< ppT > &&H_query, libff::G1_vector< ppT > &&K_query, r1cs_ppzksnark_constraint_system< ppT > &&constraint_system)
Definition: r1cs_ppzksnark.hpp:92
libsnark::r1cs_ppzksnark_verification_key::alphaC_g2
libff::G2< ppT > alphaC_g2
Definition: r1cs_ppzksnark.hpp:170
libsnark::r1cs_ppzksnark_prover
r1cs_ppzksnark_proof< ppT > r1cs_ppzksnark_prover(const r1cs_ppzksnark_proving_key< ppT > &pk, const r1cs_ppzksnark_primary_input< ppT > &primary_input, const r1cs_ppzksnark_auxiliary_input< ppT > &auxiliary_input)
libsnark::r1cs_ppzksnark_verification_key::r1cs_ppzksnark_verification_key
r1cs_ppzksnark_verification_key()=default
libsnark::r1cs_ppzksnark_proving_key::B_query
knowledge_commitment_vector< libff::G2< ppT >, libff::G1< ppT > > B_query
Definition: r1cs_ppzksnark.hpp:78
libsnark::r1cs_ppzksnark_proof::size_in_bits
size_t size_in_bits() const
Definition: r1cs_ppzksnark.hpp:351
libsnark::r1cs_ppzksnark_processed_verification_key::vk_gamma_g2_precomp
libff::G2_precomp< ppT > vk_gamma_g2_precomp
Definition: r1cs_ppzksnark.hpp:257
libsnark::r1cs_ppzksnark_proof::g_K
libff::G1< ppT > g_K
Definition: r1cs_ppzksnark.hpp:321
knowledge_commitment.hpp
libsnark::r1cs_ppzksnark_verification_key::alphaB_g1
libff::G1< ppT > alphaB_g1
Definition: r1cs_ppzksnark.hpp:169
libsnark::r1cs_ppzksnark_proving_key::print_size
void print_size() const
Definition: r1cs_ppzksnark.hpp:129
libsnark::r1cs_ppzksnark_verification_key::gamma_beta_g1
libff::G1< ppT > gamma_beta_g1
Definition: r1cs_ppzksnark.hpp:172
libsnark::r1cs_ppzksnark_generator
r1cs_ppzksnark_keypair< ppT > r1cs_ppzksnark_generator(const r1cs_ppzksnark_constraint_system< ppT > &cs)
libsnark::accumulation_vector::size
size_t size() const
libsnark::r1cs_ppzksnark_proving_key::G2_sparse_size
size_t G2_sparse_size() const
Definition: r1cs_ppzksnark.hpp:120
libsnark::r1cs_ppzksnark_verification_key::r1cs_ppzksnark_verification_key
r1cs_ppzksnark_verification_key(const libff::G2< ppT > &alphaA_g2, const libff::G1< ppT > &alphaB_g1, const libff::G2< ppT > &alphaC_g2, const libff::G2< ppT > &gamma_g2, const libff::G1< ppT > &gamma_beta_g1, const libff::G2< ppT > &gamma_beta_g2, const libff::G2< ppT > &rC_Z_g2, const accumulation_vector< libff::G1< ppT >> &eIC)
Definition: r1cs_ppzksnark.hpp:179
libsnark::r1cs_ppzksnark_verification_key::gamma_beta_g2
libff::G2< ppT > gamma_beta_g2
Definition: r1cs_ppzksnark.hpp:173
libsnark::r1cs_ppzksnark_proving_key::C_query
knowledge_commitment_vector< libff::G1< ppT >, libff::G1< ppT > > C_query
Definition: r1cs_ppzksnark.hpp:79
libsnark::operator>>
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
libsnark::r1cs_ppzksnark_verification_key::G2_size
size_t G2_size() const
Definition: r1cs_ppzksnark.hpp:199
libsnark::r1cs_ppzksnark_keypair
Definition: r1cs_ppzksnark.hpp:278
libsnark::r1cs_ppzksnark_keypair::r1cs_ppzksnark_keypair
r1cs_ppzksnark_keypair()=default
libsnark::r1cs_ppzksnark_verifier_strong_IC
bool r1cs_ppzksnark_verifier_strong_IC(const r1cs_ppzksnark_verification_key< ppT > &vk, const r1cs_ppzksnark_primary_input< ppT > &primary_input, const r1cs_ppzksnark_proof< ppT > &proof)
libsnark::knowledge_commitment::h
T2 h
Definition: knowledge_commitment.hpp:37
libsnark::r1cs_ppzksnark_processed_verification_key::pp_G2_one_precomp
libff::G2_precomp< ppT > pp_G2_one_precomp
Definition: r1cs_ppzksnark.hpp:252
libsnark::r1cs_ppzksnark_verification_key::print_size
void print_size() const
Definition: r1cs_ppzksnark.hpp:209
libsnark::r1cs_ppzksnark_verification_key::size_in_bits
size_t size_in_bits() const
Definition: r1cs_ppzksnark.hpp:201
libsnark::r1cs_ppzksnark_processed_verification_key::vk_gamma_beta_g2_precomp
libff::G2_precomp< ppT > vk_gamma_beta_g2_precomp
Definition: r1cs_ppzksnark.hpp:259
libsnark::r1cs_ppzksnark_verification_key::alphaA_g2
libff::G2< ppT > alphaA_g2
Definition: r1cs_ppzksnark.hpp:168
libsnark::r1cs_ppzksnark_verification_key::rC_Z_g2
libff::G2< ppT > rC_Z_g2
Definition: r1cs_ppzksnark.hpp:174
libsnark::r1cs_ppzksnark_processed_verification_key::vk_alphaA_g2_precomp
libff::G2_precomp< ppT > vk_alphaA_g2_precomp
Definition: r1cs_ppzksnark.hpp:253
libsnark::r1cs_constraint_system< libff::Fr< ppT > >
libsnark::r1cs_ppzksnark_verification_key::G1_size
size_t G1_size() const
Definition: r1cs_ppzksnark.hpp:197
r1cs_ppzksnark.tcc
libsnark::r1cs_ppzksnark_proof::g_H
libff::G1< ppT > g_H
Definition: r1cs_ppzksnark.hpp:320
libsnark::r1cs_ppzksnark_proof::g_A
knowledge_commitment< libff::G1< ppT >, libff::G1< ppT > > g_A
Definition: r1cs_ppzksnark.hpp:317
libsnark::r1cs_ppzksnark_proof::is_well_formed
bool is_well_formed() const
Definition: r1cs_ppzksnark.hpp:367
libsnark::r1cs_ppzksnark_proving_key::operator=
r1cs_ppzksnark_proving_key< ppT > & operator=(const r1cs_ppzksnark_proving_key< ppT > &other)=default
libsnark::r1cs_ppzksnark_proof::r1cs_ppzksnark_proof
r1cs_ppzksnark_proof(knowledge_commitment< libff::G1< ppT >, libff::G1< ppT >> &&g_A, knowledge_commitment< libff::G2< ppT >, libff::G1< ppT >> &&g_B, knowledge_commitment< libff::G1< ppT >, libff::G1< ppT >> &&g_C, libff::G1< ppT > &&g_H, libff::G1< ppT > &&g_K)
Definition: r1cs_ppzksnark.hpp:335
libsnark::sparse_vector
Definition: sparse_vector.hpp:21
libsnark::r1cs_ppzksnark_proof::G2_size
size_t G2_size() const
Definition: r1cs_ppzksnark.hpp:349
libsnark::r1cs_ppzksnark_verifier_process_vk
r1cs_ppzksnark_processed_verification_key< ppT > r1cs_ppzksnark_verifier_process_vk(const r1cs_ppzksnark_verification_key< ppT > &vk)
libsnark::r1cs_ppzksnark_processed_verification_key::vk_gamma_beta_g1_precomp
libff::G1_precomp< ppT > vk_gamma_beta_g1_precomp
Definition: r1cs_ppzksnark.hpp:258
libsnark::r1cs_ppzksnark_proof::print_size
void print_size() const
Definition: r1cs_ppzksnark.hpp:357
libsnark::r1cs_ppzksnark_proving_key::G2_size
size_t G2_size() const
Definition: r1cs_ppzksnark.hpp:112
r1cs.hpp