Fabcoin Core  0.16.2
P2P Digital Currency
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Types | 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 >:
[legend]
Collaboration diagram for DL_GroupParameters_EC< EC >:
[legend]

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 >::ElementBasePrecomputation
 
- Public Types inherited from DL_GroupParameters< typename EcPrecomputation< EC >::Element >
typedef typename EcPrecomputation< EC >::Element Element
 

Public Member Functions

virtual ~DL_GroupParameters_EC ()
 
 DL_GroupParameters_EC ()
 Construct an EC GroupParameters. More...
 
 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 EllipticCurveGetCurve () const
 
bool operator== (const ThisClass &rhs) const
 
- Public Member Functions inherited from DL_GroupParametersImpl< EcPrecomputation< EC > >
virtual ~DL_GroupParametersImpl ()
 
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 >
virtual ~DL_GroupParameters ()
 
 DL_GroupParameters ()
 
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 ElementGetSubgroupGenerator () 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
virtual ~GeneratableCryptoMaterial ()
 
void GenerateRandomWithKeySize (RandomNumberGenerator &rng, unsigned int keySize)
 Generate a random key or crypto parameters. More...
 
- Public Member Functions inherited from CryptoMaterial
virtual ~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
virtual ~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 >
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...
 
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 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. More...
 

Protected Member Functions

unsigned int FieldElementLength () const
 
unsigned int ExponentLength () const
 
- Protected Member Functions inherited from DL_GroupParameters< typename EcPrecomputation< EC >::Element >
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 EcPrecomputation< EC >::Elementm_gpc
 

Private Types

typedef DL_GroupParameters_EC< EC > ThisClass
 

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 32 of file eccrypto.h.

Member Typedef Documentation

Definition at line 40 of file eccrypto.h.

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

Definition at line 39 of file eccrypto.h.

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

Definition at line 37 of file eccrypto.h.

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

Definition at line 38 of file eccrypto.h.

template<class EC>
typedef DL_GroupParameters_EC<EC> DL_GroupParameters_EC< EC >::ThisClass
private

Definition at line 34 of file eccrypto.h.

Constructor & Destructor Documentation

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

Definition at line 42 of file eccrypto.h.

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

Construct an EC GroupParameters.

Definition at line 45 of file eccrypto.h.

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 49 of file eccrypto.h.

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 57 of file eccrypto.h.

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 62 of file eccrypto.h.

Member Function Documentation

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 95 of file eccrypto.h.

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

Here is the call graph for this function:

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

Definition at line 521 of file eccrypto.cpp.

Here is the call graph for this function:

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

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

Definition at line 580 of file eccrypto.cpp.

Here is the call graph for this function:

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 115 of file eccrypto.h.

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

Definition at line 549 of file eccrypto.cpp.

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

Definition at line 101 of file eccrypto.h.

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

Definition at line 164 of file eccrypto.h.

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

Definition at line 163 of file eccrypto.h.

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

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

Definition at line 642 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 94 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 overridden in a derived class.

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

Definition at line 567 of file eccrypto.cpp.

Here is the call graph for this function:

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

Definition at line 151 of file eccrypto.h.

Here is the caller graph for this function:

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

Definition at line 149 of file eccrypto.h.

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 108 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 125 of file eccrypto.h.

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

Definition at line 434 of file eccrypto.cpp.

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

Definition at line 146 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 96 of file eccrypto.h.

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.

Definition at line 469 of file eccrypto.cpp.

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 71 of file eccrypto.h.

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

Here is the call graph for this function:

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

Definition at line 126 of file eccrypto.h.

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

Definition at line 630 of file eccrypto.cpp.

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

Definition at line 153 of file eccrypto.h.

Here is the call graph for this function:

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

Definition at line 148 of file eccrypto.h.

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

Definition at line 145 of file eccrypto.h.

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

Definition at line 624 of file eccrypto.cpp.

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

Definition at line 128 of file eccrypto.h.

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

Definition at line 606 of file eccrypto.cpp.

Here is the call graph for this function:

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

Here is the call graph for this function:

Member Data Documentation

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

Definition at line 169 of file eccrypto.h.

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

Definition at line 169 of file eccrypto.h.

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

Definition at line 168 of file eccrypto.h.

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

Definition at line 167 of file eccrypto.h.

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

Definition at line 166 of file eccrypto.h.


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