Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
r1cs_sp_ppzkpcd.hpp
Go to the documentation of this file.
1 
40 #ifndef R1CS_SP_PPZKPCD_HPP_
41 #define R1CS_SP_PPZKPCD_HPP_
42 
45 #include <memory>
46 
47 namespace libsnark
48 {
49 
50 /******************************** Proving key ********************************/
51 
52 template<typename PCD_ppT> class r1cs_sp_ppzkpcd_proving_key;
53 
54 template<typename PCD_ppT>
55 std::ostream &operator<<(
56  std::ostream &out, const r1cs_sp_ppzkpcd_proving_key<PCD_ppT> &pk);
57 
58 template<typename PCD_ppT>
59 std::istream &operator>>(
60  std::istream &in, r1cs_sp_ppzkpcd_proving_key<PCD_ppT> &pk);
61 
65 template<typename PCD_ppT> class r1cs_sp_ppzkpcd_proving_key
66 {
67 public:
68  typedef typename PCD_ppT::curve_A_pp A_pp;
69  typedef typename PCD_ppT::curve_B_pp B_pp;
70 
72 
75 
78 
81  const r1cs_sp_ppzkpcd_proving_key<PCD_ppT> &other) = default;
83  default;
96 
98  const r1cs_sp_ppzkpcd_proving_key<PCD_ppT> &other) = default;
99 
100  size_t size_in_bits() const
101  {
102  return (
107  }
108 
109  bool operator==(const r1cs_sp_ppzkpcd_proving_key<PCD_ppT> &other) const;
110  friend std::ostream &operator<<<PCD_ppT>(
111  std::ostream &out, const r1cs_sp_ppzkpcd_proving_key<PCD_ppT> &pk);
112  friend std::istream &operator>>
113  <PCD_ppT>(std::istream &in, r1cs_sp_ppzkpcd_proving_key<PCD_ppT> &pk);
114 };
115 
116 /******************************* Verification key ****************************/
117 
118 template<typename PCD_ppT> class r1cs_sp_ppzkpcd_verification_key;
119 
120 template<typename PCD_ppT>
121 std::ostream &operator<<(
122  std::ostream &out, const r1cs_sp_ppzkpcd_verification_key<PCD_ppT> &vk);
123 
124 template<typename PCD_ppT>
125 std::istream &operator>>(
126  std::istream &in, r1cs_sp_ppzkpcd_verification_key<PCD_ppT> &vk);
127 
131 template<typename PCD_ppT> class r1cs_sp_ppzkpcd_verification_key
132 {
133 public:
134  typedef typename PCD_ppT::curve_A_pp A_pp;
135  typedef typename PCD_ppT::curve_B_pp B_pp;
136 
139 
142  const r1cs_sp_ppzkpcd_verification_key<PCD_ppT> &other) = default;
150 
152  const r1cs_sp_ppzkpcd_verification_key<PCD_ppT> &other) = default;
153 
154  size_t size_in_bits() const
155  {
156  return (
159  }
160 
161  bool operator==(
162  const r1cs_sp_ppzkpcd_verification_key<PCD_ppT> &other) const;
163  friend std::ostream &operator<<<PCD_ppT>(
164  std::ostream &out, const r1cs_sp_ppzkpcd_verification_key<PCD_ppT> &vk);
165  friend std::istream &operator>><PCD_ppT>(
166  std::istream &in, r1cs_sp_ppzkpcd_verification_key<PCD_ppT> &vk);
167 
169 };
170 
171 /************************ Processed verification key *************************/
172 
173 template<typename PCD_ppT> class r1cs_sp_ppzkpcd_processed_verification_key;
174 
175 template<typename PCD_ppT>
176 std::ostream &operator<<(
177  std::ostream &out,
179 
180 template<typename PCD_ppT>
181 std::istream &operator>>(
183 
191 template<typename PCD_ppT> class r1cs_sp_ppzkpcd_processed_verification_key
192 {
193 public:
194  typedef typename PCD_ppT::curve_A_pp A_pp;
195  typedef typename PCD_ppT::curve_B_pp B_pp;
196 
199  libff::bit_vector translation_step_r1cs_vk_bits;
200 
204  default;
212  const libff::bit_vector &translation_step_r1cs_vk_bits)
216  std::move(translation_step_r1cs_vk_bits)){};
217 
220  default;
221 
222  size_t size_in_bits() const
223  {
224  return (
225  compliance_step_r1cs_pvk.size_in_bits() +
226  translation_step_r1cs_pvk.size_in_bits() +
228  }
229 
230  bool operator==(
232  friend std::ostream &operator<<<PCD_ppT>(
233  std::ostream &out,
235  friend std::istream &operator>><PCD_ppT>(
236  std::istream &in,
238 };
239 
240 /********************************* Key pair **********************************/
241 
246 template<typename PCD_ppT> class r1cs_sp_ppzkpcd_keypair
247 {
248 public:
249  typedef typename PCD_ppT::curve_A_pp A_pp;
250  typedef typename PCD_ppT::curve_B_pp B_pp;
251 
254 
260  : pk(std::move(pk)), vk(std::move(vk)){};
264  : pk(std::move(kp_A.pk), std::move(kp_B.pk))
265  , vk(std::move(kp_A.vk), std::move(kp_B.vk)){};
266 };
267 
268 /*********************************** Proof ***********************************/
269 
273 template<typename PCD_ppT>
274 using r1cs_sp_ppzkpcd_proof =
276 
277 /***************************** Main algorithms *******************************/
278 
285 template<typename PCD_ppT>
287  const r1cs_sp_ppzkpcd_compliance_predicate<PCD_ppT> &compliance_predicate);
288 
296 template<typename PCD_ppT>
299  const r1cs_sp_ppzkpcd_primary_input<PCD_ppT> &primary_input,
300  const r1cs_sp_ppzkpcd_auxiliary_input<PCD_ppT> &auxiliary_input,
301  const std::vector<r1cs_sp_ppzkpcd_proof<PCD_ppT>> &incoming_proofs);
302 
303 /*
304  Below are two variants of verifier algorithm for the R1CS (single-predicate)
305  ppzkPCD.
306 
307  These are the two cases that arise from whether the verifier accepts a
308  (non-processed) verification key or, instead, a processed verification key.
309  In the latter case, we call the algorithm an "online verifier".
310  */
311 
316 template<typename PCD_ppT>
319  const r1cs_sp_ppzkpcd_primary_input<PCD_ppT> &primary_input,
320  const r1cs_sp_ppzkpcd_proof<PCD_ppT> &proof);
321 
325 template<typename PCD_ppT>
328 
333 template<typename PCD_ppT>
336  const r1cs_sp_ppzkpcd_primary_input<PCD_ppT> &primary_input,
337  const r1cs_sp_ppzkpcd_proof<PCD_ppT> &proof);
338 
339 } // namespace libsnark
340 
342 
343 #endif // R1CS_SP_PPZKPCD_HPP_
libsnark::r1cs_sp_ppzkpcd_verification_key::B_pp
PCD_ppT::curve_B_pp B_pp
Definition: r1cs_sp_ppzkpcd.hpp:135
libsnark::r1cs_ppzksnark_proving_key::size_in_bits
size_t size_in_bits() const
Definition: r1cs_ppzksnark.hpp:122
libsnark::r1cs_sp_ppzkpcd_processed_verification_key::B_pp
PCD_ppT::curve_B_pp B_pp
Definition: r1cs_sp_ppzkpcd.hpp:195
libsnark::r1cs_sp_ppzkpcd_processed_verification_key::operator==
bool operator==(const r1cs_sp_ppzkpcd_processed_verification_key< PCD_ppT > &other) const
libsnark::r1cs_sp_ppzkpcd_keypair::pk
r1cs_sp_ppzkpcd_proving_key< PCD_ppT > pk
Definition: r1cs_sp_ppzkpcd.hpp:252
libsnark::r1cs_sp_ppzkpcd_proving_key::size_in_bits
size_t size_in_bits() const
Definition: r1cs_sp_ppzkpcd.hpp:100
libsnark
Definition: accumulation_vector.hpp:18
libsnark::r1cs_sp_ppzkpcd_verifier
bool r1cs_sp_ppzkpcd_verifier(const r1cs_sp_ppzkpcd_verification_key< PCD_ppT > &vk, const r1cs_sp_ppzkpcd_primary_input< PCD_ppT > &primary_input, const r1cs_sp_ppzkpcd_proof< PCD_ppT > &proof)
libsnark::r1cs_sp_ppzkpcd_verification_key::dummy_verification_key
static r1cs_sp_ppzkpcd_verification_key< PCD_ppT > dummy_verification_key()
libsnark::operator<<
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
libsnark::r1cs_sp_ppzkpcd_verification_key::size_in_bits
size_t size_in_bits() const
Definition: r1cs_sp_ppzkpcd.hpp:154
libsnark::r1cs_sp_ppzkpcd_proving_key::r1cs_sp_ppzkpcd_proving_key
r1cs_sp_ppzkpcd_proving_key(const r1cs_sp_ppzkpcd_compliance_predicate< PCD_ppT > &compliance_predicate, r1cs_ppzksnark_proving_key< A_pp > &&compliance_step_r1cs_pk, r1cs_ppzksnark_proving_key< B_pp > &&translation_step_r1cs_pk, const r1cs_ppzksnark_verification_key< A_pp > &compliance_step_r1cs_vk, const r1cs_ppzksnark_verification_key< B_pp > &translation_step_r1cs_vk)
Definition: r1cs_sp_ppzkpcd.hpp:84
libsnark::r1cs_sp_ppzkpcd_processed_verification_key::translation_step_r1cs_pvk
r1cs_ppzksnark_processed_verification_key< B_pp > translation_step_r1cs_pvk
Definition: r1cs_sp_ppzkpcd.hpp:198
libsnark::r1cs_sp_ppzkpcd_verification_key::operator==
bool operator==(const r1cs_sp_ppzkpcd_verification_key< PCD_ppT > &other) const
libsnark::r1cs_sp_ppzkpcd_proving_key::compliance_step_r1cs_vk
r1cs_ppzksnark_verification_key< A_pp > compliance_step_r1cs_vk
Definition: r1cs_sp_ppzkpcd.hpp:76
libsnark::r1cs_ppzksnark_processed_verification_key< A_pp >
libsnark::r1cs_sp_ppzkpcd_processed_verification_key::compliance_step_r1cs_pvk
r1cs_ppzksnark_processed_verification_key< A_pp > compliance_step_r1cs_pvk
Definition: r1cs_sp_ppzkpcd.hpp:197
libsnark::r1cs_sp_ppzkpcd_keypair
Definition: r1cs_sp_ppzkpcd.hpp:246
libsnark::r1cs_sp_ppzkpcd_processed_verification_key::r1cs_sp_ppzkpcd_processed_verification_key
r1cs_sp_ppzkpcd_processed_verification_key()
Definition: r1cs_sp_ppzkpcd.hpp:201
libsnark::r1cs_sp_ppzkpcd_processed_verification_key::translation_step_r1cs_vk_bits
libff::bit_vector translation_step_r1cs_vk_bits
Definition: r1cs_sp_ppzkpcd.hpp:199
libsnark::r1cs_sp_ppzkpcd_verification_key::r1cs_sp_ppzkpcd_verification_key
r1cs_sp_ppzkpcd_verification_key()=default
libsnark::r1cs_sp_ppzkpcd_keypair::A_pp
PCD_ppT::curve_A_pp A_pp
Definition: r1cs_sp_ppzkpcd.hpp:249
libsnark::r1cs_sp_ppzkpcd_processed_verification_key::size_in_bits
size_t size_in_bits() const
Definition: r1cs_sp_ppzkpcd.hpp:222
libsnark::r1cs_ppzksnark_proving_key< A_pp >
libsnark::r1cs_sp_ppzkpcd_prover
r1cs_sp_ppzkpcd_proof< PCD_ppT > r1cs_sp_ppzkpcd_prover(const r1cs_sp_ppzkpcd_proving_key< PCD_ppT > &pk, const r1cs_sp_ppzkpcd_primary_input< PCD_ppT > &primary_input, const r1cs_sp_ppzkpcd_auxiliary_input< PCD_ppT > &auxiliary_input, const std::vector< r1cs_sp_ppzkpcd_proof< PCD_ppT >> &incoming_proofs)
libsnark::r1cs_sp_ppzkpcd_proving_key::translation_step_r1cs_pk
r1cs_ppzksnark_proving_key< B_pp > translation_step_r1cs_pk
Definition: r1cs_sp_ppzkpcd.hpp:74
libsnark::r1cs_sp_ppzkpcd_keypair::vk
r1cs_sp_ppzkpcd_verification_key< PCD_ppT > vk
Definition: r1cs_sp_ppzkpcd.hpp:253
libsnark::r1cs_sp_ppzkpcd_verification_key::A_pp
PCD_ppT::curve_A_pp A_pp
Definition: r1cs_sp_ppzkpcd.hpp:134
libsnark::r1cs_sp_ppzkpcd_proving_key::operator=
r1cs_sp_ppzkpcd_proving_key< PCD_ppT > & operator=(const r1cs_sp_ppzkpcd_proving_key< PCD_ppT > &other)=default
libsnark::r1cs_pcd_compliance_predicate_auxiliary_input
Definition: r1cs_pcd_params.hpp:30
libsnark::r1cs_sp_ppzkpcd_generator
r1cs_sp_ppzkpcd_keypair< PCD_ppT > r1cs_sp_ppzkpcd_generator(const r1cs_sp_ppzkpcd_compliance_predicate< PCD_ppT > &compliance_predicate)
libsnark::r1cs_pcd_compliance_predicate
Definition: compliance_predicate.hpp:69
libsnark::r1cs_ppzksnark_proof< typename PCD_ppT::curve_B_pp >
r1cs_sp_ppzkpcd.tcc
libsnark::r1cs_ppzksnark_verification_key< A_pp >
libsnark::r1cs_sp_ppzkpcd_proving_key::B_pp
PCD_ppT::curve_B_pp B_pp
Definition: r1cs_sp_ppzkpcd.hpp:69
libsnark::r1cs_sp_ppzkpcd_processed_verification_key::r1cs_sp_ppzkpcd_processed_verification_key
r1cs_sp_ppzkpcd_processed_verification_key(r1cs_ppzksnark_processed_verification_key< A_pp > &&compliance_step_r1cs_pvk, r1cs_ppzksnark_processed_verification_key< B_pp > &&translation_step_r1cs_pvk, const libff::bit_vector &translation_step_r1cs_vk_bits)
Definition: r1cs_sp_ppzkpcd.hpp:207
libsnark::r1cs_sp_ppzkpcd_keypair::r1cs_sp_ppzkpcd_keypair
r1cs_sp_ppzkpcd_keypair(r1cs_sp_ppzkpcd_proving_key< PCD_ppT > &&pk, r1cs_sp_ppzkpcd_verification_key< PCD_ppT > &&vk)
Definition: r1cs_sp_ppzkpcd.hpp:257
libsnark::r1cs_sp_ppzkpcd_proof
r1cs_ppzksnark_proof< typename PCD_ppT::curve_B_pp > r1cs_sp_ppzkpcd_proof
Definition: r1cs_sp_ppzkpcd.hpp:275
r1cs_ppzksnark.hpp
libsnark::r1cs_sp_ppzkpcd_proving_key::compliance_step_r1cs_pk
r1cs_ppzksnark_proving_key< A_pp > compliance_step_r1cs_pk
Definition: r1cs_sp_ppzkpcd.hpp:73
libsnark::r1cs_sp_ppzkpcd_verification_key::translation_step_r1cs_vk
r1cs_ppzksnark_verification_key< B_pp > translation_step_r1cs_vk
Definition: r1cs_sp_ppzkpcd.hpp:138
libsnark::r1cs_sp_ppzkpcd_keypair::r1cs_sp_ppzkpcd_keypair
r1cs_sp_ppzkpcd_keypair(r1cs_ppzksnark_keypair< A_pp > &&kp_A, r1cs_ppzksnark_keypair< B_pp > &&kp_B)
Definition: r1cs_sp_ppzkpcd.hpp:261
libsnark::r1cs_sp_ppzkpcd_proving_key::compliance_predicate
r1cs_sp_ppzkpcd_compliance_predicate< PCD_ppT > compliance_predicate
Definition: r1cs_sp_ppzkpcd.hpp:71
libsnark::r1cs_sp_ppzkpcd_online_verifier
bool r1cs_sp_ppzkpcd_online_verifier(const r1cs_sp_ppzkpcd_processed_verification_key< PCD_ppT > &pvk, const r1cs_sp_ppzkpcd_primary_input< PCD_ppT > &primary_input, const r1cs_sp_ppzkpcd_proof< PCD_ppT > &proof)
libsnark::operator>>
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
libsnark::r1cs_sp_ppzkpcd_verification_key::compliance_step_r1cs_vk
r1cs_ppzksnark_verification_key< A_pp > compliance_step_r1cs_vk
Definition: r1cs_sp_ppzkpcd.hpp:137
libsnark::r1cs_ppzksnark_keypair
Definition: r1cs_ppzksnark.hpp:278
libsnark::r1cs_sp_ppzkpcd_proving_key
Definition: r1cs_sp_ppzkpcd.hpp:52
libsnark::r1cs_sp_ppzkpcd_proving_key::operator==
bool operator==(const r1cs_sp_ppzkpcd_proving_key< PCD_ppT > &other) const
libsnark::r1cs_sp_ppzkpcd_processed_verification_key::A_pp
PCD_ppT::curve_A_pp A_pp
Definition: r1cs_sp_ppzkpcd.hpp:194
libsnark::r1cs_ppzksnark_verification_key::size_in_bits
size_t size_in_bits() const
Definition: r1cs_ppzksnark.hpp:201
libsnark::r1cs_sp_ppzkpcd_proving_key::r1cs_sp_ppzkpcd_proving_key
r1cs_sp_ppzkpcd_proving_key()
Definition: r1cs_sp_ppzkpcd.hpp:79
libsnark::r1cs_sp_ppzkpcd_proving_key::A_pp
PCD_ppT::curve_A_pp A_pp
Definition: r1cs_sp_ppzkpcd.hpp:68
libsnark::r1cs_sp_ppzkpcd_keypair::r1cs_sp_ppzkpcd_keypair
r1cs_sp_ppzkpcd_keypair()
Definition: r1cs_sp_ppzkpcd.hpp:255
libsnark::r1cs_sp_ppzkpcd_processed_verification_key
Definition: r1cs_sp_ppzkpcd.hpp:173
libsnark::r1cs_sp_ppzkpcd_verification_key
Definition: r1cs_sp_ppzkpcd.hpp:118
libsnark::r1cs_sp_ppzkpcd_verification_key::operator=
r1cs_sp_ppzkpcd_verification_key< PCD_ppT > & operator=(const r1cs_sp_ppzkpcd_verification_key< PCD_ppT > &other)=default
libsnark::r1cs_sp_ppzkpcd_processed_verification_key::operator=
r1cs_sp_ppzkpcd_processed_verification_key< PCD_ppT > & operator=(const r1cs_sp_ppzkpcd_processed_verification_key< PCD_ppT > &other)=default
libsnark::r1cs_sp_ppzkpcd_process_vk
r1cs_sp_ppzkpcd_processed_verification_key< PCD_ppT > r1cs_sp_ppzkpcd_process_vk(const r1cs_sp_ppzkpcd_verification_key< PCD_ppT > &vk)
libsnark::r1cs_sp_ppzkpcd_verification_key::r1cs_sp_ppzkpcd_verification_key
r1cs_sp_ppzkpcd_verification_key(const r1cs_ppzksnark_verification_key< A_pp > &compliance_step_r1cs_vk, const r1cs_ppzksnark_verification_key< B_pp > &translation_step_r1cs_vk)
Definition: r1cs_sp_ppzkpcd.hpp:145
libsnark::r1cs_sp_ppzkpcd_keypair::B_pp
PCD_ppT::curve_B_pp B_pp
Definition: r1cs_sp_ppzkpcd.hpp:250
libsnark::r1cs_pcd_compliance_predicate_primary_input
Definition: r1cs_pcd_params.hpp:17
r1cs_sp_ppzkpcd_params.hpp
libsnark::r1cs_sp_ppzkpcd_proving_key::translation_step_r1cs_vk
r1cs_ppzksnark_verification_key< B_pp > translation_step_r1cs_vk
Definition: r1cs_sp_ppzkpcd.hpp:77