Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
ssp.hpp
Go to the documentation of this file.
1 
22 #ifndef SSP_HPP_
23 #define SSP_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 ssp_witness;
34 
46 template<typename FieldT> class ssp_instance
47 {
48 private:
49  size_t num_variables_;
50  size_t degree_;
51  size_t num_inputs_;
52 
53 public:
54  std::shared_ptr<libfqfft::evaluation_domain<FieldT>> domain;
55 
56  std::vector<std::map<size_t, FieldT>> V_in_Lagrange_basis;
57 
59  const std::shared_ptr<libfqfft::evaluation_domain<FieldT>> &domain,
60  const size_t num_variables,
61  const size_t degree,
62  const size_t num_inputs,
63  const std::vector<std::map<size_t, FieldT>> &V_in_Lagrange_basis);
65  const std::shared_ptr<libfqfft::evaluation_domain<FieldT>> &domain,
66  const size_t num_variables,
67  const size_t degree,
68  const size_t num_inputs,
69  std::vector<std::map<size_t, FieldT>> &&V_in_Lagrange_basis);
70 
71  ssp_instance(const ssp_instance<FieldT> &other) = default;
72  ssp_instance(ssp_instance<FieldT> &&other) = default;
73  ssp_instance &operator=(const ssp_instance<FieldT> &other) = default;
74  ssp_instance &operator=(ssp_instance<FieldT> &&other) = default;
75 
76  size_t num_variables() const;
77  size_t degree() const;
78  size_t num_inputs() const;
79 
80  bool is_satisfied(const ssp_witness<FieldT> &witness) const;
81 };
82 
94 template<typename FieldT> class ssp_instance_evaluation
95 {
96 private:
97  size_t num_variables_;
98  size_t degree_;
99  size_t num_inputs_;
100 
101 public:
102  std::shared_ptr<libfqfft::evaluation_domain<FieldT>> domain;
103 
104  FieldT t;
105 
106  std::vector<FieldT> Vt, Ht;
107 
108  FieldT Zt;
109 
111  const std::shared_ptr<libfqfft::evaluation_domain<FieldT>> &domain,
112  const size_t num_variables,
113  const size_t degree,
114  const size_t num_inputs,
115  const FieldT &t,
116  const std::vector<FieldT> &Vt,
117  const std::vector<FieldT> &Ht,
118  const FieldT &Zt);
120  const std::shared_ptr<libfqfft::evaluation_domain<FieldT>> &domain,
121  const size_t num_variables,
122  const size_t degree,
123  const size_t num_inputs,
124  const FieldT &t,
125  std::vector<FieldT> &&Vt,
126  std::vector<FieldT> &&Ht,
127  const FieldT &Zt);
128 
130  default;
133  const ssp_instance_evaluation<FieldT> &other) = default;
135  ssp_instance_evaluation<FieldT> &&other) = default;
136 
137  size_t num_variables() const;
138  size_t degree() const;
139  size_t num_inputs() const;
140 
141  bool is_satisfied(const ssp_witness<FieldT> &witness) const;
142 };
143 
147 template<typename FieldT> class ssp_witness
148 {
149 private:
150  size_t num_variables_;
151  size_t degree_;
152  size_t num_inputs_;
153 
154 public:
155  FieldT d;
156 
157  std::vector<FieldT> coefficients_for_Vs;
158  std::vector<FieldT> coefficients_for_H;
159 
160  ssp_witness(
161  const size_t num_variables,
162  const size_t degree,
163  const size_t num_inputs,
164  const FieldT &d,
165  const std::vector<FieldT> &coefficients_for_Vs,
166  const std::vector<FieldT> &coefficients_for_H);
167  ssp_witness(
168  const size_t num_variables,
169  const size_t degree,
170  const size_t num_inputs,
171  const FieldT &d,
172  const std::vector<FieldT> &coefficients_for_Vs,
173  std::vector<FieldT> &&coefficients_for_H);
174 
175  ssp_witness(const ssp_witness<FieldT> &other) = default;
176  ssp_witness(ssp_witness<FieldT> &&other) = default;
177  ssp_witness &operator=(const ssp_witness<FieldT> &other) = default;
178  ssp_witness &operator=(ssp_witness<FieldT> &&other) = default;
179 
180  size_t num_variables() const;
181  size_t degree() const;
182  size_t num_inputs() const;
183 };
184 
185 } // namespace libsnark
186 
188 
189 #endif // SSP_HPP_
libsnark::ssp_instance_evaluation::Vt
std::vector< FieldT > Vt
Definition: ssp.hpp:106
ssp.tcc
libsnark
Definition: accumulation_vector.hpp:18
libsnark::ssp_instance::ssp_instance
ssp_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 >> &V_in_Lagrange_basis)
libsnark::ssp_instance::domain
std::shared_ptr< libfqfft::evaluation_domain< FieldT > > domain
Definition: ssp.hpp:54
libsnark::ssp_instance::V_in_Lagrange_basis
std::vector< std::map< size_t, FieldT > > V_in_Lagrange_basis
Definition: ssp.hpp:56
libsnark::ssp_instance_evaluation::Ht
std::vector< FieldT > Ht
Definition: ssp.hpp:106
libsnark::ssp_witness::d
FieldT d
Definition: ssp.hpp:155
libsnark::ssp_instance::num_variables
size_t num_variables() const
libsnark::ssp_witness::coefficients_for_Vs
std::vector< FieldT > coefficients_for_Vs
Definition: ssp.hpp:157
libsnark::ssp_instance::operator=
ssp_instance & operator=(const ssp_instance< FieldT > &other)=default
libsnark::ssp_instance_evaluation::Zt
FieldT Zt
Definition: ssp.hpp:108
libsnark::ssp_witness::coefficients_for_H
std::vector< FieldT > coefficients_for_H
Definition: ssp.hpp:158
libsnark::ssp_instance
Definition: ssp.hpp:46
libsnark::ssp_instance_evaluation::t
FieldT t
Definition: ssp.hpp:104
libsnark::ssp_instance_evaluation::operator=
ssp_instance_evaluation & operator=(const ssp_instance_evaluation< FieldT > &other)=default
libsnark::ssp_instance::is_satisfied
bool is_satisfied(const ssp_witness< FieldT > &witness) const
libsnark::ssp_instance_evaluation
Definition: ssp.hpp:94
libsnark::ssp_instance_evaluation::ssp_instance_evaluation
ssp_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 > &Vt, const std::vector< FieldT > &Ht, const FieldT &Zt)
libsnark::ssp_witness::num_inputs
size_t num_inputs() const
libsnark::ssp_instance_evaluation::degree
size_t degree() const
libsnark::ssp_witness::operator=
ssp_witness & operator=(const ssp_witness< FieldT > &other)=default
libsnark::ssp_witness::ssp_witness
ssp_witness(const size_t num_variables, const size_t degree, const size_t num_inputs, const FieldT &d, const std::vector< FieldT > &coefficients_for_Vs, const std::vector< FieldT > &coefficients_for_H)
libsnark::ssp_instance_evaluation::num_variables
size_t num_variables() const
libsnark::ssp_instance_evaluation::num_inputs
size_t num_inputs() const
libsnark::ssp_witness::degree
size_t degree() const
libsnark::ssp_instance_evaluation::domain
std::shared_ptr< libfqfft::evaluation_domain< FieldT > > domain
Definition: ssp.hpp:102
libsnark::ssp_instance::num_inputs
size_t num_inputs() const
libsnark::ssp_witness::num_variables
size_t num_variables() const
libsnark::ssp_instance_evaluation::is_satisfied
bool is_satisfied(const ssp_witness< FieldT > &witness) const
libsnark::ssp_witness
Definition: ssp.hpp:33
libsnark::ssp_instance::degree
size_t degree() const