Clearmatics Libff  0.1
C++ library for Finite Fields and Elliptic Curves
fp12_2over3over2.hpp
Go to the documentation of this file.
1 
10 #ifndef FP12_2OVER3OVER2_HPP_
11 #define FP12_2OVER3OVER2_HPP_
15 #include <vector>
16 
17 namespace libff
18 {
19 
20 template<mp_size_t n, const bigint<n> &modulus> class Fp12_2over3over2_model;
21 
22 template<mp_size_t n, const bigint<n> &modulus>
23 std::ostream &operator<<(
24  std::ostream &, const Fp12_2over3over2_model<n, modulus> &);
25 
26 template<mp_size_t n, const bigint<n> &modulus>
27 std::istream &operator>>(std::istream &, Fp12_2over3over2_model<n, modulus> &);
28 
36 template<mp_size_t n, const bigint<n> &modulus> class Fp12_2over3over2_model
37 {
38 public:
39  // (modulus^12-1)/2
41  // modulus^12 = 2^s * t + 1
42  static std::size_t s;
43  // with t odd
44  static bigint<12 * n> t;
45  // (t-1)/2
47  // a quadratic nonresidue in Fp12
49  // nqr^t
51 
55 
59 
60  static const size_t tower_extension_degree = 2;
61 
64  Fp12_2over3over2_model(const my_Fp6 &c0, const my_Fp6 &c1)
65  {
66  this->coeffs[0] = c0;
67  this->coeffs[1] = c1;
68  return;
69  };
70 
71  void clear()
72  {
73  coeffs[0].clear();
74  coeffs[1].clear();
75  }
76  void print() const
77  {
78  printf("c0/c1:\n");
79  coeffs[0].print();
80  coeffs[1].print();
81  }
82 
86 
87  bool is_zero() const { return coeffs[0].is_zero() && coeffs[1].is_zero(); }
88  bool operator==(const Fp12_2over3over2_model &other) const;
89  bool operator!=(const Fp12_2over3over2_model &other) const;
90 
100  Fp12_2over3over2_model Frobenius_map(unsigned long power) const;
103 
105  const my_Fp2 &ell_0, const my_Fp2 &ell_VW, const my_Fp2 &ell_VV) const;
106 
108  const my_Fp2 &ell_0, const my_Fp2 &ell_VW, const my_Fp2 &ell_VV) const;
109 
110  static my_Fp6 mul_by_non_residue(const my_Fp6 &elt);
111 
112  template<mp_size_t m>
113  Fp12_2over3over2_model cyclotomic_exp(const bigint<m> &exponent) const;
114 
115  static bigint<n> base_field_char() { return modulus; }
116  static constexpr size_t extension_degree() { return 12; }
117 
118  friend std::ostream &operator<<<n, modulus>(
119  std::ostream &out, const Fp12_2over3over2_model<n, modulus> &el);
120  friend std::istream &operator>>
121  <n, modulus>(std::istream &in, Fp12_2over3over2_model<n, modulus> &el);
122 };
123 
124 template<mp_size_t n, const bigint<n> &modulus>
125 std::ostream &operator<<(
126  std::ostream &out,
127  const std::vector<Fp12_2over3over2_model<n, modulus>> &v);
128 
129 template<mp_size_t n, const bigint<n> &modulus>
130 std::istream &operator>>(
131  std::istream &in, std::vector<Fp12_2over3over2_model<n, modulus>> &v);
132 
133 template<mp_size_t n, const bigint<n> &modulus>
134 Fp12_2over3over2_model<n, modulus> operator*(
135  const Fp_model<n, modulus> &lhs,
136  const Fp12_2over3over2_model<n, modulus> &rhs);
137 
138 template<mp_size_t n, const bigint<n> &modulus>
139 Fp12_2over3over2_model<n, modulus> operator*(
140  const Fp2_model<n, modulus> &lhs,
141  const Fp12_2over3over2_model<n, modulus> &rhs);
142 
143 template<mp_size_t n, const bigint<n> &modulus>
144 Fp12_2over3over2_model<n, modulus> operator*(
145  const Fp6_3over2_model<n, modulus> &lhs,
146  const Fp12_2over3over2_model<n, modulus> &rhs);
147 
148 template<mp_size_t n, const bigint<n> &modulus, mp_size_t m>
149 Fp12_2over3over2_model<n, modulus> operator^(
150  const Fp12_2over3over2_model<n, modulus> &self, const bigint<m> &exponent);
151 
152 template<
153  mp_size_t n,
154  const bigint<n> &modulus,
155  mp_size_t m,
156  const bigint<m> &exp_modulus>
157 Fp12_2over3over2_model<n, modulus> operator^(
158  const Fp12_2over3over2_model<n, modulus> &self,
159  const Fp_model<m, exp_modulus> &exponent);
160 
161 template<mp_size_t n, const bigint<n> &modulus>
163 
164 template<mp_size_t n, const bigint<n> &modulus>
166 
167 template<mp_size_t n, const bigint<n> &modulus>
169 
170 template<mp_size_t n, const bigint<n> &modulus>
172 
173 template<mp_size_t n, const bigint<n> &modulus>
174 Fp12_2over3over2_model<n, modulus> Fp12_2over3over2_model<n, modulus>::nqr;
175 
176 template<mp_size_t n, const bigint<n> &modulus>
177 Fp12_2over3over2_model<n, modulus> Fp12_2over3over2_model<n, modulus>::nqr_to_t;
178 
179 template<mp_size_t n, const bigint<n> &modulus>
181 
182 template<mp_size_t n, const bigint<n> &modulus>
183 Fp2_model<n, modulus>
185 
186 } // namespace libff
187 
189 
190 #endif // FP12_2OVER3OVER2_HPP_
libff::Fp12_2over3over2_model::squared_karatsuba
Fp12_2over3over2_model squared_karatsuba() const
libff::Fp6_3over2_model
Definition: fp6_3over2.hpp:19
libff::Fp12_2over3over2_model::Fp12_2over3over2_model
Fp12_2over3over2_model(const my_Fp6 &c0, const my_Fp6 &c1)
Definition: fp12_2over3over2.hpp:64
libff::Fp12_2over3over2_model::clear
void clear()
Definition: fp12_2over3over2.hpp:71
libff::Fp6_3over2_model::print
void print() const
Definition: fp6_3over2.hpp:76
libff::Fp12_2over3over2_model::tower_extension_degree
static const size_t tower_extension_degree
Definition: fp12_2over3over2.hpp:60
libff
Definition: ffi.cpp:8
libff::Fp12_2over3over2_model::random_element
static Fp12_2over3over2_model< n, modulus > random_element()
fp.hpp
libff::Fp12_2over3over2_model::non_residue
static Fp2_model< n, modulus > non_residue
Definition: fp12_2over3over2.hpp:56
libff::Fp12_2over3over2_model::Frobenius_coeffs_c1
static Fp2_model< n, modulus > Frobenius_coeffs_c1[12]
non_residue^((modulus^i-1)/6) for i=0,...,11
Definition: fp12_2over3over2.hpp:58
libff::Fp12_2over3over2_model::one
static Fp12_2over3over2_model< n, modulus > one()
libff::operator>>
std::istream & operator>>(std::istream &in, alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:446
libff::Fp12_2over3over2_model::Fp12_2over3over2_model
Fp12_2over3over2_model()
Definition: fp12_2over3over2.hpp:63
libff::Fp6_3over2_model::clear
void clear()
Definition: fp6_3over2.hpp:70
libff::Fp12_2over3over2_model::t_minus_1_over_2
static bigint< 12 *n > t_minus_1_over_2
Definition: fp12_2over3over2.hpp:46
libff::Fp6_3over2_model::is_zero
bool is_zero() const
Definition: fp6_3over2.hpp:88
libff::Fp12_2over3over2_model::squared
Fp12_2over3over2_model squared() const
default is squared_complex
libff::Fp12_2over3over2_model::zero
static Fp12_2over3over2_model< n, modulus > zero()
libff::Fp12_2over3over2_model::euler
static bigint< 12 *n > euler
Definition: fp12_2over3over2.hpp:40
libff::Fp12_2over3over2_model::mul_by_non_residue
static my_Fp6 mul_by_non_residue(const my_Fp6 &elt)
fp6_3over2.hpp
libff::Fp12_2over3over2_model::print
void print() const
Definition: fp12_2over3over2.hpp:76
libff::Fp12_2over3over2_model::nqr_to_t
static Fp12_2over3over2_model< n, modulus > nqr_to_t
Definition: fp12_2over3over2.hpp:50
libff::Fp12_2over3over2_model::Frobenius_map
Fp12_2over3over2_model Frobenius_map(unsigned long power) const
libff::Fp12_2over3over2_model::nqr
static Fp12_2over3over2_model< n, modulus > nqr
Definition: fp12_2over3over2.hpp:48
libff::Fp12_2over3over2_model::inverse
Fp12_2over3over2_model inverse() const
libff::Fp12_2over3over2_model::s
static std::size_t s
Definition: fp12_2over3over2.hpp:42
libff::Fp12_2over3over2_model::mul_by_024
Fp12_2over3over2_model mul_by_024(const my_Fp2 &ell_0, const my_Fp2 &ell_VW, const my_Fp2 &ell_VV) const
libff::Fp12_2over3over2_model::squared_complex
Fp12_2over3over2_model squared_complex() const
fp2.hpp
libff::Fp12_2over3over2_model::extension_degree
static constexpr size_t extension_degree()
Definition: fp12_2over3over2.hpp:116
libff::bigint< 12 *n >
libff::Fp12_2over3over2_model::is_zero
bool is_zero() const
Definition: fp12_2over3over2.hpp:87
libff::operator^
bn128_GT operator^(const bn128_GT &rhs, const bigint< m > &lhs)
Definition: bn128_gt.hpp:45
libff::Fp12_2over3over2_model::unitary_inverse
Fp12_2over3over2_model unitary_inverse() const
libff::Fp12_2over3over2_model
Definition: fp12_2over3over2.hpp:20
libff::Fp12_2over3over2_model::cyclotomic_exp
Fp12_2over3over2_model cyclotomic_exp(const bigint< m > &exponent) const
libff::Fp12_2over3over2_model::my_Fp2
Fp2_model< n, modulus > my_Fp2
Definition: fp12_2over3over2.hpp:53
libff::Fp12_2over3over2_model::operator+
Fp12_2over3over2_model operator+(const Fp12_2over3over2_model &other) const
libff::Fp_model
Definition: fp.hpp:20
libff::Fp12_2over3over2_model::operator*
Fp12_2over3over2_model operator*(const Fp12_2over3over2_model &other) const
libff::Fp12_2over3over2_model::operator-
Fp12_2over3over2_model operator-() const
libff::Fp12_2over3over2_model::my_Fp6
Fp6_3over2_model< n, modulus > my_Fp6
Definition: fp12_2over3over2.hpp:54
libff::operator<<
std::ostream & operator<<(std::ostream &out, const alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:436
libff::Fp12_2over3over2_model::base_field_char
static bigint< n > base_field_char()
Definition: fp12_2over3over2.hpp:115
libff::operator*
alt_bn128_G1 operator*(const bigint< m > &lhs, const alt_bn128_G1 &rhs)
Definition: alt_bn128_g1.hpp:99
libff::Fp12_2over3over2_model::my_Fp
Fp_model< n, modulus > my_Fp
Definition: fp12_2over3over2.hpp:52
libff::Fp2_model
Definition: fp2.hpp:18
libff::Fp12_2over3over2_model::operator!=
bool operator!=(const Fp12_2over3over2_model &other) const
libff::Fp12_2over3over2_model::cyclotomic_squared
Fp12_2over3over2_model cyclotomic_squared() const
libff::power
FieldT power(const FieldT &base, const bigint< m > &exponent)
libff::Fp12_2over3over2_model::mul_by_045
Fp12_2over3over2_model mul_by_045(const my_Fp2 &ell_0, const my_Fp2 &ell_VW, const my_Fp2 &ell_VV) const
libff::Fp12_2over3over2_model::t
static bigint< 12 *n > t
Definition: fp12_2over3over2.hpp:44
libff::Fp12_2over3over2_model::operator==
bool operator==(const Fp12_2over3over2_model &other) const
libff::Fp12_2over3over2_model::coeffs
my_Fp6 coeffs[2]
Definition: fp12_2over3over2.hpp:62
fp12_2over3over2.tcc