18 #if CRYPTOPP_MSC_VERSION 19 # pragma warning(push) 20 # pragma warning(disable: 4231 4275) 42 ECP(
const ECP &ecp,
bool convertToMontgomeryRepresentation =
false);
49 : m_fieldPtr(new
Field(modulus)), m_a(a.IsNegative() ? modulus+a : a), m_b(b) {}
60 bool Equal(
const Point &P,
const Point &Q)
const;
62 const Point& Inverse(
const Point &P)
const;
64 const Point& Add(
const Point &P,
const Point &Q)
const;
65 const Point& Double(
const Point &P)
const;
66 Point ScalarMultiply(
const Point &P,
const Integer &k)
const;
67 Point CascadeScalarMultiply(
const Point &P,
const Integer &k1,
const Point &Q,
const Integer &k2)
const;
68 void SimultaneousMultiply(Point *results,
const Point &base,
const Integer *exponents,
unsigned int exponentsCount)
const;
70 Point Multiply(
const Integer &k,
const Point &P)
const 71 {
return ScalarMultiply(P, k);}
72 Point CascadeMultiply(
const Integer &k1,
const Point &P,
const Integer &k2,
const Point &Q)
const 73 {
return CascadeScalarMultiply(P, k1, Q, k2);}
76 bool VerifyPoint(
const Point &P)
const;
79 {
return 1 + (compressed?1:2)*GetField().MaxElementByteLength();}
82 bool DecodePoint(Point &P,
const byte *encodedPoint,
size_t len)
const;
83 void EncodePoint(byte *encodedPoint,
const Point &P,
bool compressed)
const;
89 Integer FieldSize()
const {
return GetField().GetModulus();}
90 const Field & GetField()
const {
return *m_fieldPtr;}
91 const FieldElement & GetA()
const {
return m_a;}
92 const FieldElement & GetB()
const {
return m_b;}
95 {
return GetField() == rhs.GetField() && m_a == rhs.m_a && m_b == rhs.m_b;}
99 FieldElement m_a, m_b;
124 {
return P.identity ? P :
ECP::Point(m_ec->GetField().ConvertIn(P.x), m_ec->GetField().ConvertIn(P.y));};
126 {
return P.identity ? P :
ECP::Point(m_ec->GetField().ConvertOut(P.x), m_ec->GetField().ConvertOut(P.y));}
136 m_ec.reset(
new ECP(ec,
true));
151 #if CRYPTOPP_MSC_VERSION 152 # pragma warning(pop) Elliptical Curve Point over GF(p), where p is prime.
This file contains helper classes/functions for implementing public key algorithms.
const char * Identity()
ConstByteArrayParameter.
Elliptic Curve over GF(p), where p is prime.
Abstract base classes that provide a uniform interface to this library.
bool InversionIsFast() const
Determine if inversion is fast.
Classes for automatic resource management.
Ring of congruence classes modulo n.
Interface for random number generators.
Element ConvertIn(const Element &P) const
Converts an element between representations.
Classes for Elliptic Curve points.
Classes for performing mathematics over different fields.
bool operator==(const OID &lhs, const OID &rhs)
Compare two OIDs for equality.
void DEREncodeElement(BufferedTransformation &bt, const Element &v) const
Encodes element in DER format.
A pointer which can be copied and cloned.
Multiple precision integer with arithmetic operations.
const AbstractGroup< Element > & GetGroup() const
Retrieves AbstractGroup interface.
Element BERDecodeElement(BufferedTransformation &bt) const
Decodes element in DER format.
Classes for precomputation in a group.
Abstract class for encoding and decoding ellicptic curve points.
Elliptic Curve precomputation.
Multiple precision integer with arithmetic operations.
bool NeedConversions() const
Determines if elements needs conversion.
unsigned int EncodedPointSize(bool compressed=false) const
Determines encoded point size.
Class file for performing modular arithmetic.
Crypto++ library namespace.
ECP(const Integer &modulus, const FieldElement &a, const FieldElement &b)
Construct an ECP.
const ECP & GetCurve() const
Get the elliptic curve.
Element ConvertOut(const Element &P) const
Converts an element between representations.
DL_FixedBasePrecomputation adapter class.
void SetCurve(const ECP &ec)
Set the elliptic curve.