Coverage Report

Created: 2024-11-21 07:03

/src/cryptopp/ecpoint.h
Line
Count
Source (jump to first uncovered line)
1
// ecpoint.h - written and placed in the public domain by Jeffrey Walton
2
//             Data structures moved from ecp.h and ec2n.h. Added EncodedPoint interface
3
4
/// \file ecpoint.h
5
/// \brief Classes for Elliptic Curve points
6
/// \since Crypto++ 6.0
7
8
#ifndef CRYPTOPP_ECPOINT_H
9
#define CRYPTOPP_ECPOINT_H
10
11
#include "cryptlib.h"
12
#include "integer.h"
13
#include "algebra.h"
14
#include "gf2n.h"
15
16
NAMESPACE_BEGIN(CryptoPP)
17
18
/// \brief Elliptical Curve Point over GF(p), where p is prime
19
/// \since Crypto++ 2.0
20
struct CRYPTOPP_DLL ECPPoint
21
{
22
222k
  virtual ~ECPPoint() {}
23
24
  /// \brief Construct an ECPPoint
25
  /// \details identity is set to <tt>true</tt>
26
140k
  ECPPoint() : identity(true) {}
27
28
  /// \brief Construct an ECPPoint from coordinates
29
  /// \details identity is set to <tt>false</tt>
30
  ECPPoint(const Integer &x, const Integer &y)
31
27.1k
    : x(x), y(y), identity(false) {}
32
33
  /// \brief Tests points for equality
34
  /// \param t the other point
35
  /// \return true if the points are equal, false otherwise
36
  bool operator==(const ECPPoint &t) const
37
0
    {return (identity && t.identity) || (!identity && !t.identity && x==t.x && y==t.y);}
38
39
  /// \brief Tests points for ordering
40
  /// \param t the other point
41
  /// \return true if this point is less than other, false otherwise
42
  bool operator< (const ECPPoint &t) const
43
0
    {return identity ? !t.identity : (!t.identity && (x<t.x || (x==t.x && y<t.y)));}
44
45
  Integer x, y;
46
  bool identity;
47
};
48
49
CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<ECPPoint>;
50
51
/// \brief Elliptical Curve Point over GF(2^n)
52
/// \since Crypto++ 2.0
53
struct CRYPTOPP_DLL EC2NPoint
54
{
55
0
  virtual ~EC2NPoint() {}
56
57
  /// \brief Construct an EC2NPoint
58
  /// \details identity is set to <tt>true</tt>
59
10
  EC2NPoint() : identity(true) {}
60
61
  /// \brief Construct an EC2NPoint from coordinates
62
  /// \details identity is set to <tt>false</tt>
63
  EC2NPoint(const PolynomialMod2 &x, const PolynomialMod2 &y)
64
0
    : x(x), y(y), identity(false) {}
65
66
  /// \brief Tests points for equality
67
  /// \param t the other point
68
  /// \return true if the points are equal, false otherwise
69
  bool operator==(const EC2NPoint &t) const
70
0
    {return (identity && t.identity) || (!identity && !t.identity && x==t.x && y==t.y);}
71
72
  /// \brief Tests points for ordering
73
  /// \param t the other point
74
  /// \return true if this point is less than other, false otherwise
75
  bool operator< (const EC2NPoint &t) const
76
0
    {return identity ? !t.identity : (!t.identity && (x<t.x || (x==t.x && y<t.y)));}
77
78
  PolynomialMod2 x, y;
79
  bool identity;
80
};
81
82
CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<EC2NPoint>;
83
84
/// \brief Abstract class for encoding and decoding ellicptic curve points
85
/// \tparam Point ellicptic curve point
86
/// \details EncodedPoint is an interface for encoding and decoding elliptic curve points.
87
///   The template parameter <tt>Point</tt> should be a class like ECP or EC2N.
88
/// \since Crypto++ 6.0
89
template <class Point>
90
class EncodedPoint
91
{
92
public:
93
108k
  virtual ~EncodedPoint() {}
CryptoPP::EncodedPoint<CryptoPP::ECPPoint>::~EncodedPoint()
Line
Count
Source
93
108k
  virtual ~EncodedPoint() {}
Unexecuted instantiation: CryptoPP::EncodedPoint<CryptoPP::EC2NPoint>::~EncodedPoint()
94
95
  /// \brief Decodes an elliptic curve point
96
  /// \param P point which is decoded
97
  /// \param bt source BufferedTransformation
98
  /// \param len number of bytes to read from the BufferedTransformation
99
  /// \return true if a point was decoded, false otherwise
100
  virtual bool DecodePoint(Point &P, BufferedTransformation &bt, size_t len) const =0;
101
102
  /// \brief Decodes an elliptic curve point
103
  /// \param P point which is decoded
104
  /// \param encodedPoint byte array with the encoded point
105
  /// \param len the size of the array
106
  /// \return true if a point was decoded, false otherwise
107
  virtual bool DecodePoint(Point &P, const byte *encodedPoint, size_t len) const =0;
108
109
  /// \brief Verifies points on elliptic curve
110
  /// \param P point to verify
111
  /// \return true if the point is valid, false otherwise
112
  virtual bool VerifyPoint(const Point &P) const =0;
113
114
  /// \brief Determines encoded point size
115
  /// \param compressed flag indicating if the point is compressed
116
  /// \return the minimum number of bytes required to encode the point
117
  virtual unsigned int EncodedPointSize(bool compressed = false) const =0;
118
119
  /// \brief Encodes an elliptic curve point
120
  /// \param P point which is decoded
121
  /// \param encodedPoint byte array for the encoded point
122
  /// \param compressed flag indicating if the point is compressed
123
  /// \details <tt>encodedPoint</tt> must be at least EncodedPointSize() in length
124
  virtual void EncodePoint(byte *encodedPoint, const Point &P, bool compressed) const =0;
125
126
  /// \brief Encodes an elliptic curve point
127
  /// \param bt target BufferedTransformation
128
  /// \param P point which is encoded
129
  /// \param compressed flag indicating if the point is compressed
130
  virtual void EncodePoint(BufferedTransformation &bt, const Point &P, bool compressed) const =0;
131
132
  /// \brief BER Decodes an elliptic curve point
133
  /// \param bt source BufferedTransformation
134
  /// \return the decoded elliptic curve point
135
  virtual Point BERDecodePoint(BufferedTransformation &bt) const =0;
136
137
  /// \brief DER Encodes an elliptic curve point
138
  /// \param bt target BufferedTransformation
139
  /// \param P point which is encoded
140
  /// \param compressed flag indicating if the point is compressed
141
  virtual void DEREncodePoint(BufferedTransformation &bt, const Point &P, bool compressed) const =0;
142
};
143
144
NAMESPACE_END
145
146
#endif  // CRYPTOPP_ECPOINT_H