Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
fp2_gadgets.hpp
Go to the documentation of this file.
1 
15 #ifndef FP2_GADGETS_HPP_
16 #define FP2_GADGETS_HPP_
17 
19 #include <memory>
20 
21 namespace libsnark
22 {
23 
27 template<typename Fp2T> class Fp2_variable : public gadget<typename Fp2T::my_Fp>
28 {
29 public:
30  typedef typename Fp2T::my_Fp FieldT;
31 
34 
36 
40  const Fp2T &el,
41  const std::string &annotation_prefix);
44  const Fp2T &el,
45  const pb_linear_combination<FieldT> &coeff,
46  const std::string &annotation_prefix);
51  const std::string &annotation_prefix);
52 
53  void generate_r1cs_equals_const_constraints(const Fp2T &el);
54  void generate_r1cs_witness(const Fp2T &el);
55  Fp2T get_element() const;
56 
57  Fp2_variable<Fp2T> operator*(const FieldT &coeff) const;
58  Fp2_variable<Fp2T> operator*(const Fp2T &fp2_const) const;
60  Fp2_variable<Fp2T> operator+(const Fp2T &fp2_const) const;
65  void evaluate() const;
66  bool is_constant() const;
67 
68  static size_t size_in_bits();
69  static size_t num_variables();
70 };
71 
75 template<typename Fp2T>
76 class Fp2_mul_gadget : public gadget<typename Fp2T::my_Fp>
77 {
78 public:
79  typedef typename Fp2T::my_Fp FieldT;
80 
84 
86 
89  const Fp2_variable<Fp2T> &A,
90  const Fp2_variable<Fp2T> &B,
92  const std::string &annotation_prefix);
94  void generate_r1cs_witness();
95 };
96 
101 template<typename Fp2T>
102 class Fp2_mul_by_lc_gadget : public gadget<typename Fp2T::my_Fp>
103 {
104 public:
105  typedef typename Fp2T::my_Fp FieldT;
106 
110 
113  const Fp2_variable<Fp2T> &A,
115  const Fp2_variable<Fp2T> &result,
116  const std::string &annotation_prefix);
118  void generate_r1cs_witness();
119 };
120 
124 template<typename Fp2T>
125 class Fp2_sqr_gadget : public gadget<typename Fp2T::my_Fp>
126 {
127 public:
128  typedef typename Fp2T::my_Fp FieldT;
129 
132 
135  const Fp2_variable<Fp2T> &A,
136  const Fp2_variable<Fp2T> &result,
137  const std::string &annotation_prefix);
139  void generate_r1cs_witness();
140 };
141 
142 } // namespace libsnark
143 
145 
146 #endif // FP2_GADGETS_HPP_
libsnark::Fp2_mul_gadget::Fp2_mul_gadget
Fp2_mul_gadget(protoboard< FieldT > &pb, const Fp2_variable< Fp2T > &A, const Fp2_variable< Fp2T > &B, const Fp2_variable< Fp2T > &result, const std::string &annotation_prefix)
libsnark::Fp2_variable::mul_by_X
Fp2_variable< Fp2T > mul_by_X() const
libsnark::Fp2_variable::all_vars
pb_linear_combination_array< FieldT > all_vars
Definition: fp2_gadgets.hpp:35
libsnark::gadget< Fp2T::my_Fp >::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark::Fp2_mul_by_lc_gadget::result
Fp2_variable< Fp2T > result
Definition: fp2_gadgets.hpp:109
libsnark::Fp2_sqr_gadget::A
Fp2_variable< Fp2T > A
Definition: fp2_gadgets.hpp:130
libsnark
Definition: accumulation_vector.hpp:18
libsnark::Fp2_variable::evaluate
void evaluate() const
libsnark::Fp2_variable
Definition: fp2_gadgets.hpp:27
libsnark::gadget< Fp2T::my_Fp >::pb
protoboard< Fp2T::my_Fp > & pb
Definition: gadget.hpp:19
libsnark::Fp2_mul_by_lc_gadget
Definition: fp2_gadgets.hpp:102
gadget.hpp
fp2_gadgets.tcc
libsnark::gadget
Definition: gadget.hpp:16
libsnark::Fp2_mul_by_lc_gadget::Fp2_mul_by_lc_gadget
Fp2_mul_by_lc_gadget(protoboard< FieldT > &pb, const Fp2_variable< Fp2T > &A, const pb_linear_combination< FieldT > &lc, const Fp2_variable< Fp2T > &result, const std::string &annotation_prefix)
libsnark::Fp2_mul_by_lc_gadget::FieldT
Fp2T::my_Fp FieldT
Definition: fp2_gadgets.hpp:105
libsnark::Fp2_mul_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::Fp2_variable::c0
pb_linear_combination< FieldT > c0
Definition: fp2_gadgets.hpp:32
libsnark::Fp2_variable::frobenius_map
Fp2_variable< Fp2T > frobenius_map(size_t power) const
libsnark::Fp2_mul_gadget::v1
pb_variable< FieldT > v1
Definition: fp2_gadgets.hpp:85
libsnark::Fp2_variable::is_constant
bool is_constant() const
libsnark::Fp2_sqr_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::Fp2_variable::Fp2_variable
Fp2_variable(protoboard< FieldT > &pb, const std::string &annotation_prefix)
libsnark::Fp2_variable::c1
pb_linear_combination< FieldT > c1
Definition: fp2_gadgets.hpp:33
libsnark::pb_linear_combination_array
Definition: pb_variable.hpp:118
gadgetlib2::power
FElem power(const FElem &base, long exponent)
Definition: variable.cpp:139
libsnark::Fp2_mul_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::Fp2_variable::FieldT
Fp2T::my_Fp FieldT
Definition: fp2_gadgets.hpp:30
libsnark::pb_linear_combination
Definition: pb_variable.hpp:101
libsnark::Fp2_mul_by_lc_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::Fp2_mul_gadget::B
Fp2_variable< Fp2T > B
Definition: fp2_gadgets.hpp:82
libsnark::Fp2_mul_gadget::FieldT
Fp2T::my_Fp FieldT
Definition: fp2_gadgets.hpp:79
libsnark::Fp2_mul_by_lc_gadget::lc
pb_linear_combination< FieldT > lc
Definition: fp2_gadgets.hpp:108
libsnark::Fp2_variable::operator*
Fp2_variable< Fp2T > operator*(const FieldT &coeff) const
libsnark::pb_variable
Definition: pb_variable.hpp:24
libsnark::Fp2_variable::generate_r1cs_equals_const_constraints
void generate_r1cs_equals_const_constraints(const Fp2T &el)
libsnark::Fp2_variable::num_variables
static size_t num_variables()
libsnark::Fp2_sqr_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::Fp2_variable::generate_r1cs_witness
void generate_r1cs_witness(const Fp2T &el)
libsnark::Fp2_mul_gadget::A
Fp2_variable< Fp2T > A
Definition: fp2_gadgets.hpp:81
libsnark::Fp2_variable::operator-
Fp2_variable< Fp2T > operator-() const
libsnark::Fp2_sqr_gadget::result
Fp2_variable< Fp2T > result
Definition: fp2_gadgets.hpp:131
libsnark::Fp2_mul_gadget::result
Fp2_variable< Fp2T > result
Definition: fp2_gadgets.hpp:83
libsnark::Fp2_variable::size_in_bits
static size_t size_in_bits()
libsnark::Fp2_sqr_gadget
Definition: fp2_gadgets.hpp:125
libsnark::Fp2_variable::operator+
Fp2_variable< Fp2T > operator+(const Fp2_variable< Fp2T > &other) const
libsnark::Fp2_variable::get_element
Fp2T get_element() const
libsnark::Fp2_sqr_gadget::FieldT
Fp2T::my_Fp FieldT
Definition: fp2_gadgets.hpp:128
libsnark::Fp2_sqr_gadget::Fp2_sqr_gadget
Fp2_sqr_gadget(protoboard< FieldT > &pb, const Fp2_variable< Fp2T > &A, const Fp2_variable< Fp2T > &result, const std::string &annotation_prefix)
libsnark::Fp2_mul_by_lc_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::Fp2_mul_by_lc_gadget::A
Fp2_variable< Fp2T > A
Definition: fp2_gadgets.hpp:107
libsnark::protoboard
Definition: pb_variable.hpp:22
libsnark::Fp2_mul_gadget
Definition: fp2_gadgets.hpp:76