Clearmatics Libff  0.1
C++ library for Finite Fields and Elliptic Curves
bls12_377_g1.hpp
Go to the documentation of this file.
1 
8 #ifndef BLS12_377_G1_HPP_
9 #define BLS12_377_G1_HPP_
12 #include <vector>
13 
14 namespace libff
15 {
16 
17 class bls12_377_G1;
18 std::ostream &operator<<(std::ostream &, const bls12_377_G1 &);
19 std::istream &operator>>(std::istream &, bls12_377_G1 &);
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 
37 
38  // Cofactor
39  static const mp_size_t h_bitcount = 125;
40  static const mp_size_t h_limbs =
41  (h_bitcount + GMP_NUMB_BITS - 1) / GMP_NUMB_BITS;
43 
45 
46  // using Jacobian coordinates
47  bls12_377_G1();
49  const bls12_377_Fq &X, const bls12_377_Fq &Y, const bls12_377_Fq &Z)
50  : X(X), Y(Y), Z(Z){};
51 
52  void print() const;
53  void print_coordinates() const;
54 
55  void to_affine_coordinates();
56  void to_special();
57  bool is_special() const;
58 
59  bool is_zero() const;
60 
61  bool operator==(const bls12_377_G1 &other) const;
62  bool operator!=(const bls12_377_G1 &other) const;
63 
64  bls12_377_G1 operator+(const bls12_377_G1 &other) const;
65  bls12_377_G1 operator-() const;
66  bls12_377_G1 operator-(const bls12_377_G1 &other) const;
67 
68  bls12_377_G1 add(const bls12_377_G1 &other) const;
69  bls12_377_G1 mixed_add(const bls12_377_G1 &other) const;
70  bls12_377_G1 dbl() const;
71 
72  // Multiply point by h, the cofactor, to eliminate the h-torsion components.
74 
75  // Endomorphism (x, y) -> (\beta * x, y) for \beta an element of Fq with
76  // order 3.
77  bls12_377_G1 sigma() const;
78 
79  bool is_well_formed() const;
80  bool is_in_safe_subgroup() const;
81 
82  // For P (this), return a point P' on the curve such that
83  // P'.mul_by_cofactor() == P. In some contexts, this is useful to show that
84  // P is in the safe subgroup G1, requiring only a small scalar
85  // multiplication by the verifier. Note that (in spite of the type) the
86  // point returned here is OUTSIDE of G1.
88 
89  static const bls12_377_G1 &zero();
90  static const bls12_377_G1 &one();
92 
93  static size_t size_in_bits() { return base_field::size_in_bits() + 1; }
95  {
96  return base_field::field_char();
97  }
99  {
100  return scalar_field::field_char();
101  }
102 
103  void write_uncompressed(std::ostream &) const;
104  void write_compressed(std::ostream &) const;
105  static void read_uncompressed(std::istream &, bls12_377_G1 &);
106  static void read_compressed(std::istream &, bls12_377_G1 &);
107 
108  static void batch_to_special_all_non_zeros(std::vector<bls12_377_G1> &vec);
109 };
110 
111 template<mp_size_t m>
113 {
114  return scalar_mul<bls12_377_G1, m>(rhs, lhs);
115 }
116 
117 template<mp_size_t m, const bigint<m> &modulus_p>
119  const Fp_model<m, modulus_p> &lhs, const bls12_377_G1 &rhs)
120 {
121  return scalar_mul<bls12_377_G1, m>(rhs, lhs.as_bigint());
122 }
123 
124 } // namespace libff
125 
126 #endif // BLS12_377_G1_HPP_
libff::bls12_377_G1::is_special
bool is_special() const
Definition: bls12_377_g1.cpp:83
curve_utils.hpp
libff::bls12_377_G1::coeff_b
static bls12_377_Fq coeff_b
Definition: bls12_377_g1.hpp:33
libff::bls12_377_G1::G1_zero
static bls12_377_G1 G1_zero
Definition: bls12_377_g1.hpp:30
bls12_377_init.hpp
libff::bls12_377_G1::write_compressed
void write_compressed(std::ostream &) const
Definition: bls12_377_g1.cpp:428
libff
Definition: ffi.cpp:8
libff::bls12_377_G1::is_in_safe_subgroup
bool is_in_safe_subgroup() const
Definition: bls12_377_g1.cpp:387
libff::bls12_377_G1::zero
static const bls12_377_G1 & zero()
Definition: bls12_377_g1.cpp:411
libff::bls12_377_G1::sigma
bls12_377_G1 sigma() const
Definition: bls12_377_g1.cpp:359
libff::bls12_377_G1::h_limbs
static const mp_size_t h_limbs
Definition: bls12_377_g1.hpp:40
libff::bls12_377_G1::bls12_377_G1
bls12_377_G1(const bls12_377_Fq &X, const bls12_377_Fq &Y, const bls12_377_Fq &Z)
Definition: bls12_377_g1.hpp:48
libff::bls12_377_G1::write_uncompressed
void write_uncompressed(std::ostream &) const
Definition: bls12_377_g1.cpp:420
libff::operator>>
std::istream & operator>>(std::istream &in, alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:446
libff::bls12_377_G1::Z
bls12_377_Fq Z
Definition: bls12_377_g1.hpp:44
libff::bls12_377_G1::coeff_a
static bls12_377_Fq coeff_a
Definition: bls12_377_g1.hpp:32
libff::bls12_377_G1::random_element
static bls12_377_G1 random_element()
Definition: bls12_377_g1.cpp:415
libff::bls12_377_G1::mixed_add
bls12_377_G1 mixed_add(const bls12_377_G1 &other) const
Definition: bls12_377_g1.cpp:251
libff::bls12_377_G1
Definition: bls12_377_g1.hpp:21
libff::bls12_377_G1::operator+
bls12_377_G1 operator+(const bls12_377_G1 &other) const
Definition: bls12_377_g1.cpp:121
libff::bls12_377_G1::operator==
bool operator==(const bls12_377_G1 &other) const
Definition: bls12_377_g1.cpp:90
libff::bls12_377_G1::base_field
bls12_377_Fq base_field
Definition: bls12_377_g1.hpp:35
libff::bls12_377_G1::to_affine_coordinates
void to_affine_coordinates()
Definition: bls12_377_g1.cpp:65
libff::bls12_377_G1::wnaf_window_table
static std::vector< size_t > wnaf_window_table
Definition: bls12_377_g1.hpp:28
libff::bls12_377_G1::print_coordinates
void print_coordinates() const
Definition: bls12_377_g1.cpp:49
libff::bls12_377_G1::order
static bigint< scalar_field::num_limbs > order()
Definition: bls12_377_g1.hpp:98
libff::bls12_377_G1::to_special
void to_special()
Definition: bls12_377_g1.cpp:81
libff::Fp_model< bls12_377_q_limbs, bls12_377_modulus_q >::size_in_bits
static size_t size_in_bits()
Definition: fp.hpp:134
libff::bls12_377_G1::operator!=
bool operator!=(const bls12_377_G1 &other) const
Definition: bls12_377_g1.cpp:116
libff::bigint< h_limbs >
libff::bls12_377_G1::mul_by_cofactor
bls12_377_G1 mul_by_cofactor() const
Definition: bls12_377_g1.cpp:354
libff::bls12_377_G1::print
void print() const
Definition: bls12_377_g1.cpp:33
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_G1::is_well_formed
bool is_well_formed() const
Definition: bls12_377_g1.cpp:367
libff::bls12_377_G1::read_uncompressed
static void read_uncompressed(std::istream &, bls12_377_G1 &)
Definition: bls12_377_g1.cpp:437
libff::Fp_model::as_bigint
bigint< n > as_bigint() const
libff::bls12_377_G1::batch_to_special_all_non_zeros
static void batch_to_special_all_non_zeros(std::vector< bls12_377_G1 > &vec)
Definition: bls12_377_g1.cpp:512
libff::Fp_model< bls12_377_q_limbs, bls12_377_modulus_q >
libff::bls12_377_G1::X
bls12_377_Fq X
Definition: bls12_377_g1.hpp:44
libff::operator<<
std::ostream & operator<<(std::ostream &out, const alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:436
libff::bls12_377_G1::one
static const bls12_377_G1 & one()
Definition: bls12_377_g1.cpp:413
libff::operator*
alt_bn128_G1 operator*(const bigint< m > &lhs, const alt_bn128_G1 &rhs)
Definition: alt_bn128_g1.hpp:99
libff::bls12_377_G1::bls12_377_G1
bls12_377_G1()
Definition: bls12_377_g1.cpp:26
libff::bls12_377_G1::G1_one
static bls12_377_G1 G1_one
Definition: bls12_377_g1.hpp:31
libff::bls12_377_G1::read_compressed
static void read_compressed(std::istream &, bls12_377_G1 &)
Definition: bls12_377_g1.cpp:455
libff::bls12_377_G1::Y
bls12_377_Fq Y
Definition: bls12_377_g1.hpp:44
libff::bls12_377_G1::is_zero
bool is_zero() const
Definition: bls12_377_g1.cpp:88
libff::bls12_377_G1::add
bls12_377_G1 add(const bls12_377_G1 &other) const
Definition: bls12_377_g1.cpp:190
libff::bls12_377_G1::scalar_field
bls12_377_Fr scalar_field
Definition: bls12_377_g1.hpp:36
libff::bls12_377_G1::fixed_base_exp_window_table
static std::vector< size_t > fixed_base_exp_window_table
Definition: bls12_377_g1.hpp:29
libff::bls12_377_G1::h_bitcount
static const mp_size_t h_bitcount
Definition: bls12_377_g1.hpp:39
libff::bls12_377_G1::size_in_bits
static size_t size_in_bits()
Definition: bls12_377_g1.hpp:93
libff::bls12_377_G1::h
static bigint< h_limbs > h
Definition: bls12_377_g1.hpp:42
libff::bls12_377_G1::base_field_char
static bigint< base_field::num_limbs > base_field_char()
Definition: bls12_377_g1.hpp:94
libff::bls12_377_G1::proof_of_safe_subgroup
bls12_377_G1 proof_of_safe_subgroup() const
Definition: bls12_377_g1.cpp:399
libff::bls12_377_G1::operator-
bls12_377_G1 operator-() const
Definition: bls12_377_g1.cpp:180
libff::bls12_377_G1::dbl
bls12_377_G1 dbl() const
Definition: bls12_377_g1.cpp:312