Security Scol plugin
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
DL_GroupParameters_EC< EC > Class Template Reference

Elliptic Curve Parameters. More...

#include <eccrypto.h>

Inheritance diagram for DL_GroupParameters_EC< EC >:
DL_GroupParametersImpl< EcPrecomputation< EC > > DL_GroupParameters< T > CryptoParameters GeneratableCryptoMaterial CryptoMaterial NameValuePairs

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< T >
typedef T Element
 

Public Member Functions

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

Static Public Member Functions

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

Protected Member Functions

unsigned int FieldElementLength () const
 
unsigned int ExponentLength () const
 
- Protected Member Functions inherited from DL_GroupParameters< T >
void ParametersChanged ()
 

Protected Attributes

OID m_oid
 
Integer m_n
 
Integer m_k
 
bool m_compress
 
bool m_encodeAsOID
 
- Protected Attributes inherited from DL_GroupParametersImpl< EcPrecomputation< EC > >
EcPrecomputation< EC > m_groupPrecomputation
 
DL_FixedBasePrecomputationImpl< typename GROUP_PRECOMP::Element > m_gpc
 

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.

Member Typedef Documentation

◆ DefaultCofactorOption

template<class EC >
typedef IncompatibleCofactorMultiplication DL_GroupParameters_EC< EC >::DefaultCofactorOption

Definition at line 47 of file eccrypto.h.

◆ Element

template<class EC >
typedef Point DL_GroupParameters_EC< EC >::Element

Definition at line 46 of file eccrypto.h.

◆ EllipticCurve

template<class EC >
typedef EC DL_GroupParameters_EC< EC >::EllipticCurve

Definition at line 44 of file eccrypto.h.

◆ Point

template<class EC >
typedef EllipticCurve::Point DL_GroupParameters_EC< EC >::Point

Definition at line 45 of file eccrypto.h.

Constructor & Destructor Documentation

◆ ~DL_GroupParameters_EC()

template<class EC >
virtual DL_GroupParameters_EC< EC >::~DL_GroupParameters_EC ( )
inlinevirtual

Definition at line 49 of file eccrypto.h.

◆ DL_GroupParameters_EC() [1/4]

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

Construct an EC GroupParameters.

Definition at line 52 of file eccrypto.h.

◆ DL_GroupParameters_EC() [2/4]

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() [3/4]

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() [4/4]

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

◆ 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< T >.

Definition at line 102 of file eccrypto.h.

◆ 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.

Definition at line 514 of file eccrypto.cpp.

◆ BERDecode()

template<class EC >
void DL_GroupParameters_EC< EC >::BERDecode ( BufferedTransformation bt)

Definition at line 549 of file eccrypto.cpp.

◆ CascadeExponentiate()

template<class EC >
DL_GroupParameters_EC< EC >::Element DL_GroupParameters_EC< EC >::CascadeExponentiate ( const Element &  element1,
const Integer exponent1,
const Element &  element2,
const Integer exponent2 
) const

Definition at line 678 of file eccrypto.cpp.

◆ ConvertElementToInteger()

template<class EC >
Integer DL_GroupParameters_EC< EC >::ConvertElementToInteger ( const Element &  element) const

Definition at line 608 of file eccrypto.cpp.

◆ 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< T >.

Definition at line 122 of file eccrypto.h.

◆ DEREncode()

template<class EC >
void DL_GroupParameters_EC< EC >::DEREncode ( BufferedTransformation bt) const

Definition at line 577 of file eccrypto.cpp.

◆ EncodeElement()

template<class EC >
void DL_GroupParameters_EC< EC >::EncodeElement ( bool  reversible,
const Element &  element,
byte encoded 
) const
inline

Definition at line 108 of file eccrypto.h.

◆ ExponentLength()

template<class EC >
unsigned int DL_GroupParameters_EC< EC >::ExponentLength ( ) const
inlineprotected

Definition at line 165 of file eccrypto.h.

◆ FastSubgroupCheckAvailable()

template<class EC >
bool DL_GroupParameters_EC< EC >::FastSubgroupCheckAvailable ( ) const
inlinevirtual

Implements DL_GroupParameters< T >.

Definition at line 107 of file eccrypto.h.

◆ FieldElementLength()

template<class EC >
unsigned int DL_GroupParameters_EC< EC >::FieldElementLength ( ) const
inlineprotected

