Crypto++ 8.7
Free C++ class library of cryptographic schemes
Public Types | Public Member Functions | List of all members
ECP Class Reference

Elliptic Curve over GF(p), where p is prime. More...

#include <ecp.h>

+ Inheritance diagram for ECP:

Public Types

typedef ModularArithmetic Field
 
typedef Integer FieldElement
 
typedef ECPPoint Point
 
- Public Types inherited from AbstractGroup< ECPPoint >
typedef ECPPoint Element
 

Public Member Functions

 ECP ()
 Construct an ECP. More...
 
 ECP (const ECP &ecp, bool convertToMontgomeryRepresentation)
 Construct an ECP. More...
 
 ECP (const Integer &modulus, const FieldElement &a, const FieldElement &b)
 Construct an ECP. More...
 
 ECP (BufferedTransformation &bt)
 Construct an ECP from BER encoded parameters. More...
 
void DEREncode (BufferedTransformation &bt) const
 DER Encode. More...
 
bool Equal (const Point &P, const Point &Q) const
 Compare two points. More...
 
const PointIdentity () const
 Provides the Identity element. More...
 
const PointInverse (const Point &P) const
 Inverts the element in the group. More...
 
bool InversionIsFast () const
 Determine if inversion is fast. More...
 
const PointAdd (const Point &P, const Point &Q) const
 Adds elements in the group. More...
 
const PointDouble (const Point &P) const
 Doubles an element in the group. More...
 
Point ScalarMultiply (const Point &P, const Integer &k) const
 Performs a scalar multiplication. More...
 
Point CascadeScalarMultiply (const Point &P, const Integer &k1, const Point &Q, const Integer &k2) const
 TODO. More...
 
void SimultaneousMultiply (Point *results, const Point &base, const Integer *exponents, unsigned int exponentsCount) const
 Multiplies a base to multiple exponents in a group. More...
 
Point Multiply (const Integer &k, const Point &P) const
 
Point CascadeMultiply (const Integer &k1, const Point &P, const Integer &k2, const Point &Q) const
 
bool ValidateParameters (RandomNumberGenerator &rng, unsigned int level=3) const
 
bool VerifyPoint (const Point &P) const
 Verifies points on elliptic curve. More...
 
unsigned int EncodedPointSize (bool compressed=false) const
 Determines encoded point size. More...
 
bool DecodePoint (Point &P, BufferedTransformation &bt, size_t len) const
 Decodes an elliptic curve point. More...
 
bool DecodePoint (Point &P, const byte *encodedPoint, size_t len) const
 Decodes an elliptic curve point. More...
 
void EncodePoint (byte *encodedPoint, const Point &P, bool compressed) const
 Encodes an elliptic curve point. More...
 
void EncodePoint (BufferedTransformation &bt, const Point &P, bool compressed) const
 Encodes an elliptic curve point. More...
 
Point BERDecodePoint (BufferedTransformation &bt) const
 BER Decodes an elliptic curve point. More...
 
void DEREncodePoint (BufferedTransformation &bt, const Point &P, bool compressed) const
 DER Encodes an elliptic curve point. More...
 
Integer FieldSize () const
 
const FieldGetField () const
 
const FieldElementGetA () const
 
const FieldElementGetB () const
 
bool operator== (const ECP &rhs) const
 
- Public Member Functions inherited from AbstractGroup< ECPPoint >
virtual bool Equal (const Element &a, const Element &b) const=0
 Compare two elements for equality. More...
 
virtual const ElementIdentity () const=0
 Provides the Identity element. More...
 
virtual const ElementAdd (const Element &a, const Element &b) const=0
 Adds elements in the group. More...
 
virtual const ElementInverse (const Element &a) const=0
 Inverts the element in the group. More...
 
virtual bool InversionIsFast () const
 Determine if inversion is fast. More...
 
virtual const ElementDouble (const Element &a) const
 Doubles an element in the group. More...
 
virtual const ElementSubtract (const Element &a, const Element &b) const
 Subtracts elements in the group. More...
 
virtual ElementAccumulate (Element &a, const Element &b) const
 TODO. More...
 
virtual ElementReduce (Element &a, const Element &b) const
 Reduces an element in the congruence class. More...
 
virtual Element ScalarMultiply (const Element &a, const Integer &e) const
 Performs a scalar multiplication. More...
 
virtual Element CascadeScalarMultiply (const Element &x, const Integer &e1, const Element &y, const Integer &e2) const
 TODO. More...
 
