Clearmatics Libff  0.1
C++ library for Finite Fields and Elliptic Curves
edwards_g1.hpp
Go to the documentation of this file.
1 
8 #ifndef EDWARDS_G1_HPP_
9 #define EDWARDS_G1_HPP_
12 #include <vector>
13 
14 namespace libff
15 {
16 
17 class edwards_G1;
18 std::ostream &operator<<(std::ostream &, const edwards_G1 &);
19 std::istream &operator>>(std::istream &, edwards_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;
32 
34  edwards_G1();
35 
36 private:
37  edwards_G1(const edwards_Fq &X, const edwards_Fq &Y, const edwards_Fq &Z)
38  : X(X), Y(Y), Z(Z){};
39 
40 public:
41  typedef edwards_Fq base_field;
43  // using inverted coordinates
45  : X(Y), Y(X), Z(X * Y){};
46 
47  void print() const;
48  void print_coordinates() const;
49 
50  void to_affine_coordinates();
51  void to_special();
52  bool is_special() const;
53 
54  bool is_zero() const;
55 
56  bool operator==(const edwards_G1 &other) const;
57  bool operator!=(const edwards_G1 &other) const;
58 
59  edwards_G1 operator+(const edwards_G1 &other) const;
60  edwards_G1 operator-() const;
61  edwards_G1 operator-(const edwards_G1 &other) const;
62 
63  edwards_G1 add(const edwards_G1 &other) const;
64  edwards_G1 mixed_add(const edwards_G1 &other) const;
65  edwards_G1 dbl() const;
66 
67  bool is_well_formed() const;
68 
69  static const edwards_G1 &zero();
70  static const edwards_G1 &one();
71  static edwards_G1 random_element();
72 
73  static size_t size_in_bits() { return edwards_Fq::size_in_bits() + 1; }
75  {
76  return base_field::field_char();
77  }
79  {
80  return scalar_field::field_char();
81  }
82 
83  void write_uncompressed(std::ostream &) const;
84  void write_compressed(std::ostream &) const;
85  static void read_uncompressed(std::istream &, edwards_G1 &);
86  static void read_compressed(std::istream &, edwards_G1 &);
87 
88  static void batch_to_special_all_non_zeros(std::vector<edwards_G1> &vec);
89 };
90 
91 template<mp_size_t m>
92 edwards_G1 operator*(const bigint<m> &lhs, const edwards_G1 &rhs)
93 {
94  return scalar_mul<edwards_G1, m>(rhs, lhs);
95 }
96 
97 template<mp_size_t m, const bigint<m> &modulus_p>
99 {
100  return scalar_mul<edwards_G1, m>(rhs, lhs.as_bigint());
101 }
102 
103 } // namespace libff
104 #endif // EDWARDS_G1_HPP_
libff::edwards_G1::G1_one
static edwards_G1 G1_one
Definition: edwards_g1.hpp:31
curve_utils.hpp
libff::edwards_G1::is_special
bool is_special() const
Definition: edwards_g1.cpp:101
libff::edwards_G1::wnaf_window_table
static std::vector< size_t > wnaf_window_table
Definition: edwards_g1.hpp:28
libff::edwards_G1::operator-
edwards_G1 operator-() const
Definition: edwards_g1.cpp:155
libff::edwards_G1::dbl
edwards_G1 dbl() const
Definition: edwards_g1.cpp:242
libff
Definition: ffi.cpp:8
libff::edwards_G1::base_field
edwards_Fq base_field
Definition: edwards_g1.hpp:38
libff::edwards_G1::is_well_formed
bool is_well_formed() const
Definition: edwards_g1.cpp:275
libff::operator>>
std::istream & operator>>(std::istream &in, alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:446
libff::edwards_G1::G1_zero
static edwards_G1 G1_zero
Definition: edwards_g1.hpp:30
libff::edwards_G1::one
static const edwards_G1 & one()
Definition: edwards_g1.cpp:299
libff::edwards_G1::is_zero
bool is_zero() const
Definition: edwards_g1.cpp:106
libff::edwards_G1::edwards_G1
edwards_G1(const edwards_Fq &X, const edwards_Fq &Y)
Definition: edwards_g1.hpp:44
libff::edwards_G1::read_compressed
static void read_compressed(std::istream &, edwards_G1 &)
Definition: edwards_g1.cpp:337
libff::edwards_G1::add
edwards_G1 add(const edwards_G1 &other) const
Definition: edwards_g1.cpp:165
libff::edwards_G1::operator==
bool operator==(const edwards_G1 &other) const
Definition: edwards_g1.cpp:111
libff::Fp_model< edwards_q_limbs, edwards_modulus_q >::size_in_bits
static size_t size_in_bits()
Definition: fp.hpp:134
edwards_init.hpp
libff::edwards_G1::random_element
static edwards_G1 random_element()
Definition: edwards_g1.cpp:301
libff::bigint
Definition: bigint.hpp:20
libff::edwards_G1::fixed_base_exp_window_table
static std::vector< size_t > fixed_base_exp_window_table
Definition: edwards_g1.hpp:29
libff::edwards_G1::edwards_G1
edwards_G1()
Definition: edwards_g1.cpp:23
libff::edwards_G1::order
static bigint< scalar_field::num_limbs > order()
Definition: edwards_g1.hpp:78
libff::edwards_G1::scalar_field
edwards_Fr scalar_field
Definition: edwards_g1.hpp:42
libff::edwards_G1::read_uncompressed
static void read_uncompressed(std::istream &, edwards_G1 &)
Definition: edwards_g1.cpp:320
libff::Fp_model< edwards_q_limbs, edwards_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< edwards_q_limbs, edwards_modulus_q >
libff::operator<<
std::ostream & operator<<(std::ostream &out, const alt_bn128_G1 &g)
Definition: alt_bn128_g1.cpp:436
libff::edwards_G1::print_coordinates
void print_coordinates() const
Definition: edwards_g1.cpp:46
libff::edwards_G1::Y
edwards_Fq Y
Definition: edwards_g1.hpp:33
libff::operator*
alt_bn128_G1 operator*(const bigint< m > &lhs, const alt_bn128_G1 &rhs)
Definition: alt_bn128_g1.hpp:99
libff::edwards_G1::write_uncompressed
void write_uncompressed(std::ostream &) const
Definition: edwards_g1.cpp:306
libff::edwards_G1::X
edwards_Fq X
Definition: edwards_g1.hpp:33
libff::edwards_G1::Z
edwards_Fq Z
Definition: edwards_g1.hpp:33
libff::edwards_G1::operator!=
bool operator!=(const edwards_G1 &other) const
Definition: edwards_g1.cpp:136
libff::edwards_G1::mixed_add
edwards_G1 mixed_add(const edwards_G1 &other) const
Definition: edwards_g1.cpp:197
libff::edwards_G1
Definition: edwards_g1.hpp:21
libff::edwards_G1::zero
static const edwards_G1 & zero()
Definition: edwards_g1.cpp:297
libff::edwards_G1::size_in_bits
static size_t size_in_bits()
Definition: edwards_g1.hpp:73
libff::edwards_G1::to_special
void to_special()
Definition: edwards_g1.cpp:81
libff::edwards_G1::print
void print() const
Definition: edwards_g1.cpp:30
libff::edwards_G1::operator+
edwards_G1 operator+(const edwards_G1 &other) const
Definition: edwards_g1.cpp:141
libff::edwards_G1::base_field_char
static bigint< base_field::num_limbs > base_field_char()
Definition: edwards_g1.hpp:74
libff::edwards_G1::batch_to_special_all_non_zeros
static void batch_to_special_all_non_zeros(std::vector< edwards_G1 > &vec)
Definition: edwards_g1.cpp:388
libff::edwards_G1::to_affine_coordinates
void to_affine_coordinates()
Definition: edwards_g1.cpp:62
libff::edwards_G1::write_compressed
void write_compressed(std::ostream &) const
Definition: edwards_g1.cpp:313