Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
mnt_miller_loop.hpp
Go to the documentation of this file.
1 
15 #ifndef LIBSNARK_GADGETLIB1_GADGETS_PAIRING_MNT_MNT_MILLER_LOOP_HPP_
16 #define LIBSNARK_GADGETLIB1_GADGETS_PAIRING_MNT_MNT_MILLER_LOOP_HPP_
17 
20 
21 #include <memory>
22 
23 namespace libsnark
24 {
25 
38 template<typename ppT>
39 class mnt_miller_loop_dbl_line_eval : public gadget<libff::Fr<ppT>>
40 {
41 public:
42  typedef libff::Fr<ppT> FieldT;
43  typedef libff::Fqe<other_curve<ppT>> FqeT;
44  typedef libff::Fqk<other_curve<ppT>> FqkT;
45 
48  std::shared_ptr<Fqk_variable<ppT>> &g_RR_at_P; // reference from outside
49 
50  std::shared_ptr<Fqe_variable<ppT>> gamma_twist;
51  std::shared_ptr<Fqe_variable<ppT>> g_RR_at_P_c1;
52  std::shared_ptr<Fqe_mul_by_lc_gadget<ppT>> compute_g_RR_at_P_c1;
53 
58  std::shared_ptr<Fqk_variable<ppT>> &g_RR_at_P,
59  const std::string &annotation_prefix);
61  void generate_r1cs_witness();
62 };
63 
76 template<typename ppT>
77 class mnt_miller_loop_add_line_eval : public gadget<libff::Fr<ppT>>
78 {
79 public:
80  typedef libff::Fr<ppT> FieldT;
81  typedef libff::Fqe<other_curve<ppT>> FqeT;
82  typedef libff::Fqk<other_curve<ppT>> FqkT;
83 
84  bool invert_Q;
88  std::shared_ptr<Fqk_variable<ppT>> &g_RQ_at_P; // reference from outside
89 
90  std::shared_ptr<Fqe_variable<ppT>> gamma_twist;
91  std::shared_ptr<Fqe_variable<ppT>> g_RQ_at_P_c1;
92  std::shared_ptr<Fqe_mul_by_lc_gadget<ppT>> compute_g_RQ_at_P_c1;
93 
96  const bool invert_Q,
99  const G2_variable<ppT> &Q,
100  std::shared_ptr<Fqk_variable<ppT>> &g_RQ_at_P,
101  const std::string &annotation_prefix);
103  void generate_r1cs_witness();
104 };
105 
107 template<typename ppT>
108 class mnt_miller_loop_gadget : public gadget<libff::Fr<ppT>>
109 {
110 public:
111  typedef libff::Fr<ppT> FieldT;
112  typedef libff::Fqe<other_curve<ppT>> FqeT;
113  typedef libff::Fqk<other_curve<ppT>> FqkT;
116 
117  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RR_at_Ps;
118  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RQ_at_Ps;
119  std::vector<std::shared_ptr<Fqk_variable<ppT>>> fs;
120 
121  std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT>>>
123  std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT>>>
125 
126  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> dbl_muls;
127  std::vector<std::shared_ptr<Fqk_sqr_gadget<ppT>>> dbl_sqrs;
128  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> add_muls;
129 
130  size_t f_count;
131  size_t add_count;
132  size_t dbl_count;
133 
137 
142  const Fqk_variable<ppT> &result,
143  const std::string &annotation_prefix);
145  void generate_r1cs_witness();
146 };
147 
149 template<typename ppT>
150 class mnt_e_over_e_miller_loop_gadget : public gadget<libff::Fr<ppT>>
151 {
152 public:
153  typedef libff::Fr<ppT> FieldT;
154  typedef libff::Fqe<other_curve<ppT>> FqeT;
155  typedef libff::Fqk<other_curve<ppT>> FqkT;
158 
159  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RR_at_P1s;
160  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RQ_at_P1s;
161  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RR_at_P2s;
162  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RQ_at_P2s;
163  std::vector<std::shared_ptr<Fqk_variable<ppT>>> fs;
164 
165  std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT>>>
167  std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT>>>
169  std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT>>>
171  std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT>>>
173 
174  std::vector<std::shared_ptr<Fqk_sqr_gadget<ppT>>> dbl_sqrs;
175  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> dbl_muls1;
176  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> add_muls1;
177  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> dbl_muls2;
178  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> add_muls2;
179 
180  size_t f_count;
181  size_t add_count;
182  size_t dbl_count;
183 
189 
196  const Fqk_variable<ppT> &result,
197  const std::string &annotation_prefix);
199  void generate_r1cs_witness();
200 };
201 
203 template<typename ppT>
204 class mnt_e_times_e_over_e_miller_loop_gadget : public gadget<libff::Fr<ppT>>
205 {
206 public:
207  typedef libff::Fr<ppT> FieldT;
208  typedef libff::Fqe<other_curve<ppT>> FqeT;
209  typedef libff::Fqk<other_curve<ppT>> FqkT;
212 
213  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RR_at_P1s;
214  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RQ_at_P1s;
215  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RR_at_P2s;
216  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RQ_at_P2s;
217  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RR_at_P3s;
218  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RQ_at_P3s;
219  std::vector<std::shared_ptr<Fqk_variable<ppT>>> fs;
220 
221  std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT>>>
223  std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT>>>
225  std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT>>>
227  std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT>>>
229  std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT>>>
231  std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT>>>
233 
234  std::vector<std::shared_ptr<Fqk_sqr_gadget<ppT>>> dbl_sqrs;
235  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> dbl_muls1;
236  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> add_muls1;
237  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> dbl_muls2;
238  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> add_muls2;
239  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> dbl_muls3;
240  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> add_muls3;
241 
242  size_t f_count;
243  size_t add_count;
244  size_t dbl_count;
245 
253 
262  const Fqk_variable<ppT> &result,
263  const std::string &annotation_prefix);
265  void generate_r1cs_witness();
266 };
267 
273 template<typename ppT>
275  : public gadget<libff::Fr<ppT>>
276 {
277 public:
278  typedef libff::Fr<ppT> FieldT;
279  typedef libff::Fqe<other_curve<ppT>> FqeT;
280  typedef libff::Fqk<other_curve<ppT>> FqkT;
283 
284  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RR_at_P1s;
285  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RQ_at_P1s;
286  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RR_at_P2s;
287  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RQ_at_P2s;
288  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RR_at_P3s;
289  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RQ_at_P3s;
290  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RR_at_P4s;
291  std::vector<std::shared_ptr<Fqk_variable<ppT>>> g_RQ_at_P4s;
292  std::vector<std::shared_ptr<Fqk_variable<ppT>>> fs;
293 
294  std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT>>>
296  std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT>>>
298  std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT>>>
300  std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT>>>
302  std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT>>>
304  std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT>>>
306  std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT>>>
308  std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT>>>
310 
311  std::vector<std::shared_ptr<Fqk_sqr_gadget<ppT>>> dbl_sqrs;
312  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> dbl_muls1;
313  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> add_muls1;
314  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> dbl_muls2;
315  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> add_muls2;
316  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> dbl_muls3;
317  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> add_muls3;
318  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> dbl_muls4;
319  std::vector<std::shared_ptr<Fqk_special_mul_gadget>> add_muls4;
320 
321  size_t f_count;
322  size_t add_count;
323  size_t dbl_count;
324 
334 
345  const Fqk_variable<ppT> &result,
346  const std::string &annotation_prefix);
348  void generate_r1cs_witness();
349 };
350 
351 } // namespace libsnark
352 
354 
355 #endif // LIBSNARK_GADGETLIB1_GADGETS_PAIRING_MNT_MNT_MILLER_LOOP_HPP_
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::g_RQ_at_P4s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P4s
Definition: mnt_miller_loop.hpp:291
libsnark::mnt_e_over_e_miller_loop_gadget::doubling_steps1
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps1
Definition: mnt_miller_loop.hpp:168
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::dbl_muls2
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls2
Definition: mnt_miller_loop.hpp:314
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::prec_Q3
G2_precomputation< ppT > prec_Q3
Definition: mnt_miller_loop.hpp:330
mnt_miller_loop.tcc
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::add_count
size_t add_count
Definition: mnt_miller_loop.hpp:322
libsnark::mnt_miller_loop_add_line_eval::g_RQ_at_P
std::shared_ptr< Fqk_variable< ppT > > & g_RQ_at_P
Definition: mnt_miller_loop.hpp:88
libsnark::mnt_miller_loop_dbl_line_eval::gamma_twist
std::shared_ptr< Fqe_variable< ppT > > gamma_twist
Definition: mnt_miller_loop.hpp:50
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::add_muls4
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls4
Definition: mnt_miller_loop.hpp:319
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::add_muls3
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls3
Definition: mnt_miller_loop.hpp:317
libsnark::mnt_miller_loop_add_line_eval::compute_g_RQ_at_P_c1
std::shared_ptr< Fqe_mul_by_lc_gadget< ppT > > compute_g_RQ_at_P_c1
Definition: mnt_miller_loop.hpp:92
libsnark::mnt_miller_loop_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::gadget< libff::Fr< ppT > >::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark::G2_variable
Gadget that represents a G2 variable.
Definition: weierstrass_g2_gadget.hpp:31
libsnark::mnt_miller_loop_gadget::g_RQ_at_Ps
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_Ps
Definition: mnt_miller_loop.hpp:118
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::addition_steps3
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps3
Definition: mnt_miller_loop.hpp:230
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::prec_P2
mnt_G1_precomputation< ppT > prec_P2
Definition: mnt_miller_loop.hpp:248
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::doubling_steps2
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps2
Definition: mnt_miller_loop.hpp:301
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::prec_P3
G1_precomputation< ppT > prec_P3
Definition: mnt_miller_loop.hpp:329
libsnark::mnt_e_over_e_miller_loop_gadget::result
Fqk_variable< ppT > result
Definition: mnt_miller_loop.hpp:188
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::prec_P1
G1_precomputation< ppT > prec_P1
Definition: mnt_miller_loop.hpp:325
libsnark
Definition: accumulation_vector.hpp:18
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::dbl_count
size_t dbl_count
Definition: mnt_miller_loop.hpp:244
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::add_muls3
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls3
Definition: mnt_miller_loop.hpp:240
libsnark::mnt_e_over_e_miller_loop_gadget::mnt_e_over_e_miller_loop_gadget
mnt_e_over_e_miller_loop_gadget(protoboard< FieldT > &pb, const mnt_G1_precomputation< ppT > &prec_P1, const mnt_G2_precomputation< ppT > &prec_Q1, const mnt_G1_precomputation< ppT > &prec_P2, const mnt_G2_precomputation< ppT > &prec_Q2, const Fqk_variable< ppT > &result, const std::string &annotation_prefix)
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_miller_loop.hpp:207
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::dbl_muls2
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls2
Definition: mnt_miller_loop.hpp:237
libsnark::mnt_miller_loop_add_line_eval::Q
G2_variable< ppT > Q
Definition: mnt_miller_loop.hpp:87
libsnark::mnt_miller_loop_add_line_eval::FqeT
libff::Fqe< other_curve< ppT > > FqeT
Definition: mnt_miller_loop.hpp:81
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::fs
std::vector< std::shared_ptr< Fqk_variable< ppT > > > fs
Definition: mnt_miller_loop.hpp:292
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::add_muls1
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls1
Definition: mnt_miller_loop.hpp:236
libsnark::mnt_miller_loop_add_line_eval::gamma_twist
std::shared_ptr< Fqe_variable< ppT > > gamma_twist
Definition: mnt_miller_loop.hpp:90
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::prec_P1
mnt_G1_precomputation< ppT > prec_P1
Definition: mnt_miller_loop.hpp:246
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::g_RR_at_P3s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P3s
Definition: mnt_miller_loop.hpp:288
libsnark::mnt_miller_loop_gadget::dbl_sqrs
std::vector< std::shared_ptr< Fqk_sqr_gadget< ppT > > > dbl_sqrs
Definition: mnt_miller_loop.hpp:127
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::fs
std::vector< std::shared_ptr< Fqk_variable< ppT > > > fs
Definition: mnt_miller_loop.hpp:219
libsnark::mnt_e_over_e_miller_loop_gadget::fs
std::vector< std::shared_ptr< Fqk_variable< ppT > > > fs
Definition: mnt_miller_loop.hpp:163
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_miller_loop.hpp:278
libsnark::gadget< libff::Fr< ppT > >::pb
protoboard< libff::Fr< ppT > > & pb
Definition: gadget.hpp:19
libsnark::mnt_miller_loop_dbl_line_eval::g_RR_at_P
std::shared_ptr< Fqk_variable< ppT > > & g_RR_at_P
Definition: mnt_miller_loop.hpp:48
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::prec_P2
G1_precomputation< ppT > prec_P2
Definition: mnt_miller_loop.hpp:327
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::prec_P3
mnt_G1_precomputation< ppT > prec_P3
Definition: mnt_miller_loop.hpp:250
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::addition_steps4
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps4
Definition: mnt_miller_loop.hpp:307
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::dbl_sqrs
std::vector< std::shared_ptr< Fqk_sqr_gadget< ppT > > > dbl_sqrs
Definition: mnt_miller_loop.hpp:234
libsnark::mnt_miller_loop_dbl_line_eval::c
mnt_precompute_G2_gadget_coeffs< ppT > c
Definition: mnt_miller_loop.hpp:47
libsnark::G1_precomputation
typename pairing_selector< ppT >::G1_precomputation_type G1_precomputation
Definition: pairing_params.hpp:127
libsnark::mnt_e_over_e_miller_loop_gadget::dbl_muls2
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls2
Definition: mnt_miller_loop.hpp:177
libsnark::mnt_miller_loop_gadget::prec_P
mnt_G1_precomputation< ppT > prec_P
Definition: mnt_miller_loop.hpp:134
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::Fqk_special_mul_gadget
mnt_pairing_params< ppT >::Fqk_special_mul_gadget_type Fqk_special_mul_gadget
Definition: mnt_miller_loop.hpp:211
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::doubling_steps3
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps3
Definition: mnt_miller_loop.hpp:232
libsnark::mnt_precompute_G2_gadget_coeffs
Definition: mnt_precomputation.hpp:117
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::dbl_muls1
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls1
Definition: mnt_miller_loop.hpp:235
libsnark::mnt_e_over_e_miller_loop_gadget::g_RR_at_P1s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P1s
Definition: mnt_miller_loop.hpp:159
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::addition_steps1
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps1
Definition: mnt_miller_loop.hpp:295
libsnark::mnt_e_over_e_miller_loop_gadget::prec_P1
mnt_G1_precomputation< ppT > prec_P1
Definition: mnt_miller_loop.hpp:184
libsnark::mnt_G2_precomputation
Definition: mnt_precomputation.hpp:141
libsnark::mnt_e_over_e_miller_loop_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::gadget
Definition: gadget.hpp:16
libsnark::mnt_miller_loop_add_line_eval::FqkT
libff::Fqk< other_curve< ppT > > FqkT
Definition: mnt_miller_loop.hpp:82
libsnark::mnt_miller_loop_dbl_line_eval::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::mnt_miller_loop_gadget::g_RR_at_Ps
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_Ps
Definition: mnt_miller_loop.hpp:117
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::prec_Q3
mnt_G2_precomputation< ppT > prec_Q3
Definition: mnt_miller_loop.hpp:251
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::prec_Q1
G2_precomputation< ppT > prec_Q1
Definition: mnt_miller_loop.hpp:326
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::result
Fqk_variable< ppT > result
Definition: mnt_miller_loop.hpp:252
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::doubling_steps3
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps3
Definition: mnt_miller_loop.hpp:305
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::Fqk_special_mul_gadget
mnt_pairing_params< ppT >::Fqk_special_mul_gadget_type Fqk_special_mul_gadget
Definition: mnt_miller_loop.hpp:282
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::mnt_e_times_e_over_e_miller_loop_gadget
mnt_e_times_e_over_e_miller_loop_gadget(protoboard< FieldT > &pb, const mnt_G1_precomputation< ppT > &prec_P1, const mnt_G2_precomputation< ppT > &prec_Q1, const mnt_G1_precomputation< ppT > &prec_P2, const mnt_G2_precomputation< ppT > &prec_Q2, const mnt_G1_precomputation< ppT > &prec_P3, const mnt_G2_precomputation< ppT > &prec_Q3, const Fqk_variable< ppT > &result, const std::string &annotation_prefix)
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::g_RR_at_P2s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P2s
Definition: mnt_miller_loop.hpp:286
libsnark::mnt_miller_loop_dbl_line_eval::g_RR_at_P_c1
std::shared_ptr< Fqe_variable< ppT > > g_RR_at_P_c1
Definition: mnt_miller_loop.hpp:51
libsnark::mnt_miller_loop_gadget::f_count
size_t f_count
Definition: mnt_miller_loop.hpp:130
libsnark::mnt_miller_loop_add_line_eval::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::mnt_miller_loop_dbl_line_eval::mnt_miller_loop_dbl_line_eval
mnt_miller_loop_dbl_line_eval(protoboard< FieldT > &pb, const mnt_G1_precomputation< ppT > &prec_P, const mnt_precompute_G2_gadget_coeffs< ppT > &c, std::shared_ptr< Fqk_variable< ppT >> &g_RR_at_P, const std::string &annotation_prefix)
libsnark::mnt_e_over_e_miller_loop_gadget::addition_steps2
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps2
Definition: mnt_miller_loop.hpp:170
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::addition_steps2
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps2
Definition: mnt_miller_loop.hpp:226
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::g_RQ_at_P2s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P2s
Definition: mnt_miller_loop.hpp:216
libsnark::mnt_miller_loop_dbl_line_eval
Definition: mnt_miller_loop.hpp:39
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::g_RR_at_P1s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P1s
Definition: mnt_miller_loop.hpp:213
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::add_muls1
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls1
Definition: mnt_miller_loop.hpp:313
libsnark::mnt_e_over_e_miller_loop_gadget::g_RR_at_P2s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P2s
Definition: mnt_miller_loop.hpp:161
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::doubling_steps2
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps2
Definition: mnt_miller_loop.hpp:228
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::dbl_muls3
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls3
Definition: mnt_miller_loop.hpp:239
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::g_RQ_at_P1s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P1s
Definition: mnt_miller_loop.hpp:214
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::g_RR_at_P4s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P4s
Definition: mnt_miller_loop.hpp:290
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::add_muls2
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls2
Definition: mnt_miller_loop.hpp:238
libsnark::mnt_miller_loop_add_line_eval::mnt_miller_loop_add_line_eval
mnt_miller_loop_add_line_eval(protoboard< FieldT > &pb, const bool invert_Q, const mnt_G1_precomputation< ppT > &prec_P, const mnt_precompute_G2_gadget_coeffs< ppT > &c, const G2_variable< ppT > &Q, std::shared_ptr< Fqk_variable< ppT >> &g_RQ_at_P, const std::string &annotation_prefix)
libsnark::mnt_e_over_e_miller_loop_gadget::FqkT
libff::Fqk< other_curve< ppT > > FqkT
Definition: mnt_miller_loop.hpp:155
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::dbl_muls4
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls4
Definition: mnt_miller_loop.hpp:318
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::add_count
size_t add_count
Definition: mnt_miller_loop.hpp:243
libsnark::mnt_miller_loop_dbl_line_eval::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_miller_loop.hpp:42
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::addition_steps2
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps2
Definition: mnt_miller_loop.hpp:299
libsnark::mnt_miller_loop_dbl_line_eval::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::mnt_miller_loop_gadget::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_miller_loop.hpp:111
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::g_RQ_at_P3s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P3s
Definition: mnt_miller_loop.hpp:289
libsnark::mnt_e_over_e_miller_loop_gadget::addition_steps1
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps1
Definition: mnt_miller_loop.hpp:166
libsnark::mnt_miller_loop_add_line_eval::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::doubling_steps4
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps4
Definition: mnt_miller_loop.hpp:309
libsnark::mnt_miller_loop_gadget::doubling_steps
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps
Definition: mnt_miller_loop.hpp:124
libsnark::mnt_G1_precomputation
Definition: mnt_precomputation.hpp:37
libsnark::mnt_e_over_e_miller_loop_gadget::prec_Q1
mnt_G2_precomputation< ppT > prec_Q1
Definition: mnt_miller_loop.hpp:185
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::dbl_count
size_t dbl_count
Definition: mnt_miller_loop.hpp:323
libsnark::mnt_e_over_e_miller_loop_gadget::FqeT
libff::Fqe< other_curve< ppT > > FqeT
Definition: mnt_miller_loop.hpp:154
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::prec_Q1
mnt_G2_precomputation< ppT > prec_Q1
Definition: mnt_miller_loop.hpp:247
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::dbl_muls3
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls3
Definition: mnt_miller_loop.hpp:316
libsnark::mnt_miller_loop_gadget::fs
std::vector< std::shared_ptr< Fqk_variable< ppT > > > fs
Definition: mnt_miller_loop.hpp:119
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::FqeT
libff::Fqe< other_curve< ppT > > FqeT
Definition: mnt_miller_loop.hpp:208
libsnark::mnt_pairing_params
Definition: mnt_pairing_params.hpp:114
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::addition_steps1
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps1
Definition: mnt_miller_loop.hpp:222
libsnark::mnt_e_over_e_miller_loop_gadget::add_muls1
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls1
Definition: mnt_miller_loop.hpp:176
libsnark::mnt_miller_loop_dbl_line_eval::FqeT
libff::Fqe< other_curve< ppT > > FqeT
Definition: mnt_miller_loop.hpp:43
libsnark::mnt_miller_loop_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::mnt_e_over_e_miller_loop_gadget::dbl_sqrs
std::vector< std::shared_ptr< Fqk_sqr_gadget< ppT > > > dbl_sqrs
Definition: mnt_miller_loop.hpp:174
libsnark::mnt_miller_loop_gadget::Fqk_special_mul_gadget
mnt_pairing_params< ppT >::Fqk_special_mul_gadget_type Fqk_special_mul_gadget
Definition: mnt_miller_loop.hpp:115
libsnark::mnt_miller_loop_gadget::addition_steps
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps
Definition: mnt_miller_loop.hpp:122
libsnark::mnt_e_over_e_miller_loop_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::addition_steps3
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps3
Definition: mnt_miller_loop.hpp:303
libsnark::mnt_e_over_e_miller_loop_gadget::dbl_muls1
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls1
Definition: mnt_miller_loop.hpp:175
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::g_RQ_at_P2s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P2s
Definition: mnt_miller_loop.hpp:287
libsnark::mnt_miller_loop_gadget::dbl_count
size_t dbl_count
Definition: mnt_miller_loop.hpp:132
libsnark::mnt_miller_loop_add_line_eval::c
mnt_precompute_G2_gadget_coeffs< ppT > c
Definition: mnt_miller_loop.hpp:86
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::g_RR_at_P3s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P3s
Definition: mnt_miller_loop.hpp:217
libsnark::mnt_e_over_e_miller_loop_gadget::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_miller_loop.hpp:153
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::g_RR_at_P1s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P1s
Definition: mnt_miller_loop.hpp:284
libsnark::mnt_e_over_e_miller_loop_gadget
Gadget for verifying a double Miller loop (where the second is inverted).
Definition: mnt_miller_loop.hpp:150
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::g_RQ_at_P1s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P1s
Definition: mnt_miller_loop.hpp:285
libsnark::mnt_miller_loop_add_line_eval::invert_Q
bool invert_Q
Definition: mnt_miller_loop.hpp:84
libsnark::mnt_miller_loop_gadget::FqkT
libff::Fqk< other_curve< ppT > > FqkT
Definition: mnt_miller_loop.hpp:113
libsnark::mnt_miller_loop_gadget::result
Fqk_variable< ppT > result
Definition: mnt_miller_loop.hpp:136
libsnark::mnt_miller_loop_add_line_eval::prec_P
mnt_G1_precomputation< ppT > prec_P
Definition: mnt_miller_loop.hpp:85
mnt_pairing_params.hpp
libsnark::mnt_miller_loop_add_line_eval
Definition: mnt_miller_loop.hpp:77
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::f_count
size_t f_count
Definition: mnt_miller_loop.hpp:321
libsnark::mnt_e_over_e_miller_loop_gadget::doubling_steps2
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps2
Definition: mnt_miller_loop.hpp:172
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::g_RQ_at_P3s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P3s
Definition: mnt_miller_loop.hpp:218
libsnark::Fqk_variable
typename pairing_selector< ppT >::Fqk_variable_type Fqk_variable
Definition: pairing_params.hpp:108
libsnark::mnt_e_over_e_miller_loop_gadget::prec_Q2
mnt_G2_precomputation< ppT > prec_Q2
Definition: mnt_miller_loop.hpp:187
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::prec_Q2
mnt_G2_precomputation< ppT > prec_Q2
Definition: mnt_miller_loop.hpp:249
libsnark::mnt_e_over_e_miller_loop_gadget::g_RQ_at_P1s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P1s
Definition: mnt_miller_loop.hpp:160
libsnark::mnt_miller_loop_add_line_eval::g_RQ_at_P_c1
std::shared_ptr< Fqe_variable< ppT > > g_RQ_at_P_c1
Definition: mnt_miller_loop.hpp:91
libsnark::mnt_miller_loop_gadget::dbl_muls
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls
Definition: mnt_miller_loop.hpp:126
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::prec_Q4
G2_precomputation< ppT > prec_Q4
Definition: mnt_miller_loop.hpp:332
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::dbl_sqrs
std::vector< std::shared_ptr< Fqk_sqr_gadget< ppT > > > dbl_sqrs
Definition: mnt_miller_loop.hpp:311
libsnark::mnt_e_over_e_miller_loop_gadget::dbl_count
size_t dbl_count
Definition: mnt_miller_loop.hpp:182
libsnark::mnt_miller_loop_dbl_line_eval::FqkT
libff::Fqk< other_curve< ppT > > FqkT
Definition: mnt_miller_loop.hpp:44
libsnark::mnt_miller_loop_gadget
Gadget for verifying a single Miller loop.
Definition: mnt_miller_loop.hpp:108
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::add_muls2
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls2
Definition: mnt_miller_loop.hpp:315
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::doubling_steps1
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps1
Definition: mnt_miller_loop.hpp:224
libsnark::mnt_e_over_e_miller_loop_gadget::f_count
size_t f_count
Definition: mnt_miller_loop.hpp:180
libsnark::G2_precomputation
typename pairing_selector< ppT >::G2_precomputation_type G2_precomputation
Definition: pairing_params.hpp:131
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::FqkT
libff::Fqk< other_curve< ppT > > FqkT
Definition: mnt_miller_loop.hpp:280
libsnark::mnt_miller_loop_dbl_line_eval::prec_P
mnt_G1_precomputation< ppT > prec_P
Definition: mnt_miller_loop.hpp:46
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget
Definition: mnt_miller_loop.hpp:274
libsnark::mnt_miller_loop_gadget::mnt_miller_loop_gadget
mnt_miller_loop_gadget(protoboard< FieldT > &pb, const mnt_G1_precomputation< ppT > &prec_P, const mnt_G2_precomputation< ppT > &prec_Q, const Fqk_variable< ppT > &result, const std::string &annotation_prefix)
libsnark::mnt_miller_loop_gadget::add_count
size_t add_count
Definition: mnt_miller_loop.hpp:131
libsnark::mnt_e_over_e_miller_loop_gadget::add_muls2
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls2
Definition: mnt_miller_loop.hpp:178
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::doubling_steps1
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps1
Definition: mnt_miller_loop.hpp:297
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::result
Fqk_variable< ppT > result
Definition: mnt_miller_loop.hpp:333
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::dbl_muls1
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls1
Definition: mnt_miller_loop.hpp:312
libsnark::mnt_miller_loop_gadget::add_muls
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls
Definition: mnt_miller_loop.hpp:128
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::prec_P4
G1_precomputation< ppT > prec_P4
Definition: mnt_miller_loop.hpp:331
libsnark::mnt_e_over_e_miller_loop_gadget::g_RQ_at_P2s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P2s
Definition: mnt_miller_loop.hpp:162
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::FqkT
libff::Fqk< other_curve< ppT > > FqkT
Definition: mnt_miller_loop.hpp:209
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::FqeT
libff::Fqe< other_curve< ppT > > FqeT
Definition: mnt_miller_loop.hpp:279
libsnark::mnt_miller_loop_gadget::prec_Q
mnt_G2_precomputation< ppT > prec_Q
Definition: mnt_miller_loop.hpp:135
mnt_precomputation.hpp
libsnark::mnt_miller_loop_gadget::FqeT
libff::Fqe< other_curve< ppT > > FqeT
Definition: mnt_miller_loop.hpp:112
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::prec_Q2
G2_precomputation< ppT > prec_Q2
Definition: mnt_miller_loop.hpp:328
libsnark::mnt_e_over_e_miller_loop_gadget::prec_P2
mnt_G1_precomputation< ppT > prec_P2
Definition: mnt_miller_loop.hpp:186
libsnark::mnt_miller_loop_add_line_eval::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_miller_loop.hpp:80
libsnark::mnt_e_over_e_miller_loop_gadget::add_count
size_t add_count
Definition: mnt_miller_loop.hpp:181
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::g_RR_at_P2s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P2s
Definition: mnt_miller_loop.hpp:215
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::f_count
size_t f_count
Definition: mnt_miller_loop.hpp:242
libsnark::mnt_miller_loop_dbl_line_eval::compute_g_RR_at_P_c1
std::shared_ptr< Fqe_mul_by_lc_gadget< ppT > > compute_g_RR_at_P_c1
Definition: mnt_miller_loop.hpp:52
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget::mnt_e_times_e_times_e_over_e_miller_loop_gadget
mnt_e_times_e_times_e_over_e_miller_loop_gadget(protoboard< FieldT > &pb, const G1_precomputation< ppT > &prec_P1, const G2_precomputation< ppT > &prec_Q1, const G1_precomputation< ppT > &prec_P2, const G2_precomputation< ppT > &prec_Q2, const G1_precomputation< ppT > &prec_P3, const G2_precomputation< ppT > &prec_Q3, const G1_precomputation< ppT > &prec_P4, const G2_precomputation< ppT > &prec_Q4, const Fqk_variable< ppT > &result, const std::string &annotation_prefix)
libsnark::mnt_e_over_e_miller_loop_gadget::Fqk_special_mul_gadget
mnt_pairing_params< ppT >::Fqk_special_mul_gadget_type Fqk_special_mul_gadget
Definition: mnt_miller_loop.hpp:157
libsnark::protoboard
Definition: pb_variable.hpp:22
libsnark::mnt_e_times_e_over_e_miller_loop_gadget
Gadget for verifying a triple Miller loop (where the third is inverted).
Definition: mnt_miller_loop.hpp:204
libsnark::mnt_e_times_e_over_e_miller_loop_gadget::generate_r1cs_witness
void generate_r1cs_witness()