Clearmatics Libsnark
0.1
C++ library for zkSNARK proofs
|
Go to the documentation of this file.
15 #ifndef LIBSNARK_GADGETLIB1_GADGETS_PAIRING_MNT_MNT_MILLER_LOOP_HPP_
16 #define LIBSNARK_GADGETLIB1_GADGETS_PAIRING_MNT_MNT_MILLER_LOOP_HPP_
38 template<
typename ppT>
43 typedef libff::Fqe<other_curve<ppT>>
FqeT;
44 typedef libff::Fqk<other_curve<ppT>>
FqkT;
76 template<
typename ppT>
81 typedef libff::Fqe<other_curve<ppT>>
FqeT;
82 typedef libff::Fqk<other_curve<ppT>>
FqkT;
107 template<
typename ppT>
112 typedef libff::Fqe<other_curve<ppT>>
FqeT;
113 typedef libff::Fqk<other_curve<ppT>>
FqkT;
119 std::vector<std::shared_ptr<Fqk_variable<ppT>>>
fs;
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>>>
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;
149 template<
typename ppT>
154 typedef libff::Fqe<other_curve<ppT>>
FqeT;
155 typedef libff::Fqk<other_curve<ppT>>
FqkT;
163 std::vector<std::shared_ptr<Fqk_variable<ppT>>>
fs;
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>>>
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;
203 template<
typename ppT>
208 typedef libff::Fqe<other_curve<ppT>>
FqeT;
209 typedef libff::Fqk<other_curve<ppT>>
FqkT;
219 std::vector<std::shared_ptr<Fqk_variable<ppT>>>
fs;
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>>>
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;
273 template<
typename ppT>
275 :
public gadget<libff::Fr<ppT>>
279 typedef libff::Fqe<other_curve<ppT>>
FqeT;
280 typedef libff::Fqk<other_curve<ppT>>
FqkT;
292 std::vector<std::shared_ptr<Fqk_variable<ppT>>>
fs;
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>>>
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;
355 #endif // LIBSNARK_GADGETLIB1_GADGETS_PAIRING_MNT_MNT_MILLER_LOOP_HPP_
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P4s
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps1
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls2
G2_precomputation< ppT > prec_Q3
std::shared_ptr< Fqk_variable< ppT > > & g_RQ_at_P
std::shared_ptr< Fqe_variable< ppT > > gamma_twist
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls4
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls3
std::shared_ptr< Fqe_mul_by_lc_gadget< ppT > > compute_g_RQ_at_P_c1
void generate_r1cs_constraints()
const std::string annotation_prefix
Gadget that represents a G2 variable.
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_Ps
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps3
mnt_G1_precomputation< ppT > prec_P2
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps2
G1_precomputation< ppT > prec_P3
Fqk_variable< ppT > result
G1_precomputation< ppT > prec_P1
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls3
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)
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls2
libff::Fqe< other_curve< ppT > > FqeT
std::vector< std::shared_ptr< Fqk_variable< ppT > > > fs
void generate_r1cs_constraints()
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls1
std::shared_ptr< Fqe_variable< ppT > > gamma_twist
mnt_G1_precomputation< ppT > prec_P1
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P3s
std::vector< std::shared_ptr< Fqk_sqr_gadget< ppT > > > dbl_sqrs
std::vector< std::shared_ptr< Fqk_variable< ppT > > > fs
std::vector< std::shared_ptr< Fqk_variable< ppT > > > fs
protoboard< libff::Fr< ppT > > & pb
std::shared_ptr< Fqk_variable< ppT > > & g_RR_at_P
G1_precomputation< ppT > prec_P2
mnt_G1_precomputation< ppT > prec_P3
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps4
std::vector< std::shared_ptr< Fqk_sqr_gadget< ppT > > > dbl_sqrs
mnt_precompute_G2_gadget_coeffs< ppT > c
typename pairing_selector< ppT >::G1_precomputation_type G1_precomputation
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls2
mnt_G1_precomputation< ppT > prec_P
mnt_pairing_params< ppT >::Fqk_special_mul_gadget_type Fqk_special_mul_gadget
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps3
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls1
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P1s
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps1
mnt_G1_precomputation< ppT > prec_P1
void generate_r1cs_witness()
libff::Fqk< other_curve< ppT > > FqkT
void generate_r1cs_constraints()
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_Ps
mnt_G2_precomputation< ppT > prec_Q3
G2_precomputation< ppT > prec_Q1
Fqk_variable< ppT > result
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps3
mnt_pairing_params< ppT >::Fqk_special_mul_gadget_type Fqk_special_mul_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)
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P2s
std::shared_ptr< Fqe_variable< ppT > > g_RR_at_P_c1
void generate_r1cs_witness()
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)
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps2
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps2
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P2s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P1s
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls1
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P2s
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps2
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls3
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P1s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P4s
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls2
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)
libff::Fqk< other_curve< ppT > > FqkT
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls4
void generate_r1cs_witness()
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps2
void generate_r1cs_witness()
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P3s
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps1
void generate_r1cs_constraints()
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps4
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps
mnt_G2_precomputation< ppT > prec_Q1
libff::Fqe< other_curve< ppT > > FqeT
mnt_G2_precomputation< ppT > prec_Q1
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls3
std::vector< std::shared_ptr< Fqk_variable< ppT > > > fs
libff::Fqe< other_curve< ppT > > FqeT
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps1
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls1
libff::Fqe< other_curve< ppT > > FqeT
void generate_r1cs_witness()
std::vector< std::shared_ptr< Fqk_sqr_gadget< ppT > > > dbl_sqrs
mnt_pairing_params< ppT >::Fqk_special_mul_gadget_type Fqk_special_mul_gadget
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps
void generate_r1cs_constraints()
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps3
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls1
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P2s
mnt_precompute_G2_gadget_coeffs< ppT > c
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P3s
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P1s
Gadget for verifying a double Miller loop (where the second is inverted).
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P1s
libff::Fqk< other_curve< ppT > > FqkT
Fqk_variable< ppT > result
mnt_G1_precomputation< ppT > prec_P
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps2
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P3s
typename pairing_selector< ppT >::Fqk_variable_type Fqk_variable
mnt_G2_precomputation< ppT > prec_Q2
mnt_G2_precomputation< ppT > prec_Q2
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P1s
std::shared_ptr< Fqe_variable< ppT > > g_RQ_at_P_c1
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls
G2_precomputation< ppT > prec_Q4
std::vector< std::shared_ptr< Fqk_sqr_gadget< ppT > > > dbl_sqrs
libff::Fqk< other_curve< ppT > > FqkT
Gadget for verifying a single Miller loop.
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls2
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps1
typename pairing_selector< ppT >::G2_precomputation_type G2_precomputation
libff::Fqk< other_curve< ppT > > FqkT
mnt_G1_precomputation< ppT > prec_P
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)
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls2
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps1
Fqk_variable< ppT > result
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls1
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls
G1_precomputation< ppT > prec_P4
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P2s
libff::Fqk< other_curve< ppT > > FqkT
libff::Fqe< other_curve< ppT > > FqeT
mnt_G2_precomputation< ppT > prec_Q
libff::Fqe< other_curve< ppT > > FqeT
G2_precomputation< ppT > prec_Q2
mnt_G1_precomputation< ppT > prec_P2
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P2s
void generate_r1cs_constraints()
std::shared_ptr< Fqe_mul_by_lc_gadget< ppT > > compute_g_RR_at_P_c1
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)
mnt_pairing_params< ppT >::Fqk_special_mul_gadget_type Fqk_special_mul_gadget
Gadget for verifying a triple Miller loop (where the third is inverted).
void generate_r1cs_witness()