Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
ram_zksnark.hpp
Go to the documentation of this file.
1 
40 #ifndef RAM_ZKSNARK_HPP_
41 #define RAM_ZKSNARK_HPP_
42 
46 #include <memory>
47 
48 namespace libsnark
49 {
50 
51 /******************************** Proving key ********************************/
52 
53 template<typename ram_zksnark_ppT> class ram_zksnark_proving_key;
54 
55 template<typename ram_zksnark_ppT>
56 std::ostream &operator<<(
57  std::ostream &out, const ram_zksnark_proving_key<ram_zksnark_ppT> &pk);
58 
59 template<typename ram_zksnark_ppT>
60 std::istream &operator>>(
61  std::istream &in, ram_zksnark_proving_key<ram_zksnark_ppT> &pk);
62 
66 template<typename ram_zksnark_ppT> class ram_zksnark_proving_key
67 {
68 public:
71 
74  const ram_zksnark_proving_key<ram_zksnark_ppT> &other) = default;
76  default;
80  &&pcd_pk)
81  : ap(ap), pcd_pk(std::move(pcd_pk)){};
82 
84  const ram_zksnark_proving_key<ram_zksnark_ppT> &other) = default;
85 
86  bool operator==(
87  const ram_zksnark_proving_key<ram_zksnark_ppT> &other) const;
88  friend std::ostream &operator<<<ram_zksnark_ppT>(
89  std::ostream &out, const ram_zksnark_proving_key<ram_zksnark_ppT> &pk);
90  friend std::istream &operator>><ram_zksnark_ppT>(
91  std::istream &in, ram_zksnark_proving_key<ram_zksnark_ppT> &pk);
92 };
93 
94 /******************************* Verification key ****************************/
95 
96 template<typename ram_zksnark_ppT> class ram_zksnark_verification_key;
97 
98 template<typename ram_zksnark_ppT>
99 std::ostream &operator<<(
100  std::ostream &out, const ram_zksnark_verification_key<ram_zksnark_ppT> &vk);
101 
102 template<typename ram_zksnark_ppT>
103 std::istream &operator>>(
104  std::istream &in, ram_zksnark_verification_key<ram_zksnark_ppT> &vk);
105 
109 template<typename ram_zksnark_ppT> class ram_zksnark_verification_key
110 {
111 public:
115 
116  ram_zksnark_verification_key() = default;
118  const ram_zksnark_verification_key<ram_zksnark_ppT> &other) = default;
124  &&pcd_vk)
125  : ap(ap), pcd_vk(std::move(pcd_vk)){};
126 
128  const ram_zksnark_verification_key<ram_zksnark_ppT> &other) = default;
129 
130  bool operator==(
132  friend std::ostream &operator<<<ram_zksnark_ppT>(
133  std::ostream &out,
135  friend std::istream &operator>><ram_zksnark_ppT>(
136  std::istream &in, ram_zksnark_verification_key<ram_zksnark_ppT> &vk);
137 
140 };
141 
142 /********************************** Key pair *********************************/
143 
148 template<typename ram_zksnark_ppT> struct ram_zksnark_keypair {
149 public:
152 
158  : pk(std::move(pk)), vk(std::move(vk)){};
159 };
160 
161 /*********************************** Proof ***********************************/
162 
163 template<typename ram_zksnark_ppT> class ram_zksnark_proof;
164 
165 template<typename ram_zksnark_ppT>
166 std::ostream &operator<<(
167  std::ostream &out, const ram_zksnark_proof<ram_zksnark_ppT> &proof);
168 
169 template<typename ram_zksnark_ppT>
170 std::istream &operator>>(
171  std::istream &in, ram_zksnark_proof<ram_zksnark_ppT> &proof);
172 
176 template<typename ram_zksnark_ppT> class ram_zksnark_proof
177 {
178 public:
180 
181  ram_zksnark_proof() = default;
184  : PCD_proof(std::move(PCD_proof)){};
187  &PCD_proof)
188  : PCD_proof(PCD_proof){};
189 
190  size_t size_in_bits() const { return PCD_proof.size_in_bits(); }
191 
192  bool operator==(const ram_zksnark_proof<ram_zksnark_ppT> &other) const;
193  friend std::ostream &operator<<<ram_zksnark_ppT>(
194  std::ostream &out, const ram_zksnark_proof<ram_zksnark_ppT> &proof);
195  friend std::istream &operator>><ram_zksnark_ppT>(
196  std::istream &in, ram_zksnark_proof<ram_zksnark_ppT> &proof);
197 };
198 
199 /***************************** Main algorithms *******************************/
200 
207 template<typename ram_zksnark_ppT>
208 ram_zksnark_keypair<ram_zksnark_ppT> ram_zksnark_generator(
209  const ram_zksnark_architecture_params<ram_zksnark_ppT> &ap);
210 
219 template<typename ram_zksnark_ppT>
220 ram_zksnark_proof<ram_zksnark_ppT> ram_zksnark_prover(
221  const ram_zksnark_proving_key<ram_zksnark_ppT> &pk,
222  const ram_zksnark_primary_input<ram_zksnark_ppT> &primary_input,
223  const size_t time_bound,
224  const ram_zksnark_auxiliary_input<ram_zksnark_ppT> &auxiliary_input);
225 
232 template<typename ram_zksnark_ppT>
234  const ram_zksnark_verification_key<ram_zksnark_ppT> &vk,
235  const ram_zksnark_primary_input<ram_zksnark_ppT> &primary_input,
236  const size_t time_bound,
237  const ram_zksnark_proof<ram_zksnark_ppT> &proof);
238 
239 } // namespace libsnark
240 
242 
243 #endif // RAM_ZKSNARK_HPP_
libsnark::ram_zksnark_verification_key::pcd_vk
r1cs_sp_ppzkpcd_verification_key< ram_zksnark_PCD_pp< ram_zksnark_ppT > > pcd_vk
Definition: ram_zksnark.hpp:114
libsnark::ram_zksnark_verification_key::operator==
bool operator==(const ram_zksnark_verification_key< ram_zksnark_ppT > &other) const
libsnark::ram_zksnark_proving_key::ram_zksnark_proving_key
ram_zksnark_proving_key()
Definition: ram_zksnark.hpp:72
libsnark::ram_zksnark_prover
ram_zksnark_proof< ram_zksnark_ppT > ram_zksnark_prover(const ram_zksnark_proving_key< ram_zksnark_ppT > &pk, const ram_zksnark_primary_input< ram_zksnark_ppT > &primary_input, const size_t time_bound, const ram_zksnark_auxiliary_input< ram_zksnark_ppT > &auxiliary_input)
ram_zksnark_params.hpp
libsnark
Definition: accumulation_vector.hpp:18
libsnark::operator<<
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
libsnark::ram_zksnark_verifier
bool ram_zksnark_verifier(const ram_zksnark_verification_key< ram_zksnark_ppT > &vk, const ram_zksnark_primary_input< ram_zksnark_ppT > &primary_input, const size_t time_bound, const ram_zksnark_proof< ram_zksnark_ppT > &proof)
libsnark::ram_zksnark_proof::size_in_bits
size_t size_in_bits() const
Definition: ram_zksnark.hpp:190
libsnark::ram_zksnark_proof::ram_zksnark_proof
ram_zksnark_proof(r1cs_sp_ppzkpcd_proof< ram_zksnark_PCD_pp< ram_zksnark_ppT >> &&PCD_proof)
Definition: ram_zksnark.hpp:182
ram_compliance_predicate.hpp
libsnark::ram_zksnark_proof::PCD_proof
r1cs_sp_ppzkpcd_proof< ram_zksnark_PCD_pp< ram_zksnark_ppT > > PCD_proof
Definition: ram_zksnark.hpp:179
libsnark::ram_zksnark_proving_key
Definition: ram_zksnark.hpp:53
libsnark::ram_zksnark_keypair::pk
ram_zksnark_proving_key< ram_zksnark_ppT > pk
Definition: ram_zksnark.hpp:150
libsnark::ram_zksnark_proving_key::pcd_pk
r1cs_sp_ppzkpcd_proving_key< ram_zksnark_PCD_pp< ram_zksnark_ppT > > pcd_pk
Definition: ram_zksnark.hpp:70
libsnark::ram_zksnark_proving_key::operator=
ram_zksnark_proving_key< ram_zksnark_ppT > & operator=(const ram_zksnark_proving_key< ram_zksnark_ppT > &other)=default
libsnark::ram_zksnark_proof::ram_zksnark_proof
ram_zksnark_proof(const r1cs_sp_ppzkpcd_proof< ram_zksnark_PCD_pp< ram_zksnark_ppT >> &PCD_proof)
Definition: ram_zksnark.hpp:185
libsnark::r1cs_ppzksnark_proof< typename PCD_ppT::curve_B_pp >
libsnark::ram_zksnark_verification_key::ram_zksnark_verification_key
ram_zksnark_verification_key()=default
r1cs_sp_ppzkpcd.hpp
libsnark::ram_zksnark_proof::ram_zksnark_proof
ram_zksnark_proof()=default
libsnark::ram_zksnark_keypair
Definition: ram_zksnark.hpp:148
libsnark::ram_zksnark_verification_key::ram_zksnark_verification_key
ram_zksnark_verification_key(const ram_zksnark_architecture_params< ram_zksnark_ppT > &ap, r1cs_sp_ppzkpcd_verification_key< ram_zksnark_PCD_pp< ram_zksnark_ppT >> &&pcd_vk)
Definition: ram_zksnark.hpp:121
libsnark::ram_zksnark_keypair::vk
ram_zksnark_verification_key< ram_zksnark_ppT > vk
Definition: ram_zksnark.hpp:151
libsnark::ram_zksnark_verification_key::ap
ram_zksnark_architecture_params< ram_zksnark_ppT > ap
Definition: ram_zksnark.hpp:112
libsnark::operator>>
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
libsnark::r1cs_sp_ppzkpcd_proving_key
Definition: r1cs_sp_ppzkpcd.hpp:52
libsnark::ram_zksnark_proving_key::ap
ram_zksnark_architecture_params< ram_zksnark_ppT > ap
Definition: ram_zksnark.hpp:69
libsnark::ram_zksnark_PCD_pp
typename ram_zksnark_ppT::PCD_pp ram_zksnark_PCD_pp
Definition: ram_zksnark_params.hpp:61
libsnark::ram_zksnark_architecture_params
ram_architecture_params< ram_zksnark_machine_pp< ram_zksnark_ppT > > ram_zksnark_architecture_params
Definition: ram_zksnark_params.hpp:68
libsnark::r1cs_sp_ppzkpcd_verification_key
Definition: r1cs_sp_ppzkpcd.hpp:118
libsnark::ram_zksnark_verification_key
Definition: ram_zksnark.hpp:96
libsnark::ram_zksnark_keypair::ram_zksnark_keypair
ram_zksnark_keypair()
Definition: ram_zksnark.hpp:153
libsnark::ram_zksnark_verification_key::operator=
ram_zksnark_verification_key< ram_zksnark_ppT > & operator=(const ram_zksnark_verification_key< ram_zksnark_ppT > &other)=default
ram_zksnark.tcc
libsnark::ram_zksnark_verification_key::dummy_verification_key
static ram_zksnark_verification_key< ram_zksnark_ppT > dummy_verification_key(const ram_zksnark_architecture_params< ram_zksnark_ppT > &ap)
libsnark::ram_zksnark_proving_key::operator==
bool operator==(const ram_zksnark_proving_key< ram_zksnark_ppT > &other) const
libsnark::ram_zksnark_proving_key::ram_zksnark_proving_key
ram_zksnark_proving_key(const ram_zksnark_architecture_params< ram_zksnark_ppT > &ap, r1cs_sp_ppzkpcd_proving_key< ram_zksnark_PCD_pp< ram_zksnark_ppT >> &&pcd_pk)
Definition: ram_zksnark.hpp:77
libsnark::ram_zksnark_proof::operator==
bool operator==(const ram_zksnark_proof< ram_zksnark_ppT > &other) const
libsnark::ram_zksnark_keypair::ram_zksnark_keypair
ram_zksnark_keypair(ram_zksnark_proving_key< ram_zksnark_ppT > &&pk, ram_zksnark_verification_key< ram_zksnark_ppT > &&vk)
Definition: ram_zksnark.hpp:155
libsnark::ram_zksnark_proof
Definition: ram_zksnark.hpp:163
libsnark::ram_zksnark_generator
ram_zksnark_keypair< ram_zksnark_ppT > ram_zksnark_generator(const ram_zksnark_architecture_params< ram_zksnark_ppT > &ap)