Clearmatics Libff  0.1
C++ library for Finite Fields and Elliptic Curves
bw6_761_g1.hpp
Go to the documentation of this file.
1 #ifndef BW6_761_G1_HPP_
2 #define BW6_761_G1_HPP_
5 #include <vector>
6 
7 namespace libff
8 {
9 
10 class bw6_761_G1;
11 std::ostream &operator<<(std::ostream &, const bw6_761_G1 &);
12 std::istream &operator>>(std::istream &, bw6_761_G1 &);
13 
15 {
16 public:
17 #ifdef PROFILE_OP_COUNTS
18  static long long add_cnt;
19  static long long dbl_cnt;
20 #endif
21  static std::vector<size_t> wnaf_window_table;
22  static std::vector<size_t> fixed_base_exp_window_table;
27 
30 
31  // Cofactor
32  static const mp_size_t h_bitcount = 384;
33  static const mp_size_t h_limbs =
34  (h_bitcount + GMP_NUMB_BITS - 1) / GMP_NUMB_BITS;
36 
38 
39  // using projective coordinates
40  bw6_761_G1();
41  bw6_761_G1(const bw6_761_Fq &X, const bw6_761_Fq &Y, const bw6_761_Fq &Z)
42  : X(X), Y(Y), Z(Z){};
43 
44  void print() const;
45  void print_coordinates() const;
46 
47  void to_affine_coordinates();
48  void to_special();
49  bool is_special() const;
50 
51  bool is_zero() const;
52 
53  bool operator==(const bw6_761_G1 &other) const;
54  bool operator!=(const bw6_761_G1 &other) const;
55 
56  bw6_761_G1 operator+(const bw6_761_G1 &other) const;
57  bw6_761_G1 operator-() const;
58  bw6_761_G1 operator-(const bw6_761_G1 &other) const;
59 
60  bw6_761_G1 add(const bw6_761_G1 &other) const;
61  bw6_761_G1 mixed_add(const bw6_761_G1 &other) const;
62  bw6_761_G1 dbl() const;
64 
65  bool is_well_formed() const;
66  bool is_in_safe_subgroup() const;
67 
68  static const bw6_761_G1 &zero();
69  static const bw6_761_G1 &one();
70  static bw6_761_G1 random_element();
71 
72  static size_t size_in_bits() { return base_field::size_in_bits() + 1; }
74  {
75  return base_field::field_char();
76  }
78  {
79  return scalar_field::field_char();
80  }
81 
82  friend std::ostream &operator<<(std::ostream &out, const bw6_761_G1 &g);
83  friend std::istream &operator>>(std::istream &in, bw6_761_G1 &g);
84 
85  void write_uncompressed(std::ostream &) const;
86  void write_compressed(std::ostream &) const;
87  static void read_uncompressed(std::istream &, bw6_761_G1 &);
88  static void read_compressed(std::istream &, bw6_761_G1 &);
89 
90  static void batch_to_special_all_non_zeros(std::vector<bw6_761_G1> &vec);
91 };
92 
93 template<mp_size_t m>
94 bw6_761_G1 operator*(const bigint<m> &lhs, const bw6_761_G1 &rhs)
95 {
96  return scalar_mul<bw6_761_G1, m>(rhs, lhs);
97 }
98 
99 template<mp_size_t m, const bigint<m> &modulus_p>
101 {
102  return scalar_mul<bw6_761_G1, m>(rhs, lhs.as_bigint());
103 }
104 
105 } // namespace libff
106 
107 #endif // BW6_761_G1_HPP_
libff::bw6_761_G1::h_limbs
static const mp_size_t h_limbs
Definition: bw6_761_g1.hpp:33
curve_utils.hpp
libff::bw6_761_G1::fixed_base_exp_window_table
static std::vector< size_t > fixed_base_exp_window_table
Definition: bw6_761_g1.hpp:22
libff::bw6_761_G1::bw6_761_G1
bw6_761_G1(const bw6_761_Fq &X, const bw6_761_Fq &Y, const bw6_761_Fq &Z)
Definition: bw6_761_g1.hpp:41
libff::bw6_761_G1::is_well_formed
bool is_well_formed() const
Definition: bw6_761_g1.cpp:365
libff::bw6_761_G1::operator-
bw6_761_G1 operator-() const
Definition: bw6_761_g1.cpp:196
libff
Definition: ffi.cpp:8
libff::bw6_761_G1::G1_zero
static bw6_761_G1 G1_zero
Definition: bw6_761_g1.hpp:23
libff::bw6_761_G1::operator==
bool operator==(const bw6_761_G1 &other) const
Definition: bw6_761_g1.cpp:84
libff::bw6_761_G1::size_in_bits
static size_t size_in_bits()
Definition: bw6_761_g1.hpp:72
libff::bw6_761_G1::coeff_b
static bw6_761_Fq coeff_b
Definition: bw6_761_g1.hpp:26
libff::bw6_761_G1::wnaf_window_table
static std::vector< size_t > wnaf_window_table
Definition: bw6_761_g1.hpp:21
libff::bw6_761_G1::zero
static const bw6_761_G1 & zero()
Definition: bw6_761_g1.cpp:390
libff::operator>>
std::istream & operator>>(std::istream &in, alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:446
libff::bw6_761_G1::base_field
bw6_761_Fq base_field
Definition: bw6_761_g1.hpp:28
libff::bw6_761_G1::add
bw6_761_G1 add(const bw6_761_G1 &other) const
Definition: bw6_761_g1.cpp:206
libff::bw6_761_G1::print
void print() const
Definition: bw6_761_g1.cpp:26
libff::bw6_761_G1::operator+
bw6_761_G1 operator+(const bw6_761_G1 &other) const
Definition: bw6_761_g1.cpp:111
libff::bw6_761_G1::print_coordinates
void print_coordinates() const
Definition: bw6_761_g1.cpp:42
libff::bw6_761_G1::read_uncompressed
static void read_uncompressed(std::istream &, bw6_761_G1 &)
Definition: bw6_761_g1.cpp:426
libff::bw6_761_G1::base_field_char
static bigint< base_field::num_limbs > base_field_char()
Definition: bw6_761_g1.hpp:73
libff::bw6_761_G1::read_compressed
static void read_compressed(std::istream &, bw6_761_G1 &)
Definition: bw6_761_g1.cpp:444
libff::bw6_761_G1::write_uncompressed
void write_uncompressed(std::ostream &) const
Definition: bw6_761_g1.cpp:399
libff::bw6_761_G1::operator!=
bool operator!=(const bw6_761_G1 &other) const
Definition: bw6_761_g1.cpp:106
libff::bw6_761_G1::one
static const bw6_761_G1 & one()
Definition: bw6_761_g1.cpp:392
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_G1::is_zero
bool is_zero() const
Definition: bw6_761_g1.cpp:79
libff::bw6_761_G1::coeff_a
static bw6_761_Fq coeff_a
Definition: bw6_761_g1.hpp:25
libff::bw6_761_G1::dbl
bw6_761_G1 dbl() const
Definition: bw6_761_g1.cpp:318
libff::bw6_761_G1::operator<<
friend std::ostream & operator<<(std::ostream &out, const bw6_761_G1 &g)
Definition: bw6_761_g1.cpp:416
libff::bw6_761_G1::order
static bigint< scalar_field::num_limbs > order()
Definition: bw6_761_g1.hpp:77
libff::bw6_761_G1::scalar_field
bw6_761_Fr scalar_field
Definition: bw6_761_g1.hpp:29
libff::bw6_761_G1::is_in_safe_subgroup
bool is_in_safe_subgroup() const
Definition: bw6_761_g1.cpp:385
libff::bw6_761_G1::mul_by_cofactor
bw6_761_G1 mul_by_cofactor() const
Definition: bw6_761_g1.cpp:360
libff::bw6_761_G1::to_special
void to_special()
Definition: bw6_761_g1.cpp:72
libff::bw6_761_G1::h_bitcount
static const mp_size_t h_bitcount
Definition: bw6_761_g1.hpp:32
libff::bigint< h_limbs >
libff::bw6_761_G1::Z
bw6_761_Fq Z
Definition: bw6_761_g1.hpp:37
bw6_761_init.hpp
libff::bw6_761_G1::batch_to_special_all_non_zeros
static void batch_to_special_all_non_zeros(std::vector< bw6_761_G1 > &vec)
Definition: bw6_761_g1.cpp:489
libff::bw6_761_G1::Y
bw6_761_Fq Y
Definition: bw6_761_g1.hpp:37
libff::Fp_model< bw6_761_q_limbs, bw6_761_modulus_q >::field_char
static const bigint< n > & field_char()
Definition: fp.hpp:136
libff::Fp_model::as_bigint
bigint< n > as_bigint() const
libff::Fp_model
Definition: fp.hpp:20
libff::bw6_761_G1::write_compressed
void write_compressed(std::ostream &) const
Definition: bw6_761_g1.cpp:407
libff::bw6_761_G1::X
bw6_761_Fq X
Definition: bw6_761_g1.hpp:37
libff::operator<<
std::ostream & operator<<(std::ostream &out, const alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:436
libff::bw6_761_G1::h
static bigint< h_limbs > h
Definition: bw6_761_g1.hpp:35
libff::bw6_761_G1::G1_one
static bw6_761_G1 G1_one
Definition: bw6_761_g1.hpp:24
libff::bw6_761_G1::is_special
bool is_special() const
Definition: bw6_761_g1.cpp:74
libff::operator*
alt_bn128_G1 operator*(const bigint< m > &lhs, const alt_bn128_G1 &rhs)
Definition: alt_bn128_g1.hpp:99
libff::bw6_761_G1::mixed_add
bw6_761_G1 mixed_add(const bw6_761_G1 &other) const
Definition: bw6_761_g1.cpp:263
libff::bw6_761_G1::bw6_761_G1
bw6_761_G1()
Definition: bw6_761_g1.cpp:19
libff::bw6_761_G1
Definition: bw6_761_g1.hpp:14
libff::bw6_761_G1::random_element
static bw6_761_G1 random_element()
Definition: bw6_761_g1.cpp:394
libff::bw6_761_G1::operator>>
friend std::istream & operator>>(std::istream &in, bw6_761_G1 &g)
Definition: bw6_761_g1.cpp:479
libff::bw6_761_G1::to_affine_coordinates
void to_affine_coordinates()
Definition: bw6_761_g1.cpp:58