Definition at line 164 of file eccrypto.h.

◆ 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.

Definition at line 535 of file eccrypto.cpp.

◆ GetAlgorithmID()

template<class EC >
OID DL_GroupParameters_EC< EC >::GetAlgorithmID ( ) const

Definition at line 684 of file eccrypto.cpp.

◆ 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< T >.

Definition at line 101 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< T >.

Definition at line 595 of file eccrypto.cpp.

◆ GetCurve()

template<class EC >
const EllipticCurve & DL_GroupParameters_EC< EC >::GetCurve ( ) const
inline

Definition at line 158 of file eccrypto.h.

◆ GetEncodeAsOID()

template<class EC >
bool DL_GroupParameters_EC< EC >::GetEncodeAsOID ( ) const
inline

Definition at line 156 of file eccrypto.h.

◆ 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< T >.

Definition at line 115 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< T >.

Definition at line 132 of file eccrypto.h.

◆ GetNextRecommendedParametersOID()

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

Definition at line 462 of file eccrypto.cpp.

◆ GetPointCompression()

template<class EC >
bool DL_GroupParameters_EC< EC >::GetPointCompression ( ) const
inline

Definition at line 153 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< T >.

Definition at line 103 of file eccrypto.h.

◆ 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()

Reimplemented from DL_GroupParameters< T >.

Definition at line 497 of file eccrypto.cpp.

◆ 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.

Definition at line 470 of file eccrypto.cpp.

◆ IsIdentity()

template<class EC >
bool DL_GroupParameters_EC< EC >::IsIdentity ( const Element &  element) const
inline

Definition at line 133 of file eccrypto.h.

◆ MultiplyElements()

template<class EC >
DL_GroupParameters_EC< EC >::Element DL_GroupParameters_EC< EC >::MultiplyElements ( const Element &  a,
const Element &  b 
) const

Definition at line 672 of file eccrypto.cpp.

◆ operator==()

template<class EC >
bool DL_GroupParameters_EC< EC >::operator== ( const ThisClass rhs) const
inline

Definition at line 160 of file eccrypto.h.

◆ SetEncodeAsOID()

template<class EC >
void DL_GroupParameters_EC< EC >::SetEncodeAsOID ( bool  encodeAsOID)
inline

Definition at line 155 of file eccrypto.h.

◆ SetPointCompression()

template<class EC >
void DL_GroupParameters_EC< EC >::SetPointCompression ( bool  compress)
inline

Definition at line 152 of file eccrypto.h.

◆ SimultaneousExponentiate()

template<class EC >
void DL_GroupParameters_EC< EC >::SimultaneousExponentiate ( Element *  results,
const Element &  base,
const Integer exponents,
unsigned int  exponentsCount 
) const

Definition at line 666 of file eccrypto.cpp.

◆ StaticAlgorithmNamePrefix()

template<class EC >
static std::string CRYPTOPP_API DL_GroupParameters_EC< EC >::StaticAlgorithmNamePrefix ( )
inlinestatic

Definition at line 135 of file eccrypto.h.

◆ ValidateElement()

template<class EC >
bool DL_GroupParameters_EC< EC >::ValidateElement ( unsigned int  level,
const Element &  element,
const DL_FixedBasePrecomputation< Element > *  precomp 
) const

Definition at line 640 of file eccrypto.cpp.

◆ 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< T >.

Definition at line 614 of file eccrypto.cpp.

Member Data Documentation

◆ m_compress

template<class EC >
bool DL_GroupParameters_EC< EC >::m_compress
mutableprotected

Definition at line 170 of file eccrypto.h.

◆ m_encodeAsOID

template<class EC >
bool DL_GroupParameters_EC< EC >::m_encodeAsOID
protected

Definition at line 170 of file eccrypto.h.

◆ m_k

template<class EC >
Integer DL_GroupParameters_EC< EC >::m_k
mutableprotected

Definition at line 169 of file eccrypto.h.

◆ m_n

template<class EC >
Integer DL_GroupParameters_EC< EC >::m_n
protected

Definition at line 168 of file eccrypto.h.

◆ m_oid

template<class EC >
OID DL_GroupParameters_EC< EC >::m_oid
protected

Definition at line 167 of file eccrypto.h.


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