Crypto++  8.8
Free C++ class library of cryptographic schemes
Public Types | Public Member Functions | Static Public Member Functions | List of all members
DL_GroupParameters_EC< EC > Class Template Reference

Elliptic Curve Parameters. More...

+ Inheritance diagram for DL_GroupParameters_EC< EC >:

Public Types

typedef EC EllipticCurve
 
typedef EllipticCurve::Point Point
 
typedef Point Element
 
typedef IncompatibleCofactorMultiplication DefaultCofactorOption
 
- Public Types inherited from DL_GroupParametersImpl< EcPrecomputation< EC > >
typedef EcPrecomputation< EC > GroupPrecomputation
 
typedef GROUP_PRECOMP::Element Element
 
typedef DL_FixedBasePrecomputationImpl< typename GROUP_PRECOMP::Element > BasePrecomputation
 
- Public Types inherited from DL_GroupParameters< typename GROUP_PRECOMP::Element >
typedef typename GROUP_PRECOMP::Element Element
 

Public Member Functions

 DL_GroupParameters_EC ()
 Construct an EC GroupParameters.
 
 DL_GroupParameters_EC (const OID &oid)
 Construct an EC GroupParameters. More...
 
 DL_GroupParameters_EC (const EllipticCurve &ec, const Point &G, const Integer &n, const Integer &k=Integer::Zero())
 Construct an EC GroupParameters. More...
 
 DL_GroupParameters_EC (BufferedTransformation &bt)
 Construct an EC GroupParameters. More...
 
void Initialize (const EllipticCurve &ec, const Point &G, const Integer &n, const Integer &k=Integer::Zero())
 Initialize an EC GroupParameters using {EC,G,n,k}. More...
 
void Initialize (const OID &oid)
 Initialize a DL_GroupParameters_EC {EC,G,n,k}. More...
 
bool GetVoidValue (const char *name, const std::type_info &valueType, void *pValue) const
 Get a named value. More...
 
void AssignFrom (const NameValuePairs &source)
 Assign values to this object. More...
 
void GenerateRandom (RandomNumberGenerator &rng, const NameValuePairs &alg)
 this implementation doesn't actually generate a curve, it just initializes the parameters with existing values More...
 
const DL_FixedBasePrecomputation< Element > & GetBasePrecomputation () const
 Retrieves the group precomputation. More...
 
DL_FixedBasePrecomputation< Element > & AccessBasePrecomputation ()
 Retrieves the group precomputation. More...
 
const IntegerGetSubgroupOrder () const
 Retrieves the subgroup order. More...
 
Integer GetCofactor () const
 Retrieves the cofactor. More...
 
bool ValidateGroup (RandomNumberGenerator &rng, unsigned int level) const
 Check the group for errors. More...
 
bool ValidateElement (unsigned int level, const Element &element, const DL_FixedBasePrecomputation< Element > *precomp) const
 
bool FastSubgroupCheckAvailable () const
 
void EncodeElement (bool reversible, const Element &element, byte *encoded) const
 
virtual unsigned int GetEncodedElementSize (bool reversible) const
 Retrieves the encoded element's size. More...
 
Element DecodeElement (const byte *encoded, bool checkForGroupMembership) const
 Decodes the element. More...
 
Integer ConvertElementToInteger (const Element &element) const
 
Integer GetMaxExponent () const
 Retrieves the maximum exponent for the group. More...
 
bool IsIdentity (const Element &element) const
 
