Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
exponentiation_gadget.hpp
Go to the documentation of this file.
1 
12 #ifndef EXPONENTIATION_GADGET_HPP_
13 #define EXPONENTIATION_GADGET_HPP_
14 
15 #include <libff/algebra/fields/bigint.hpp>
16 #include <libff/algebra/scalar_multiplication/wnaf.hpp>
18 #include <memory>
19 #include <vector>
20 
21 namespace libsnark
22 {
23 
29 template<
30  typename FpkT,
31  template<class>
32  class Fpk_variableT,
33  template<class>
34  class Fpk_mul_gadgetT,
35  template<class>
36  class Fpk_sqr_gadgetT,
37  mp_size_t m>
38 class exponentiation_gadget : public gadget<typename FpkT::my_Fp>
39 {
40 public:
41  typedef typename FpkT::my_Fp FieldT;
42  std::vector<long> NAF;
43 
44  std::vector<std::shared_ptr<Fpk_variableT<FpkT>>> intermediate;
45  std::vector<std::shared_ptr<Fpk_mul_gadgetT<FpkT>>> addition_steps;
46  std::vector<std::shared_ptr<Fpk_mul_gadgetT<FpkT>>> subtraction_steps;
47  std::vector<std::shared_ptr<Fpk_sqr_gadgetT<FpkT>>> doubling_steps;
48 
49  Fpk_variableT<FpkT> elt;
50  libff::bigint<m> power;
51  Fpk_variableT<FpkT> result;
52 
54  size_t add_count;
55  size_t sub_count;
56  size_t dbl_count;
57 
60  const Fpk_variableT<FpkT> &elt,
61  const libff::bigint<m> &power,
62  const Fpk_variableT<FpkT> &result,
63  const std::string &annotation_prefix);
65  void generate_r1cs_witness();
66 };
67 
68 template<
69  typename FpkT,
70  template<class>
71  class Fpk_variableT,
72  template<class>
73  class Fpk_mul_gadgetT,
74  template<class>
75  class Fpk_sqr_gadgetT,
76  mp_size_t m>
78  const libff::bigint<m> &power, const std::string &annotation);
79 
80 } // namespace libsnark
81 
83 
84 #endif // EXPONENTIATION_GADGET_HPP_
libsnark::exponentiation_gadget::result
Fpk_variableT< FpkT > result
Definition: exponentiation_gadget.hpp:51
libsnark::exponentiation_gadget::intermed_count
size_t intermed_count
Definition: exponentiation_gadget.hpp:53
libsnark::gadget< FpkT::my_Fp >::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark::exponentiation_gadget
Definition: exponentiation_gadget.hpp:38
libsnark
Definition: accumulation_vector.hpp:18
exponentiation_gadget.tcc
libsnark::exponentiation_gadget::dbl_count
size_t dbl_count
Definition: exponentiation_gadget.hpp:56
libsnark::gadget< FpkT::my_Fp >::pb
protoboard< FpkT::my_Fp > & pb
Definition: gadget.hpp:19
libsnark::exponentiation_gadget::addition_steps
std::vector< std::shared_ptr< Fpk_mul_gadgetT< FpkT > > > addition_steps
Definition: exponentiation_gadget.hpp:45
gadget.hpp
libsnark::exponentiation_gadget::add_count
size_t add_count
Definition: exponentiation_gadget.hpp:54
libsnark::gadget
Definition: gadget.hpp:16
libsnark::exponentiation_gadget::elt
Fpk_variableT< FpkT > elt
Definition: exponentiation_gadget.hpp:49
gadgetlib2::power
FElem power(const FElem &base, long exponent)
Definition: variable.cpp:139
libsnark::exponentiation_gadget::power
libff::bigint< m > power
Definition: exponentiation_gadget.hpp:50
libsnark::exponentiation_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::exponentiation_gadget::doubling_steps
std::vector< std::shared_ptr< Fpk_sqr_gadgetT< FpkT > > > doubling_steps
Definition: exponentiation_gadget.hpp:47
libsnark::exponentiation_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::exponentiation_gadget::sub_count
size_t sub_count
Definition: exponentiation_gadget.hpp:55
libsnark::exponentiation_gadget::subtraction_steps
std::vector< std::shared_ptr< Fpk_mul_gadgetT< FpkT > > > subtraction_steps
Definition: exponentiation_gadget.hpp:46
libsnark::exponentiation_gadget::NAF
std::vector< long > NAF
Definition: exponentiation_gadget.hpp:42
libsnark::exponentiation_gadget::exponentiation_gadget
exponentiation_gadget(protoboard< FieldT > &pb, const Fpk_variableT< FpkT > &elt, const libff::bigint< m > &power, const Fpk_variableT< FpkT > &result, const std::string &annotation_prefix)
libsnark::exponentiation_gadget::intermediate
std::vector< std::shared_ptr< Fpk_variableT< FpkT > > > intermediate
Definition: exponentiation_gadget.hpp:44
libsnark::test_exponentiation_gadget
void test_exponentiation_gadget(const libff::bigint< m > &power, const std::string &annotation)
libsnark::exponentiation_gadget::FieldT
FpkT::my_Fp FieldT
Definition: exponentiation_gadget.hpp:41
libsnark::protoboard
Definition: pb_variable.hpp:22