Clearmatics Libff  0.1
C++ library for Finite Fields and Elliptic Curves
bn128_g2.hpp
Go to the documentation of this file.
1 
8 #ifndef BN128_G2_HPP_
9 #define BN128_G2_HPP_
10 #include "depends/ate-pairing/include/bn.h"
11 
12 #include <iostream>
15 #include <vector>
16 
17 namespace libff
18 {
19 
20 class bn128_G2;
21 std::ostream &operator<<(std::ostream &, const bn128_G2 &);
22 std::istream &operator>>(std::istream &, bn128_G2 &);
23 
24 class bn128_G2
25 {
26 private:
27  static bn::Fp2 sqrt(const bn::Fp2 &el);
28 
29 public:
30 #ifdef PROFILE_OP_COUNTS
31  static long long add_cnt;
32  static long long dbl_cnt;
33 #endif
34  static std::vector<size_t> wnaf_window_table;
35  static std::vector<size_t> fixed_base_exp_window_table;
36  static bn128_G2 G2_zero;
37  static bn128_G2 G2_one;
38 
41 
42  // Cofactor
43  static const mp_size_t h_bitcount = 256;
44  static const mp_size_t h_limbs =
45  (h_bitcount + GMP_NUMB_BITS - 1) / GMP_NUMB_BITS;
47 
48  bn::Fp2 X, Y, Z;
49  void fill_coord(bn::Fp2 coord[3]) const
50  {
51  coord[0] = this->X;
52  coord[1] = this->Y;
53  coord[2] = this->Z;
54  };
55 
56  bn128_G2();
57  bn128_G2(bn::Fp2 coord[3]) : X(coord[0]), Y(coord[1]), Z(coord[2]){};
58 
59  void print() const;
60  void print_coordinates() const;
61 
62  void to_affine_coordinates();
63  void to_special();
64  bool is_special() const;
65 
66  bool is_zero() const;
67 
68  bool operator==(const bn128_G2 &other) const;
69  bool operator!=(const bn128_G2 &other) const;
70 
71  bn128_G2 operator+(const bn128_G2 &other) const;
72  bn128_G2 operator-() const;
73  bn128_G2 operator-(const bn128_G2 &other) const;
74 
75  bn128_G2 add(const bn128_G2 &other) const;
76  bn128_G2 mixed_add(const bn128_G2 &other) const;
77  bn128_G2 dbl() const;
78  bn128_G2 mul_by_cofactor() const;
79 
80  bool is_well_formed() const;
81  bool is_in_safe_subgroup() const;
82 
83  static const bn128_G2 &zero();
84  static const bn128_G2 &one();
85  static bn128_G2 random_element();
86 
87  static size_t size_in_bits() { return 2 * base_field::size_in_bits() + 1; }
89  {
90  return base_field::field_char();
91  }
93  {
94  return scalar_field::field_char();
95  }
96 
97  void write_uncompressed(std::ostream &) const;
98  void write_compressed(std::ostream &) const;
99  static void read_uncompressed(std::istream &, bn128_G2 &);
100  static void read_compressed(std::istream &, bn128_G2 &);
101 
102  static void batch_to_special_all_non_zeros(std::vector<bn128_G2> &vec);
103 };
104 
105 template<mp_size_t m>
106 bn128_G2 operator*(const bigint<m> &lhs, const bn128_G2 &rhs)
107 {
108  return scalar_mul<bn128_G2, m>(rhs, lhs);
109 }
110 
111 template<mp_size_t m, const bigint<m> &modulus_p>
113 {
114  return scalar_mul<bn128_G2, m>(rhs, lhs.as_bigint());
115 }
116 
117 } // namespace libff
118 #endif // BN128_G2_HPP_
curve_utils.hpp
libff::bn128_G2::operator-
bn128_G2 operator-() const
Definition: bn128_g2.cpp:183
libff::bn128_G2::is_well_formed
bool is_well_formed() const
Definition: bn128_g2.cpp:311
libff::bn128_G2::Z
bn::Fp2 Z
Definition: bn128_g2.hpp:48
libff::bn128_G2::dbl
bn128_G2 dbl() const
Definition: bn128_g2.cpp:295
libff::bn128_G2::size_in_bits
static size_t size_in_bits()
Definition: bn128_g2.hpp:87
libff::bn128_G2::read_uncompressed
static void read_uncompressed(std::istream &, bn128_G2 &)
Definition: bn128_g2.cpp:388
libff::bn128_G2::order
static bigint< scalar_field::num_limbs > order()
Definition: bn128_g2.hpp:92
libff
Definition: ffi.cpp:8
libff::bn128_G2::wnaf_window_table
static std::vector< size_t > wnaf_window_table
Definition: bn128_g2.hpp:34
libff::bn128_G2::fill_coord
void fill_coord(bn::Fp2 coord[3]) const
Definition: bn128_g2.hpp:49
libff::bn128_G2::add
bn128_G2 add(const bn128_G2 &other) const
Definition: bn128_g2.cpp:195
libff::operator>>
std::istream & operator>>(std::istream &in, alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:446
libff::bn128_G2::mul_by_cofactor
bn128_G2 mul_by_cofactor() const
Definition: bn128_g2.cpp:309
libff::bn128_G2::h
static bigint< h_limbs > h
Definition: bn128_g2.hpp:46
libff::bn128_G2::X
bn::Fp2 X
Definition: bn128_g2.hpp:48
libff::bn128_G2::G2_one
static bn128_G2 G2_one
Definition: bn128_g2.hpp:37
libff::bn128_G2::scalar_field
bn128_Fr scalar_field
Definition: bn128_g2.hpp:40
libff::bn128_G2::read_compressed
static void read_compressed(std::istream &, bn128_G2 &)
Definition: bn128_g2.cpp:419
libff::bn128_G2::to_special
void to_special()
Definition: bn128_g2.cpp:119
libff::bn128_G2::base_field
bn128_Fq base_field
Definition: bn128_g2.hpp:39
libff::bn128_G2::Y
bn::Fp2 Y
Definition: bn128_g2.hpp:48
libff::Fp_model::size_in_bits
static size_t size_in_bits()
Definition: fp.hpp:134
libff::bn128_G2::write_uncompressed
void write_uncompressed(std::ostream &) const
Definition: bn128_g2.cpp:352
libff::bn128_G2::print_coordinates
void print_coordinates() const
Definition: bn128_g2.cpp:91
libff::bn128_G2::h_limbs
static const mp_size_t h_limbs
Definition: bn128_g2.hpp:44
libff::bn128_G2::h_bitcount
static const mp_size_t h_bitcount
Definition: bn128_g2.hpp:43
libff::bigint< h_limbs >
libff::bn128_G2::zero
static const bn128_G2 & zero()
Definition: bn128_g2.cpp:343
libff::bn128_G2::operator+
bn128_G2 operator+(const bn128_G2 &other) const
Definition: bn128_g2.cpp:161
libff::bn128_G2::print
void print() const
Definition: bn128_g2.cpp:79
libff::Fp_model::field_char
static const bigint< n > & field_char()
Definition: fp.hpp:136
bn128_init.hpp
libff::bn128_G2::batch_to_special_all_non_zeros
static void batch_to_special_all_non_zeros(std::vector< bn128_G2 > &vec)
Definition: bn128_g2.cpp:483
libff::Fp_model::as_bigint
bigint< n > as_bigint() const
libff::Fp_model
Definition: fp.hpp:20
libff::bn128_G2::operator==
bool operator==(const bn128_G2 &other) const
Definition: bn128_g2.cpp:125
libff::bn128_G2::G2_zero
static bn128_G2 G2_zero
Definition: bn128_g2.hpp:36
libff::bn128_G2::random_element
static bn128_G2 random_element()
Definition: bn128_g2.cpp:347
libff::bn128_G2::mixed_add
bn128_G2 mixed_add(const bn128_G2 &other) const
Definition: bn128_g2.cpp:210
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::bn128_G2::one
static const bn128_G2 & one()
Definition: bn128_g2.cpp:345
libff::bn128_G2::fixed_base_exp_window_table
static std::vector< size_t > fixed_base_exp_window_table
Definition: bn128_g2.hpp:35
libff::bn128_G2::is_zero
bool is_zero() const
Definition: bn128_g2.cpp:123
libff::bn128_G2::bn128_G2
bn128_G2(bn::Fp2 coord[3])
Definition: bn128_g2.hpp:57
libff::bn128_G2::is_special
bool is_special() const
Definition: bn128_g2.cpp:121
libff::bn128_G2::operator!=
bool operator!=(const bn128_G2 &other) const
Definition: bn128_g2.cpp:156
libff::bn128_G2::base_field_char
static bigint< base_field::num_limbs > base_field_char()
Definition: bn128_g2.hpp:88
libff::bn128_G2::bn128_G2
bn128_G2()
Definition: bn128_g2.cpp:72
libff::bn128_G2
Definition: bn128_g2.hpp:24
libff::bn128_G2::write_compressed
void write_compressed(std::ostream &) const
Definition: bn128_g2.cpp:371
libff::bn128_G2::to_affine_coordinates
void to_affine_coordinates()
Definition: bn128_g2.cpp:101
libff::bn128_G2::is_in_safe_subgroup
bool is_in_safe_subgroup() const
Definition: bn128_g2.cpp:338