18#if CRYPTOPP_MSC_VERSION
20# pragma warning(disable: 4231 4275)
46 ECP(
const ECP &ecp,
bool convertToMontgomeryRepresentation);
53 : m_fieldPtr(new
Field(modulus)), m_a(a.IsNegative() ? modulus+a : a), m_b(b) {}
83 {
return ScalarMultiply(P, k);}
84 Point CascadeMultiply(
const Integer &k1,
const Point &P,
const Integer &k2,
const Point &Q)
const
85 {
return CascadeScalarMultiply(P, k1, Q, k2);}
91 {
return 1 + (compressed?1:2)*GetField().MaxElementByteLength();}
101 Integer FieldSize()
const {
return GetField().GetModulus();}
102 const Field & GetField()
const {
return *m_fieldPtr;}
103 const FieldElement & GetA()
const {
return m_a;}
104 const FieldElement & GetB()
const {
return m_b;}
107 {
return GetField() == rhs.GetField() && m_a == rhs.m_a && m_b == rhs.m_b;}
111 FieldElement m_a, m_b;
136 {
return P.identity ? P :
ECP::Point(m_ec->GetField().ConvertIn(P.x), m_ec->GetField().ConvertIn(P.y));};
138 {
return P.identity ? P :
ECP::Point(m_ec->GetField().ConvertOut(P.x), m_ec->GetField().ConvertOut(P.y));}
148 m_ec.reset(
new ECP(ec,
true));
163#if CRYPTOPP_MSC_VERSION
Classes for performing mathematics over different fields.
bool operator==(const OID &lhs, const OID &rhs)
Compare two OIDs for equality.
DL_FixedBasePrecomputation adapter class.
Elliptic Curve over GF(p), where p is prime.
bool InversionIsFast() const
Determine if inversion is fast.
const Point & Double(const Point &P) const
Doubles an element in the group.
Point ScalarMultiply(const Point &P, const Integer &k) const
Performs a scalar multiplication.
void EncodePoint(BufferedTransformation &bt, const Point &P, bool compressed) const
Encodes an elliptic curve point.
void EncodePoint(byte *encodedPoint, const Point &P, bool compressed) const
Encodes an elliptic curve point.
bool Equal(const Point &P, const Point &Q) const
Compare two points.
void DEREncodePoint(BufferedTransformation &bt, const Point &P, bool compressed) const
DER Encodes an elliptic curve point.
ECP(const Integer &modulus, const FieldElement &a, const FieldElement &b)
Construct an ECP.
bool VerifyPoint(const Point &P) const
Verifies points on elliptic curve.
Point CascadeScalarMultiply(const Point &P, const Integer &k1, const Point &Q, const Integer &k2) const
TODO.
const Point & Inverse(const Point &P) const
Inverts the element in the group.
const Point & Identity() const
Provides the Identity element.
Point BERDecodePoint(BufferedTransformation &bt) const
BER Decodes an elliptic curve point.
ECP(BufferedTransformation &bt)
Construct an ECP from BER encoded parameters.
unsigned int EncodedPointSize(bool compressed=false) const
Determines encoded point size.
ECP(const ECP &ecp, bool convertToMontgomeryRepresentation)
Construct an ECP.
bool DecodePoint(Point &P, BufferedTransformation &bt, size_t len) const
Decodes an elliptic curve point.
bool DecodePoint(Point &P, const byte *encodedPoint, size_t len) const
Decodes an elliptic curve point.
void DEREncode(BufferedTransformation &bt) const
DER Encode.
const Point & Add(const Point &P, const Point &Q) const
Adds elements in the group.
void SimultaneousMultiply(Point *results, const Point &base, const Integer *exponents, unsigned int exponentsCount) const
Multiplies a base to multiple exponents in a group.
void DEREncodeElement(BufferedTransformation &bt, const Element &v) const
Encodes element in DER format.
Element ConvertOut(const Element &P) const
Converts an element between representations.
Element ConvertIn(const Element &P) const
Converts an element between representations.
Element BERDecodeElement(BufferedTransformation &bt) const
Decodes element in DER format.
const AbstractGroup< Element > & GetGroup() const
Retrieves AbstractGroup interface.
void SetCurve(const ECP &ec)
Set the elliptic curve.
const ECP & GetCurve() const
Get the elliptic curve.
bool NeedConversions() const
Determines if elements needs conversion.
Elliptic Curve precomputation.
Abstract class for encoding and decoding ellicptic curve points.
Multiple precision integer with arithmetic operations.
Ring of congruence classes modulo n.
Interface for random number generators.
A pointer which can be copied and cloned.
#define CRYPTOPP_DLL_TEMPLATE_CLASS
Instantiate templates in a dynamic library.
Abstract base classes that provide a uniform interface to this library.
Classes for Elliptic Curve points.
Classes for precomputation in a group.
Multiple precision integer with arithmetic operations.
Class file for performing modular arithmetic.
Crypto++ library namespace.
This file contains helper classes/functions for implementing public key algorithms.
Classes for automatic resource management.
Elliptical Curve Point over GF(p), where p is prime.