Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
sap.hpp
Go to the documentation of this file.
1 
23 #ifndef SAP_HPP_
24 #define SAP_HPP_
25 
26 #include <libfqfft/evaluation_domain/evaluation_domain.hpp>
27 #include <map>
28 #include <memory>
29 
30 namespace libsnark
31 {
32 
33 /* forward declaration */
34 template<typename FieldT> class sap_witness;
35 
47 template<typename FieldT> class sap_instance
48 {
49 private:
50  size_t num_variables_;
51  size_t degree_;
52  size_t num_inputs_;
53 
54 public:
55  std::shared_ptr<libfqfft::evaluation_domain<FieldT>> domain;
56 
57  std::vector<std::map<size_t, FieldT>> A_in_Lagrange_basis;
58  std::vector<std::map<size_t, FieldT>> C_in_Lagrange_basis;
59 
61  const std::shared_ptr<libfqfft::evaluation_domain<FieldT>> &domain,
62  const size_t num_variables,
63  const size_t degree,
64  const size_t num_inputs,
65  const std::vector<std::map<size_t, FieldT>> &A_in_Lagrange_basis,
66  const std::vector<std::map<size_t, FieldT>> &C_in_Lagrange_basis);
67 
69  const std::shared_ptr<libfqfft::evaluation_domain<FieldT>> &domain,
70  const size_t num_variables,
71  const size_t degree,
72  const size_t num_inputs,
73  std::vector<std::map<size_t, FieldT>> &&A_in_Lagrange_basis,
74  std::vector<std::map<size_t, FieldT>> &&C_in_Lagrange_basis);
75 
76  sap_instance(const sap_instance<FieldT> &other) = default;
77  sap_instance(sap_instance<FieldT> &&other) = default;
78  sap_instance &operator=(const sap_instance<FieldT> &other) = default;
79  sap_instance &operator=(sap_instance<FieldT> &&other) = default;
80 
81  size_t num_variables() const;
82  size_t degree() const;
83  size_t num_inputs() const;
84 
85  bool is_satisfied(const sap_witness<FieldT> &witness) const;
86 };
87 
100 template<typename FieldT> class sap_instance_evaluation
101 {
102 private:
103  size_t num_variables_;
104  size_t degree_;
105  size_t num_inputs_;
106 
107 public:
108  std::shared_ptr<libfqfft::evaluation_domain<FieldT>> domain;
109 
110  FieldT t;
111 
112  std::vector<FieldT> At, Ct, Ht;
113 
114  FieldT Zt;
115 
117  const std::shared_ptr<libfqfft::evaluation_domain<FieldT>> &domain,
118  const size_t num_variables,
119  const size_t degree,
120  const size_t num_inputs,
121  const FieldT &t,
122  const std::vector<FieldT> &At,
123  const std::vector<FieldT> &Ct,
124  const std::vector<FieldT> &Ht,
125  const FieldT &Zt);
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  std::vector<FieldT> &&At,
133  std::vector<FieldT> &&Ct,
134  std::vector<FieldT> &&Ht,
135  const FieldT &Zt);
136 
138  default;
141  const sap_instance_evaluation<FieldT> &other) = default;
143  sap_instance_evaluation<FieldT> &&other) = default;
144 
145  size_t num_variables() const;
146  size_t degree() const;
147  size_t num_inputs() const;
148 
149  bool is_satisfied(const sap_witness<FieldT> &witness) const;
150 };
151 
155 template<typename FieldT> class sap_witness
156 {
157 private:
158  size_t num_variables_;
159  size_t degree_;
160  size_t num_inputs_;
161 
162 public:
163  FieldT d1, d2;
164 
165  std::vector<FieldT> coefficients_for_ACs;
166  std::vector<FieldT> coefficients_for_H;
167 
168  sap_witness(
169  const size_t num_variables,
170  const size_t degree,
171  const size_t num_inputs,
172  const FieldT &d1,
173  const FieldT &d2,
174  const std::vector<FieldT> &coefficients_for_ACs,
175  const std::vector<FieldT> &coefficients_for_H);
176 
177  sap_witness(
178  const size_t num_variables,
179  const size_t degree,
180  const size_t num_inputs,
181  const FieldT &d1,
182  const FieldT &d2,
183  const std::vector<FieldT> &coefficients_for_ACs,
184  std::vector<FieldT> &&coefficients_for_H);
185 
186  sap_witness(const sap_witness<FieldT> &other) = default;
187  sap_witness(sap_witness<FieldT> &&other) = default;
188  sap_witness &operator=(const sap_witness<FieldT> &other) = default;
189  sap_witness &operator=(sap_witness<FieldT> &&other) = default;
190 
191  size_t num_variables() const;
192  size_t degree() const;
193  size_t num_inputs() const;
194 };
195 
196 } // namespace libsnark
197 
199 
200 #endif // SAP_HPP_
libsnark::sap_witness::coefficients_for_H
std::vector< FieldT > coefficients_for_H
Definition: sap.hpp:166
libsnark::sap_instance_evaluation::operator=
sap_instance_evaluation & operator=(const sap_instance_evaluation< FieldT > &other)=default
libsnark
Definition: accumulation_vector.hpp:18
libsnark::sap_instance::is_satisfied
bool is_satisfied(const sap_witness< FieldT > &witness) const
libsnark::sap_instance_evaluation::t
FieldT t
Definition: sap.hpp:110
libsnark::sap_instance_evaluation::num_inputs
size_t num_inputs() const
libsnark::sap_witness::num_variables
size_t num_variables() const
libsnark::sap_instance_evaluation::Ct
std::vector< FieldT > Ct
Definition: sap.hpp:112
libsnark::sap_instance
Definition: sap.hpp:47
libsnark::sap_instance::operator=
sap_instance & operator=(const sap_instance< FieldT > &other)=default
libsnark::sap_witness::sap_witness
sap_witness(const size_t num_variables, const size_t degree, const size_t num_inputs, const FieldT &d1, const FieldT &d2, const std::vector< FieldT > &coefficients_for_ACs, const std::vector< FieldT > &coefficients_for_H)
libsnark::sap_instance_evaluation::is_satisfied
bool is_satisfied(const sap_witness< FieldT > &witness) const
libsnark::sap_instance::C_in_Lagrange_basis
std::vector< std::map< size_t, FieldT > > C_in_Lagrange_basis
Definition: sap.hpp:58
libsnark::sap_instance_evaluation::sap_instance_evaluation
sap_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 > &Ct, const std::vector< FieldT > &Ht, const FieldT &Zt)
libsnark::sap_instance::num_inputs
size_t num_inputs() const
libsnark::sap_instance_evaluation::degree
size_t degree() const
libsnark::sap_instance::degree
size_t degree() const
libsnark::sap_witness
Definition: sap.hpp:34
libsnark::sap_instance_evaluation::At
std::vector< FieldT > At
Definition: sap.hpp:112
libsnark::sap_witness::num_inputs
size_t num_inputs() const
libsnark::sap_instance::sap_instance
sap_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 >> &C_in_Lagrange_basis)
libsnark::sap_witness::d1
FieldT d1
Definition: sap.hpp:163
libsnark::sap_instance_evaluation
Definition: sap.hpp:100
libsnark::sap_instance_evaluation::num_variables
size_t num_variables() const
libsnark::sap_instance_evaluation::Ht
std::vector< FieldT > Ht
Definition: sap.hpp:112
libsnark::sap_instance_evaluation::domain
std::shared_ptr< libfqfft::evaluation_domain< FieldT > > domain
Definition: sap.hpp:108
libsnark::sap_witness::degree
size_t degree() const
libsnark::sap_witness::d2
FieldT d2
Definition: sap.hpp:163
libsnark::sap_witness::coefficients_for_ACs
std::vector< FieldT > coefficients_for_ACs
Definition: sap.hpp:165
libsnark::sap_instance::A_in_Lagrange_basis
std::vector< std::map< size_t, FieldT > > A_in_Lagrange_basis
Definition: sap.hpp:57
libsnark::sap_witness::operator=
sap_witness & operator=(const sap_witness< FieldT > &other)=default
sap.tcc
libsnark::sap_instance_evaluation::Zt
FieldT Zt
Definition: sap.hpp:114
libsnark::sap_instance::num_variables
size_t num_variables() const
libsnark::sap_instance::domain
std::shared_ptr< libfqfft::evaluation_domain< FieldT > > domain
Definition: sap.hpp:55