Clearmatics Libsnark
0.1
C++ library for zkSNARK proofs
|
Go to the documentation of this file.
46 #ifndef R1CS_GG_PPZKSNARK_HPP_
47 #define R1CS_GG_PPZKSNARK_HPP_
49 #include <libff/algebra/curves/public_params.hpp>
63 template<
typename ppT>
67 template<
typename ppT>
104 libff::G1_vector<ppT> &&
A_query,
106 libff::G1_vector<ppT> &&
H_query,
107 libff::G1_vector<ppT> &&
L_query,
131 return 1 + 1 +
B_query.domain_size();
147 1 * libff::G1<ppT>::size_in_bits() +
148 1 * libff::G2<ppT>::size_in_bits());
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());
166 friend std::ostream &operator<<<ppT>(
168 friend std::istream &
operator>>
176 template<
typename ppT>
180 template<
typename ppT>
216 libff::G1<ppT>::size_in_bits());
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());
230 friend std::ostream &operator<<<ppT>(
232 friend std::istream &
operator>>
236 const size_t input_size);
243 template<
typename ppT>
248 template<
typename ppT>
271 friend std::ostream &operator<<<ppT>(
274 friend std::istream &
operator>><ppT>(
297 :
pk(std::move(
pk)),
vk(std::move(
vk))
308 template<
typename ppT>
312 template<
typename ppT>
332 this->g_A = libff::G1<ppT>::one();
333 this->g_B = libff::G2<ppT>::one();
334 this->g_C = libff::G1<ppT>::one();
337 libff::G1<ppT> &&
g_A, libff::G2<ppT> &&
g_B, libff::G1<ppT> &&
g_C)
346 return G1_size() * libff::G1<ppT>::size_in_bits() +
347 G2_size() * libff::G2<ppT>::size_in_bits();
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());
363 g_A.is_well_formed() &&
g_B.is_well_formed() &&
364 g_C.is_well_formed());
368 friend std::ostream &operator<<<ppT>(
370 friend std::istream &
operator>>
385 libff::multi_exp_base_form BaseForm = libff::multi_exp_base_form_special>
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);
404 libff::multi_exp_base_form BaseForm = libff::multi_exp_base_form_special>
406 const r1cs_gg_ppzksnark_constraint_system<ppT> &cs,
407 bool force_pow_2_domain =
false);
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>
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);
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);
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);
469 template<
typename ppT>
470 r1cs_gg_ppzksnark_processed_verification_key<ppT>
472 const r1cs_gg_ppzksnark_verification_key<ppT> &vk);
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);
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);
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);
517 #endif // R1CS_GG_PPZKSNARK_HPP_
libff::G2< ppT > delta_g2
libff::G2_precomp< ppT > vk_generator_g2_precomp
r1cs_gg_ppzksnark_processed_verification_key< ppT > r1cs_gg_ppzksnark_verifier_process_vk(const r1cs_gg_ppzksnark_verification_key< ppT > &vk)
r1cs_gg_ppzksnark_keypair()=default
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
bool operator==(const r1cs_gg_ppzksnark_processed_verification_key &other) const
size_t G1_sparse_size() const
libff::G1_vector< ppT > L_query
libff::G2_precomp< ppT > vk_beta_g2_precomp
r1cs_gg_ppzksnark_keypair< ppT > r1cs_gg_ppzksnark_generator(const r1cs_gg_ppzksnark_constraint_system< ppT > &cs, bool force_pow_2_domain=false)
r1cs_gg_ppzksnark_proving_key< ppT > & operator=(const r1cs_gg_ppzksnark_proving_key< ppT > &other)=default
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)
r1cs_gg_ppzksnark_proof(libff::G1< ppT > &&g_A, libff::G2< ppT > &&g_B, libff::G1< ppT > &&g_C)
bool is_well_formed() const
r1cs_gg_ppzksnark_keypair(r1cs_gg_ppzksnark_proving_key< ppT > &&pk, r1cs_gg_ppzksnark_verification_key< ppT > &&vk)
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)
accumulation_vector< libff::G1< ppT > > ABC_g1
size_t size_in_bits() const
size_t size_in_bits() const
r1cs_gg_ppzksnark_verification_key()=default
libff::G1< ppT > delta_g1
accumulation_vector< libff::G1< ppT > > ABC_g1
size_t size_in_bits() const
r1cs_gg_ppzksnark_proving_key< ppT > pk
bool operator==(const r1cs_gg_ppzksnark_proof< ppT > &other) const
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)
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)
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)
r1cs_gg_ppzksnark_constraint_system< ppT > constraint_system
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
r1cs_gg_ppzksnark_proving_key()
bool operator==(const r1cs_gg_ppzksnark_verification_key< ppT > &other) const
bool operator==(const r1cs_gg_ppzksnark_proving_key< ppT > &other) const
libff::G1< ppT > alpha_g1
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)
r1cs_gg_ppzksnark_verification_key< ppT > vk
static r1cs_gg_ppzksnark_verification_key< ppT > dummy_verification_key(const size_t input_size)
r1cs_gg_ppzksnark_proof()
libff::G1< ppT > alpha_g1
knowledge_commitment_vector< libff::G2< ppT >, libff::G1< ppT > > B_query
libff::G2_precomp< ppT > vk_delta_g2_precomp
libff::G2< ppT > delta_g2
size_t size_in_bits() const
libff::G1_vector< ppT > H_query
libff::G1_vector< ppT > A_query
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)
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)
libff::G1_precomp< ppT > vk_alpha_g1_precomp
size_t G2_sparse_size() const
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)