Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
mnt_precomputation.hpp
Go to the documentation of this file.
1 
15 #ifndef LIBSNARK_GADGETLIB1_GADGETS_PAIRING_MNT_MNT_PRECOMPUTATION_HPP_
16 #define LIBSNARK_GADGETLIB1_GADGETS_PAIRING_MNT_MNT_PRECOMPUTATION_HPP_
17 
21 
22 #include <libff/algebra/curves/mnt/mnt4/mnt4_init.hpp>
23 #include <libff/algebra/curves/mnt/mnt6/mnt6_init.hpp>
24 #include <memory>
25 
26 namespace libsnark
27 {
28 
29 // Forward declare some mnt-specific parameters
30 template<typename ppT> class mnt_pairing_params;
31 
32 /**************************** G1 Precomputation ******************************/
33 
37 template<typename ppT> class mnt_G1_precomputation
38 {
39 public:
40  typedef libff::Fr<ppT> FieldT;
41  typedef libff::Fqe<other_curve<ppT>> FqeT;
42  typedef libff::Fqk<other_curve<ppT>> FqkT;
43 
44  std::shared_ptr<G1_variable<ppT>> P;
45  std::shared_ptr<Fqe_variable<ppT>> PY_twist_squared;
46 
50  const libff::G1<other_curve<ppT>> &P,
51  const std::string &annotation_prefix);
52 };
53 
57 template<typename ppT>
58 class mnt_precompute_G1_gadget : public gadget<libff::Fr<ppT>>
59 {
60 public:
61  typedef libff::Fqe<other_curve<ppT>> FqeT;
62  typedef libff::Fqk<other_curve<ppT>> FqkT;
63 
64  mnt_G1_precomputation<ppT> &precomp; // must be a reference.
65 
66  /* two possible pre-computations one for mnt4 and one for mnt6 */
67  template<typename FieldT>
70  const G1_variable<ppT> &P,
71  mnt_G1_precomputation<ppT> &precomp, // will allocate this inside
72  const std::string &annotation_prefix,
73  const typename std::enable_if<
74  libff::Fqk<other_curve<ppT>>::extension_degree() == 4,
75  FieldT>::type & = FieldT())
77  {
79  c0.assign(pb, P.Y * ((libff::mnt4_twist).squared().coeffs[0]));
80  c1.assign(pb, P.Y * ((libff::mnt4_twist).squared().coeffs[1]));
81 
82  precomp.P.reset(new G1_variable<ppT>(P));
83  precomp.PY_twist_squared.reset(new Fqe_variable<ppT>(
84  pb, c0, c1, FMT(annotation_prefix, " PY_twist_squared")));
85  }
86 
87  template<typename FieldT>
90  const G1_variable<ppT> &P,
91  mnt_G1_precomputation<ppT> &precomp, // will allocate this inside
92  const std::string &annotation_prefix,
93  const typename std::enable_if<
94  libff::Fqk<other_curve<ppT>>::extension_degree() == 6,
95  FieldT>::type & = FieldT())
97  {
99  c0.assign(pb, P.Y * ((libff::mnt6_twist).squared().coeffs[0]));
100  c1.assign(pb, P.Y * ((libff::mnt6_twist).squared().coeffs[1]));
101  c2.assign(pb, P.Y * ((libff::mnt6_twist).squared().coeffs[2]));
102 
103  precomp.P.reset(new G1_variable<ppT>(P));
104  precomp.PY_twist_squared.reset(new Fqe_variable<ppT>(
105  pb, c0, c1, c2, FMT(annotation_prefix, " PY_twist_squared")));
106  }
107 
109  void generate_r1cs_witness();
110 };
111 
112 /**************************** G2 Precomputation ******************************/
113 
117 template<typename ppT> class mnt_precompute_G2_gadget_coeffs
118 {
119 public:
120  typedef libff::Fr<ppT> FieldT;
121  typedef libff::Fqe<other_curve<ppT>> FqeT;
122  typedef libff::Fqk<other_curve<ppT>> FqkT;
123 
124  std::shared_ptr<Fqe_variable<ppT>> RX;
125  std::shared_ptr<Fqe_variable<ppT>> RY;
126  std::shared_ptr<Fqe_variable<ppT>> gamma;
127  std::shared_ptr<Fqe_variable<ppT>> gamma_X;
128 
131  protoboard<FieldT> &pb, const std::string &annotation_prefix);
133  protoboard<FieldT> &pb,
134  const G2_variable<ppT> &Q,
135  const std::string &annotation_prefix);
136 };
137 
141 template<typename ppT> class mnt_G2_precomputation
142 {
143 public:
144  typedef libff::Fr<ppT> FieldT;
145  typedef libff::Fqe<other_curve<ppT>> FqeT;
146  typedef libff::Fqk<other_curve<ppT>> FqkT;
147 
148  std::shared_ptr<G2_variable<ppT>> Q;
149 
150  std::vector<std::shared_ptr<mnt_precompute_G2_gadget_coeffs<ppT>>> coeffs;
151 
154  protoboard<FieldT> &pb,
155  const libff::G2<other_curve<ppT>> &Q_val,
156  const std::string &annotation_prefix);
157 };
158 
178 template<typename ppT>
179 class mnt_precompute_G2_gadget_doubling_step : public gadget<libff::Fr<ppT>>
180 {
181 public:
182  typedef libff::Fr<ppT> FieldT;
183  typedef libff::Fqe<other_curve<ppT>> FqeT;
184  typedef libff::Fqk<other_curve<ppT>> FqkT;
185 
188 
189  std::shared_ptr<Fqe_variable<ppT>> RXsquared;
190  std::shared_ptr<Fqe_sqr_gadget<ppT>> compute_RXsquared;
191  std::shared_ptr<Fqe_variable<ppT>> three_RXsquared_plus_a;
192  std::shared_ptr<Fqe_variable<ppT>> two_RY;
193  std::shared_ptr<Fqe_mul_gadget<ppT>> compute_gamma;
194  std::shared_ptr<Fqe_mul_gadget<ppT>> compute_gamma_X;
195 
196  std::shared_ptr<Fqe_variable<ppT>> next_RX_plus_two_RX;
197  std::shared_ptr<Fqe_sqr_gadget<ppT>> compute_next_RX;
198 
199  std::shared_ptr<Fqe_variable<ppT>> RX_minus_next_RX;
200  std::shared_ptr<Fqe_variable<ppT>> RY_plus_next_RY;
201  std::shared_ptr<Fqe_mul_gadget<ppT>> compute_next_RY;
202 
207  const std::string &annotation_prefix);
209  void generate_r1cs_witness();
210 };
211 
229 template<typename ppT>
230 class mnt_precompute_G2_gadget_addition_step : public gadget<libff::Fr<ppT>>
231 {
232 public:
233  typedef libff::Fr<ppT> FieldT;
234  typedef libff::Fqe<other_curve<ppT>> FqeT;
235  typedef libff::Fqk<other_curve<ppT>> FqkT;
236 
237  bool invert_Q;
241 
242  std::shared_ptr<Fqe_variable<ppT>> RY_minus_QY;
243  std::shared_ptr<Fqe_variable<ppT>> RX_minus_QX;
244  std::shared_ptr<Fqe_mul_gadget<ppT>> compute_gamma;
245  std::shared_ptr<Fqe_mul_gadget<ppT>> compute_gamma_X;
246 
247  std::shared_ptr<Fqe_variable<ppT>> next_RX_plus_RX_plus_QX;
248  std::shared_ptr<Fqe_sqr_gadget<ppT>> compute_next_RX;
249 
250  std::shared_ptr<Fqe_variable<ppT>> RX_minus_next_RX;
251  std::shared_ptr<Fqe_variable<ppT>> RY_plus_next_RY;
252  std::shared_ptr<Fqe_mul_gadget<ppT>> compute_next_RY;
253 
256  const bool invert_Q,
259  const G2_variable<ppT> &Q,
260  const std::string &annotation_prefix);
262  void generate_r1cs_witness();
263 };
264 
268 template<typename ppT>
269 class mnt_precompute_G2_gadget : public gadget<libff::Fr<ppT>>
270 {
271 public:
272  typedef libff::Fr<ppT> FieldT;
273  typedef libff::Fqe<other_curve<ppT>> FqeT;
274  typedef libff::Fqk<other_curve<ppT>> FqkT;
275 
276  std::vector<std::shared_ptr<mnt_precompute_G2_gadget_addition_step<ppT>>>
278  std::vector<std::shared_ptr<mnt_precompute_G2_gadget_doubling_step<ppT>>>
280 
281  size_t add_count;
282  size_t dbl_count;
283 
284  mnt_G2_precomputation<ppT> &precomp; // important to have a reference here
285 
288  const G2_variable<ppT> &Q,
289  mnt_G2_precomputation<ppT> &precomp, // will allocate this inside
290  const std::string &annotation_prefix);
292  void generate_r1cs_witness();
293 };
294 
295 } // namespace libsnark
296 
298 
299 #endif // LIBSNARK_GADGETLIB1_GADGETS_PAIRING_MNT_MNT_PRECOMPUTATION_HPP_
libsnark::mnt_precompute_G2_gadget_doubling_step::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_precomputation.hpp:182
libsnark::mnt_precompute_G2_gadget::FqkT
libff::Fqk< other_curve< ppT > > FqkT
Definition: mnt_precomputation.hpp:274
libsnark::mnt_precompute_G2_gadget_doubling_step::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::mnt_G2_precomputation::mnt_G2_precomputation
mnt_G2_precomputation()
libsnark::gadget< libff::Fr< ppT > >::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark::mnt_precompute_G2_gadget_addition_step::RY_minus_QY
std::shared_ptr< Fqe_variable< ppT > > RY_minus_QY
Definition: mnt_precomputation.hpp:242
libsnark::mnt_precompute_G2_gadget_doubling_step::RXsquared
std::shared_ptr< Fqe_variable< ppT > > RXsquared
Definition: mnt_precomputation.hpp:189
libsnark::G2_variable
Gadget that represents a G2 variable.
Definition: weierstrass_g2_gadget.hpp:31
libsnark::G1_variable::Y
pb_linear_combination< FieldT > Y
Definition: weierstrass_g1_gadget.hpp:34
libsnark::mnt_precompute_G2_gadget_doubling_step::next
mnt_precompute_G2_gadget_coeffs< ppT > next
Definition: mnt_precomputation.hpp:187
libsnark::mnt_precompute_G2_gadget_addition_step::RY_plus_next_RY
std::shared_ptr< Fqe_variable< ppT > > RY_plus_next_RY
Definition: mnt_precomputation.hpp:251
libsnark
Definition: accumulation_vector.hpp:18
libsnark::mnt_G1_precomputation::FqkT
libff::Fqk< other_curve< ppT > > FqkT
Definition: mnt_precomputation.hpp:42
libsnark::mnt_G1_precomputation::mnt_G1_precomputation
mnt_G1_precomputation()
libsnark::mnt_precompute_G2_gadget_addition_step::mnt_precompute_G2_gadget_addition_step
mnt_precompute_G2_gadget_addition_step(protoboard< FieldT > &pb, const bool invert_Q, const mnt_precompute_G2_gadget_coeffs< ppT > &cur, const mnt_precompute_G2_gadget_coeffs< ppT > &next, const G2_variable< ppT > &Q, const std::string &annotation_prefix)
libsnark::mnt_precompute_G2_gadget_coeffs::RX
std::shared_ptr< Fqe_variable< ppT > > RX
Definition: mnt_precomputation.hpp:124
libsnark::mnt_precompute_G2_gadget_addition_step::cur
mnt_precompute_G2_gadget_coeffs< ppT > cur
Definition: mnt_precomputation.hpp:238
libsnark::mnt_precompute_G2_gadget_doubling_step::compute_RXsquared
std::shared_ptr< Fqe_sqr_gadget< ppT > > compute_RXsquared
Definition: mnt_precomputation.hpp:190
libsnark::gadget< libff::Fr< ppT > >::pb
protoboard< libff::Fr< ppT > > & pb
Definition: gadget.hpp:19
libsnark::mnt_precompute_G2_gadget::precomp
mnt_G2_precomputation< ppT > & precomp
Definition: mnt_precomputation.hpp:284
libsnark::mnt_precompute_G2_gadget_addition_step::compute_next_RY
std::shared_ptr< Fqe_mul_gadget< ppT > > compute_next_RY
Definition: mnt_precomputation.hpp:252
libsnark::mnt_precompute_G2_gadget_doubling_step::compute_next_RX
std::shared_ptr< Fqe_sqr_gadget< ppT > > compute_next_RX
Definition: mnt_precomputation.hpp:197
libsnark::mnt_G2_precomputation::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_precomputation.hpp:144
libsnark::mnt_precompute_G2_gadget_coeffs::gamma
std::shared_ptr< Fqe_variable< ppT > > gamma
Definition: mnt_precomputation.hpp:126
libsnark::mnt_precompute_G2_gadget_coeffs
Definition: mnt_precomputation.hpp:117
libsnark::mnt_precompute_G2_gadget_addition_step::compute_next_RX
std::shared_ptr< Fqe_sqr_gadget< ppT > > compute_next_RX
Definition: mnt_precomputation.hpp:248
libsnark::mnt_precompute_G2_gadget::add_count
size_t add_count
Definition: mnt_precomputation.hpp:281
libsnark::mnt_G2_precomputation
Definition: mnt_precomputation.hpp:141
libsnark::gadget
Definition: gadget.hpp:16
libsnark::mnt_precompute_G2_gadget_addition_step::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::mnt_precompute_G2_gadget_doubling_step::three_RXsquared_plus_a
std::shared_ptr< Fqe_variable< ppT > > three_RXsquared_plus_a
Definition: mnt_precomputation.hpp:191
libsnark::mnt_precompute_G2_gadget::FqeT
libff::Fqe< other_curve< ppT > > FqeT
Definition: mnt_precomputation.hpp:273
libsnark::mnt_precompute_G2_gadget_coeffs::mnt_precompute_G2_gadget_coeffs
mnt_precompute_G2_gadget_coeffs()
libsnark::mnt_precompute_G2_gadget_addition_step::next_RX_plus_RX_plus_QX
std::shared_ptr< Fqe_variable< ppT > > next_RX_plus_RX_plus_QX
Definition: mnt_precomputation.hpp:247
libsnark::mnt_precompute_G2_gadget_coeffs::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_precomputation.hpp:120
libsnark::mnt_precompute_G2_gadget_doubling_step::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::mnt_precompute_G2_gadget_addition_step::compute_gamma_X
std::shared_ptr< Fqe_mul_gadget< ppT > > compute_gamma_X
Definition: mnt_precomputation.hpp:245
libsnark::mnt_precompute_G2_gadget_doubling_step::RX_minus_next_RX
std::shared_ptr< Fqe_variable< ppT > > RX_minus_next_RX
Definition: mnt_precomputation.hpp:199
libsnark::mnt_precompute_G2_gadget_doubling_step::two_RY
std::shared_ptr< Fqe_variable< ppT > > two_RY
Definition: mnt_precomputation.hpp:192
libsnark::mnt_precompute_G2_gadget_addition_step::Q
G2_variable< ppT > Q
Definition: mnt_precomputation.hpp:240
libsnark::mnt_precompute_G2_gadget_coeffs::gamma_X
std::shared_ptr< Fqe_variable< ppT > > gamma_X
Definition: mnt_precomputation.hpp:127
libsnark::mnt_precompute_G2_gadget::dbl_count
size_t dbl_count
Definition: mnt_precomputation.hpp:282
libsnark::mnt_G1_precomputation::P
std::shared_ptr< G1_variable< ppT > > P
Definition: mnt_precomputation.hpp:44
libsnark::mnt_precompute_G2_gadget_doubling_step::compute_gamma_X
std::shared_ptr< Fqe_mul_gadget< ppT > > compute_gamma_X
Definition: mnt_precomputation.hpp:194
libsnark::mnt_precompute_G2_gadget_doubling_step::RY_plus_next_RY
std::shared_ptr< Fqe_variable< ppT > > RY_plus_next_RY
Definition: mnt_precomputation.hpp:200
libsnark::mnt_precompute_G1_gadget::precomp
mnt_G1_precomputation< ppT > & precomp
Definition: mnt_precomputation.hpp:64
libsnark::mnt_precompute_G2_gadget_addition_step
Definition: mnt_precomputation.hpp:230
libsnark::mnt_precompute_G2_gadget_addition_step::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_precomputation.hpp:233
libsnark::mnt_precompute_G1_gadget::mnt_precompute_G1_gadget
mnt_precompute_G1_gadget(protoboard< FieldT > &pb, const G1_variable< ppT > &P, mnt_G1_precomputation< ppT > &precomp, const std::string &annotation_prefix, const typename std::enable_if< libff::Fqk< other_curve< ppT >>::extension_degree()==4, FieldT >::type &=FieldT())
Definition: mnt_precomputation.hpp:68
libsnark::mnt_G2_precomputation::coeffs
std::vector< std::shared_ptr< mnt_precompute_G2_gadget_coeffs< ppT > > > coeffs
Definition: mnt_precomputation.hpp:150
libsnark::mnt_precompute_G1_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::mnt_precompute_G2_gadget_addition_step::FqeT
libff::Fqe< other_curve< ppT > > FqeT
Definition: mnt_precomputation.hpp:234
libsnark::mnt_G1_precomputation
Definition: mnt_precomputation.hpp:37
weierstrass_g2_gadget.hpp
libsnark::mnt_precompute_G2_gadget_doubling_step::mnt_precompute_G2_gadget_doubling_step
mnt_precompute_G2_gadget_doubling_step(protoboard< FieldT > &pb, const mnt_precompute_G2_gadget_coeffs< ppT > &cur, const mnt_precompute_G2_gadget_coeffs< ppT > &next, const std::string &annotation_prefix)
pairing_params.hpp
libsnark::mnt_G1_precomputation::FqeT
libff::Fqe< other_curve< ppT > > FqeT
Definition: mnt_precomputation.hpp:41
libsnark::mnt_precompute_G2_gadget_doubling_step::compute_next_RY
std::shared_ptr< Fqe_mul_gadget< ppT > > compute_next_RY
Definition: mnt_precomputation.hpp:201
libsnark::mnt_G2_precomputation::FqkT
libff::Fqk< other_curve< ppT > > FqkT
Definition: mnt_precomputation.hpp:146
libsnark::pb_linear_combination
Definition: pb_variable.hpp:101
libsnark::mnt_precompute_G2_gadget_coeffs::RY
std::shared_ptr< Fqe_variable< ppT > > RY
Definition: mnt_precomputation.hpp:125
libsnark::mnt_precompute_G2_gadget_doubling_step::next_RX_plus_two_RX
std::shared_ptr< Fqe_variable< ppT > > next_RX_plus_two_RX
Definition: mnt_precomputation.hpp:196
libsnark::G1_variable
Gadget that represents a G1 variable.
Definition: weierstrass_g1_gadget.hpp:28
mnt_precomputation.tcc
libsnark::mnt_precompute_G2_gadget_addition_step::RX_minus_QX
std::shared_ptr< Fqe_variable< ppT > > RX_minus_QX
Definition: mnt_precomputation.hpp:243
libsnark::Fqe_variable
typename pairing_selector< ppT >::Fqe_variable_type Fqe_variable
Definition: pairing_params.hpp:95
libsnark::mnt_precompute_G2_gadget_doubling_step::FqkT
libff::Fqk< other_curve< ppT > > FqkT
Definition: mnt_precomputation.hpp:184
libsnark::mnt_precompute_G2_gadget::mnt_precompute_G2_gadget
mnt_precompute_G2_gadget(protoboard< FieldT > &pb, const G2_variable< ppT > &Q, mnt_G2_precomputation< ppT > &precomp, const std::string &annotation_prefix)
libsnark::mnt_precompute_G2_gadget_addition_step::compute_gamma
std::shared_ptr< Fqe_mul_gadget< ppT > > compute_gamma
Definition: mnt_precomputation.hpp:244
libsnark::other_curve
typename pairing_selector< ppT >::other_curve_type other_curve
Definition: pairing_params.hpp:117
libsnark::mnt_precompute_G2_gadget::addition_steps
std::vector< std::shared_ptr< mnt_precompute_G2_gadget_addition_step< ppT > > > addition_steps
Definition: mnt_precomputation.hpp:277
libsnark::pb_linear_combination::assign
void assign(protoboard< FieldT > &pb, const linear_combination< FieldT > &lc)
libsnark::mnt_precompute_G2_gadget_addition_step::next
mnt_precompute_G2_gadget_coeffs< ppT > next
Definition: mnt_precomputation.hpp:239
libsnark::mnt_precompute_G1_gadget::FqkT
libff::Fqk< other_curve< ppT > > FqkT
Definition: mnt_precomputation.hpp:62
libsnark::mnt_precompute_G2_gadget_doubling_step::compute_gamma
std::shared_ptr< Fqe_mul_gadget< ppT > > compute_gamma
Definition: mnt_precomputation.hpp:193
libsnark::mnt_precompute_G2_gadget_coeffs::FqeT
libff::Fqe< other_curve< ppT > > FqeT
Definition: mnt_precomputation.hpp:121
libsnark::mnt_G1_precomputation::PY_twist_squared
std::shared_ptr< Fqe_variable< ppT > > PY_twist_squared
Definition: mnt_precomputation.hpp:45
libsnark::mnt_precompute_G2_gadget_doubling_step::cur
mnt_precompute_G2_gadget_coeffs< ppT > cur
Definition: mnt_precomputation.hpp:186
libsnark::mnt_precompute_G2_gadget_coeffs::FqkT
libff::Fqk< other_curve< ppT > > FqkT
Definition: mnt_precomputation.hpp:122
libsnark::mnt_precompute_G2_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::mnt_precompute_G2_gadget::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_precomputation.hpp:272
libsnark::mnt_G1_precomputation::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_precomputation.hpp:40
libsnark::mnt_G2_precomputation::FqeT
libff::Fqe< other_curve< ppT > > FqeT
Definition: mnt_precomputation.hpp:145
libsnark::mnt_precompute_G2_gadget_addition_step::RX_minus_next_RX
std::shared_ptr< Fqe_variable< ppT > > RX_minus_next_RX
Definition: mnt_precomputation.hpp:250
libsnark::mnt_precompute_G2_gadget_doubling_step
Definition: mnt_precomputation.hpp:179
weierstrass_g1_gadget.hpp
libsnark::mnt_G2_precomputation::Q
std::shared_ptr< G2_variable< ppT > > Q
Definition: mnt_precomputation.hpp:148
libsnark::mnt_precompute_G2_gadget_doubling_step::FqeT
libff::Fqe< other_curve< ppT > > FqeT
Definition: mnt_precomputation.hpp:183
libsnark::mnt_precompute_G2_gadget::doubling_steps
std::vector< std::shared_ptr< mnt_precompute_G2_gadget_doubling_step< ppT > > > doubling_steps
Definition: mnt_precomputation.hpp:279
libsnark::mnt_precompute_G1_gadget::FqeT
libff::Fqe< other_curve< ppT > > FqeT
Definition: mnt_precomputation.hpp:61
libsnark::mnt_precompute_G2_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::mnt_precompute_G2_gadget_addition_step::invert_Q
bool invert_Q
Definition: mnt_precomputation.hpp:237
libsnark::mnt_precompute_G2_gadget_addition_step::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::mnt_precompute_G1_gadget::mnt_precompute_G1_gadget
mnt_precompute_G1_gadget(protoboard< FieldT > &pb, const G1_variable< ppT > &P, mnt_G1_precomputation< ppT > &precomp, const std::string &annotation_prefix, const typename std::enable_if< libff::Fqk< other_curve< ppT >>::extension_degree()==6, FieldT >::type &=FieldT())
Definition: mnt_precomputation.hpp:88
libsnark::mnt_precompute_G2_gadget
Definition: mnt_precomputation.hpp:269
libsnark::mnt_precompute_G2_gadget_addition_step::FqkT
libff::Fqk< other_curve< ppT > > FqkT
Definition: mnt_precomputation.hpp:235
libsnark::mnt_precompute_G1_gadget
Definition: mnt_precomputation.hpp:58
libsnark::mnt_precompute_G1_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::protoboard
Definition: pb_variable.hpp:22