Clearmatics Libsnark
0.1
C++ library for zkSNARK proofs
|
Go to the documentation of this file.
47 #ifndef USCS_PPZKSNARK_HPP_
48 #define USCS_PPZKSNARK_HPP_
50 #include <libff/algebra/curves/public_params.hpp>
64 template<
typename ppT>
68 template<
typename ppT>
116 return libff::G1<ppT>::size_in_bits() *
G1_size() +
117 libff::G2<ppT>::size_in_bits() *
G2_size();
122 libff::print_indent();
123 printf(
"* G1 elements in PK: %zu\n", this->
G1_size());
124 libff::print_indent();
125 printf(
"* Non-zero G1 elements in PK: %zu\n", this->
G1_sparse_size());
126 libff::print_indent();
127 printf(
"* G2 elements in PK: %zu\n", this->
G2_size());
128 libff::print_indent();
129 printf(
"* Non-zero G2 elements in PK: %zu\n", this->
G2_sparse_size());
130 libff::print_indent();
131 printf(
"* PK size in bits: %zu\n", this->
size_in_bits());
135 friend std::ostream &operator<<<ppT>(
137 friend std::istream &
operator>>
145 template<
typename ppT>
149 template<
typename ppT>
169 const libff::G2<ppT> &
Z_g2,
183 3 * libff::G2<ppT>::size_in_bits();
188 libff::print_indent();
189 printf(
"* G1 elements in VK: %zu\n", this->
G1_size());
190 libff::print_indent();
191 printf(
"* G2 elements in VK: %zu\n", this->
G2_size());
192 libff::print_indent();
193 printf(
"* VK size in bits: %zu\n", this->
size_in_bits());
197 friend std::ostream &operator<<<ppT>(
199 friend std::istream &
operator>>
203 const size_t input_size);
210 template<
typename ppT>
215 template<
typename ppT>
240 friend std::ostream &operator<<<ppT>(
243 friend std::istream &
operator>><ppT>(
263 :
pk(std::move(
pk)),
vk(std::move(
vk))
274 template<
typename ppT>
278 template<
typename ppT>
299 this->V_g1 = libff::G1<ppT>::one();
300 this->alpha_V_g1 = libff::G1<ppT>::one();
301 this->H_g1 = libff::G1<ppT>::one();
302 this->V_g2 = libff::G2<ppT>::one();
305 libff::G1<ppT> &&
V_g1,
307 libff::G1<ppT> &&
H_g1,
308 libff::G2<ppT> &&
V_g2)
320 return G1_size() * libff::G1<ppT>::size_in_bits() +
321 G2_size() * libff::G2<ppT>::size_in_bits();
326 libff::print_indent();
327 printf(
"* G1 elements in proof: %zu\n", this->
G1_size());
328 libff::print_indent();
329 printf(
"* G2 elements in proof: %zu\n", this->
G2_size());
330 libff::print_indent();
331 printf(
"* Proof size in bits: %zu\n", this->
size_in_bits());
337 V_g1.is_well_formed() &&
alpha_V_g1.is_well_formed() &&
338 H_g1.is_well_formed() &&
V_g2.is_well_formed());
342 friend std::ostream &operator<<<ppT>(
344 friend std::istream &
operator>>
358 libff::multi_exp_base_form BaseForm = libff::multi_exp_base_form_normal>
360 const uscs_ppzksnark_constraint_system<ppT> &cs);
373 libff::multi_exp_method Method = libff::multi_exp_method_BDLO12,
374 libff::multi_exp_base_form BaseForm = libff::multi_exp_base_form_normal>
376 const uscs_ppzksnark_proving_key<ppT> &pk,
377 const uscs_ppzksnark_primary_input<ppT> &primary_input,
378 const uscs_ppzksnark_auxiliary_input<ppT> &auxiliary_input);
401 template<
typename ppT>
403 const uscs_ppzksnark_verification_key<ppT> &vk,
404 const uscs_ppzksnark_primary_input<ppT> &primary_input,
405 const uscs_ppzksnark_proof<ppT> &proof);
412 template<
typename ppT>
414 const uscs_ppzksnark_verification_key<ppT> &vk,
415 const uscs_ppzksnark_primary_input<ppT> &primary_input,
416 const uscs_ppzksnark_proof<ppT> &proof);
421 template<
typename ppT>
423 const uscs_ppzksnark_verification_key<ppT> &vk);
430 template<
typename ppT>
432 const uscs_ppzksnark_processed_verification_key<ppT> &pvk,
433 const uscs_ppzksnark_primary_input<ppT> &primary_input,
434 const uscs_ppzksnark_proof<ppT> &proof);
441 template<
typename ppT>
443 const uscs_ppzksnark_processed_verification_key<ppT> &pvk,
444 const uscs_ppzksnark_primary_input<ppT> &primary_input,
445 const uscs_ppzksnark_proof<ppT> &proof);
451 #endif // USCS_PPZKSNARK_HPP_
bool uscs_ppzksnark_verifier_strong_IC(const uscs_ppzksnark_verification_key< ppT > &vk, const uscs_ppzksnark_primary_input< ppT > &primary_input, const uscs_ppzksnark_proof< ppT > &proof)
libff::G1_vector< ppT > H_g1_query
static uscs_ppzksnark_verification_key< ppT > dummy_verification_key(const size_t input_size)
size_t G1_sparse_size() const
bool uscs_ppzksnark_verifier_weak_IC(const uscs_ppzksnark_verification_key< ppT > &vk, const uscs_ppzksnark_primary_input< ppT > &primary_input, const uscs_ppzksnark_proof< ppT > &proof)
accumulation_vector< libff::G1< ppT > > encoded_IC_query
bool operator==(const uscs_ppzksnark_verification_key< ppT > &other) const
uscs_ppzksnark_proving_key< ppT > pk
uscs_ppzksnark_constraint_system< ppT > constraint_system
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
libff::G2< ppT > alpha_tilde_g2
bool operator==(const uscs_ppzksnark_processed_verification_key &other) const
bool uscs_ppzksnark_online_verifier_weak_IC(const uscs_ppzksnark_processed_verification_key< ppT > &pvk, const uscs_ppzksnark_primary_input< ppT > &primary_input, const uscs_ppzksnark_proof< ppT > &proof)
libff::G1< ppT > alpha_V_g1
uscs_ppzksnark_verification_key(const libff::G2< ppT > &tilde_g2, const libff::G2< ppT > &alpha_tilde_g2, const libff::G2< ppT > &Z_g2, const accumulation_vector< libff::G1< ppT >> &eIC)
libff::G2_vector< ppT > V_g2_query
libff::G1_vector< ppT > alpha_V_g1_query
uscs_ppzksnark_verification_key()=default
size_t size_in_bits() const
size_t G2_sparse_size() const
libff::G2_precomp< ppT > vk_alpha_tilde_g2_precomp
uscs_ppzksnark_proving_key< ppT > & operator=(const uscs_ppzksnark_proving_key< ppT > &other)=default
size_t size_in_bits() const
libff::G2_precomp< ppT > vk_tilde_g2_precomp
libff::G1_vector< ppT > V_g1_query
uscs_ppzksnark_proof(libff::G1< ppT > &&V_g1, libff::G1< ppT > &&alpha_V_g1, libff::G1< ppT > &&H_g1, libff::G2< ppT > &&V_g2)
bool operator==(const uscs_ppzksnark_proof< ppT > &other) const
uscs_ppzksnark_proving_key(libff::G1_vector< ppT > &&V_g1_query, libff::G1_vector< ppT > &&alpha_V_g1_query, libff::G1_vector< ppT > &&H_g1_query, libff::G2_vector< ppT > &&V_g2_query, uscs_ppzksnark_constraint_system< ppT > &&constraint_system)
size_t size_in_bits() const
uscs_ppzksnark_keypair(uscs_ppzksnark_proving_key< ppT > &&pk, uscs_ppzksnark_verification_key< ppT > &&vk)
libff::G2< ppT > tilde_g2
bool uscs_ppzksnark_online_verifier_strong_IC(const uscs_ppzksnark_processed_verification_key< ppT > &pvk, const uscs_ppzksnark_primary_input< ppT > &primary_input, const uscs_ppzksnark_proof< ppT > &proof)
uscs_ppzksnark_processed_verification_key< ppT > uscs_ppzksnark_verifier_process_vk(const uscs_ppzksnark_verification_key< ppT > &vk)
libff::G2_precomp< ppT > pp_G2_one_precomp
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
uscs_ppzksnark_proof< ppT > uscs_ppzksnark_prover(const uscs_ppzksnark_proving_key< ppT > &pk, const uscs_ppzksnark_primary_input< ppT > &primary_input, const uscs_ppzksnark_auxiliary_input< ppT > &auxiliary_input)
libff::G1_precomp< ppT > pp_G1_one_precomp
size_t size_in_bits() const
accumulation_vector< libff::G1< ppT > > encoded_IC_query
uscs_ppzksnark_verification_key< ppT > vk
uscs_ppzksnark_proving_key()
libff::G2_precomp< ppT > vk_Z_g2_precomp
bool is_well_formed() const
libff::GT< ppT > pairing_of_g1_and_g2
uscs_ppzksnark_keypair< ppT > uscs_ppzksnark_generator(const uscs_ppzksnark_constraint_system< ppT > &cs)
bool operator==(const uscs_ppzksnark_proving_key< ppT > &other) const