Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
qap.hpp
Go to the documentation of this file.
1 
22 #ifndef QAP_HPP_
23 #define QAP_HPP_
24 
25 #include <libfqfft/evaluation_domain/evaluation_domain.hpp>
26 #include <map>
27 #include <memory>
28 
29 namespace libsnark
30 {
31 
32 /* forward declaration */
33 template<typename FieldT> class qap_witness;
34 
51 template<typename FieldT> class qap_instance
52 {
53 private:
54  size_t num_variables_;
55  size_t degree_;
56  size_t num_inputs_;
57 
58 public:
59  std::shared_ptr<libfqfft::evaluation_domain<FieldT>> domain;
60 
61  std::vector<std::map<size_t, FieldT>> A_in_Lagrange_basis;
62  std::vector<std::map<size_t, FieldT>> B_in_Lagrange_basis;
63  std::vector<std::map<size_t, FieldT>> C_in_Lagrange_basis;
64 
66  const std::shared_ptr<libfqfft::evaluation_domain<FieldT>> &domain,
67  const size_t num_variables,
68  const size_t degree,
69  const size_t num_inputs,
70  const std::vector<std::map<size_t, FieldT>> &A_in_Lagrange_basis,
71  const std::vector<std::map<size_t, FieldT>> &B_in_Lagrange_basis,
72  const std::vector<std::map<size_t, FieldT>> &C_in_Lagrange_basis);
73 
75  const std::shared_ptr<libfqfft::evaluation_domain<FieldT>> &domain,
76  const size_t num_variables,
77  const size_t degree,
78  const size_t num_inputs,
79  std::vector<std::map<size_t, FieldT>> &&A_in_Lagrange_basis,
80  std::vector<std::map<size_t, FieldT>> &&B_in_Lagrange_basis,
81  std::vector<std::map<size_t, FieldT>> &&C_in_Lagrange_basis);
82 
83  qap_instance(const qap_instance<FieldT> &other) = default;
84  qap_instance(qap_instance<FieldT> &&other) = default;
85  qap_instance &operator=(const qap_instance<FieldT> &other) = default;
86  qap_instance &operator=(qap_instance<FieldT> &&other) = default;
87 
88  size_t num_variables() const;
89  size_t degree() const;
90  size_t num_inputs() const;
91 
92  bool is_satisfied(const qap_witness<FieldT> &witness) const;
93 };
94 
107 template<typename FieldT> class qap_instance_evaluation
108 {
109 private:
110  size_t num_variables_;
111  size_t degree_;
112  size_t num_inputs_;
113 
114 public:
115  std::shared_ptr<libfqfft::evaluation_domain<FieldT>> domain;
116 
117  FieldT t;
118 
119  std::vector<FieldT> At;
120  std::vector<FieldT> Bt;
121  std::vector<FieldT> Ct;
122  std::vector<FieldT> Ht;
123 
124  FieldT Zt;
125 
127  const std::shared_ptr<libfqfft::evaluation_domain<FieldT>> &domain,
128  const size_t num_variables,
129  const size_t degree,
130  const size_t num_inputs,
131  const FieldT &t,
132  const std::vector<FieldT> &At,
133  const std::vector<FieldT> &Bt,
134  const std::vector<FieldT> &Ct,
135  const std::vector<FieldT> &Ht,
136  const FieldT &Zt);
138  const std::shared_ptr<libfqfft::evaluation_domain<FieldT>> &domain,
139  const size_t num_variables,
140  const size_t degree,
141  const size_t num_inputs,
142  const FieldT &t,
143  std::vector<FieldT> &&At,
144  std::vector<FieldT> &&Bt,
145  std::vector<FieldT> &&Ct,
146  std::vector<FieldT> &&Ht,
147  const FieldT &Zt);
148 
150  default;
153  const qap_instance_evaluation<FieldT> &other) = default;
155  qap_instance_evaluation<FieldT> &&other) = default;
156 
157  size_t num_variables() const;
158  size_t degree() const;
159  size_t num_inputs() const;
160 
161  bool is_satisfied(const qap_witness<FieldT> &witness) const;
162 };
163 
167 template<typename FieldT> class qap_witness
168 {
169 private:
170  size_t num_variables_;
171  size_t degree_;
172  size_t num_inputs_;
173 
174 public:
175  FieldT d1, d2, d3;
176 
177  std::vector<FieldT> coefficients_for_ABCs;
178  std::vector<FieldT> coefficients_for_H;
179 
180  qap_witness(
181  const size_t num_variables,
182  const size_t degree,
183  const size_t num_inputs,
184  const FieldT &d1,
185  const FieldT &d2,
186  const FieldT &d3,
187  const std::vector<FieldT> &coefficients_for_ABCs,
188  const std::vector<FieldT> &coefficients_for_H);
189 
190  qap_witness(
191  const size_t num_variables,
192  const size_t degree,
193  const size_t num_inputs,
194  const FieldT &d1,
195  const FieldT &d2,
196  const FieldT &d3,
197  const std::vector<FieldT> &coefficients_for_ABCs,
198  std::vector<FieldT> &&coefficients_for_H);
199 
200  qap_witness(const qap_witness<FieldT> &other) = default;
201  qap_witness(qap_witness<FieldT> &&other) = default;
202  qap_witness &operator=(const qap_witness<FieldT> &other) = default;
203  qap_witness &operator=(qap_witness<FieldT> &&other) = default;
204 
205  size_t num_variables() const;
206  size_t degree() const;
207  size_t num_inputs() const;
208 };
209 
210 } // namespace libsnark
211 
213 
214 #endif // QAP_HPP_
libsnark::qap_instance_evaluation::num_variables
size_t num_variables() const
libsnark
Definition: accumulation_vector.hpp:18
libsnark::qap_witness::d1
FieldT d1
Definition: qap.hpp:175
libsnark::qap_instance_evaluation::At
std::vector< FieldT > At
Definition: qap.hpp:119
libsnark::qap_witness::operator=
qap_witness & operator=(const qap_witness< FieldT > &other)=default
libsnark::qap_instance_evaluation::operator=
qap_instance_evaluation & operator=(const qap_instance_evaluation< FieldT > &other)=default
libsnark::qap_witness::d2
FieldT d2
Definition: qap.hpp:175
libsnark::qap_instance::domain
std::shared_ptr< libfqfft::evaluation_domain< FieldT > > domain
Definition: qap.hpp:59
libsnark::qap_instance::num_inputs
size_t num_inputs() const
libsnark::qap_witness::num_inputs
size_t num_inputs() const
libsnark::qap_instance::C_in_Lagrange_basis
std::vector< std::map< size_t, FieldT > > C_in_Lagrange_basis
Definition: qap.hpp:63
libsnark::qap_instance_evaluation::t
FieldT t
Definition: qap.hpp:117
libsnark::qap_instance::is_satisfied
bool is_satisfied(const qap_witness< FieldT > &witness) const
libsnark::qap_instance_evaluation::num_inputs
size_t num_inputs() const
libsnark::qap_instance::degree
size_t degree() const
libsnark::qap_instance::operator=
qap_instance & operator=(const qap_instance< FieldT > &other)=default
libsnark::qap_witness::qap_witness
qap_witness(const size_t num_variables, const size_t degree, const size_t num_inputs, const FieldT &d1, const FieldT &d2, const FieldT &d3, const std::vector< FieldT > &coefficients_for_ABCs, const std::vector< FieldT > &coefficients_for_H)
libsnark::qap_witness::coefficients_for_ABCs
std::vector< FieldT > coefficients_for_ABCs
Definition: qap.hpp:177
libsnark::qap_instance_evaluation::Zt
FieldT Zt
Definition: qap.hpp:124
libsnark::qap_instance_evaluation::Bt
std::vector< FieldT > Bt
Definition: qap.hpp:120
libsnark::qap_witness::num_variables
size_t num_variables() const
libsnark::qap_instance::qap_instance
qap_instance(const std::shared_ptr< libfqfft::evaluation_domain< FieldT >> &domain, const size_t num_variables, const size_t degree, const size_t num_inputs, const std::vector< std::map< size_t, FieldT >> &A_in_Lagrange_basis, const std::vector< std::map< size_t, FieldT >> &B_in_Lagrange_basis, const std::vector< std::map< size_t, FieldT >> &C_in_Lagrange_basis)
libsnark::qap_instance_evaluation::Ct
std::vector< FieldT > Ct
Definition: qap.hpp:121
qap.tcc
libsnark::qap_instance_evaluation::domain
std::shared_ptr< libfqfft::evaluation_domain< FieldT > > domain
Definition: qap.hpp:115
libsnark::qap_witness::coefficients_for_H
std::vector< FieldT > coefficients_for_H
Definition: qap.hpp:178
libsnark::qap_instance
Definition: qap.hpp:51
libsnark::qap_instance::num_variables
size_t num_variables() const
libsnark::qap_instance_evaluation::degree
size_t degree() const
libsnark::qap_witness::degree
size_t degree() const
libsnark::qap_instance::A_in_Lagrange_basis
std::vector< std::map< size_t, FieldT > > A_in_Lagrange_basis
Definition: qap.hpp:61
libsnark::qap_instance::B_in_Lagrange_basis
std::vector< std::map< size_t, FieldT > > B_in_Lagrange_basis
Definition: qap.hpp:62
libsnark::qap_instance_evaluation::Ht
std::vector< FieldT > Ht
Definition: qap.hpp:122
libsnark::qap_witness::d3
FieldT d3
Definition: qap.hpp:175
libsnark::qap_witness
Definition: qap.hpp:33
libsnark::qap_instance_evaluation::qap_instance_evaluation
qap_instance_evaluation(const std::shared_ptr< libfqfft::evaluation_domain< FieldT >> &domain, const size_t num_variables, const size_t degree, const size_t num_inputs, const FieldT &t, const std::vector< FieldT > &At, const std::vector< FieldT > &Bt, const std::vector< FieldT > &Ct, const std::vector< FieldT > &Ht, const FieldT &Zt)
libsnark::qap_instance_evaluation
Definition: qap.hpp:107
libsnark::qap_instance_evaluation::is_satisfied
bool is_satisfied(const qap_witness< FieldT > &witness) const