Clearmatics Libsnark
0.1
C++ library for zkSNARK proofs
|
Go to the documentation of this file.
44 #ifndef R1CS_PPZKADSNARK_HPP_
45 #define R1CS_PPZKADSNARK_HPP_
47 #include <libff/algebra/curves/public_params.hpp>
64 template<
typename ppT>
68 template<
typename ppT>
78 libff::G1<snark_pp<ppT>>
I1;
88 :
I1(std::move(
I1)){};
91 friend std::ostream &operator<<<ppT>(
93 friend std::istream &
operator>>
102 template<
typename ppT>
106 template<
typename ppT>
116 libff::Fr<snark_pp<ppT>>
i;
131 :
i(std::move(
i)),
skp(std::move(
skp)),
S(std::move(
S)){};
134 friend std::ostream &operator<<<ppT>(
136 friend std::istream &
operator>>
145 template<
typename ppT>
149 template<
typename ppT>
174 friend std::ostream &operator<<<ppT>(
176 friend std::istream &
operator>>
207 template<
typename ppT>
211 template<
typename ppT>
221 libff::Fr<snark_pp<ppT>>
mu;
241 friend std::ostream &operator<<<ppT>(
243 friend std::istream &
operator>>
251 template<
typename ppT>
255 template<
typename ppT>
266 libff::G1<snark_pp<ppT>>,
267 libff::G1<snark_pp<ppT>>>
270 libff::G2<snark_pp<ppT>>,
271 libff::G1<snark_pp<ppT>>>
274 libff::G1<snark_pp<ppT>>,
275 libff::G1<snark_pp<ppT>>>
339 libff::print_indent();
340 printf(
"* G1 elements in PK: %zu\n", this->
G1_size());
341 libff::print_indent();
342 printf(
"* Non-zero G1 elements in PK: %zu\n", this->
G1_sparse_size());
343 libff::print_indent();
344 printf(
"* G2 elements in PK: %zu\n", this->
G2_size());
345 libff::print_indent();
346 printf(
"* Non-zero G2 elements in PK: %zu\n", this->
G2_sparse_size());
347 libff::print_indent();
348 printf(
"* PK size in bits: %zu\n", this->
size_in_bits());
352 friend std::ostream &operator<<<ppT>(
354 friend std::istream &
operator>>
362 template<
typename ppT>
366 template<
typename ppT>
384 libff::G1<snark_pp<ppT>>
A0;
385 libff::G1_vector<snark_pp<ppT>>
Ain;
422 libff::print_indent();
423 printf(
"* G1 elements in VK: %zu\n", this->
G1_size());
424 libff::print_indent();
425 printf(
"* G2 elements in VK: %zu\n", this->
G2_size());
426 libff::print_indent();
427 printf(
"* VK size in bits: %zu\n", this->
size_in_bits());
431 friend std::ostream &operator<<<ppT>(
433 friend std::istream &
operator>>
437 const size_t input_size);
444 template<
typename ppT>
449 template<
typename ppT>
473 libff::G1<snark_pp<ppT>>
A0;
474 libff::G1_vector<snark_pp<ppT>>
Ain;
480 friend std::ostream &operator<<<ppT>(
483 friend std::istream &
operator>><ppT>(
506 :
pk(std::move(
pk)),
vk(std::move(
vk))
517 template<
typename ppT>
521 template<
typename ppT>
540 libff::G1<snark_pp<ppT>>
g_H;
541 libff::G1<snark_pp<ppT>>
g_K;
544 libff::G1<snark_pp<ppT>>
muA;
549 this->
g_A.
g = libff::G1<snark_pp<ppT>>::one();
550 this->
g_A.
h = libff::G1<snark_pp<ppT>>::one();
551 this->
g_B.
g = libff::G2<snark_pp<ppT>>::one();
552 this->
g_B.
h = libff::G1<snark_pp<ppT>>::one();
553 this->
g_C.
g = libff::G1<snark_pp<ppT>>::one();
554 this->
g_C.
h = libff::G1<snark_pp<ppT>>::one();
555 this->g_H = libff::G1<snark_pp<ppT>>::one();
556 this->g_K = libff::G1<snark_pp<ppT>>::one();
558 libff::G1<snark_pp<ppT>>,
559 libff::G1<snark_pp<ppT>>>(
560 libff::G1<snark_pp<ppT>>::one(), libff::G1<snark_pp<ppT>>::one());
561 this->muA = libff::G1<snark_pp<ppT>>::one();
595 libff::print_indent();
596 printf(
"* G1 elements in proof: %zu\n", this->
G1_size());
597 libff::print_indent();
598 printf(
"* G2 elements in proof: %zu\n", this->
G2_size());
599 libff::print_indent();
600 printf(
"* Proof size in bits: %zu\n", this->
size_in_bits());
606 g_A.
g.is_well_formed() &&
g_A.
h.is_well_formed() &&
607 g_B.
g.is_well_formed() &&
g_B.
h.is_well_formed() &&
608 g_C.
g.is_well_formed() &&
g_C.
h.is_well_formed() &&
609 g_H.is_well_formed() &&
g_K.is_well_formed() &&
611 muA.is_well_formed());
615 friend std::ostream &operator<<<ppT>(
617 friend std::istream &
operator>>
628 libff::multi_exp_base_form BaseForm = libff::multi_exp_base_form_normal>
634 template<
typename ppT>
636 const std::vector<libff::Fr<snark_pp<ppT>>> &ins,
637 const r1cs_ppzkadsnark_sec_auth_key<ppT> &sk,
638 const std::vector<labelT> labels);
643 template<
typename ppT>
645 const std::vector<libff::Fr<snark_pp<ppT>>> &data,
646 const std::vector<r1cs_ppzkadsnark_auth_data<ppT>> &auth_data,
647 const r1cs_ppzkadsnark_sec_auth_key<ppT> &sak,
648 const std::vector<labelT> &labels);
650 template<
typename ppT>
652 const std::vector<libff::Fr<snark_pp<ppT>>> &data,
653 const std::vector<r1cs_ppzkadsnark_auth_data<ppT>> &auth_data,
654 const r1cs_ppzkadsnark_pub_auth_key<ppT> &pak,
655 const std::vector<labelT> &labels);
663 template<
typename ppT>
665 const r1cs_ppzkadsnark_constraint_system<ppT> &cs,
666 const r1cs_ppzkadsnark_pub_auth_prms<ppT> &prms);
677 template<
typename ppT>
679 const r1cs_ppzkadsnark_proving_key<ppT> &pk,
680 const r1cs_ppzkadsnark_primary_input<ppT> &primary_input,
681 const r1cs_ppzkadsnark_auxiliary_input<ppT> &auxiliary_input,
682 const std::vector<r1cs_ppzkadsnark_auth_data<ppT>> &auth_data);
701 template<
typename ppT>
702 r1cs_ppzkadsnark_processed_verification_key<ppT>
704 const r1cs_ppzkadsnark_verification_key<ppT> &vk);
710 template<
typename ppT>
712 const r1cs_ppzkadsnark_verification_key<ppT> &vk,
713 const r1cs_ppzkadsnark_proof<ppT> &proof,
714 const r1cs_ppzkadsnark_sec_auth_key<ppT> &sak,
715 const std::vector<labelT> &labels);
721 template<
typename ppT>
723 const r1cs_ppzkadsnark_processed_verification_key<ppT> &pvk,
724 const r1cs_ppzkadsnark_proof<ppT> &proof,
725 const r1cs_ppzkadsnark_sec_auth_key<ppT> &sak,
726 const std::vector<labelT> &labels);
732 template<
typename ppT>
734 const r1cs_ppzkadsnark_verification_key<ppT> &vk,
735 const std::vector<r1cs_ppzkadsnark_auth_data<ppT>> &auth_data,
736 const r1cs_ppzkadsnark_proof<ppT> &proof,
737 const r1cs_ppzkadsnark_pub_auth_key<ppT> &pak,
738 const std::vector<labelT> &labels);
744 template<
typename ppT>
746 const r1cs_ppzkadsnark_processed_verification_key<ppT> &pvk,
747 const std::vector<r1cs_ppzkadsnark_auth_data<ppT>> &auth_data,
748 const r1cs_ppzkadsnark_proof<ppT> &proof,
749 const r1cs_ppzkadsnark_pub_auth_key<ppT> &pak,
750 const std::vector<labelT> &labels);
756 #endif // R1CS_PPZKSNARK_HPP_
knowledge_commitment< libff::G1< snark_pp< ppT > >, libff::G1< snark_pp< ppT > > > g_A
libff::G1_precomp< snark_pp< ppT > > vk_gamma_beta_g1_precomp
libff::G2< snark_pp< ppT > > gamma_beta_g2
r1cs_ppzkadsnark_skT< ppT > skp
knowledge_commitment< libff::G2< snark_pp< ppT > >, libff::G1< snark_pp< ppT > > > g_B
libff::G1_vector< snark_pp< ppT > > Ain
bool operator==(const r1cs_ppzkadsnark_processed_verification_key &other) const
libff::G2< snark_pp< ppT > > minusI2
libff::G2< snark_pp< ppT > > alphaC_g2
libff::G2_precomp< snark_pp< ppT > > vk_rC_i_g2_precomp
size_t size_in_bits() const
r1cs_ppzkadsnark_pub_auth_prms< ppT > pap
bool r1cs_ppzkadsnark_verifier(const r1cs_ppzkadsnark_verification_key< ppT > &vk, const r1cs_ppzkadsnark_proof< ppT > &proof, const r1cs_ppzkadsnark_sec_auth_key< ppT > &sak, const std::vector< labelT > &labels)
libff::G2< snark_pp< ppT > > gamma_g2
size_t size_in_bits() const
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
typename r1cs_ppzkadsnark_ppT::snark_pp snark_pp
r1cs_ppzkadsnark_proof< ppT > r1cs_ppzkadsnark_prover(const r1cs_ppzkadsnark_proving_key< ppT > &pk, const r1cs_ppzkadsnark_primary_input< ppT > &primary_input, const r1cs_ppzkadsnark_auxiliary_input< ppT > &auxiliary_input, const std::vector< r1cs_ppzkadsnark_auth_data< ppT >> &auth_data)
bool operator==(const r1cs_ppzkadsnark_auth_data< ppT > &other) const
libff::G1< snark_pp< ppT > > muA
r1cs_ppzkadsnark_proving_key< ppT > & operator=(const r1cs_ppzkadsnark_proving_key< ppT > &other)=default
libff::G2_precomp< snark_pp< ppT > > vk_rC_Z_g2_precomp
knowledge_commitment_vector< libff::G1< snark_pp< ppT > >, libff::G1< snark_pp< ppT > > > A_query
std::vector< libff::G1_precomp< snark_pp< ppT > > > proof_g_vki_precomp
r1cs_ppzkadsnark_pub_auth_prms(libff::G1< snark_pp< ppT >> &&I1)
knowledge_commitment< libff::G1< snark_pp< ppT > >, libff::G1< snark_pp< ppT > > > g_C
size_t size_in_bits() const
libff::G1_vector< snark_pp< ppT > > K_query
std::vector< r1cs_ppzkadsnark_auth_data< ppT > > r1cs_ppzkadsnark_auth_sign(const std::vector< libff::Fr< snark_pp< ppT >>> &ins, const r1cs_ppzkadsnark_sec_auth_key< ppT > &sk, const std::vector< labelT > labels)
r1cs_ppzkadsnark_auth_keys(r1cs_ppzkadsnark_pub_auth_prms< ppT > &&pap, r1cs_ppzkadsnark_pub_auth_key< ppT > &&pak, r1cs_ppzkadsnark_sec_auth_key< ppT > &&sak)
r1cs_ppzkadsnark_pub_auth_key< ppT > & operator=(const r1cs_ppzkadsnark_pub_auth_key< ppT > &other)=default
r1cs_ppzkadsnark_sigT< ppT > sigma
bool operator==(const r1cs_ppzkadsnark_verification_key< ppT > &other) const
r1cs_ppzkadsnark_processed_verification_key< ppT > r1cs_ppzkadsnark_verifier_process_vk(const r1cs_ppzkadsnark_verification_key< ppT > &vk)
libff::G2< snark_pp< ppT > > alphaA_g2
r1cs_ppzkadsnark_pub_auth_key(libff::G2< snark_pp< ppT >> &&minusI2, r1cs_ppzkadsnark_vkT< ppT > &&vkp)
knowledge_commitment< libff::G1< snark_pp< ppT > >, libff::G1< snark_pp< ppT > > > g_Aau
libff::G2_precomp< snark_pp< ppT > > vk_gamma_g2_precomp
knowledge_commitment_vector< libff::G2< snark_pp< ppT > >, libff::G1< snark_pp< ppT > > > B_query
r1cs_ppzkadsnark_auth_data< ppT > & operator=(const r1cs_ppzkadsnark_auth_data< ppT > &other)=default
libff::G1_precomp< snark_pp< ppT > > vk_alphaB_g1_precomp
r1cs_ppzkadsnark_proving_key()
r1cs_ppzkadsnark_verification_key< ppT > vk
libff::G1< snark_pp< ppT > > I1
r1cs_ppzkadsnark_verification_key(const libff::G2< snark_pp< ppT >> &alphaA_g2, const libff::G1< snark_pp< ppT >> &alphaB_g1, const libff::G2< snark_pp< ppT >> &alphaC_g2, const libff::G2< snark_pp< ppT >> &gamma_g2, const libff::G1< snark_pp< ppT >> &gamma_beta_g1, const libff::G2< snark_pp< ppT >> &gamma_beta_g2, const libff::G2< snark_pp< ppT >> &rC_Z_g2, const libff::G1< snark_pp< ppT >> A0, const libff::G1_vector< snark_pp< ppT >> Ain)
typename r1cs_ppzkadsnark_ppT::skT r1cs_ppzkadsnark_skT
libff::G2_precomp< snark_pp< ppT > > vk_alphaC_g2_precomp
libff::G2< snark_pp< ppT > > Lambda
libff::G1< snark_pp< ppT > > A0
size_t G2_sparse_size() const
r1cs_ppzkadsnark_sec_auth_key< ppT > sak
typename r1cs_ppzkadsnark_ppT::sigT r1cs_ppzkadsnark_sigT
typename r1cs_ppzkadsnark_ppT::vkT r1cs_ppzkadsnark_vkT
libff::G2_precomp< snark_pp< ppT > > pp_G2_one_precomp
r1cs_ppzkadsnark_prfKeyT< ppT > S
bool operator==(const r1cs_ppzkadsnark_pub_auth_prms< ppT > &other) const
r1cs_ppzkadsnark_pub_auth_key()
r1cs_ppzkadsnark_sec_auth_key< ppT > & operator=(const r1cs_ppzkadsnark_sec_auth_key< ppT > &other)=default
libff::G1< snark_pp< ppT > > alphaB_g1
static r1cs_ppzkadsnark_verification_key< ppT > dummy_verification_key(const size_t input_size)
r1cs_ppzkadsnark_pub_auth_key< ppT > pak
bool operator==(const r1cs_ppzkadsnark_proof< ppT > &other) const
libff::G2_precomp< snark_pp< ppT > > vk_gamma_beta_g2_precomp
r1cs_ppzkadsnark_constraint_system< ppT > constraint_system
bool is_well_formed() const
r1cs_ppzkadsnark_keypair(r1cs_ppzkadsnark_proving_key< ppT > &&pk, r1cs_ppzkadsnark_verification_key< ppT > &&vk)
libff::G1< snark_pp< ppT > > g_H
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
libff::G2_precomp< snark_pp< ppT > > vk_alphaA_g2_precomp
libff::G1< snark_pp< ppT > > rA_i_Z_g1
r1cs_ppzkadsnark_proving_key(knowledge_commitment_vector< libff::G1< snark_pp< ppT >>, libff::G1< snark_pp< ppT >>> &&A_query, knowledge_commitment_vector< libff::G2< snark_pp< ppT >>, libff::G1< snark_pp< ppT >>> &&B_query, knowledge_commitment_vector< libff::G1< snark_pp< ppT >>, libff::G1< snark_pp< ppT >>> &&C_query, libff::G1_vector< snark_pp< ppT >> &&H_query, libff::G1_vector< snark_pp< ppT >> &&K_query, libff::G1< snark_pp< ppT >> &&rA_i_Z_g1, r1cs_ppzkadsnark_constraint_system< ppT > &&constraint_system)
r1cs_ppzkadsnark_proof(knowledge_commitment< libff::G1< snark_pp< ppT >>, libff::G1< snark_pp< ppT >>> &&g_A, knowledge_commitment< libff::G2< snark_pp< ppT >>, libff::G1< snark_pp< ppT >>> &&g_B, knowledge_commitment< libff::G1< snark_pp< ppT >>, libff::G1< snark_pp< ppT >>> &&g_C, libff::G1< snark_pp< ppT >> &&g_H, libff::G1< snark_pp< ppT >> &&g_K, knowledge_commitment< libff::G1< snark_pp< ppT >>, libff::G1< snark_pp< ppT >>> &&g_Aau, libff::G1< snark_pp< ppT >> &&muA)
r1cs_ppzkadsnark_vkT< ppT > vkp
libff::Fr< snark_pp< ppT > > mu
r1cs_ppzkadsnark_proving_key< ppT > pk
libff::G1< snark_pp< ppT > > gamma_beta_g1
r1cs_ppzkadsnark_auth_keys()
bool r1cs_ppzkadsnark_auth_verify(const std::vector< libff::Fr< snark_pp< ppT >>> &data, const std::vector< r1cs_ppzkadsnark_auth_data< ppT >> &auth_data, const r1cs_ppzkadsnark_sec_auth_key< ppT > &sak, const std::vector< labelT > &labels)
r1cs_ppzkadsnark_sec_auth_key(libff::Fr< snark_pp< ppT >> &&i, r1cs_ppzkadsnark_skT< ppT > &&skp, r1cs_ppzkadsnark_prfKeyT< ppT > &&S)
bool operator==(const r1cs_ppzkadsnark_pub_auth_key< ppT > &other) const
r1cs_ppzkadsnark_auth_data()
bool operator==(const r1cs_ppzkadsnark_sec_auth_key< ppT > &other) const
size_t G1_sparse_size() const
libff::G1< snark_pp< ppT > > A0
knowledge_commitment_vector< libff::G1< snark_pp< ppT > >, libff::G1< snark_pp< ppT > > > C_query
r1cs_ppzkadsnark_auth_data(libff::Fr< snark_pp< ppT >> &&mu, libff::G2< snark_pp< ppT >> &&Lambda, r1cs_ppzkadsnark_sigT< ppT > &&sigma)
bool operator==(const r1cs_ppzkadsnark_proving_key< ppT > &other) const
libff::G1_vector< snark_pp< ppT > > H_query
bool r1cs_ppzkadsnark_online_verifier(const r1cs_ppzkadsnark_processed_verification_key< ppT > &pvk, const r1cs_ppzkadsnark_proof< ppT > &proof, const r1cs_ppzkadsnark_sec_auth_key< ppT > &sak, const std::vector< labelT > &labels)
libff::G2< snark_pp< ppT > > rC_Z_g2
r1cs_ppzkadsnark_verification_key()=default
typename r1cs_ppzkadsnark_ppT::prfKeyT r1cs_ppzkadsnark_prfKeyT
libff::G1_vector< snark_pp< ppT > > Ain
libff::G1< snark_pp< ppT > > g_K
r1cs_ppzkadsnark_pub_auth_prms< ppT > & operator=(const r1cs_ppzkadsnark_pub_auth_prms< ppT > &other)=default
r1cs_ppzkadsnark_auth_keys< ppT > r1cs_ppzkadsnark_auth_generator(void)
r1cs_ppzkadsnark_keypair()=default
r1cs_ppzkadsnark_sec_auth_key()
libff::Fr< snark_pp< ppT > > i
r1cs_ppzkadsnark_pub_auth_prms()
r1cs_ppzkadsnark_keypair< ppT > r1cs_ppzkadsnark_generator(const r1cs_ppzkadsnark_constraint_system< ppT > &cs, const r1cs_ppzkadsnark_pub_auth_prms< ppT > &prms)