Clearmatics Libff  0.1
C++ library for Finite Fields and Elliptic Curves
bw6_761_g2.hpp
Go to the documentation of this file.
1 #ifndef BW6_761_G2_HPP_
2 #define BW6_761_G2_HPP_
3 
6 #include <vector>
7 
8 namespace libff
9 {
10 
11 class bw6_761_G2;
12 std::ostream &operator<<(std::ostream &, const bw6_761_G2 &);
13 std::istream &operator>>(std::istream &, bw6_761_G2 &);
14 
16 {
17 public:
18 #ifdef PROFILE_OP_COUNTS
19  static long long add_cnt;
20  static long long dbl_cnt;
21 #endif
22  static std::vector<size_t> wnaf_window_table;
23  static std::vector<size_t> fixed_base_exp_window_table;
28 
32 
33  // Cofactor
34  static const mp_size_t h_bitcount = 384;
35  static const mp_size_t h_limbs =
36  (h_bitcount + GMP_NUMB_BITS - 1) / GMP_NUMB_BITS;
38 
40 
41  // using projective coordinates
42  bw6_761_G2();
43  bw6_761_G2(const bw6_761_Fq &X, const bw6_761_Fq &Y, const bw6_761_Fq &Z)
44  : X(X), Y(Y), Z(Z)
45  {
46  }
47 
48  static bw6_761_Fq mul_by_b(const bw6_761_Fq &elt);
49 
50  void print() const;
51  void print_coordinates() const;
52 
53  void to_affine_coordinates();
54  void to_special();
55  bool is_special() const;
56 
57  bool is_zero() const;
58 
59  bool operator==(const bw6_761_G2 &other) const;
60  bool operator!=(const bw6_761_G2 &other) const;
61 
62  bw6_761_G2 operator+(const bw6_761_G2 &other) const;
63  bw6_761_G2 operator-() const;
64  bw6_761_G2 operator-(const bw6_761_G2 &other) const;
65 
66  bw6_761_G2 add(const bw6_761_G2 &other) const;
67  bw6_761_G2 mixed_add(const bw6_761_G2 &other) const;
68  bw6_761_G2 dbl() const;
69  bw6_761_G2 mul_by_q() const;
71 
72  bool is_well_formed() const;
73  bool is_in_safe_subgroup() const;
74 
75  static const bw6_761_G2 &zero();
76  static const bw6_761_G2 &one();
77  static bw6_761_G2 random_element();
78 
79  static size_t size_in_bits() { return twist_field::size_in_bits() + 1; }
81  {
82  return base_field::field_char();
83  }
85  {
86  return scalar_field::field_char();
87  }
88 
89  void write_uncompressed(std::ostream &) const;
90  void write_compressed(std::ostream &) const;
91  static void read_uncompressed(std::istream &, bw6_761_G2 &);
92  static void read_compressed(std::istream &, bw6_761_G2 &);
93 
94  static void batch_to_special_all_non_zeros(std::vector<bw6_761_G2> &vec);
95 };
96 
97 template<mp_size_t m>
98 bw6_761_G2 operator*(const bigint<m> &lhs, const bw6_761_G2 &rhs)
99 {
100  return scalar_mul<bw6_761_G2, m>(rhs, lhs);
101 }
102 
103 template<mp_size_t m, const bigint<m> &modulus_p>
105 {
106  return scalar_mul<bw6_761_G2, m>(rhs, lhs.as_bigint());
107 }
108 
109 } // namespace libff
110 
111 #endif // BW6_761_G2_HPP_
curve_utils.hpp
libff::bw6_761_G2::print_coordinates
void print_coordinates() const
Definition: bw6_761_g2.cpp:47
libff::bw6_761_G2::G2_zero
static bw6_761_G2 G2_zero
Definition: bw6_761_g2.hpp:24
libff::bw6_761_G2::base_field
bw6_761_Fq base_field
Definition: bw6_761_g2.hpp:29
libff::bw6_761_G2::mul_by_cofactor
bw6_761_G2 mul_by_cofactor() const
Definition: bw6_761_g2.cpp:371
libff::bw6_761_G2::h_limbs
static const mp_size_t h_limbs
Definition: bw6_761_g2.hpp:35
libff
Definition: ffi.cpp:8
libff::bw6_761_G2
Definition: bw6_761_g2.hpp:15
libff::bw6_761_G2::to_affine_coordinates
void to_affine_coordinates()
Definition: bw6_761_g2.cpp:63
libff::operator>>
std::istream & operator>>(std::istream &in, alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:446
libff::bw6_761_G2::twist_field
bw6_761_Fq twist_field
Definition: bw6_761_g2.hpp:30
libff::bw6_761_G2::h_bitcount
static const mp_size_t h_bitcount
Definition: bw6_761_g2.hpp:34
libff::bw6_761_G2::order
static bigint< scalar_field::num_limbs > order()
Definition: bw6_761_g2.hpp:84
libff::bw6_761_G2::size_in_bits
static size_t size_in_bits()
Definition: bw6_761_g2.hpp:79
libff::bw6_761_G2::operator!=
bool operator!=(const bw6_761_G2 &other) const
Definition: bw6_761_g2.cpp:111
libff::bw6_761_G2::one
static const bw6_761_G2 & one()
Definition: bw6_761_g2.cpp:403
libff::bw6_761_G2::base_field_char
static bigint< base_field::num_limbs > base_field_char()
Definition: bw6_761_g2.hpp:80
libff::bw6_761_G2::operator==
bool operator==(const bw6_761_G2 &other) const
Definition: bw6_761_g2.cpp:89
libff::bw6_761_G2::random_element
static bw6_761_G2 random_element()
Definition: bw6_761_g2.cpp:405
libff::Fp_model< bw6_761_q_limbs, bw6_761_modulus_q >::size_in_bits
static size_t size_in_bits()
Definition: fp.hpp:134
libff::bw6_761_G2::to_special
void to_special()
Definition: bw6_761_g2.cpp:77
libff::bw6_761_G2::read_uncompressed
static void read_uncompressed(std::istream &, bw6_761_G2 &)
Definition: bw6_761_g2.cpp:437
libff::bw6_761_G2::coeff_b
static bw6_761_Fq coeff_b
Definition: bw6_761_g2.hpp:27
libff::bw6_761_G2::is_well_formed
bool is_well_formed() const
Definition: bw6_761_g2.cpp:376
libff::bw6_761_G2::G2_one
static bw6_761_G2 G2_one
Definition: bw6_761_g2.hpp:25
libff::bw6_761_G2::is_zero
bool is_zero() const
Definition: bw6_761_g2.cpp:84
libff::bigint< h_limbs >
libff::bw6_761_G2::zero
static const bw6_761_G2 & zero()
Definition: bw6_761_g2.cpp:401
libff::bw6_761_G2::read_compressed
static void read_compressed(std::istream &, bw6_761_G2 &)
Definition: bw6_761_g2.cpp:454
libff::bw6_761_G2::bw6_761_G2
bw6_761_G2(const bw6_761_Fq &X, const bw6_761_Fq &Y, const bw6_761_Fq &Z)
Definition: bw6_761_g2.hpp:43
bw6_761_init.hpp
libff::bw6_761_G2::fixed_base_exp_window_table
static std::vector< size_t > fixed_base_exp_window_table
Definition: bw6_761_g2.hpp:23
libff::bw6_761_G2::X
bw6_761_Fq X
Definition: bw6_761_g2.hpp:39
libff::Fp_model< bw6_761_q_limbs, bw6_761_modulus_q >::field_char
static const bigint< n > & field_char()
Definition: fp.hpp:136
libff::bw6_761_G2::h
static bigint< h_limbs > h
Definition: bw6_761_g2.hpp:37
libff::Fp_model::as_bigint
bigint< n > as_bigint() const
libff::bw6_761_G2::dbl
bw6_761_G2 dbl() const
Definition: bw6_761_g2.cpp:324
libff::Fp_model
Definition: fp.hpp:20
libff::bw6_761_G2::write_compressed
void write_compressed(std::ostream &) const
Definition: bw6_761_g2.cpp:418
libff::operator<<
std::ostream & operator<<(std::ostream &out, const alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:436
libff::bw6_761_G2::coeff_a
static bw6_761_Fq coeff_a
Definition: bw6_761_g2.hpp:26
libff::operator*
alt_bn128_G1 operator*(const bigint< m > &lhs, const alt_bn128_G1 &rhs)
Definition: alt_bn128_g1.hpp:99
libff::bw6_761_G2::mul_by_b
static bw6_761_Fq mul_by_b(const bw6_761_Fq &elt)
Definition: bw6_761_g2.cpp:26
libff::bw6_761_G2::Z
bw6_761_Fq Z
Definition: bw6_761_g2.hpp:39
libff::bw6_761_G2::add
bw6_761_G2 add(const bw6_761_G2 &other) const
Definition: bw6_761_g2.cpp:211
libff::bw6_761_G2::is_in_safe_subgroup
bool is_in_safe_subgroup() const
Definition: bw6_761_g2.cpp:396
libff::bw6_761_G2::operator-
bw6_761_G2 operator-() const
Definition: bw6_761_g2.cpp:201
libff::bw6_761_G2::print
void print() const
Definition: bw6_761_g2.cpp:31
libff::bw6_761_G2::bw6_761_G2
bw6_761_G2()
Definition: bw6_761_g2.cpp:19
libff::bw6_761_G2::scalar_field
bw6_761_Fr scalar_field
Definition: bw6_761_g2.hpp:31
libff::bw6_761_G2::batch_to_special_all_non_zeros
static void batch_to_special_all_non_zeros(std::vector< bw6_761_G2 > &vec)
Definition: bw6_761_g2.cpp:498
libff::bw6_761_G2::operator+
bw6_761_G2 operator+(const bw6_761_G2 &other) const
Definition: bw6_761_g2.cpp:116
libff::bw6_761_G2::write_uncompressed
void write_uncompressed(std::ostream &) const
Definition: bw6_761_g2.cpp:410
libff::bw6_761_G2::wnaf_window_table
static std::vector< size_t > wnaf_window_table
Definition: bw6_761_g2.hpp:22
libff::bw6_761_G2::mul_by_q
bw6_761_G2 mul_by_q() const
Definition: bw6_761_g2.cpp:366
libff::bw6_761_G2::Y
bw6_761_Fq Y
Definition: bw6_761_g2.hpp:39
libff::bw6_761_G2::is_special
bool is_special() const
Definition: bw6_761_g2.cpp:79
libff::bw6_761_G2::mixed_add
bw6_761_G2 mixed_add(const bw6_761_G2 &other) const
Definition: bw6_761_g2.cpp:269