void SimultaneousExponentiate (Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const
 
OID GetAlgorithmID () const
 
Element MultiplyElements (const Element &a, const Element &b) const
 
Element CascadeExponentiate (const Element &element1, const Integer &exponent1, const Element &element2, const Integer &exponent2) const
 
void BERDecode (BufferedTransformation &bt)
 
void DEREncode (BufferedTransformation &bt) const
 
void SetPointCompression (bool compress)
 
bool GetPointCompression () const
 
void SetEncodeAsOID (bool encodeAsOID)
 
bool GetEncodeAsOID () const
 
const EllipticCurve & GetCurve () const
 
bool operator== (const ThisClass &rhs) const
 
- Public Member Functions inherited from DL_GroupParametersImpl< EcPrecomputation< EC > >
const DL_GroupPrecomputation< Element > & GetGroupPrecomputation () const
 Retrieves the group precomputation. More...
 
const DL_FixedBasePrecomputation< Element > & GetBasePrecomputation () const
 Retrieves the group precomputation. More...
 
DL_FixedBasePrecomputation< Element > & AccessBasePrecomputation ()
 Retrieves the group precomputation. More...
 
- Public Member Functions inherited from DL_GroupParameters< typename GROUP_PRECOMP::Element >
bool Validate (RandomNumberGenerator &rng, unsigned int level) const
 Check this object for errors. More...
 
bool GetVoidValue (const char *name, const std::type_info &valueType, void *pValue) const
 Get a named value. More...
 
bool SupportsPrecomputation () const
 Determines whether the object supports precomputation. More...
 
void Precompute (unsigned int precomputationStorage=16)
 Perform precomputation. More...
 
void LoadPrecomputation (BufferedTransformation &storedPrecomputation)
 Retrieve previously saved precomputation. More...
 
void SavePrecomputation (BufferedTransformation &storedPrecomputation) const
 Save precomputation for later use. More...
 
virtual const Element & GetSubgroupGenerator () const
 Retrieves the subgroup generator. More...
 
virtual void SetSubgroupGenerator (const Element &base)
 Sets the subgroup generator. More...
 
virtual Element ExponentiateBase (const Integer &exponent) const
 Exponentiates the base. More...
 
virtual Element ExponentiateElement (const Element &base, const Integer &exponent) const
 Exponentiates an element. More...
 
virtual Integer GetGroupOrder () const
 Retrieves the order of the group. More...
 
virtual void EncodeElement (bool reversible, const Element &element, byte *encoded) const=0
 Encodes the element. More...
 
virtual Integer ConvertElementToInteger (const Element &element) const=0
 Converts an element to an Integer. More...
 
virtual bool ValidateElement (unsigned int level, const Element &element, const DL_FixedBasePrecomputation< Element > *precomp) const=0
 Check the element for errors. More...
 
virtual bool IsIdentity (const Element &element) const=0
 Determines if an element is an identity. More...
 
virtual void SimultaneousExponentiate (Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const=0
 Exponentiates a base to multiple exponents. More...
 
- Public Member Functions inherited from GeneratableCryptoMaterial
void GenerateRandomWithKeySize (RandomNumberGenerator &rng, unsigned int keySize)
 Generate a random key or crypto parameters. More...
 
- Public Member Functions inherited from CryptoMaterial
virtual void ThrowIfInvalid (RandomNumberGenerator &rng, unsigned int level) const
 Check this object for errors. More...
 
virtual void Save (BufferedTransformation &bt) const
 Saves a key to a BufferedTransformation. More...
 
virtual void Load (BufferedTransformation &bt)
 Loads a key from a BufferedTransformation. More...
 
void DoQuickSanityCheck () const
 Perform a quick sanity check. More...
 
- Public Member Functions inherited from NameValuePairs
template<class T >
bool GetThisObject (T &object) const
 Get a copy of this object or subobject. More...
 
template<class T >
bool GetThisPointer (T *&ptr) const
 Get a pointer to this object. More...
 
template<class T >
bool GetValue (const char *name, T &value) const
 Get a named value. More...
 
template<class T >
GetValueWithDefault (const char *name, T defaultValue) const
 Get a named value. More...
 
CRYPTOPP_DLL std::string GetValueNames () const
 Get a list of value names that can be retrieved. More...
 
CRYPTOPP_DLL bool GetIntValue (const char *name, int &value) const
 Get a named value with type int. More...
 
CRYPTOPP_DLL int GetIntValueWithDefault (const char *name, int defaultValue) const
 Get a named value with type int, with default. More...
 
CRYPTOPP_DLL bool GetWord64Value (const char *name, word64 &value) const
 Get a named value with type word64. More...
 
CRYPTOPP_DLL word64 GetWord64ValueWithDefault (const char *name, word64 defaultValue) const
 Get a named value with type word64, with default. More...
 
template<class T >
void GetRequiredParameter (const char *className, const char *name, T &value) const
 Retrieves a required name/value pair. More...
 
CRYPTOPP_DLL void GetRequiredIntParameter (const char *className, const char *name, int &value) const
 Retrieves a required name/value pair. More...
 

Static Public Member Functions

static std::string StaticAlgorithmNamePrefix ()
 
static OID GetNextRecommendedParametersOID (const OID &oid)
 
- Static Public Member Functions inherited from NameValuePairs
static CRYPTOPP_DLL void ThrowIfTypeMismatch (const char *name, const std::type_info &stored, const std::type_info &retrieving)
 Ensures an expected name and type is present. More...
 

Detailed Description

template<class EC>
class DL_GroupParameters_EC< EC >

Elliptic Curve Parameters.

Template Parameters
ECelliptic curve field

This class corresponds to the ASN.1 sequence of the same name in ANSI X9.62 and SEC 1. EC is currently defined for ECP and EC2N.

Definition at line 39 of file eccrypto.h.

Constructor & Destructor Documentation

◆ DL_GroupParameters_EC() [1/3]

template<class EC >
DL_GroupParameters_EC< EC >::DL_GroupParameters_EC ( const OID oid)
inline

Construct an EC GroupParameters.

Parameters
oidthe OID of a curve

Definition at line 56 of file eccrypto.h.

◆ DL_GroupParameters_EC() [2/3]

template<class EC >
DL_GroupParameters_EC< EC >::DL_GroupParameters_EC ( const EllipticCurve &  ec,
const Point &  G,
const Integer n,
const Integer k = Integer::Zero() 
)
inline

Construct an EC GroupParameters.

Parameters
ecthe elliptic curve
Gthe base point
nthe order of the base point
kthe cofactor

Definition at line 64 of file eccrypto.h.

◆ DL_GroupParameters_EC() [3/3]

template<class EC >
DL_GroupParameters_EC< EC >::DL_GroupParameters_EC ( BufferedTransformation bt)
inline

Construct an EC GroupParameters.

Parameters
btBufferedTransformation with group parameters

Definition at line 69 of file eccrypto.h.

Member Function Documentation

◆ Initialize() [1/2]

template<class EC >
void DL_GroupParameters_EC< EC >::Initialize ( const EllipticCurve &  ec,
const Point &  G,
const Integer n,
const Integer k = Integer::Zero() 
)
inline

Initialize an EC GroupParameters using {EC,G,n,k}.

Parameters
ecthe elliptic curve
Gthe base point
nthe order of the base point
kthe cofactor

This Initialize() function overload initializes group parameters from existing parameters.

Definition at line 78 of file eccrypto.h.

◆ Initialize() [2/2]

template<class EC >
void DL_GroupParameters_EC< EC >::Initialize ( const OID oid)

Initialize a DL_GroupParameters_EC {EC,G,n,k}.

Parameters
oidthe OID of a curve

This Initialize() function overload initializes group parameters from existing parameters.

◆ GetVoidValue()

template<class EC >
bool DL_GroupParameters_EC< EC >::GetVoidValue ( const char *  name,
const std::type_info &  valueType,
void *  pValue 
) const
virtual

Get a named value.

Parameters
namethe name of the object or value to retrieve
valueTypereference to a variable that receives the value
pValuevoid pointer to a variable that receives the value
Returns
true if the value was retrieved, false otherwise

GetVoidValue() retrieves the value of name if it exists.

Note
GetVoidValue() is an internal function and should be implemented by derived classes. Users should use one of the other functions instead.
See also
GetValue(), GetValueWithDefault(), GetIntValue(), GetIntValueWithDefault(), GetRequiredParameter() and GetRequiredIntParameter()

Implements NameValuePairs.

◆ AssignFrom()

template<class EC >
void DL_GroupParameters_EC< EC >::AssignFrom ( const NameValuePairs source)
virtual

Assign values to this object.

This function can be used to create a public key from a private key.

Implements CryptoMaterial.

◆ GenerateRandom()

template<class EC >
void DL_GroupParameters_EC< EC >::GenerateRandom ( RandomNumberGenerator rng,
const NameValuePairs alg 
)
virtual

this implementation doesn't actually generate a curve, it just initializes the parameters with existing values

parameters: (Curve, SubgroupGenerator, SubgroupOrder, Cofactor (optional)), or (GroupOID)

Reimplemented from GeneratableCryptoMaterial.

◆ GetBasePrecomputation()

template<class EC >
const DL_FixedBasePrecomputation<Element>& DL_GroupParameters_EC< EC >::GetBasePrecomputation ( ) const
inlinevirtual

Retrieves the group precomputation.

Returns
a const reference to the group precomputation using a fixed base

Implements DL_GroupParameters< typename GROUP_PRECOMP::Element >.

Definition at line 101 of file eccrypto.h.

◆ AccessBasePrecomputation()

template<class EC >
DL_FixedBasePrecomputation<Element>& DL_GroupParameters_EC< EC >::AccessBasePrecomputation ( )
inlinevirtual

Retrieves the group precomputation.

Returns
a non-const reference to the group precomputation using a fixed base

Implements DL_GroupParameters< typename GROUP_PRECOMP::Element >.

Definition at line 102 of file eccrypto.h.

◆ GetSubgroupOrder()

template<class EC >
const Integer& DL_GroupParameters_EC< EC >::GetSubgroupOrder ( ) const
inlinevirtual

Retrieves the subgroup order.

Returns
the order of subgroup generated by the base element

Implements DL_GroupParameters< typename GROUP_PRECOMP::Element >.

Definition at line 103 of file eccrypto.h.

◆ GetCofactor()

template<class EC >
Integer DL_GroupParameters_EC< EC >::GetCofactor ( ) const
virtual

Retrieves the cofactor.

Returns
the cofactor

Either GetGroupOrder() or GetCofactor() must be overridden in a derived class.

Reimplemented from DL_GroupParameters< typename GROUP_PRECOMP::Element >.

◆ ValidateGroup()

template<class EC >
bool DL_GroupParameters_EC< EC >::ValidateGroup ( RandomNumberGenerator rng,
unsigned int  level 
) const
virtual

Check the group for errors.

Parameters
rngRandomNumberGenerator for objects which use randomized testing
levellevel of thoroughness
Returns
true if the tests succeed, false otherwise

There are four levels of thoroughness:

  • 0 - using this object won't cause a crash or exception
  • 1 - this object will probably function, and encrypt, sign, other operations correctly
  • 2 - ensure this object will function correctly, and perform reasonable security checks
  • 3 - perform reasonable security checks, and do checks that may take a long time

Level 0 does not require a RandomNumberGenerator. A NullRNG() can be used for level 0. Level 1 may not check for weak keys and such. Levels 2 and 3 are recommended.

ValidateGroup() must be implemented in a derived class.

Implements DL_GroupParameters< typename GROUP_PRECOMP::Element >.

◆ GetEncodedElementSize()

template<class EC >
virtual unsigned int DL_GroupParameters_EC< EC >::GetEncodedElementSize ( bool  reversible) const
inlinevirtual

Retrieves the encoded element's size.

Parameters
reversibleflag indicating the encoding format
Returns
encoded element's size, in bytes

The format of the encoded element varies by the underlying type of the element and the reversible flag. GetEncodedElementSize() must be implemented in a derived class.

See also
GetEncodedElementSize(), EncodeElement(), DecodeElement()

Implements DL_GroupParameters< typename GROUP_PRECOMP::Element >.

Definition at line 115 of file eccrypto.h.

◆ DecodeElement()

template<class EC >
Element DL_GroupParameters_EC< EC >::DecodeElement ( const byte encoded,
bool  checkForGroupMembership 
) const
inlinevirtual

Decodes the element.

Parameters
encodedbyte array with the encoded element
checkForGroupMembershipflag indicating if the element should be validated
Returns
Element after decoding

DecodeElement() must be implemented in a derived class.

Precondition
COUNTOF(encoded) == GetEncodedElementSize()

Implements DL_GroupParameters< typename GROUP_PRECOMP::Element >.

Definition at line 122 of file eccrypto.h.

◆ GetMaxExponent()

template<class EC >
Integer DL_GroupParameters_EC< EC >::GetMaxExponent ( ) const
inlinevirtual

Retrieves the maximum exponent for the group.

Returns
the maximum exponent for the group

Implements DL_GroupParameters< typename GROUP_PRECOMP::Element >.

Definition at line 132 of file eccrypto.h.


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