virtual void SimultaneousMultiply (Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const
 Multiplies a base to multiple exponents in a group. More...
 
virtual bool DecodePoint (ECPPoint &P, BufferedTransformation &bt, size_t len) const=0
 Decodes an elliptic curve point. More...
 
virtual bool DecodePoint (ECPPoint &P, const byte *encodedPoint, size_t len) const=0
 Decodes an elliptic curve point. More...
 
virtual bool VerifyPoint (const ECPPoint &P) const=0
 Verifies points on elliptic curve. More...
 
virtual unsigned int EncodedPointSize (bool compressed=false) const=0
 Determines encoded point size. More...
 
virtual void EncodePoint (byte *encodedPoint, const ECPPoint &P, bool compressed) const=0
 Encodes an elliptic curve point. More...
 
virtual void EncodePoint (BufferedTransformation &bt, const ECPPoint &P, bool compressed) const=0
 Encodes an elliptic curve point. More...
 
virtual ECPPoint BERDecodePoint (BufferedTransformation &bt) const=0
 BER Decodes an elliptic curve point. More...
 
virtual void DEREncodePoint (BufferedTransformation &bt, const ECPPoint &P, bool compressed) const=0
 DER Encodes an elliptic curve point. More...
 

Detailed Description

Elliptic Curve over GF(p), where p is prime.

Definition at line 26 of file ecp.h.

Member Typedef Documentation

◆ Field

Definition at line 29 of file ecp.h.

◆ FieldElement

Definition at line 30 of file ecp.h.

◆ Point

Definition at line 31 of file ecp.h.

Constructor & Destructor Documentation

◆ ~ECP()

virtual ECP::~ECP ( )
inlinevirtual

Definition at line 33 of file ecp.h.

◆ ECP() [1/4]

ECP::ECP ( )
inline

Construct an ECP.

Definition at line 36 of file ecp.h.

◆ ECP() [2/4]

ECP::ECP ( const ECP ecp,
bool  convertToMontgomeryRepresentation 
)

Construct an ECP.

Parameters
ecpthe other ECP object
convertToMontgomeryRepresentationflag indicating if the curve should be converted to a MontgomeryRepresentation.

Prior to Crypto++ 8.3 the default value for convertToMontgomeryRepresentation was false. it was changed due to two audit tools finding, "Signature-compatible with a copy constructor".

See also
ModularArithmetic, MontgomeryRepresentation

◆ ECP() [3/4]

ECP::ECP ( const Integer modulus,
const FieldElement a,
const FieldElement b 
)
inline

Construct an ECP.

Parameters
modulusthe prime modulus
aField::Element
bField::Element

Definition at line 52 of file ecp.h.

◆ ECP() [4/4]

ECP::ECP ( BufferedTransformation bt)

Construct an ECP from BER encoded parameters.

Parameters
btBufferedTransformation derived object

This constructor will decode and extract the fields fieldID and curve of the sequence ECParameters

Member Function Documentation

◆ DEREncode()

void ECP::DEREncode ( BufferedTransformation bt) const

DER Encode.

Parameters
btBufferedTransformation derived object

DEREncode encode the fields fieldID and curve of the sequence ECParameters

◆ Equal()

bool ECP::Equal ( const Point P,
const Point Q 
) const
virtual

Compare two points.

Parameters
Pthe first point
Qthe second point
Returns
true if equal, false otherwise

Implements AbstractGroup< ECPPoint >.

◆ Identity()

const Point & ECP::Identity ( ) const
virtual

Provides the Identity element.

Returns
the Identity element

Implements AbstractGroup< ECPPoint >.

◆ Inverse()

const Point & ECP::Inverse ( const Point a) const
virtual

Inverts the element in the group.

Parameters
afirst element
Returns
the inverse of the element

Implements AbstractGroup< ECPPoint >.

◆ InversionIsFast()

bool ECP::InversionIsFast ( ) const
inlinevirtual

Determine if inversion is fast.

Returns
true if inversion is fast, false otherwise

Reimplemented from AbstractGroup< ECPPoint >.

Definition at line 75 of file ecp.h.

◆ Add()

const Point & ECP::Add ( const Point a,
const Point b 
) const
virtual

Adds elements in the group.

Parameters
afirst element
bsecond element
Returns
the sum of a and b

Implements AbstractGroup< ECPPoint >.

◆ Double()

const Point & ECP::Double ( const Point a) const
virtual

Doubles an element in the group.

Parameters
athe element
Returns
the element doubled

Reimplemented from AbstractGroup< ECPPoint >.

◆ ScalarMultiply()

Point ECP::ScalarMultiply ( const Point a,
const Integer e 
) const
virtual

Performs a scalar multiplication.

Parameters
amultiplicand
emultiplier
Returns
the product

Reimplemented from AbstractGroup< ECPPoint >.

◆ CascadeScalarMultiply()

Point ECP::CascadeScalarMultiply ( const Point x,
const Integer e1,
const Point y,
const Integer e2 
) const
virtual

TODO.

Parameters
xfirst multiplicand
e1the first multiplier
ysecond multiplicand
e2the second multiplier
Returns
TODO

Reimplemented from AbstractGroup< ECPPoint >.

◆ SimultaneousMultiply()

void ECP::SimultaneousMultiply ( Point results,
const Point base,
const Integer exponents,
unsigned int  exponentsCount 
) const
virtual

Multiplies a base to multiple exponents in a group.

Parameters
resultsan array of Elements
basethe base to raise to the exponents
exponentsan array of exponents
exponentsCountthe number of exponents in the array

SimultaneousMultiply() multiplies the base to each exponent in the exponents array and stores the result at the respective position in the results array.

SimultaneousMultiply() must be implemented in a derived class.

Precondition
COUNTOF(results) == exponentsCount
COUNTOF(exponents) == exponentsCount

Reimplemented from AbstractGroup< ECPPoint >.

◆ Multiply()

Point ECP::Multiply ( const Integer k,
const Point P 
) const
inline

Definition at line 82 of file ecp.h.

◆ CascadeMultiply()

Point ECP::CascadeMultiply ( const Integer k1,
const Point P,
const Integer k2,
const Point Q 
) const
inline

Definition at line 84 of file ecp.h.

◆ VerifyPoint()

bool ECP::VerifyPoint ( const Point P) const
virtual

Verifies points on elliptic curve.

Parameters
Ppoint to verify
Returns
true if the point is valid, false otherwise

Implements EncodedPoint< ECPPoint >.

◆ EncodedPointSize()

unsigned int ECP::EncodedPointSize ( bool  compressed = false) const
inlinevirtual

Determines encoded point size.

Parameters
compressedflag indicating if the point is compressed
Returns
the minimum number of bytes required to encode the point

Implements EncodedPoint< ECPPoint >.

Definition at line 90 of file ecp.h.

◆ DecodePoint() [1/2]

bool ECP::DecodePoint ( Point P,
BufferedTransformation bt,
size_t  len 
) const
virtual

Decodes an elliptic curve point.

Parameters
Ppoint which is decoded
btsource BufferedTransformation
lennumber of bytes to read from the BufferedTransformation
Returns
true if a point was decoded, false otherwise

Implements EncodedPoint< ECPPoint >.

◆ DecodePoint() [2/2]

bool ECP::DecodePoint ( Point P,
const byte encodedPoint,
size_t  len 
) const
virtual

Decodes an elliptic curve point.

Parameters
Ppoint which is decoded
encodedPointbyte array with the encoded point
lenthe size of the array
Returns
true if a point was decoded, false otherwise

Implements EncodedPoint< ECPPoint >.

◆ EncodePoint() [1/2]

void ECP::EncodePoint ( byte encodedPoint,
const Point P,
bool  compressed 
) const
virtual

Encodes an elliptic curve point.

Parameters
Ppoint which is decoded
encodedPointbyte array for the encoded point
compressedflag indicating if the point is compressed

encodedPoint must be at least EncodedPointSize() in length

Implements EncodedPoint< ECPPoint >.

◆ EncodePoint() [2/2]

void ECP::EncodePoint ( BufferedTransformation bt,
const Point P,
bool  compressed 
) const
virtual

Encodes an elliptic curve point.

Parameters
bttarget BufferedTransformation
Ppoint which is encoded
compressedflag indicating if the point is compressed

Implements EncodedPoint< ECPPoint >.

◆ BERDecodePoint()

Point ECP::BERDecodePoint ( BufferedTransformation bt) const
virtual

BER Decodes an elliptic curve point.

Parameters
btsource BufferedTransformation
Returns
the decoded elliptic curve point

Implements EncodedPoint< ECPPoint >.

◆ DEREncodePoint()

void ECP::DEREncodePoint ( BufferedTransformation bt,
const Point P,
bool  compressed 
) const
virtual

DER Encodes an elliptic curve point.

Parameters
bttarget BufferedTransformation
Ppoint which is encoded
compressedflag indicating if the point is compressed

Implements EncodedPoint< ECPPoint >.

◆ FieldSize()

Integer ECP::FieldSize ( ) const
inline

Definition at line 101 of file ecp.h.

◆ GetField()

const Field & ECP::GetField ( ) const
inline

Definition at line 102 of file ecp.h.

◆ GetA()

const FieldElement & ECP::GetA ( ) const
inline

Definition at line 103 of file ecp.h.

◆ GetB()

const FieldElement & ECP::GetB ( ) const
inline

Definition at line 104 of file ecp.h.

◆ operator==()

bool ECP::operator== ( const ECP rhs) const
inline

Definition at line 106 of file ecp.h.


The documentation for this class was generated from the following file: