Clearmatics Libff  0.1
C++ library for Finite Fields and Elliptic Curves
bls12_377_g2.hpp
Go to the documentation of this file.
1 
8 #ifndef BLS12_377_G2_HPP_
9 #define BLS12_377_G2_HPP_
12 #include <vector>
13 
14 namespace libff
15 {
16 
17 class bls12_377_G2;
18 std::ostream &operator<<(std::ostream &, const bls12_377_G2 &);
19 std::istream &operator>>(std::istream &, bls12_377_G2 &);
20 
22 {
23 public:
24 #ifdef PROFILE_OP_COUNTS
25  static long long add_cnt;
26  static long long dbl_cnt;
27 #endif
28  static std::vector<size_t> wnaf_window_table;
29  static std::vector<size_t> fixed_base_exp_window_table;
34 
38 
39  // Cofactor
40  static const mp_size_t h_bitcount = 502;
41  static const mp_size_t h_limbs =
42  (h_bitcount + GMP_NUMB_BITS - 1) / GMP_NUMB_BITS;
44 
46 
47  // using Jacobian coordinates
48  bls12_377_G2();
50  const bls12_377_Fq2 &X, const bls12_377_Fq2 &Y, const bls12_377_Fq2 &Z)
51  : X(X), Y(Y), Z(Z){};
52 
53  static bls12_377_Fq2 mul_by_b(const bls12_377_Fq2 &elt);
54 
55  void print() const;
56  void print_coordinates() const;
57 
58  void to_affine_coordinates();
59  void to_special();
60  bool is_special() const;
61 
62  bool is_zero() const;
63 
64  bool operator==(const bls12_377_G2 &other) const;
65  bool operator!=(const bls12_377_G2 &other) const;
66 
67  bls12_377_G2 operator+(const bls12_377_G2 &other) const;
68  bls12_377_G2 operator-() const;
69  bls12_377_G2 operator-(const bls12_377_G2 &other) const;
70 
71  bls12_377_G2 add(const bls12_377_G2 &other) const;
72  bls12_377_G2 mixed_add(const bls12_377_G2 &other) const;
73  bls12_377_G2 dbl() const;
74  bls12_377_G2 mul_by_q() const;
77 
78  bool is_well_formed() const;
79  bool is_in_safe_subgroup() const;
80 
81  static const bls12_377_G2 &zero();
82  static const bls12_377_G2 &one();
84 
85  static size_t size_in_bits() { return twist_field::size_in_bits() + 1; }
87  {
88  return base_field::field_char();
89  }
91  {
92  return scalar_field::field_char();
93  }
94 
95  void write_uncompressed(std::ostream &) const;
96  void write_compressed(std::ostream &) const;
97  static void read_uncompressed(std::istream &, bls12_377_G2 &);
98  static void read_compressed(std::istream &, bls12_377_G2 &);
99 
100  static void batch_to_special_all_non_zeros(std::vector<bls12_377_G2> &vec);
101 };
102 
103 template<mp_size_t m>
105 {
106  return scalar_mul<bls12_377_G2, m>(rhs, lhs);
107 }
108 
109 template<mp_size_t m, const bigint<m> &modulus_p>
111  const Fp_model<m, modulus_p> &lhs, const bls12_377_G2 &rhs)
112 {
113  return scalar_mul<bls12_377_G2, m>(rhs, lhs.as_bigint());
114 }
115 
116 } // namespace libff
117 
118 #endif // BLS12_377_G2_HPP_
curve_utils.hpp
libff::bls12_377_G2::G2_one
static bls12_377_G2 G2_one
Definition: bls12_377_g2.hpp:31
libff::bls12_377_G2::is_in_safe_subgroup
bool is_in_safe_subgroup() const
Definition: bls12_377_g2.cpp:461
libff::bls12_377_G2::is_zero
bool is_zero() const
Definition: bls12_377_g2.cpp:105
libff::bls12_377_G2::random_element
static bls12_377_G2 random_element()
Definition: bls12_377_g2.cpp:479
bls12_377_init.hpp
libff::bls12_377_G2::base_field
bls12_377_Fq base_field
Definition: bls12_377_g2.hpp:35
libff::bls12_377_G2::is_well_formed
bool is_well_formed() const
Definition: bls12_377_g2.cpp:441
libff::bls12_377_G2::bls12_377_G2
bls12_377_G2()
Definition: bls12_377_g2.cpp:26
libff::bls12_377_G2
Definition: bls12_377_g2.hpp:21
libff
Definition: ffi.cpp:8
libff::Fp2_model< bls12_377_q_limbs, bls12_377_modulus_q >::size_in_bits
static size_t size_in_bits()
Definition: fp2.hpp:108
libff::bls12_377_G2::read_uncompressed
static void read_uncompressed(std::istream &, bls12_377_G2 &)
Definition: bls12_377_g2.cpp:502
libff::bls12_377_G2::write_compressed
void write_compressed(std::ostream &) const
Definition: bls12_377_g2.cpp:492
libff::operator>>
std::istream & operator>>(std::istream &in, alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:446
libff::bls12_377_G2::one
static const bls12_377_G2 & one()
Definition: bls12_377_g2.cpp:477
libff::bls12_377_G2::h
static bigint< h_limbs > h
Definition: bls12_377_g2.hpp:43
libff::bls12_377_G2::add
bls12_377_G2 add(const bls12_377_G2 &other) const
Definition: bls12_377_g2.cpp:209
libff::bls12_377_G2::bls12_377_G2
bls12_377_G2(const bls12_377_Fq2 &X, const bls12_377_Fq2 &Y, const bls12_377_Fq2 &Z)
Definition: bls12_377_g2.hpp:49
libff::bls12_377_G2::to_affine_coordinates
void to_affine_coordinates()
Definition: bls12_377_g2.cpp:82
libff::bls12_377_G2::fixed_base_exp_window_table
static std::vector< size_t > fixed_base_exp_window_table
Definition: bls12_377_g2.hpp:29
libff::bls12_377_G2::operator+
bls12_377_G2 operator+(const bls12_377_G2 &other) const
Definition: bls12_377_g2.cpp:140
libff::bls12_377_G2::X
bls12_377_Fq2 X
Definition: bls12_377_g2.hpp:45
libff::bls12_377_G2::h_limbs
static const mp_size_t h_limbs
Definition: bls12_377_g2.hpp:41
libff::bls12_377_G2::write_uncompressed
void write_uncompressed(std::ostream &) const
Definition: bls12_377_g2.cpp:484
libff::bls12_377_G2::mul_by_cofactor
bls12_377_G2 mul_by_cofactor() const
Definition: bls12_377_g2.cpp:423
libff::bls12_377_G2::is_special
bool is_special() const
Definition: bls12_377_g2.cpp:100
libff::bls12_377_G2::Z
bls12_377_Fq2 Z
Definition: bls12_377_g2.hpp:45
libff::bls12_377_G2::base_field_char
static bigint< base_field::num_limbs > base_field_char()
Definition: bls12_377_g2.hpp:86
libff::bigint< h_limbs >
libff::bls12_377_G2::batch_to_special_all_non_zeros
static void batch_to_special_all_non_zeros(std::vector< bls12_377_G2 > &vec)
Definition: bls12_377_g2.cpp:570
libff::bls12_377_G2::dbl
bls12_377_G2 dbl() const
Definition: bls12_377_g2.cpp:331
libff::bls12_377_G2::zero
static const bls12_377_G2 & zero()
Definition: bls12_377_g2.cpp:475
libff::bls12_377_G2::scalar_field
bls12_377_Fr scalar_field
Definition: bls12_377_g2.hpp:37
libff::Fp_model< bls12_377_q_limbs, bls12_377_modulus_q >::field_char
static const bigint< n > & field_char()
Definition: fp.hpp:136
libff::bls12_377_G2::G2_zero
static bls12_377_G2 G2_zero
Definition: bls12_377_g2.hpp:30
libff::bls12_377_G2::order
static bigint< scalar_field::num_limbs > order()
Definition: bls12_377_g2.hpp:90
libff::Fp_model::as_bigint
bigint< n > as_bigint() const
libff::Fp_model< bls12_377_q_limbs, bls12_377_modulus_q >
libff::bls12_377_G2::mul_by_q
bls12_377_G2 mul_by_q() const
Definition: bls12_377_g2.cpp:370
libff::operator<<
std::ostream & operator<<(std::ostream &out, const alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:436
libff::bls12_377_G2::operator!=
bool operator!=(const bls12_377_G2 &other) const
Definition: bls12_377_g2.cpp:135
libff::bls12_377_G2::mul_by_b
static bls12_377_Fq2 mul_by_b(const bls12_377_Fq2 &elt)
Definition: bls12_377_g2.cpp:33
libff::bls12_377_G2::size_in_bits
static size_t size_in_bits()
Definition: bls12_377_g2.hpp:85
libff::operator*
alt_bn128_G1 operator*(const bigint< m > &lhs, const alt_bn128_G1 &rhs)
Definition: alt_bn128_g1.hpp:99
libff::bls12_377_G2::print_coordinates
void print_coordinates() const
Definition: bls12_377_g2.cpp:60
libff::Fp2_model
Definition: fp2.hpp:18
libff::bls12_377_G2::coeff_b
static bls12_377_Fq2 coeff_b
Definition: bls12_377_g2.hpp:33
libff::bls12_377_G2::coeff_a
static bls12_377_Fq2 coeff_a
Definition: bls12_377_g2.hpp:32
libff::bls12_377_G2::Y
bls12_377_Fq2 Y
Definition: bls12_377_g2.hpp:45
libff::bls12_377_G2::h_bitcount
static const mp_size_t h_bitcount
Definition: bls12_377_g2.hpp:40
libff::bls12_377_G2::print
void print() const
Definition: bls12_377_g2.cpp:40
libff::bls12_377_G2::wnaf_window_table
static std::vector< size_t > wnaf_window_table
Definition: bls12_377_g2.hpp:28
libff::bls12_377_G2::read_compressed
static void read_compressed(std::istream &, bls12_377_G2 &)
Definition: bls12_377_g2.cpp:518
libff::bls12_377_G2::operator-
bls12_377_G2 operator-() const
Definition: bls12_377_g2.cpp:199
libff::bls12_377_G2::untwist_frobenius_twist
bls12_377_G2 untwist_frobenius_twist() const
Definition: bls12_377_g2.cpp:378
libff::bls12_377_G2::mixed_add
bls12_377_G2 mixed_add(const bls12_377_G2 &other) const
Definition: bls12_377_g2.cpp:270
libff::bls12_377_G2::to_special
void to_special()
Definition: bls12_377_g2.cpp:98
libff::bls12_377_G2::twist_field
bls12_377_Fq2 twist_field
Definition: bls12_377_g2.hpp:36
libff::bls12_377_G2::operator==
bool operator==(const bls12_377_G2 &other) const
Definition: bls12_377_g2.cpp:107