Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
mnt_final_exponentiation.hpp
Go to the documentation of this file.
1 
15 #ifndef LIBSNARK_GADGETLIB1_GADGETS_PAIRING_MNT_MNT_FINAL_EXPONENTIATION_HPP_
16 #define LIBSNARK_GADGETLIB1_GADGETS_PAIRING_MNT_MNT_FINAL_EXPONENTIATION_HPP_
17 
20 
21 #include <libff/algebra/curves/mnt/mnt4/mnt4_pp.hpp>
22 #include <libff/algebra/curves/mnt/mnt6/mnt6_pp.hpp>
23 #include <libff/algebra/curves/public_params.hpp>
24 #include <memory>
25 
26 namespace libsnark
27 {
28 
32 template<typename ppT>
33 class mnt4_final_exp_gadget : public gadget<libff::Fr<ppT>>
34 {
35 public:
36  typedef libff::Fr<ppT> FieldT;
37 
39  std::shared_ptr<Fqk_variable<ppT>> one;
40  std::shared_ptr<Fqk_variable<ppT>> el_inv;
41  std::shared_ptr<Fqk_variable<ppT>> el_q_3;
42  std::shared_ptr<Fqk_variable<ppT>> el_q_3_minus_1;
43  std::shared_ptr<Fqk_variable<ppT>> alpha;
44  std::shared_ptr<Fqk_variable<ppT>> beta;
45  std::shared_ptr<Fqk_variable<ppT>> beta_q;
46  std::shared_ptr<Fqk_variable<ppT>> el_inv_q_3;
47  std::shared_ptr<Fqk_variable<ppT>> el_inv_q_3_minus_1;
48  std::shared_ptr<Fqk_variable<ppT>> inv_alpha;
49  std::shared_ptr<Fqk_variable<ppT>> inv_beta;
50  std::shared_ptr<Fqk_variable<ppT>> w1;
51  std::shared_ptr<Fqk_variable<ppT>> w0;
52  std::shared_ptr<Fqk_variable<ppT>> result;
53 
54  std::shared_ptr<Fqk_mul_gadget<ppT>> compute_el_inv;
55  std::shared_ptr<Fqk_mul_gadget<ppT>> compute_el_q_3_minus_1;
56  std::shared_ptr<Fqk_mul_gadget<ppT>> compute_beta;
57  std::shared_ptr<Fqk_mul_gadget<ppT>> compute_el_inv_q_3_minus_1;
58  std::shared_ptr<Fqk_mul_gadget<ppT>> compute_inv_beta;
59 
60  std::shared_ptr<exponentiation_gadget<
61  FqkT<ppT>,
65  libff::mnt6_q_limbs>>
67  std::shared_ptr<exponentiation_gadget<
68  FqkT<ppT>,
72  libff::mnt6_q_limbs>>
74  std::shared_ptr<Fqk_mul_gadget<ppT>> compute_result;
75 
77 
80  const Fqk_variable<ppT> &el,
82  const std::string &annotation_prefix);
84  void generate_r1cs_witness();
85 };
86 
90 template<typename ppT>
91 class mnt6_final_exp_gadget : public gadget<libff::Fr<ppT>>
92 {
93 public:
94  typedef libff::Fr<ppT> FieldT;
95 
97  std::shared_ptr<Fqk_variable<ppT>> one;
98  std::shared_ptr<Fqk_variable<ppT>> el_inv;
99  std::shared_ptr<Fqk_variable<ppT>> el_q_2;
100  std::shared_ptr<Fqk_variable<ppT>> el_q_2_minus_1;
101  std::shared_ptr<Fqk_variable<ppT>> el_q_3_minus_q;
102  std::shared_ptr<Fqk_variable<ppT>> el_inv_q_2;
103  std::shared_ptr<Fqk_variable<ppT>> el_inv_q_2_minus_1;
104  std::shared_ptr<Fqk_variable<ppT>> w1;
105  std::shared_ptr<Fqk_variable<ppT>> w0;
106  std::shared_ptr<Fqk_variable<ppT>> result;
107 
108  std::shared_ptr<Fqk_mul_gadget<ppT>> compute_el_inv;
109  std::shared_ptr<Fqk_mul_gadget<ppT>> compute_el_q_2_minus_1;
110  std::shared_ptr<Fqk_mul_gadget<ppT>> compute_el_inv_q_2_minus_1;
111 
112  std::shared_ptr<exponentiation_gadget<
113  FqkT<ppT>,
114  Fp4_variable,
117  libff::mnt4_q_limbs>>
119  std::shared_ptr<exponentiation_gadget<
120  FqkT<ppT>,
121  Fp4_variable,
124  libff::mnt4_q_limbs>>
126  std::shared_ptr<Fqk_mul_gadget<ppT>> compute_result;
127 
129 
132  const Fqk_variable<ppT> &el,
134  const std::string &annotation_prefix);
136  void generate_r1cs_witness();
137 };
138 
139 } // namespace libsnark
140 
142 
143 #endif // LIBSNARK_GADGETLIB1_GADGETS_PAIRING_MNT_MNT_FINAL_EXPONENTIATION_HPP_
libsnark::Fp4_cyclotomic_sqr_gadget
Definition: fp4_gadgets.hpp:180
libsnark::mnt4_final_exp_gadget::compute_w1
std::shared_ptr< exponentiation_gadget< FqkT< ppT >, Fp6_2over3_variable, Fp6_2over3_mul_gadget, Fp6_2over3_cyclotomic_sqr_gadget, libff::mnt6_q_limbs > > compute_w1
Definition: mnt_final_exponentiation.hpp:66
libsnark::mnt6_final_exp_gadget::el_q_2
std::shared_ptr< Fqk_variable< ppT > > el_q_2
Definition: mnt_final_exponentiation.hpp:99
libsnark::mnt6_final_exp_gadget::compute_el_q_2_minus_1
std::shared_ptr< Fqk_mul_gadget< ppT > > compute_el_q_2_minus_1
Definition: mnt_final_exponentiation.hpp:109
libsnark::gadget< libff::Fr< ppT > >::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark::exponentiation_gadget
Definition: exponentiation_gadget.hpp:38
libsnark::mnt6_final_exp_gadget::el_inv_q_2_minus_1
std::shared_ptr< Fqk_variable< ppT > > el_inv_q_2_minus_1
Definition: mnt_final_exponentiation.hpp:103
libsnark::mnt6_final_exp_gadget::compute_w0
std::shared_ptr< exponentiation_gadget< FqkT< ppT >, Fp4_variable, Fp4_mul_gadget, Fp4_cyclotomic_sqr_gadget, libff::mnt4_q_limbs > > compute_w0
Definition: mnt_final_exponentiation.hpp:125
libsnark::mnt6_final_exp_gadget::compute_el_inv_q_2_minus_1
std::shared_ptr< Fqk_mul_gadget< ppT > > compute_el_inv_q_2_minus_1
Definition: mnt_final_exponentiation.hpp:110
libsnark
Definition: accumulation_vector.hpp:18
libsnark::Fp4_mul_gadget
Fp4_direct_mul_gadget< Fp4T > Fp4_mul_gadget
Definition: fp4_gadgets.hpp:132
libsnark::mnt4_final_exp_gadget::el_q_3_minus_1
std::shared_ptr< Fqk_variable< ppT > > el_q_3_minus_1
Definition: mnt_final_exponentiation.hpp:42
libsnark::mnt4_final_exp_gadget::compute_el_q_3_minus_1
std::shared_ptr< Fqk_mul_gadget< ppT > > compute_el_q_3_minus_1
Definition: mnt_final_exponentiation.hpp:55
libsnark::mnt4_final_exp_gadget::compute_el_inv_q_3_minus_1
std::shared_ptr< Fqk_mul_gadget< ppT > > compute_el_inv_q_3_minus_1
Definition: mnt_final_exponentiation.hpp:57
libsnark::mnt6_final_exp_gadget::el
Fqk_variable< ppT > el
Definition: mnt_final_exponentiation.hpp:96
libsnark::gadget< libff::Fr< ppT > >::pb
protoboard< libff::Fr< ppT > > & pb
Definition: gadget.hpp:19
libsnark::mnt6_final_exp_gadget::el_q_2_minus_1
std::shared_ptr< Fqk_variable< ppT > > el_q_2_minus_1
Definition: mnt_final_exponentiation.hpp:100
libsnark::mnt4_final_exp_gadget::result_is_one
pb_variable< FieldT > result_is_one
Definition: mnt_final_exponentiation.hpp:76
libsnark::mnt6_final_exp_gadget::w0
std::shared_ptr< Fqk_variable< ppT > > w0
Definition: mnt_final_exponentiation.hpp:105
libsnark::FqkT
typename pairing_selector< ppT >::FqkT FqkT
Definition: pairing_params.hpp:92
libsnark::Fp6_2over3_mul_gadget
Definition: fp6_2over3_gadgets.hpp:60
libsnark::mnt4_final_exp_gadget::compute_beta
std::shared_ptr< Fqk_mul_gadget< ppT > > compute_beta
Definition: mnt_final_exponentiation.hpp:56
libsnark::gadget
Definition: gadget.hpp:16
libsnark::mnt4_final_exp_gadget::beta_q
std::shared_ptr< Fqk_variable< ppT > > beta_q
Definition: mnt_final_exponentiation.hpp:45
libsnark::mnt4_final_exp_gadget::inv_beta
std::shared_ptr< Fqk_variable< ppT > > inv_beta
Definition: mnt_final_exponentiation.hpp:49
libsnark::mnt4_final_exp_gadget::el_inv
std::shared_ptr< Fqk_variable< ppT > > el_inv
Definition: mnt_final_exponentiation.hpp:40
libsnark::mnt6_final_exp_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::mnt6_final_exp_gadget
Definition: mnt_final_exponentiation.hpp:91
mnt_final_exponentiation.tcc
libsnark::mnt4_final_exp_gadget::one
std::shared_ptr< Fqk_variable< ppT > > one
Definition: mnt_final_exponentiation.hpp:39
libsnark::Fp4_variable
Definition: fp4_gadgets.hpp:27
libsnark::mnt4_final_exp_gadget
Definition: mnt_final_exponentiation.hpp:33
libsnark::mnt6_final_exp_gadget::result_is_one
pb_variable< FieldT > result_is_one
Definition: mnt_final_exponentiation.hpp:128
libsnark::mnt4_final_exp_gadget::generate_r1cs_witness
void generate_r1cs_witness()
pairing_params.hpp
libsnark::mnt4_final_exp_gadget::w0
std::shared_ptr< Fqk_variable< ppT > > w0
Definition: mnt_final_exponentiation.hpp:51
libsnark::mnt4_final_exp_gadget::el_q_3
std::shared_ptr< Fqk_variable< ppT > > el_q_3
Definition: mnt_final_exponentiation.hpp:41
libsnark::mnt6_final_exp_gadget::el_q_3_minus_q
std::shared_ptr< Fqk_variable< ppT > > el_q_3_minus_q
Definition: mnt_final_exponentiation.hpp:101
libsnark::mnt4_final_exp_gadget::result
std::shared_ptr< Fqk_variable< ppT > > result
Definition: mnt_final_exponentiation.hpp:52
libsnark::mnt6_final_exp_gadget::one
std::shared_ptr< Fqk_variable< ppT > > one
Definition: mnt_final_exponentiation.hpp:97
libsnark::mnt6_final_exp_gadget::el_inv
std::shared_ptr< Fqk_variable< ppT > > el_inv
Definition: mnt_final_exponentiation.hpp:98
libsnark::mnt4_final_exp_gadget::w1
std::shared_ptr< Fqk_variable< ppT > > w1
Definition: mnt_final_exponentiation.hpp:50
exponentiation_gadget.hpp
libsnark::mnt4_final_exp_gadget::alpha
std::shared_ptr< Fqk_variable< ppT > > alpha
Definition: mnt_final_exponentiation.hpp:43
libsnark::mnt6_final_exp_gadget::w1
std::shared_ptr< Fqk_variable< ppT > > w1
Definition: mnt_final_exponentiation.hpp:104
libsnark::mnt4_final_exp_gadget::mnt4_final_exp_gadget
mnt4_final_exp_gadget(protoboard< FieldT > &pb, const Fqk_variable< ppT > &el, const pb_variable< FieldT > &result_is_one, const std::string &annotation_prefix)
libsnark::mnt4_final_exp_gadget::el_inv_q_3_minus_1
std::shared_ptr< Fqk_variable< ppT > > el_inv_q_3_minus_1
Definition: mnt_final_exponentiation.hpp:47
libsnark::mnt4_final_exp_gadget::compute_el_inv
std::shared_ptr< Fqk_mul_gadget< ppT > > compute_el_inv
Definition: mnt_final_exponentiation.hpp:54
libsnark::mnt6_final_exp_gadget::mnt6_final_exp_gadget
mnt6_final_exp_gadget(protoboard< FieldT > &pb, const Fqk_variable< ppT > &el, const pb_variable< FieldT > &result_is_one, const std::string &annotation_prefix)
libsnark::pb_variable
Definition: pb_variable.hpp:24
libsnark::mnt6_final_exp_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::Fqk_variable
typename pairing_selector< ppT >::Fqk_variable_type Fqk_variable
Definition: pairing_params.hpp:108
libsnark::mnt4_final_exp_gadget::compute_result
std::shared_ptr< Fqk_mul_gadget< ppT > > compute_result
Definition: mnt_final_exponentiation.hpp:74
libsnark::mnt4_final_exp_gadget::inv_alpha
std::shared_ptr< Fqk_variable< ppT > > inv_alpha
Definition: mnt_final_exponentiation.hpp:48
libsnark::mnt4_final_exp_gadget::el_inv_q_3
std::shared_ptr< Fqk_variable< ppT > > el_inv_q_3
Definition: mnt_final_exponentiation.hpp:46
libsnark::mnt4_final_exp_gadget::el
Fqk_variable< ppT > el
Definition: mnt_final_exponentiation.hpp:38
libsnark::mnt4_final_exp_gadget::compute_w0
std::shared_ptr< exponentiation_gadget< FqkT< ppT >, Fp6_2over3_variable, Fp6_2over3_mul_gadget, Fp6_2over3_cyclotomic_sqr_gadget, libff::mnt6_q_limbs > > compute_w0
Definition: mnt_final_exponentiation.hpp:73
libsnark::mnt6_final_exp_gadget::result
std::shared_ptr< Fqk_variable< ppT > > result
Definition: mnt_final_exponentiation.hpp:106
libsnark::mnt4_final_exp_gadget::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_final_exponentiation.hpp:36
libsnark::mnt6_final_exp_gadget::el_inv_q_2
std::shared_ptr< Fqk_variable< ppT > > el_inv_q_2
Definition: mnt_final_exponentiation.hpp:102
libsnark::mnt4_final_exp_gadget::compute_inv_beta
std::shared_ptr< Fqk_mul_gadget< ppT > > compute_inv_beta
Definition: mnt_final_exponentiation.hpp:58
libsnark::mnt4_final_exp_gadget::beta
std::shared_ptr< Fqk_variable< ppT > > beta
Definition: mnt_final_exponentiation.hpp:44
libsnark::mnt6_final_exp_gadget::FieldT
libff::Fr< ppT > FieldT
Definition: mnt_final_exponentiation.hpp:94
libsnark::mnt6_final_exp_gadget::compute_w1
std::shared_ptr< exponentiation_gadget< FqkT< ppT >, Fp4_variable, Fp4_mul_gadget, Fp4_cyclotomic_sqr_gadget, libff::mnt4_q_limbs > > compute_w1
Definition: mnt_final_exponentiation.hpp:118
libsnark::mnt6_final_exp_gadget::compute_result
std::shared_ptr< Fqk_mul_gadget< ppT > > compute_result
Definition: mnt_final_exponentiation.hpp:126
libsnark::mnt6_final_exp_gadget::compute_el_inv
std::shared_ptr< Fqk_mul_gadget< ppT > > compute_el_inv
Definition: mnt_final_exponentiation.hpp:108
libsnark::mnt4_final_exp_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::Fp6_2over3_variable
Definition: fp6_2over3_gadgets.hpp:29
libsnark::protoboard
Definition: pb_variable.hpp:22
libsnark::Fp6_2over3_cyclotomic_sqr_gadget
Definition: fp6_2over3_gadgets.hpp:183