Crypto++  5.6.4
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 EcPrecomputation< EC >::Element Element
 
typedef DL_FixedBasePrecomputationImpl< typename EcPrecomputation< EC >::Element > BasePrecomputation
 
- Public Types inherited from DL_GroupParameters< typename EcPrecomputation< EC >::Element >
typedef typename EcPrecomputation< EC >::Element Element
 

Public Member Functions

 DL_GroupParameters_EC (const OID &oid)
 
 DL_GroupParameters_EC (const EllipticCurve &ec, const Point &G, const Integer &n, const Integer &k=Integer::Zero())
 
 DL_GroupParameters_EC (BufferedTransformation &bt)
 
void Initialize (const EllipticCurve &ec, const Point &G, const Integer &n, const Integer &k=Integer::Zero())
 
void Initialize (const OID &oid)
 
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 EcPrecomputation< EC >::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)
 Set the subgroup generator. More...
 
virtual Element ExponentiateBase (const Integer &exponent) const
 Retrieves the subgroup generator. 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...
 
std::string GetValueNames () const
 Get a list of value names that can be retrieved. More...
 
bool GetIntValue (const char *name, int &value) const
 Get a named value with type int. More...
 
int GetIntValueWithDefault (const char *name, int defaultValue) const
 Get a named value with type int, with default. More...
 
template<class T >
void GetRequiredParameter (const char *className, const char *name, T &value) const
 Retrieves a required name/value pair. More...
 
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 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 31 of file eccrypto.h.

Member Function Documentation

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() retrives 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.

Definition at line 468 of file eccrypto.cpp.

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 485 of file eccrypto.cpp.

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 506 of file eccrypto.cpp.

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 EcPrecomputation< EC >::Element >.

Definition at line 68 of file eccrypto.h.

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 EcPrecomputation< EC >::Element >.

Definition at line 69 of file eccrypto.h.

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 EcPrecomputation< EC >::Element >.

Definition at line 70 of file eccrypto.h.

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

Retrieves the cofactor.

Returns
the cofactor

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

Reimplemented from DL_GroupParameters< typename EcPrecomputation< EC >::Element >.

Definition at line 566 of file eccrypto.cpp.

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 EcPrecomputation< EC >::Element >.

Definition at line 585 of file eccrypto.cpp.

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 underlyinhg 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 EcPrecomputation< EC >::Element >.

Definition at line 82 of file eccrypto.h.

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 EcPrecomputation< EC >::Element >.

Definition at line 89 of file eccrypto.h.

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 EcPrecomputation< EC >::Element >.

Definition at line 99 of file eccrypto.h.


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