Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
r1cs_se_ppzksnark.hpp
Go to the documentation of this file.
1 
48 #ifndef R1CS_SE_PPZKSNARK_HPP_
49 #define R1CS_SE_PPZKSNARK_HPP_
50 
51 #include <libff/algebra/curves/public_params.hpp>
56 #include <memory>
57 
58 namespace libsnark
59 {
60 
61 /******************************** Proving key ********************************/
62 
63 template<typename ppT> class r1cs_se_ppzksnark_proving_key;
64 
65 template<typename ppT>
66 std::ostream &operator<<(
67  std::ostream &out, const r1cs_se_ppzksnark_proving_key<ppT> &pk);
68 
69 template<typename ppT>
70 std::istream &operator>>(
71  std::istream &in, r1cs_se_ppzksnark_proving_key<ppT> &pk);
72 
76 template<typename ppT> class r1cs_se_ppzksnark_proving_key
77 {
78 public:
79  // G^{gamma * A_i(t)} for 0 <= i <= sap.num_variables()
80  libff::G1_vector<ppT> A_query;
81 
82  // H^{gamma * A_i(t)} for 0 <= i <= sap.num_variables()
83  libff::G2_vector<ppT> B_query;
84 
85  // G^{gamma^2 * C_i(t) + (alpha + beta) * gamma * A_i(t)}
86  // for sap.num_inputs() + 1 < i <= sap.num_variables()
87  libff::G1_vector<ppT> C_query_1;
88 
89  // G^{2 * gamma^2 * Z(t) * A_i(t)} for 0 <= i <= sap.num_variables()
90  libff::G1_vector<ppT> C_query_2;
91 
92  // G^{gamma * Z(t)}
93  libff::G1<ppT> G_gamma_Z;
94 
95  // H^{gamma * Z(t)}
96  libff::G2<ppT> H_gamma_Z;
97 
98  // G^{(alpha + beta) * gamma * Z(t)}
99  libff::G1<ppT> G_ab_gamma_Z;
100 
101  // G^{gamma^2 * Z(t)^2}
102  libff::G1<ppT> G_gamma2_Z2;
103 
104  // G^{gamma^2 * Z(t) * t^i} for 0 <= i < sap.degree
105  libff::G1_vector<ppT> G_gamma2_Z_t;
106 
108 
111  const r1cs_se_ppzksnark_proving_key<ppT> &other) = default;
113  const r1cs_se_ppzksnark_proving_key<ppT> &other) = default;
115  default;
117  libff::G1_vector<ppT> &&A_query,
118  libff::G2_vector<ppT> &&B_query,
119  libff::G1_vector<ppT> &&C_query_1,
120  libff::G1_vector<ppT> &&C_query_2,
121  libff::G1<ppT> &G_gamma_Z,
122  libff::G2<ppT> &H_gamma_Z,
123  libff::G1<ppT> &G_ab_gamma_Z,
124  libff::G1<ppT> &G_gamma2_Z2,
125  libff::G1_vector<ppT> &&G_gamma2_Z_t,
127  : A_query(std::move(A_query))
128  , B_query(std::move(B_query))
129  , C_query_1(std::move(C_query_1))
130  , C_query_2(std::move(C_query_2))
135  , G_gamma2_Z_t(std::move(G_gamma2_Z_t))
136  , constraint_system(std::move(constraint_system)){};
137 
138  size_t G1_size() const
139  {
140  return A_query.size() + C_query_1.size() + C_query_2.size() + 3 +
141  G_gamma2_Z_t.size();
142  }
143 
144  size_t G2_size() const { return B_query.size() + 1; }
145 
146  size_t size_in_bits() const
147  {
148  return G1_size() * libff::G1<ppT>::size_in_bits() +
149  G2_size() * libff::G2<ppT>::size_in_bits();
150  }
151 
152  void print_size() const
153  {
154  libff::print_indent();
155  printf("* G1 elements in PK: %zu\n", this->G1_size());
156  libff::print_indent();
157  printf("* G2 elements in PK: %zu\n", this->G2_size());
158  libff::print_indent();
159  printf("* PK size in bits: %zu\n", this->size_in_bits());
160  }
161 
162  bool operator==(const r1cs_se_ppzksnark_proving_key<ppT> &other) const;
163  friend std::ostream &operator<<<ppT>(
164  std::ostream &out, const r1cs_se_ppzksnark_proving_key<ppT> &pk);
165  friend std::istream &operator>>
166  <ppT>(std::istream &in, r1cs_se_ppzksnark_proving_key<ppT> &pk);
167 };
168 
169 /******************************* Verification key ****************************/
170 
171 template<typename ppT> class r1cs_se_ppzksnark_verification_key;
172 
173 template<typename ppT>
174 std::ostream &operator<<(
175  std::ostream &out, const r1cs_se_ppzksnark_verification_key<ppT> &vk);
176 
177 template<typename ppT>
178 std::istream &operator>>(
179  std::istream &in, r1cs_se_ppzksnark_verification_key<ppT> &vk);
180 
184 template<typename ppT> class r1cs_se_ppzksnark_verification_key
185 {
186 public:
187  // H
188  libff::G2<ppT> H;
189 
190  // G^{alpha}
191  libff::G1<ppT> G_alpha;
192 
193  // H^{beta}
194  libff::G2<ppT> H_beta;
195 
196  // G^{gamma}
197  libff::G1<ppT> G_gamma;
198 
199  // H^{gamma}
200  libff::G2<ppT> H_gamma;
201 
202  // G^{gamma * A_i(t) + (alpha + beta) * A_i(t)}
203  // for 0 <= i <= sap.num_inputs()
204  libff::G1_vector<ppT> query;
205 
208  const libff::G2<ppT> &H,
209  const libff::G1<ppT> &G_alpha,
210  const libff::G2<ppT> &H_beta,
211  const libff::G1<ppT> &G_gamma,
212  const libff::G2<ppT> &H_gamma,
213  libff::G1_vector<ppT> &&query)
214  : H(H)
215  , G_alpha(G_alpha)
216  , H_beta(H_beta)
217  , G_gamma(G_gamma)
218  , H_gamma(H_gamma)
219  , query(std::move(query)){};
220 
221  size_t G1_size() const { return 2 + query.size(); }
222 
223  size_t G2_size() const { return 3; }
224 
225  size_t size_in_bits() const
226  {
227  return (
228  G1_size() * libff::G1<ppT>::size_in_bits() +
229  G2_size() * libff::G2<ppT>::size_in_bits());
230  }
231 
232  void print_size() const
233  {
234  libff::print_indent();
235  printf("* G1 elements in VK: %zu\n", this->G1_size());
236  libff::print_indent();
237  printf("* G2 elements in VK: %zu\n", this->G2_size());
238  libff::print_indent();
239  printf("* VK size in bits: %zu\n", this->size_in_bits());
240  }
241 
242  bool operator==(const r1cs_se_ppzksnark_verification_key<ppT> &other) const;
243  friend std::ostream &operator<<<ppT>(
244  std::ostream &out, const r1cs_se_ppzksnark_verification_key<ppT> &vk);
245  friend std::istream &operator>>
246  <ppT>(std::istream &in, r1cs_se_ppzksnark_verification_key<ppT> &vk);
247 
249  const size_t input_size);
250 };
251 
252 /************************ Processed verification key *************************/
253 
254 template<typename ppT> class r1cs_se_ppzksnark_processed_verification_key;
255 
256 template<typename ppT>
257 std::ostream &operator<<(
258  std::ostream &out,
260 
261 template<typename ppT>
262 std::istream &operator>>(
264 
272 template<typename ppT> class r1cs_se_ppzksnark_processed_verification_key
273 {
274 public:
275  libff::G1<ppT> G_alpha;
276  libff::G2<ppT> H_beta;
277  libff::Fqk<ppT> G_alpha_H_beta_ml;
278  libff::G1_precomp<ppT> G_gamma_pc;
279  libff::G2_precomp<ppT> H_gamma_pc;
280  libff::G2_precomp<ppT> H_pc;
281 
282  libff::G1_vector<ppT> query;
283 
284  bool operator==(
286  friend std::ostream &operator<<<ppT>(
287  std::ostream &out,
289  friend std::istream &operator>><ppT>(
290  std::istream &in,
292 };
293 
294 /********************************** Key pair *********************************/
295 
300 template<typename ppT> class r1cs_se_ppzksnark_keypair
301 {
302 public:
305 
306  r1cs_se_ppzksnark_keypair() = default;
308  default;
312  : pk(std::move(pk)), vk(std::move(vk))
313  {
314  }
315 
317 };
318 
319 /*********************************** Proof ***********************************/
320 
321 template<typename ppT> class r1cs_se_ppzksnark_proof;
322 
323 template<typename ppT>
324 std::ostream &operator<<(
325  std::ostream &out, const r1cs_se_ppzksnark_proof<ppT> &proof);
326 
327 template<typename ppT>
328 std::istream &operator>>(std::istream &in, r1cs_se_ppzksnark_proof<ppT> &proof);
329 
337 template<typename ppT> class r1cs_se_ppzksnark_proof
338 {
339 public:
340  libff::G1<ppT> A;
341  libff::G2<ppT> B;
342  libff::G1<ppT> C;
343 
346  libff::G1<ppT> &&A, libff::G2<ppT> &&B, libff::G1<ppT> &&C)
347  : A(std::move(A)), B(std::move(B)), C(std::move(C)){};
348 
349  size_t G1_size() const { return 2; }
350 
351  size_t G2_size() const { return 1; }
352 
353  size_t size_in_bits() const
354  {
355  return G1_size() * libff::G1<ppT>::size_in_bits() +
356  G2_size() * libff::G2<ppT>::size_in_bits();
357  }
358 
359  void print_size() const
360  {
361  libff::print_indent();
362  printf("* G1 elements in proof: %zu\n", this->G1_size());
363  libff::print_indent();
364  printf("* G2 elements in proof: %zu\n", this->G2_size());
365  libff::print_indent();
366  printf("* Proof size in bits: %zu\n", this->size_in_bits());
367  }
368 
369  bool is_well_formed() const
370  {
371  return (A.is_well_formed() && B.is_well_formed() && C.is_well_formed());
372  }
373 
374  bool operator==(const r1cs_se_ppzksnark_proof<ppT> &other) const;
375  friend std::ostream &operator<<<ppT>(
376  std::ostream &out, const r1cs_se_ppzksnark_proof<ppT> &proof);
377  friend std::istream &operator>>
378  <ppT>(std::istream &in, r1cs_se_ppzksnark_proof<ppT> &proof);
379 };
380 
381 /***************************** Main algorithms *******************************/
382 
389 template<
390  typename ppT,
391  libff::multi_exp_base_form BaseForm = libff::multi_exp_base_form_normal>
392 r1cs_se_ppzksnark_keypair<ppT> r1cs_se_ppzksnark_generator(
393  const r1cs_se_ppzksnark_constraint_system<ppT> &cs);
394 
404 template<
405  typename ppT,
406  libff::multi_exp_method Method = libff::multi_exp_method_BDLO12,
407  libff::multi_exp_base_form BaseForm = libff::multi_exp_base_form_normal>
408 r1cs_se_ppzksnark_proof<ppT> r1cs_se_ppzksnark_prover(
409  const r1cs_se_ppzksnark_proving_key<ppT> &pk,
410  const r1cs_se_ppzksnark_primary_input<ppT> &primary_input,
411  const r1cs_se_ppzksnark_auxiliary_input<ppT> &auxiliary_input);
412 
413 /*
414  Below are four variants of verifier algorithm for the R1CS SEppzkSNARK.
415 
416  These are the four cases that arise from the following two choices:
417 
418  (1) The verifier accepts a (non-processed) verification key or, instead, a
419  processed verification key. In the latter case, we call the algorithm an
420  "online verifier".
421 
422  (2) The verifier checks for "weak" input consistency or, instead, "strong"
423  input consistency. Strong input consistency requires that |primary_input| =
424  CS.num_inputs, whereas weak input consistency requires that |primary_input| <=
425  CS.num_inputs (and the primary input is implicitly padded with zeros up to
426  length CS.num_inputs).
427  */
428 
434 template<typename ppT>
436  const r1cs_se_ppzksnark_verification_key<ppT> &vk,
437  const r1cs_se_ppzksnark_primary_input<ppT> &primary_input,
438  const r1cs_se_ppzksnark_proof<ppT> &proof);
439 
445 template<typename ppT>
447  const r1cs_se_ppzksnark_verification_key<ppT> &vk,
448  const r1cs_se_ppzksnark_primary_input<ppT> &primary_input,
449  const r1cs_se_ppzksnark_proof<ppT> &proof);
450 
454 template<typename ppT>
455 r1cs_se_ppzksnark_processed_verification_key<ppT>
457  const r1cs_se_ppzksnark_verification_key<ppT> &vk);
458 
464 template<typename ppT>
466  const r1cs_se_ppzksnark_processed_verification_key<ppT> &pvk,
467  const r1cs_se_ppzksnark_primary_input<ppT> &input,
468  const r1cs_se_ppzksnark_proof<ppT> &proof);
469 
475 template<typename ppT>
477  const r1cs_se_ppzksnark_processed_verification_key<ppT> &pvk,
478  const r1cs_se_ppzksnark_primary_input<ppT> &primary_input,
479  const r1cs_se_ppzksnark_proof<ppT> &proof);
480 
481 } // namespace libsnark
482 
484 
485 #endif // R1CS_SE_PPZKSNARK_HPP_
libsnark::r1cs_se_ppzksnark_processed_verification_key::H_pc
libff::G2_precomp< ppT > H_pc
Definition: r1cs_se_ppzksnark.hpp:280
libsnark::r1cs_se_ppzksnark_verification_key::r1cs_se_ppzksnark_verification_key
r1cs_se_ppzksnark_verification_key()=default
accumulation_vector.hpp
libsnark::r1cs_se_ppzksnark_verification_key::G2_size
size_t G2_size() const
Definition: r1cs_se_ppzksnark.hpp:223
libsnark::r1cs_se_ppzksnark_proving_key::G_gamma2_Z_t
libff::G1_vector< ppT > G_gamma2_Z_t
Definition: r1cs_se_ppzksnark.hpp:105
libsnark::r1cs_se_ppzksnark_proving_key::constraint_system
r1cs_se_ppzksnark_constraint_system< ppT > constraint_system
Definition: r1cs_se_ppzksnark.hpp:107
libsnark::r1cs_se_ppzksnark_keypair::pk
r1cs_se_ppzksnark_proving_key< ppT > pk
Definition: r1cs_se_ppzksnark.hpp:303
libsnark::r1cs_se_ppzksnark_verification_key::G1_size
size_t G1_size() const
Definition: r1cs_se_ppzksnark.hpp:221
libsnark::r1cs_se_ppzksnark_proof::C
libff::G1< ppT > C
Definition: r1cs_se_ppzksnark.hpp:342
libsnark::r1cs_se_ppzksnark_processed_verification_key::query
libff::G1_vector< ppT > query
Definition: r1cs_se_ppzksnark.hpp:282
libsnark
Definition: accumulation_vector.hpp:18
libsnark::r1cs_se_ppzksnark_proving_key::G1_size
size_t G1_size() const
Definition: r1cs_se_ppzksnark.hpp:138
libsnark::r1cs_se_ppzksnark_keypair
Definition: r1cs_se_ppzksnark.hpp:300
libsnark::operator<<
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
libsnark::r1cs_se_ppzksnark_verification_key::G_alpha
libff::G1< ppT > G_alpha
Definition: r1cs_se_ppzksnark.hpp:191
libsnark::r1cs_se_ppzksnark_verification_key::dummy_verification_key
static r1cs_se_ppzksnark_verification_key< ppT > dummy_verification_key(const size_t input_size)
libsnark::r1cs_se_ppzksnark_proving_key::G_gamma_Z
libff::G1< ppT > G_gamma_Z
Definition: r1cs_se_ppzksnark.hpp:93
libsnark::r1cs_se_ppzksnark_verification_key::print_size
void print_size() const
Definition: r1cs_se_ppzksnark.hpp:232
libsnark::r1cs_se_ppzksnark_verification_key::H_gamma
libff::G2< ppT > H_gamma
Definition: r1cs_se_ppzksnark.hpp:200
libsnark::r1cs_se_ppzksnark_proving_key::operator=
r1cs_se_ppzksnark_proving_key< ppT > & operator=(const r1cs_se_ppzksnark_proving_key< ppT > &other)=default
libsnark::r1cs_se_ppzksnark_proving_key::A_query
libff::G1_vector< ppT > A_query
Definition: r1cs_se_ppzksnark.hpp:80
libsnark::r1cs_se_ppzksnark_proving_key::r1cs_se_ppzksnark_proving_key
r1cs_se_ppzksnark_proving_key(libff::G1_vector< ppT > &&A_query, libff::G2_vector< ppT > &&B_query, libff::G1_vector< ppT > &&C_query_1, libff::G1_vector< ppT > &&C_query_2, libff::G1< ppT > &G_gamma_Z, libff::G2< ppT > &H_gamma_Z, libff::G1< ppT > &G_ab_gamma_Z, libff::G1< ppT > &G_gamma2_Z2, libff::G1_vector< ppT > &&G_gamma2_Z_t, r1cs_se_ppzksnark_constraint_system< ppT > &&constraint_system)
Definition: r1cs_se_ppzksnark.hpp:116
libsnark::r1cs_se_ppzksnark_verification_key
Definition: r1cs_se_ppzksnark.hpp:171
libsnark::r1cs_se_ppzksnark_verification_key::H_beta
libff::G2< ppT > H_beta
Definition: r1cs_se_ppzksnark.hpp:194
libsnark::r1cs_se_ppzksnark_verification_key::r1cs_se_ppzksnark_verification_key
r1cs_se_ppzksnark_verification_key(const libff::G2< ppT > &H, const libff::G1< ppT > &G_alpha, const libff::G2< ppT > &H_beta, const libff::G1< ppT > &G_gamma, const libff::G2< ppT > &H_gamma, libff::G1_vector< ppT > &&query)
Definition: r1cs_se_ppzksnark.hpp:207
libsnark::r1cs_se_ppzksnark_processed_verification_key
Definition: r1cs_se_ppzksnark.hpp:254
libsnark::r1cs_se_ppzksnark_proof::B
libff::G2< ppT > B
Definition: r1cs_se_ppzksnark.hpp:341
libsnark::r1cs_se_ppzksnark_proof::r1cs_se_ppzksnark_proof
r1cs_se_ppzksnark_proof(libff::G1< ppT > &&A, libff::G2< ppT > &&B, libff::G1< ppT > &&C)
Definition: r1cs_se_ppzksnark.hpp:345
libsnark::r1cs_se_ppzksnark_verifier_process_vk
r1cs_se_ppzksnark_processed_verification_key< ppT > r1cs_se_ppzksnark_verifier_process_vk(const r1cs_se_ppzksnark_verification_key< ppT > &vk)
libsnark::r1cs_se_ppzksnark_verification_key::operator==
bool operator==(const r1cs_se_ppzksnark_verification_key< ppT > &other) const
libsnark::r1cs_se_ppzksnark_proving_key::G_ab_gamma_Z
libff::G1< ppT > G_ab_gamma_Z
Definition: r1cs_se_ppzksnark.hpp:99
libsnark::r1cs_se_ppzksnark_proving_key::B_query
libff::G2_vector< ppT > B_query
Definition: r1cs_se_ppzksnark.hpp:83
r1cs_se_ppzksnark_params.hpp
libsnark::r1cs_se_ppzksnark_verification_key::query
libff::G1_vector< ppT > query
Definition: r1cs_se_ppzksnark.hpp:204
libsnark::r1cs_se_ppzksnark_proof::r1cs_se_ppzksnark_proof
r1cs_se_ppzksnark_proof()
Definition: r1cs_se_ppzksnark.hpp:344
libsnark::r1cs_se_ppzksnark_proof::G1_size
size_t G1_size() const
Definition: r1cs_se_ppzksnark.hpp:349
knowledge_commitment.hpp
libsnark::r1cs_se_ppzksnark_verifier_weak_IC
bool r1cs_se_ppzksnark_verifier_weak_IC(const r1cs_se_ppzksnark_verification_key< ppT > &vk, const r1cs_se_ppzksnark_primary_input< ppT > &primary_input, const r1cs_se_ppzksnark_proof< ppT > &proof)
libsnark::r1cs_se_ppzksnark_verifier_strong_IC
bool r1cs_se_ppzksnark_verifier_strong_IC(const r1cs_se_ppzksnark_verification_key< ppT > &vk, const r1cs_se_ppzksnark_primary_input< ppT > &primary_input, const r1cs_se_ppzksnark_proof< ppT > &proof)
libsnark::r1cs_se_ppzksnark_proof::G2_size
size_t G2_size() const
Definition: r1cs_se_ppzksnark.hpp:351
libsnark::r1cs_se_ppzksnark_proof::A
libff::G1< ppT > A
Definition: r1cs_se_ppzksnark.hpp:340
libsnark::r1cs_se_ppzksnark_proof::is_well_formed
bool is_well_formed() const
Definition: r1cs_se_ppzksnark.hpp:369
libsnark::r1cs_se_ppzksnark_proving_key
Definition: r1cs_se_ppzksnark.hpp:63
libsnark::r1cs_se_ppzksnark_proving_key::C_query_1
libff::G1_vector< ppT > C_query_1
Definition: r1cs_se_ppzksnark.hpp:87
libsnark::r1cs_se_ppzksnark_keypair::r1cs_se_ppzksnark_keypair
r1cs_se_ppzksnark_keypair()=default
libsnark::r1cs_se_ppzksnark_proving_key::H_gamma_Z
libff::G2< ppT > H_gamma_Z
Definition: r1cs_se_ppzksnark.hpp:96
libsnark::r1cs_se_ppzksnark_prover
r1cs_se_ppzksnark_proof< ppT > r1cs_se_ppzksnark_prover(const r1cs_se_ppzksnark_proving_key< ppT > &pk, const r1cs_se_ppzksnark_primary_input< ppT > &primary_input, const r1cs_se_ppzksnark_auxiliary_input< ppT > &auxiliary_input)
libsnark::r1cs_se_ppzksnark_processed_verification_key::H_beta
libff::G2< ppT > H_beta
Definition: r1cs_se_ppzksnark.hpp:276
libsnark::operator>>
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
libsnark::r1cs_se_ppzksnark_proving_key::G_gamma2_Z2
libff::G1< ppT > G_gamma2_Z2
Definition: r1cs_se_ppzksnark.hpp:102
libsnark::r1cs_se_ppzksnark_proof
Definition: r1cs_se_ppzksnark.hpp:321
libsnark::r1cs_se_ppzksnark_processed_verification_key::operator==
bool operator==(const r1cs_se_ppzksnark_processed_verification_key &other) const
r1cs_se_ppzksnark.tcc
libsnark::r1cs_se_ppzksnark_keypair::vk
r1cs_se_ppzksnark_verification_key< ppT > vk
Definition: r1cs_se_ppzksnark.hpp:304
libsnark::r1cs_se_ppzksnark_processed_verification_key::G_gamma_pc
libff::G1_precomp< ppT > G_gamma_pc
Definition: r1cs_se_ppzksnark.hpp:278
libsnark::r1cs_se_ppzksnark_keypair::r1cs_se_ppzksnark_keypair
r1cs_se_ppzksnark_keypair(r1cs_se_ppzksnark_proving_key< ppT > &&pk, r1cs_se_ppzksnark_verification_key< ppT > &&vk)
Definition: r1cs_se_ppzksnark.hpp:309
libsnark::r1cs_constraint_system< libff::Fr< ppT > >
libsnark::r1cs_se_ppzksnark_proving_key::r1cs_se_ppzksnark_proving_key
r1cs_se_ppzksnark_proving_key()
Definition: r1cs_se_ppzksnark.hpp:109
libsnark::r1cs_se_ppzksnark_proving_key::operator==
bool operator==(const r1cs_se_ppzksnark_proving_key< ppT > &other) const
libsnark::r1cs_se_ppzksnark_proof::print_size
void print_size() const
Definition: r1cs_se_ppzksnark.hpp:359
libsnark::r1cs_se_ppzksnark_processed_verification_key::H_gamma_pc
libff::G2_precomp< ppT > H_gamma_pc
Definition: r1cs_se_ppzksnark.hpp:279
libsnark::r1cs_se_ppzksnark_verification_key::G_gamma
libff::G1< ppT > G_gamma
Definition: r1cs_se_ppzksnark.hpp:197
libsnark::r1cs_se_ppzksnark_proof::operator==
bool operator==(const r1cs_se_ppzksnark_proof< ppT > &other) const
libsnark::r1cs_se_ppzksnark_proof::size_in_bits
size_t size_in_bits() const
Definition: r1cs_se_ppzksnark.hpp:353
libsnark::r1cs_se_ppzksnark_proving_key::size_in_bits
size_t size_in_bits() const
Definition: r1cs_se_ppzksnark.hpp:146
libsnark::r1cs_se_ppzksnark_proving_key::print_size
void print_size() const
Definition: r1cs_se_ppzksnark.hpp:152
libsnark::r1cs_se_ppzksnark_verification_key::size_in_bits
size_t size_in_bits() const
Definition: r1cs_se_ppzksnark.hpp:225
libsnark::r1cs_se_ppzksnark_online_verifier_weak_IC
bool r1cs_se_ppzksnark_online_verifier_weak_IC(const r1cs_se_ppzksnark_processed_verification_key< ppT > &pvk, const r1cs_se_ppzksnark_primary_input< ppT > &input, const r1cs_se_ppzksnark_proof< ppT > &proof)
libsnark::r1cs_se_ppzksnark_processed_verification_key::G_alpha
libff::G1< ppT > G_alpha
Definition: r1cs_se_ppzksnark.hpp:275
libsnark::r1cs_se_ppzksnark_online_verifier_strong_IC
bool r1cs_se_ppzksnark_online_verifier_strong_IC(const r1cs_se_ppzksnark_processed_verification_key< ppT > &pvk, const r1cs_se_ppzksnark_primary_input< ppT > &primary_input, const r1cs_se_ppzksnark_proof< ppT > &proof)
libsnark::r1cs_se_ppzksnark_processed_verification_key::G_alpha_H_beta_ml
libff::Fqk< ppT > G_alpha_H_beta_ml
Definition: r1cs_se_ppzksnark.hpp:277
libsnark::r1cs_se_ppzksnark_verification_key::H
libff::G2< ppT > H
Definition: r1cs_se_ppzksnark.hpp:188
libsnark::r1cs_se_ppzksnark_proving_key::G2_size
size_t G2_size() const
Definition: r1cs_se_ppzksnark.hpp:144
libsnark::r1cs_se_ppzksnark_generator
r1cs_se_ppzksnark_keypair< ppT > r1cs_se_ppzksnark_generator(const r1cs_se_ppzksnark_constraint_system< ppT > &cs)
libsnark::r1cs_se_ppzksnark_proving_key::C_query_2
libff::G1_vector< ppT > C_query_2
Definition: r1cs_se_ppzksnark.hpp:90
r1cs.hpp