Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
tbcs_ppzksnark.hpp
Go to the documentation of this file.
1 
35 #ifndef TBCS_PPZKSNARK_HPP_
36 #define TBCS_PPZKSNARK_HPP_
37 
41 
42 namespace libsnark
43 {
44 
45 /******************************** Proving key ********************************/
46 
47 template<typename ppT> class tbcs_ppzksnark_proving_key;
48 
49 template<typename ppT>
50 std::ostream &operator<<(
51  std::ostream &out, const tbcs_ppzksnark_proving_key<ppT> &pk);
52 
53 template<typename ppT>
54 std::istream &operator>>(std::istream &in, tbcs_ppzksnark_proving_key<ppT> &pk);
55 
59 template<typename ppT> class tbcs_ppzksnark_proving_key
60 {
61 public:
62  typedef libff::Fr<ppT> FieldT;
63 
66 
69  default;
71  default;
76  {
77  }
81  : circuit(std::move(circuit)), uscs_pk(std::move(uscs_pk))
82  {
83  }
84 
86  const tbcs_ppzksnark_proving_key<ppT> &other) = default;
87 
88  size_t G1_size() const { return uscs_pk.G1_size(); }
89 
90  size_t G2_size() const { return uscs_pk.G2_size(); }
91 
92  size_t G1_sparse_size() const { return uscs_pk.G1_sparse_size(); }
93 
94  size_t G2_sparse_size() const { return uscs_pk.G2_sparse_size(); }
95 
96  size_t size_in_bits() const { return uscs_pk.size_in_bits(); }
97 
98  void print_size() const { uscs_pk.print_size(); }
99 
100  bool operator==(const tbcs_ppzksnark_proving_key<ppT> &other) const;
101  friend std::ostream &operator<<<ppT>(
102  std::ostream &out, const tbcs_ppzksnark_proving_key<ppT> &pk);
103  friend std::istream &operator>>
104  <ppT>(std::istream &in, tbcs_ppzksnark_proving_key<ppT> &pk);
105 };
106 
107 /******************************* Verification key ****************************/
108 
112 template<typename ppT>
114 
115 /************************ Processed verification key *************************/
116 
124 template<typename ppT>
127 
128 /********************************** Key pair *********************************/
129 
134 template<typename ppT> class tbcs_ppzksnark_keypair
135 {
136 public:
139 
145  : pk(pk), vk(vk)
146  {
147  }
148 
152  : pk(std::move(pk)), vk(std::move(vk))
153  {
154  }
155 };
156 
157 /*********************************** Proof ***********************************/
158 
162 template<typename ppT> using tbcs_ppzksnark_proof = uscs_ppzksnark_proof<ppT>;
163 
164 /***************************** Main algorithms *******************************/
165 
172 template<typename ppT>
174  const tbcs_ppzksnark_circuit &circuit);
175 
185 template<typename ppT>
188  const tbcs_ppzksnark_primary_input &primary_input,
189  const tbcs_ppzksnark_auxiliary_input &auxiliary_input);
190 
191 /*
192  Below are four variants of verifier algorithm for the TBCS ppzkSNARK.
193 
194  These are the four cases that arise from the following two choices:
195 
196  (1) The verifier accepts a (non-processed) verification key or, instead, a
197  processed verification key. In the latter case, we call the algorithm an
198  "online verifier".
199 
200  (2) The verifier checks for "weak" input consistency or, instead, "strong"
201  input consistency. Strong input consistency requires that |primary_input| =
202  C.num_inputs, whereas weak input consistency requires that |primary_input| <=
203  C.num_inputs (and the primary input is implicitly padded with zeros up to
204  length C.num_inputs).
205  */
206 
212 template<typename ppT>
215  const tbcs_ppzksnark_primary_input &primary_input,
216  const tbcs_ppzksnark_proof<ppT> &proof);
217 
223 template<typename ppT>
226  const tbcs_ppzksnark_primary_input &primary_input,
227  const tbcs_ppzksnark_proof<ppT> &proof);
228 
232 template<typename ppT>
235 
241 template<typename ppT>
244  const tbcs_ppzksnark_primary_input &primary_input,
245  const tbcs_ppzksnark_proof<ppT> &proof);
246 
252 template<typename ppT>
255  const tbcs_ppzksnark_primary_input &primary_input,
256  const tbcs_ppzksnark_proof<ppT> &proof);
257 
258 } // namespace libsnark
259 
261 
262 #endif // TBCS_PPZKSNARK_HPP_
libsnark::tbcs_ppzksnark_proving_key::G2_size
size_t G2_size() const
Definition: tbcs_ppzksnark.hpp:90
libsnark::tbcs_circuit
Definition: tbcs.hpp:133
libsnark::tbcs_ppzksnark_proving_key::operator=
tbcs_ppzksnark_proving_key< ppT > & operator=(const tbcs_ppzksnark_proving_key< ppT > &other)=default
libsnark
Definition: accumulation_vector.hpp:18
libsnark::operator<<
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
libsnark::tbcs_ppzksnark_primary_input
tbcs_primary_input tbcs_ppzksnark_primary_input
Definition: tbcs_ppzksnark_params.hpp:27
libsnark::tbcs_ppzksnark_proving_key::G1_sparse_size
size_t G1_sparse_size() const
Definition: tbcs_ppzksnark.hpp:92
libsnark::uscs_ppzksnark_verification_key
Definition: uscs_ppzksnark.hpp:143
libsnark::tbcs_ppzksnark_keypair::vk
tbcs_ppzksnark_verification_key< ppT > vk
Definition: tbcs_ppzksnark.hpp:138
libsnark::tbcs_ppzksnark_proving_key::FieldT
libff::Fr< ppT > FieldT
Definition: tbcs_ppzksnark.hpp:62
libsnark::tbcs_ppzksnark_verifier_strong_IC
bool tbcs_ppzksnark_verifier_strong_IC(const tbcs_ppzksnark_verification_key< ppT > &vk, const tbcs_ppzksnark_primary_input &primary_input, const tbcs_ppzksnark_proof< ppT > &proof)
libsnark::tbcs_ppzksnark_proving_key::uscs_pk
uscs_ppzksnark_proving_key< ppT > uscs_pk
Definition: tbcs_ppzksnark.hpp:65
libsnark::tbcs_ppzksnark_verifier_process_vk
tbcs_ppzksnark_processed_verification_key< ppT > tbcs_ppzksnark_verifier_process_vk(const tbcs_ppzksnark_verification_key< ppT > &vk)
libsnark::tbcs_ppzksnark_keypair
Definition: tbcs_ppzksnark.hpp:134
libsnark::tbcs_ppzksnark_proving_key
Definition: tbcs_ppzksnark.hpp:47
libsnark::tbcs_ppzksnark_keypair::tbcs_ppzksnark_keypair
tbcs_ppzksnark_keypair(const tbcs_ppzksnark_proving_key< ppT > &pk, const tbcs_ppzksnark_verification_key< ppT > &vk)
Definition: tbcs_ppzksnark.hpp:142
libsnark::tbcs_ppzksnark_keypair::tbcs_ppzksnark_keypair
tbcs_ppzksnark_keypair()
Definition: tbcs_ppzksnark.hpp:140
tbcs.hpp
libsnark::tbcs_ppzksnark_proving_key::size_in_bits
size_t size_in_bits() const
Definition: tbcs_ppzksnark.hpp:96
libsnark::tbcs_ppzksnark_proving_key::print_size
void print_size() const
Definition: tbcs_ppzksnark.hpp:98
libsnark::uscs_ppzksnark_proving_key
Definition: uscs_ppzksnark.hpp:62
tbcs_ppzksnark_params.hpp
libsnark::tbcs_ppzksnark_keypair::pk
tbcs_ppzksnark_proving_key< ppT > pk
Definition: tbcs_ppzksnark.hpp:137
libsnark::tbcs_ppzksnark_prover
tbcs_ppzksnark_proof< ppT > tbcs_ppzksnark_prover(const tbcs_ppzksnark_proving_key< ppT > &pk, const tbcs_ppzksnark_primary_input &primary_input, const tbcs_ppzksnark_auxiliary_input &auxiliary_input)
libsnark::tbcs_ppzksnark_proving_key::tbcs_ppzksnark_proving_key
tbcs_ppzksnark_proving_key()
Definition: tbcs_ppzksnark.hpp:67
tbcs_ppzksnark.tcc
libsnark::tbcs_ppzksnark_auxiliary_input
tbcs_auxiliary_input tbcs_ppzksnark_auxiliary_input
Definition: tbcs_ppzksnark_params.hpp:29
libsnark::operator>>
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
libsnark::uscs_ppzksnark_proof
Definition: uscs_ppzksnark.hpp:272
libsnark::tbcs_ppzksnark_proving_key::circuit
tbcs_ppzksnark_circuit circuit
Definition: tbcs_ppzksnark.hpp:64
libsnark::tbcs_ppzksnark_proving_key::G1_size
size_t G1_size() const
Definition: tbcs_ppzksnark.hpp:88
libsnark::tbcs_ppzksnark_generator
tbcs_ppzksnark_keypair< ppT > tbcs_ppzksnark_generator(const tbcs_ppzksnark_circuit &circuit)
libsnark::tbcs_ppzksnark_proving_key::tbcs_ppzksnark_proving_key
tbcs_ppzksnark_proving_key(const tbcs_ppzksnark_circuit &circuit, const uscs_ppzksnark_proving_key< ppT > &uscs_pk)
Definition: tbcs_ppzksnark.hpp:72
libsnark::uscs_ppzksnark_processed_verification_key
Definition: uscs_ppzksnark.hpp:208
libsnark::tbcs_ppzksnark_keypair::tbcs_ppzksnark_keypair
tbcs_ppzksnark_keypair(tbcs_ppzksnark_proving_key< ppT > &&pk, tbcs_ppzksnark_verification_key< ppT > &&vk)
Definition: tbcs_ppzksnark.hpp:149
libsnark::tbcs_ppzksnark_proving_key::G2_sparse_size
size_t G2_sparse_size() const
Definition: tbcs_ppzksnark.hpp:94
libsnark::tbcs_ppzksnark_online_verifier_strong_IC
bool tbcs_ppzksnark_online_verifier_strong_IC(const tbcs_ppzksnark_processed_verification_key< ppT > &pvk, const tbcs_ppzksnark_primary_input &primary_input, const tbcs_ppzksnark_proof< ppT > &proof)
libsnark::tbcs_ppzksnark_verifier_weak_IC
bool tbcs_ppzksnark_verifier_weak_IC(const tbcs_ppzksnark_verification_key< ppT > &vk, const tbcs_ppzksnark_primary_input &primary_input, const tbcs_ppzksnark_proof< ppT > &proof)
libsnark::tbcs_ppzksnark_online_verifier_weak_IC
bool tbcs_ppzksnark_online_verifier_weak_IC(const tbcs_ppzksnark_processed_verification_key< ppT > &pvk, const tbcs_ppzksnark_primary_input &primary_input, const tbcs_ppzksnark_proof< ppT > &proof)
libsnark::tbcs_ppzksnark_proving_key::operator==
bool operator==(const tbcs_ppzksnark_proving_key< ppT > &other) const
libsnark::tbcs_ppzksnark_proving_key::tbcs_ppzksnark_proving_key
tbcs_ppzksnark_proving_key(tbcs_ppzksnark_circuit &&circuit, uscs_ppzksnark_proving_key< ppT > &&uscs_pk)
Definition: tbcs_ppzksnark.hpp:78
uscs_ppzksnark.hpp