Clearmatics Libff  0.1
C++ library for Finite Fields and Elliptic Curves
edwards_g2.hpp
Go to the documentation of this file.
1 
8 #ifndef EDWARDS_G2_HPP_
9 #define EDWARDS_G2_HPP_
10 #include <iostream>
13 #include <vector>
14 
15 namespace libff
16 {
17 
18 class edwards_G2;
19 std::ostream &operator<<(std::ostream &, const edwards_G2 &);
20 std::istream &operator>>(std::istream &, edwards_G2 &);
21 
23 {
24 public:
25 #ifdef PROFILE_OP_COUNTS
26  static long long add_cnt;
27  static long long dbl_cnt;
28 #endif
29  static std::vector<size_t> wnaf_window_table;
30  static std::vector<size_t> fixed_base_exp_window_table;
31 
34 
36  edwards_G2();
37 
38 private:
39  edwards_G2(const edwards_Fq3 &X, const edwards_Fq3 &Y, const edwards_Fq3 &Z)
40  : X(X), Y(Y), Z(Z){};
41 
42 public:
43  static edwards_Fq3 mul_by_a(const edwards_Fq3 &elt);
44  static edwards_Fq3 mul_by_d(const edwards_Fq3 &elt);
48 
49  // using inverted coordinates
51  : X(Y), Y(X), Z(X * Y){};
52 
53  void print() const;
54  void print_coordinates() const;
55 
56  void to_affine_coordinates();
57  void to_special();
58  bool is_special() const;
59 
60  bool is_zero() const;
61 
62  bool operator==(const edwards_G2 &other) const;
63  bool operator!=(const edwards_G2 &other) const;
64 
65  edwards_G2 operator+(const edwards_G2 &other) const;
66  edwards_G2 operator-() const;
67  edwards_G2 operator-(const edwards_G2 &other) const;
68 
69  edwards_G2 add(const edwards_G2 &other) const;
70  edwards_G2 mixed_add(const edwards_G2 &other) const;
71  edwards_G2 dbl() const;
72  edwards_G2 mul_by_q() const;
73 
74  bool is_well_formed() const;
75 
76  static const edwards_G2 &zero();
77  static const edwards_G2 &one();
78  static edwards_G2 random_element();
79 
80  static size_t size_in_bits() { return twist_field::size_in_bits() + 1; }
82  {
83  return base_field::field_char();
84  }
86  {
87  return scalar_field::field_char();
88  }
89 
90  void write_uncompressed(std::ostream &) const;
91  void write_compressed(std::ostream &) const;
92  static void read_uncompressed(std::istream &, edwards_G2 &);
93  static void read_compressed(std::istream &, edwards_G2 &);
94 
95  static void batch_to_special_all_non_zeros(std::vector<edwards_G2> &vec);
96 };
97 
98 template<mp_size_t m>
99 edwards_G2 operator*(const bigint<m> &lhs, const edwards_G2 &rhs)
100 {
101  return scalar_mul<edwards_G2, m>(rhs, lhs);
102 }
103 
104 template<mp_size_t m, const bigint<m> &modulus_p>
106 {
107  return scalar_mul<edwards_G2, m>(rhs, lhs.as_bigint());
108 }
109 
110 } // namespace libff
111 
112 #endif // EDWARDS_G2_HPP_
libff::edwards_G2::mixed_add
edwards_G2 mixed_add(const edwards_G2 &other) const
Definition: edwards_g2.cpp:242
curve_utils.hpp
libff::edwards_G2
Definition: edwards_g2.hpp:22
libff::edwards_G2::is_special
bool is_special() const
Definition: edwards_g2.cpp:146
libff::edwards_G2::size_in_bits
static size_t size_in_bits()
Definition: edwards_g2.hpp:80
libff::edwards_G2::base_field_char
static bigint< base_field::num_limbs > base_field_char()
Definition: edwards_g2.hpp:81
libff::edwards_G2::one
static const edwards_G2 & one()
Definition: edwards_g2.cpp:354
libff
Definition: ffi.cpp:8
libff::edwards_G2::G2_one
static edwards_G2 G2_one
Definition: edwards_g2.hpp:33
libff::edwards_G2::batch_to_special_all_non_zeros
static void batch_to_special_all_non_zeros(std::vector< edwards_G2 > &vec)
Definition: edwards_g2.cpp:446
libff::edwards_G2::G2_zero
static edwards_G2 G2_zero
Definition: edwards_g2.hpp:32
libff::edwards_G2::print
void print() const
Definition: edwards_g2.cpp:54
libff::edwards_G2::operator==
bool operator==(const edwards_G2 &other) const
Definition: edwards_g2.cpp:156
libff::edwards_G2::scalar_field
edwards_Fr scalar_field
Definition: edwards_g2.hpp:47
libff::edwards_G2::mul_by_q
edwards_G2 mul_by_q() const
Definition: edwards_g2.cpp:322
libff::edwards_G2::operator+
edwards_G2 operator+(const edwards_G2 &other) const
Definition: edwards_g2.cpp:186
libff::edwards_G2::Z
edwards_Fq3 Z
Definition: edwards_g2.hpp:35
libff::edwards_G2::edwards_G2
edwards_G2(const edwards_Fq3 &X, const edwards_Fq3 &Y)
Definition: edwards_g2.hpp:50
libff::operator>>
std::istream & operator>>(std::istream &in, alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:446
libff::edwards_G2::mul_by_a
static edwards_Fq3 mul_by_a(const edwards_Fq3 &elt)
Definition: edwards_g2.cpp:31
libff::edwards_G2::operator-
edwards_G2 operator-() const
Definition: edwards_g2.cpp:200
libff::edwards_G2::X
edwards_Fq3 X
Definition: edwards_g2.hpp:35
libff::edwards_G2::zero
static const edwards_G2 & zero()
Definition: edwards_g2.cpp:352
libff::edwards_G2::order
static bigint< scalar_field::num_limbs > order()
Definition: edwards_g2.hpp:85
libff::edwards_G2::is_zero
bool is_zero() const
Definition: edwards_g2.cpp:151
libff::edwards_G2::dbl
edwards_G2 dbl() const
Definition: edwards_g2.cpp:287
libff::edwards_G2::to_affine_coordinates
void to_affine_coordinates()
Definition: edwards_g2.cpp:107
libff::edwards_G2::operator!=
bool operator!=(const edwards_G2 &other) const
Definition: edwards_g2.cpp:181
libff::edwards_G2::wnaf_window_table
static std::vector< size_t > wnaf_window_table
Definition: edwards_g2.hpp:29
libff::edwards_G2::mul_by_d
static edwards_Fq3 mul_by_d(const edwards_Fq3 &elt)
Definition: edwards_g2.cpp:46
edwards_init.hpp
libff::edwards_G2::twist_field
edwards_Fq3 twist_field
Definition: edwards_g2.hpp:46
libff::edwards_G2::is_well_formed
bool is_well_formed() const
Definition: edwards_g2.cpp:330
libff::bigint
Definition: bigint.hpp:20
libff::edwards_G2::print_coordinates
void print_coordinates() const
Definition: edwards_g2.cpp:78
libff::Fp_model< edwards_q_limbs, edwards_modulus_q >::field_char
static const bigint< n > & field_char()
Definition: fp.hpp:136
libff::Fp3_model< edwards_q_limbs, edwards_modulus_q >
libff::Fp_model::as_bigint
bigint< n > as_bigint() const
libff::edwards_G2::write_uncompressed
void write_uncompressed(std::ostream &) const
Definition: edwards_g2.cpp:361
libff::Fp_model< edwards_q_limbs, edwards_modulus_q >
libff::edwards_G2::add
edwards_G2 add(const edwards_G2 &other) const
Definition: edwards_g2.cpp:210
libff::edwards_G2::Y
edwards_Fq3 Y
Definition: edwards_g2.hpp:35
libff::operator<<
std::ostream & operator<<(std::ostream &out, const alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:436
libff::operator*
alt_bn128_G1 operator*(const bigint< m > &lhs, const alt_bn128_G1 &rhs)
Definition: alt_bn128_g1.hpp:99
libff::edwards_G2::to_special
void to_special()
Definition: edwards_g2.cpp:126
libff::edwards_G2::base_field
edwards_Fq base_field
Definition: edwards_g2.hpp:45
libff::edwards_G2::read_compressed
static void read_compressed(std::istream &, edwards_G2 &)
Definition: edwards_g2.cpp:394
libff::Fp3_model< edwards_q_limbs, edwards_modulus_q >::size_in_bits
static size_t size_in_bits()
Definition: fp3.hpp:109
libff::edwards_G2::random_element
static edwards_G2 random_element()
Definition: edwards_g2.cpp:356
libff::edwards_G2::write_compressed
void write_compressed(std::ostream &) const
Definition: edwards_g2.cpp:368
libff::edwards_G2::edwards_G2
edwards_G2()
Definition: edwards_g2.cpp:24
libff::edwards_G2::fixed_base_exp_window_table
static std::vector< size_t > fixed_base_exp_window_table
Definition: edwards_g2.hpp:30
libff::edwards_G2::read_uncompressed
static void read_uncompressed(std::istream &, edwards_G2 &)
Definition: edwards_g2.cpp:377