Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
r1cs_gg_ppzksnark.hpp
Go to the documentation of this file.
1 
46 #ifndef R1CS_GG_PPZKSNARK_HPP_
47 #define R1CS_GG_PPZKSNARK_HPP_
48 
49 #include <libff/algebra/curves/public_params.hpp>
54 #include <memory>
55 
56 namespace libsnark
57 {
58 
59 /******************************** Proving key ********************************/
60 
61 template<typename ppT> class r1cs_gg_ppzksnark_proving_key;
62 
63 template<typename ppT>
64 std::ostream &operator<<(
65  std::ostream &out, const r1cs_gg_ppzksnark_proving_key<ppT> &pk);
66 
67 template<typename ppT>
68 std::istream &operator>>(
69  std::istream &in, r1cs_gg_ppzksnark_proving_key<ppT> &pk);
70 
74 template<typename ppT> class r1cs_gg_ppzksnark_proving_key
75 {
76 public:
77  libff::G1<ppT> alpha_g1;
78  libff::G1<ppT> beta_g1;
79  libff::G2<ppT> beta_g2;
80  libff::G1<ppT> delta_g1;
81  libff::G2<ppT> delta_g2;
82 
83  libff::G1_vector<ppT>
84  A_query; // this could be a sparse vector if we had multiexp for those
86  libff::G1_vector<ppT> H_query;
87  libff::G1_vector<ppT> L_query;
88 
90 
93  const r1cs_gg_ppzksnark_proving_key<ppT> &other) = default;
95  const r1cs_gg_ppzksnark_proving_key<ppT> &other) = default;
97  default;
99  libff::G1<ppT> &&alpha_g1,
100  libff::G1<ppT> &&beta_g1,
101  libff::G2<ppT> &&beta_g2,
102  libff::G1<ppT> &&delta_g1,
103  libff::G2<ppT> &&delta_g2,
104  libff::G1_vector<ppT> &&A_query,
105  knowledge_commitment_vector<libff::G2<ppT>, libff::G1<ppT>> &&B_query,
106  libff::G1_vector<ppT> &&H_query,
107  libff::G1_vector<ppT> &&L_query,
109  : alpha_g1(std::move(alpha_g1))
110  , beta_g1(std::move(beta_g1))
111  , beta_g2(std::move(beta_g2))
112  , delta_g1(std::move(delta_g1))
113  , delta_g2(std::move(delta_g2))
114  , A_query(std::move(A_query))
115  , B_query(std::move(B_query))
116  , H_query(std::move(H_query))
117  , L_query(std::move(L_query))
118  , constraint_system(std::move(constraint_system)){};
119 
120  size_t G1_size() const
121  {
122  // 1 (alpha_g1) + 1 (beta_g1) + 1 (delta_g1) + A_query + B_query +
123  // H_query + L_query
124  return 1 + 1 + 1 + A_query.size() + B_query.domain_size() +
125  H_query.size() + L_query.size();
126  }
127 
128  size_t G2_size() const
129  {
130  // 1 (beta_g2) + 1 (delta_g2) + B_query
131  return 1 + 1 + B_query.domain_size();
132  }
133 
134  size_t G1_sparse_size() const
135  {
136  return 1 + A_query.size() + B_query.size() + H_query.size() +
137  L_query.size();
138  }
139 
140  size_t G2_sparse_size() const { return 1 + B_query.size(); }
141 
142  size_t size_in_bits() const
143  {
144  return (
145  libff::size_in_bits(A_query) + B_query.size_in_bits() +
146  libff::size_in_bits(H_query) + libff::size_in_bits(L_query) +
147  1 * libff::G1<ppT>::size_in_bits() +
148  1 * libff::G2<ppT>::size_in_bits());
149  }
150 
151  void print_size() const
152  {
153  libff::print_indent();
154  printf("* G1 elements in PK: %zu\n", this->G1_size());
155  libff::print_indent();
156  printf("* Non-zero G1 elements in PK: %zu\n", this->G1_sparse_size());
157  libff::print_indent();
158  printf("* G2 elements in PK: %zu\n", this->G2_size());
159  libff::print_indent();
160  printf("* Non-zero G2 elements in PK: %zu\n", this->G2_sparse_size());
161  libff::print_indent();
162  printf("* PK size in bits: %zu\n", this->size_in_bits());
163  }
164 
165  bool operator==(const r1cs_gg_ppzksnark_proving_key<ppT> &other) const;
166  friend std::ostream &operator<<<ppT>(
167  std::ostream &out, const r1cs_gg_ppzksnark_proving_key<ppT> &pk);
168  friend std::istream &operator>>
169  <ppT>(std::istream &in, r1cs_gg_ppzksnark_proving_key<ppT> &pk);
170 };
171 
172 /******************************* Verification key ****************************/
173 
174 template<typename ppT> class r1cs_gg_ppzksnark_verification_key;
175 
176 template<typename ppT>
177 std::ostream &operator<<(
178  std::ostream &out, const r1cs_gg_ppzksnark_verification_key<ppT> &vk);
179 
180 template<typename ppT>
181 std::istream &operator>>(
182  std::istream &in, r1cs_gg_ppzksnark_verification_key<ppT> &vk);
183 
187 template<typename ppT> class r1cs_gg_ppzksnark_verification_key
188 {
189 public:
190  libff::G1<ppT> alpha_g1;
191  libff::G2<ppT> beta_g2;
192  libff::G2<ppT> delta_g2;
193 
195 
198  const libff::G1<ppT> &alpha_g1,
199  const libff::G2<ppT> &beta_g2,
200  const libff::G2<ppT> &delta_g2,
201  const accumulation_vector<libff::G1<ppT>> &ABC_g1)
202  : alpha_g1(alpha_g1)
203  , beta_g2(beta_g2)
204  , delta_g2(delta_g2)
205  , ABC_g1(ABC_g1){};
206 
207  size_t G1_size() const { return ABC_g1.size() + 1; }
208 
209  size_t G2_size() const { return 2; }
210 
211  size_t size_in_bits() const
212  {
213 
214  return (
215  ABC_g1.size_in_bits() + 2 * libff::G2<ppT>::size_in_bits() +
216  libff::G1<ppT>::size_in_bits());
217  }
218 
219  void print_size() const
220  {
221  libff::print_indent();
222  printf("* G1 elements in VK: %zu\n", this->G1_size());
223  libff::print_indent();
224  printf("* G2 elements in VK: %zu\n", this->G2_size());
225  libff::print_indent();
226  printf("* VK size in bits: %zu\n", this->size_in_bits());
227  }
228 
229  bool operator==(const r1cs_gg_ppzksnark_verification_key<ppT> &other) const;
230  friend std::ostream &operator<<<ppT>(
231  std::ostream &out, const r1cs_gg_ppzksnark_verification_key<ppT> &vk);
232  friend std::istream &operator>>
233  <ppT>(std::istream &in, r1cs_gg_ppzksnark_verification_key<ppT> &vk);
234 
236  const size_t input_size);
237 };
238 
239 /************************ Processed verification key *************************/
240 
241 template<typename ppT> class r1cs_gg_ppzksnark_processed_verification_key;
242 
243 template<typename ppT>
244 std::ostream &operator<<(
245  std::ostream &out,
247 
248 template<typename ppT>
249 std::istream &operator>>(
251 
259 template<typename ppT> class r1cs_gg_ppzksnark_processed_verification_key
260 {
261 public:
262  libff::G1_precomp<ppT> vk_alpha_g1_precomp;
263  libff::G2_precomp<ppT> vk_beta_g2_precomp;
264  libff::G2_precomp<ppT> vk_generator_g2_precomp;
265  libff::G2_precomp<ppT> vk_delta_g2_precomp;
266 
268 
269  bool operator==(
271  friend std::ostream &operator<<<ppT>(
272  std::ostream &out,
274  friend std::istream &operator>><ppT>(
275  std::istream &in,
277 };
278 
279 /********************************** Key pair *********************************/
280 
285 template<typename ppT> class r1cs_gg_ppzksnark_keypair
286 {
287 public:
290 
291  r1cs_gg_ppzksnark_keypair() = default;
293  default;
297  : pk(std::move(pk)), vk(std::move(vk))
298  {
299  }
300 
302 };
303 
304 /*********************************** Proof ***********************************/
305 
306 template<typename ppT> class r1cs_gg_ppzksnark_proof;
307 
308 template<typename ppT>
309 std::ostream &operator<<(
310  std::ostream &out, const r1cs_gg_ppzksnark_proof<ppT> &proof);
311 
312 template<typename ppT>
313 std::istream &operator>>(std::istream &in, r1cs_gg_ppzksnark_proof<ppT> &proof);
314 
322 template<typename ppT> class r1cs_gg_ppzksnark_proof
323 {
324 public:
325  libff::G1<ppT> g_A;
326  libff::G2<ppT> g_B;
327  libff::G1<ppT> g_C;
328 
330  {
331  // invalid proof with valid curve points
332  this->g_A = libff::G1<ppT>::one();
333  this->g_B = libff::G2<ppT>::one();
334  this->g_C = libff::G1<ppT>::one();
335  }
337  libff::G1<ppT> &&g_A, libff::G2<ppT> &&g_B, libff::G1<ppT> &&g_C)
338  : g_A(std::move(g_A)), g_B(std::move(g_B)), g_C(std::move(g_C)){};
339 
340  size_t G1_size() const { return 2; }
341 
342  size_t G2_size() const { return 1; }
343 
344  size_t size_in_bits() const
345  {
346  return G1_size() * libff::G1<ppT>::size_in_bits() +
347  G2_size() * libff::G2<ppT>::size_in_bits();
348  }
349 
350  void print_size() const
351  {
352  libff::print_indent();
353  printf("* G1 elements in proof: %zu\n", this->G1_size());
354  libff::print_indent();
355  printf("* G2 elements in proof: %zu\n", this->G2_size());
356  libff::print_indent();
357  printf("* Proof size in bits: %zu\n", this->size_in_bits());
358  }
359 
360  bool is_well_formed() const
361  {
362  return (
363  g_A.is_well_formed() && g_B.is_well_formed() &&
364  g_C.is_well_formed());
365  }
366 
367  bool operator==(const r1cs_gg_ppzksnark_proof<ppT> &other) const;
368  friend std::ostream &operator<<<ppT>(
369  std::ostream &out, const r1cs_gg_ppzksnark_proof<ppT> &proof);
370  friend std::istream &operator>>
371  <ppT>(std::istream &in, r1cs_gg_ppzksnark_proof<ppT> &proof);
372 };
373 
374 /***************************** Main algorithms *******************************/
375 
383 template<
384  typename ppT,
385  libff::multi_exp_base_form BaseForm = libff::multi_exp_base_form_special>
386 r1cs_gg_ppzksnark_keypair<ppT> r1cs_gg_ppzksnark_generator_from_secrets(
387  const r1cs_gg_ppzksnark_constraint_system<ppT> &cs,
388  const libff::Fr<ppT> &t,
389  const libff::Fr<ppT> &alpha,
390  const libff::Fr<ppT> &beta,
391  const libff::Fr<ppT> &delta,
392  const libff::G1<ppT> &g1_generator,
393  const libff::G2<ppT> &g2_generator,
394  bool force_pow_2_domain = false);
395 
402 template<
403  typename ppT,
404  libff::multi_exp_base_form BaseForm = libff::multi_exp_base_form_special>
405 r1cs_gg_ppzksnark_keypair<ppT> r1cs_gg_ppzksnark_generator(
406  const r1cs_gg_ppzksnark_constraint_system<ppT> &cs,
407  bool force_pow_2_domain = false);
408 
418 template<
419  typename ppT,
420  libff::multi_exp_method Method = libff::multi_exp_method_BDLO12_signed,
421  libff::multi_exp_base_form BaseForm = libff::multi_exp_base_form_special>
422 r1cs_gg_ppzksnark_proof<ppT> r1cs_gg_ppzksnark_prover(
423  const r1cs_gg_ppzksnark_proving_key<ppT> &pk,
424  const r1cs_gg_ppzksnark_primary_input<ppT> &primary_input,
425  const r1cs_gg_ppzksnark_auxiliary_input<ppT> &auxiliary_input,
426  bool force_pow_2_domain = false);
427 
428 /*
429  Below are four variants of verifier algorithm for the R1CS GG-ppzkSNARK.
430 
431  These are the four cases that arise from the following two choices:
432 
433  (1) The verifier accepts a (non-processed) verification key or, instead, a
434  processed verification key. In the latter case, we call the algorithm an
435  "online verifier".
436 
437  (2) The verifier checks for "weak" input consistency or, instead, "strong"
438  input consistency. Strong input consistency requires that |primary_input| =
439  CS.num_inputs, whereas weak input consistency requires that |primary_input| <=
440  CS.num_inputs (and the primary input is implicitly padded with zeros up to
441  length CS.num_inputs).
442 */
443 
449 template<typename ppT>
451  const r1cs_gg_ppzksnark_verification_key<ppT> &vk,
452  const r1cs_gg_ppzksnark_primary_input<ppT> &primary_input,
453  const r1cs_gg_ppzksnark_proof<ppT> &proof);
454 
460 template<typename ppT>
462  const r1cs_gg_ppzksnark_verification_key<ppT> &vk,
463  const r1cs_gg_ppzksnark_primary_input<ppT> &primary_input,
464  const r1cs_gg_ppzksnark_proof<ppT> &proof);
465 
469 template<typename ppT>
470 r1cs_gg_ppzksnark_processed_verification_key<ppT>
472  const r1cs_gg_ppzksnark_verification_key<ppT> &vk);
473 
479 template<typename ppT>
481  const r1cs_gg_ppzksnark_processed_verification_key<ppT> &pvk,
482  const r1cs_gg_ppzksnark_primary_input<ppT> &input,
483  const r1cs_gg_ppzksnark_proof<ppT> &proof);
484 
490 template<typename ppT>
492  const r1cs_gg_ppzksnark_processed_verification_key<ppT> &pvk,
493  const r1cs_gg_ppzksnark_primary_input<ppT> &primary_input,
494  const r1cs_gg_ppzksnark_proof<ppT> &proof);
495 
496 /****************************** Miscellaneous ********************************/
497 
507 template<typename ppT>
509  const r1cs_gg_ppzksnark_verification_key<ppT> &vk,
510  const r1cs_gg_ppzksnark_primary_input<ppT> &primary_input,
511  const r1cs_gg_ppzksnark_proof<ppT> &proof);
512 
513 } // namespace libsnark
514 
516 
517 #endif // R1CS_GG_PPZKSNARK_HPP_
libsnark::r1cs_gg_ppzksnark_verification_key::delta_g2
libff::G2< ppT > delta_g2
Definition: r1cs_gg_ppzksnark.hpp:192
libsnark::r1cs_gg_ppzksnark_verification_key::beta_g2
libff::G2< ppT > beta_g2
Definition: r1cs_gg_ppzksnark.hpp:191
libsnark::r1cs_gg_ppzksnark_processed_verification_key::vk_generator_g2_precomp
libff::G2_precomp< ppT > vk_generator_g2_precomp
Definition: r1cs_gg_ppzksnark.hpp:264
accumulation_vector.hpp
libsnark::r1cs_gg_ppzksnark_proof::G2_size
size_t G2_size() const
Definition: r1cs_gg_ppzksnark.hpp:342
libsnark::r1cs_gg_ppzksnark_proof::print_size
void print_size() const
Definition: r1cs_gg_ppzksnark.hpp:350
libsnark::r1cs_gg_ppzksnark_verifier_process_vk
r1cs_gg_ppzksnark_processed_verification_key< ppT > r1cs_gg_ppzksnark_verifier_process_vk(const r1cs_gg_ppzksnark_verification_key< ppT > &vk)
libsnark
Definition: accumulation_vector.hpp:18
libsnark::r1cs_gg_ppzksnark_keypair::r1cs_gg_ppzksnark_keypair
r1cs_gg_ppzksnark_keypair()=default
libsnark::r1cs_gg_ppzksnark_proving_key::G1_size
size_t G1_size() const
Definition: r1cs_gg_ppzksnark.hpp:120
libsnark::operator<<
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
libsnark::r1cs_gg_ppzksnark_proving_key::beta_g2
libff::G2< ppT > beta_g2
Definition: r1cs_gg_ppzksnark.hpp:79
libsnark::r1cs_gg_ppzksnark_processed_verification_key::operator==
bool operator==(const r1cs_gg_ppzksnark_processed_verification_key &other) const
libsnark::r1cs_gg_ppzksnark_proving_key::G1_sparse_size
size_t G1_sparse_size() const
Definition: r1cs_gg_ppzksnark.hpp:134
libsnark::accumulation_vector
Definition: accumulation_vector.hpp:21
libsnark::r1cs_gg_ppzksnark_proving_key::L_query
libff::G1_vector< ppT > L_query
Definition: r1cs_gg_ppzksnark.hpp:87
libsnark::r1cs_gg_ppzksnark_processed_verification_key::vk_beta_g2_precomp
libff::G2_precomp< ppT > vk_beta_g2_precomp
Definition: r1cs_gg_ppzksnark.hpp:263
libsnark::r1cs_gg_ppzksnark_generator
r1cs_gg_ppzksnark_keypair< ppT > r1cs_gg_ppzksnark_generator(const r1cs_gg_ppzksnark_constraint_system< ppT > &cs, bool force_pow_2_domain=false)
libsnark::r1cs_gg_ppzksnark_proving_key::operator=
r1cs_gg_ppzksnark_proving_key< ppT > & operator=(const r1cs_gg_ppzksnark_proving_key< ppT > &other)=default
libsnark::r1cs_gg_ppzksnark_verifier_weak_IC
bool r1cs_gg_ppzksnark_verifier_weak_IC(const r1cs_gg_ppzksnark_verification_key< ppT > &vk, const r1cs_gg_ppzksnark_primary_input< ppT > &primary_input, const r1cs_gg_ppzksnark_proof< ppT > &proof)
libsnark::r1cs_gg_ppzksnark_proof::r1cs_gg_ppzksnark_proof
r1cs_gg_ppzksnark_proof(libff::G1< ppT > &&g_A, libff::G2< ppT > &&g_B, libff::G1< ppT > &&g_C)
Definition: r1cs_gg_ppzksnark.hpp:336
libsnark::r1cs_gg_ppzksnark_proof::is_well_formed
bool is_well_formed() const
Definition: r1cs_gg_ppzksnark.hpp:360
libsnark::r1cs_gg_ppzksnark_keypair::r1cs_gg_ppzksnark_keypair
r1cs_gg_ppzksnark_keypair(r1cs_gg_ppzksnark_proving_key< ppT > &&pk, r1cs_gg_ppzksnark_verification_key< ppT > &&vk)
Definition: r1cs_gg_ppzksnark.hpp:294
libsnark::r1cs_gg_ppzksnark_verification_key::r1cs_gg_ppzksnark_verification_key
r1cs_gg_ppzksnark_verification_key(const libff::G1< ppT > &alpha_g1, const libff::G2< ppT > &beta_g2, const libff::G2< ppT > &delta_g2, const accumulation_vector< libff::G1< ppT >> &ABC_g1)
Definition: r1cs_gg_ppzksnark.hpp:197
libsnark::r1cs_gg_ppzksnark_processed_verification_key::ABC_g1
accumulation_vector< libff::G1< ppT > > ABC_g1
Definition: r1cs_gg_ppzksnark.hpp:267
libsnark::r1cs_gg_ppzksnark_proof::g_C
libff::G1< ppT > g_C
Definition: r1cs_gg_ppzksnark.hpp:327
libsnark::accumulation_vector::size_in_bits
size_t size_in_bits() const
libsnark::r1cs_gg_ppzksnark_proof::size_in_bits
size_t size_in_bits() const
Definition: r1cs_gg_ppzksnark.hpp:344
libsnark::r1cs_gg_ppzksnark_proving_key
Definition: r1cs_gg_ppzksnark.hpp:61
libsnark::r1cs_gg_ppzksnark_verification_key::r1cs_gg_ppzksnark_verification_key
r1cs_gg_ppzksnark_verification_key()=default
libsnark::r1cs_gg_ppzksnark_proving_key::delta_g1
libff::G1< ppT > delta_g1
Definition: r1cs_gg_ppzksnark.hpp:80
r1cs_gg_ppzksnark.tcc
libsnark::r1cs_gg_ppzksnark_proving_key::print_size
void print_size() const
Definition: r1cs_gg_ppzksnark.hpp:151
libsnark::r1cs_gg_ppzksnark_verification_key::ABC_g1
accumulation_vector< libff::G1< ppT > > ABC_g1
Definition: r1cs_gg_ppzksnark.hpp:194
knowledge_commitment.hpp
libsnark::r1cs_gg_ppzksnark_proving_key::size_in_bits
size_t size_in_bits() const
Definition: r1cs_gg_ppzksnark.hpp:142
libsnark::r1cs_gg_ppzksnark_keypair::pk
r1cs_gg_ppzksnark_proving_key< ppT > pk
Definition: r1cs_gg_ppzksnark.hpp:288
libsnark::r1cs_gg_ppzksnark_proof::operator==
bool operator==(const r1cs_gg_ppzksnark_proof< ppT > &other) const
libsnark::r1cs_gg_ppzksnark_proof::G1_size
size_t G1_size() const
Definition: r1cs_gg_ppzksnark.hpp:340
libsnark::r1cs_gg_ppzksnark_verifier_strong_IC
bool r1cs_gg_ppzksnark_verifier_strong_IC(const r1cs_gg_ppzksnark_verification_key< ppT > &vk, const r1cs_gg_ppzksnark_primary_input< ppT > &primary_input, const r1cs_gg_ppzksnark_proof< ppT > &proof)
libsnark::accumulation_vector::size
size_t size() const
libsnark::r1cs_gg_ppzksnark_online_verifier_strong_IC
bool r1cs_gg_ppzksnark_online_verifier_strong_IC(const r1cs_gg_ppzksnark_processed_verification_key< ppT > &pvk, const r1cs_gg_ppzksnark_primary_input< ppT > &primary_input, const r1cs_gg_ppzksnark_proof< ppT > &proof)
libsnark::r1cs_gg_ppzksnark_affine_verifier_weak_IC
bool r1cs_gg_ppzksnark_affine_verifier_weak_IC(const r1cs_gg_ppzksnark_verification_key< ppT > &vk, const r1cs_gg_ppzksnark_primary_input< ppT > &primary_input, const r1cs_gg_ppzksnark_proof< ppT > &proof)
libsnark::r1cs_gg_ppzksnark_keypair
Definition: r1cs_gg_ppzksnark.hpp:285
libsnark::r1cs_gg_ppzksnark_proof::g_A
libff::G1< ppT > g_A
Definition: r1cs_gg_ppzksnark.hpp:325
libsnark::r1cs_gg_ppzksnark_proving_key::constraint_system
r1cs_gg_ppzksnark_constraint_system< ppT > constraint_system
Definition: r1cs_gg_ppzksnark.hpp:89
libsnark::operator>>
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
libsnark::r1cs_gg_ppzksnark_proving_key::r1cs_gg_ppzksnark_proving_key
r1cs_gg_ppzksnark_proving_key()
Definition: r1cs_gg_ppzksnark.hpp:91
libsnark::r1cs_gg_ppzksnark_verification_key::operator==
bool operator==(const r1cs_gg_ppzksnark_verification_key< ppT > &other) const
libsnark::r1cs_gg_ppzksnark_proving_key::operator==
bool operator==(const r1cs_gg_ppzksnark_proving_key< ppT > &other) const
libsnark::r1cs_gg_ppzksnark_verification_key
Definition: r1cs_gg_ppzksnark.hpp:174
libsnark::r1cs_gg_ppzksnark_verification_key::alpha_g1
libff::G1< ppT > alpha_g1
Definition: r1cs_gg_ppzksnark.hpp:190
libsnark::r1cs_gg_ppzksnark_prover
r1cs_gg_ppzksnark_proof< ppT > r1cs_gg_ppzksnark_prover(const r1cs_gg_ppzksnark_proving_key< ppT > &pk, const r1cs_gg_ppzksnark_primary_input< ppT > &primary_input, const r1cs_gg_ppzksnark_auxiliary_input< ppT > &auxiliary_input, bool force_pow_2_domain=false)
libsnark::r1cs_gg_ppzksnark_keypair::vk
r1cs_gg_ppzksnark_verification_key< ppT > vk
Definition: r1cs_gg_ppzksnark.hpp:289
libsnark::r1cs_gg_ppzksnark_processed_verification_key
Definition: r1cs_gg_ppzksnark.hpp:241
libsnark::r1cs_gg_ppzksnark_verification_key::dummy_verification_key
static r1cs_gg_ppzksnark_verification_key< ppT > dummy_verification_key(const size_t input_size)
libsnark::r1cs_gg_ppzksnark_verification_key::G2_size
size_t G2_size() const
Definition: r1cs_gg_ppzksnark.hpp:209
libsnark::r1cs_constraint_system< libff::Fr< ppT > >
libsnark::r1cs_gg_ppzksnark_proof::r1cs_gg_ppzksnark_proof
r1cs_gg_ppzksnark_proof()
Definition: r1cs_gg_ppzksnark.hpp:329
libsnark::r1cs_gg_ppzksnark_proving_key::alpha_g1
libff::G1< ppT > alpha_g1
Definition: r1cs_gg_ppzksnark.hpp:77
libsnark::r1cs_gg_ppzksnark_proving_key::B_query
knowledge_commitment_vector< libff::G2< ppT >, libff::G1< ppT > > B_query
Definition: r1cs_gg_ppzksnark.hpp:85
libsnark::r1cs_gg_ppzksnark_processed_verification_key::vk_delta_g2_precomp
libff::G2_precomp< ppT > vk_delta_g2_precomp
Definition: r1cs_gg_ppzksnark.hpp:265
libsnark::r1cs_gg_ppzksnark_proof::g_B
libff::G2< ppT > g_B
Definition: r1cs_gg_ppzksnark.hpp:326
libsnark::r1cs_gg_ppzksnark_proof
Definition: r1cs_gg_ppzksnark.hpp:306
r1cs_gg_ppzksnark_params.hpp
libsnark::r1cs_gg_ppzksnark_proving_key::delta_g2
libff::G2< ppT > delta_g2
Definition: r1cs_gg_ppzksnark.hpp:81
libsnark::r1cs_gg_ppzksnark_verification_key::size_in_bits
size_t size_in_bits() const
Definition: r1cs_gg_ppzksnark.hpp:211
libsnark::r1cs_gg_ppzksnark_proving_key::G2_size
size_t G2_size() const
Definition: r1cs_gg_ppzksnark.hpp:128
libsnark::r1cs_gg_ppzksnark_verification_key::G1_size
size_t G1_size() const
Definition: r1cs_gg_ppzksnark.hpp:207
libsnark::r1cs_gg_ppzksnark_proving_key::H_query
libff::G1_vector< ppT > H_query
Definition: r1cs_gg_ppzksnark.hpp:86
libsnark::r1cs_gg_ppzksnark_proving_key::A_query
libff::G1_vector< ppT > A_query
Definition: r1cs_gg_ppzksnark.hpp:84
libsnark::r1cs_gg_ppzksnark_proving_key::beta_g1
libff::G1< ppT > beta_g1
Definition: r1cs_gg_ppzksnark.hpp:78
libsnark::sparse_vector
Definition: sparse_vector.hpp:21
libsnark::r1cs_gg_ppzksnark_online_verifier_weak_IC
bool r1cs_gg_ppzksnark_online_verifier_weak_IC(const r1cs_gg_ppzksnark_processed_verification_key< ppT > &pvk, const r1cs_gg_ppzksnark_primary_input< ppT > &input, const r1cs_gg_ppzksnark_proof< ppT > &proof)
libsnark::r1cs_gg_ppzksnark_verification_key::print_size
void print_size() const
Definition: r1cs_gg_ppzksnark.hpp:219
libsnark::r1cs_gg_ppzksnark_generator_from_secrets
r1cs_gg_ppzksnark_keypair< ppT > r1cs_gg_ppzksnark_generator_from_secrets(const r1cs_gg_ppzksnark_constraint_system< ppT > &cs, const libff::Fr< ppT > &t, const libff::Fr< ppT > &alpha, const libff::Fr< ppT > &beta, const libff::Fr< ppT > &delta, const libff::G1< ppT > &g1_generator, const libff::G2< ppT > &g2_generator, bool force_pow_2_domain=false)
libsnark::r1cs_gg_ppzksnark_processed_verification_key::vk_alpha_g1_precomp
libff::G1_precomp< ppT > vk_alpha_g1_precomp
Definition: r1cs_gg_ppzksnark.hpp:262
libsnark::r1cs_gg_ppzksnark_proving_key::G2_sparse_size
size_t G2_sparse_size() const
Definition: r1cs_gg_ppzksnark.hpp:140
libsnark::r1cs_gg_ppzksnark_proving_key::r1cs_gg_ppzksnark_proving_key
r1cs_gg_ppzksnark_proving_key(libff::G1< ppT > &&alpha_g1, libff::G1< ppT > &&beta_g1, libff::G2< ppT > &&beta_g2, libff::G1< ppT > &&delta_g1, libff::G2< ppT > &&delta_g2, libff::G1_vector< ppT > &&A_query, knowledge_commitment_vector< libff::G2< ppT >, libff::G1< ppT >> &&B_query, libff::G1_vector< ppT > &&H_query, libff::G1_vector< ppT > &&L_query, r1cs_gg_ppzksnark_constraint_system< ppT > &&constraint_system)
Definition: r1cs_gg_ppzksnark.hpp:98
r1cs.hpp