Elliptic Curve Parameters. More...
Public Types | |
typedef EC | EllipticCurve |
typedef EllipticCurve::Point | Point |
typedef Point | Element |
typedef IncompatibleCofactorMultiplication | DefaultCofactorOption |
typedef EC | EllipticCurve |
typedef EllipticCurve::Point | Point |
typedef Point | Element |
typedef IncompatibleCofactorMultiplication | DefaultCofactorOption |
typedef EcPrecomputation< EC > | GroupPrecomputation |
typedef DL_FixedBasePrecomputationImpl < typenameEcPrecomputation< EC > ::Element > | BasePrecomputation |
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. | |
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 |
DL_FixedBasePrecomputation < Element > & | AccessBasePrecomputation () |
const Integer & | GetSubgroupOrder () const |
Integer | GetCofactor () const |
bool | ValidateGroup (RandomNumberGenerator &rng, unsigned int level) const |
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 |
Element | DecodeElement (const byte *encoded, bool checkForGroupMembership) const |
Integer | ConvertElementToInteger (const Element &element) const |
Integer | GetMaxExponent () const |
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 |
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. | |
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 |
DL_FixedBasePrecomputation < Element > & | AccessBasePrecomputation () |
const Integer & | GetSubgroupOrder () const |
Integer | GetCofactor () const |
bool | ValidateGroup (RandomNumberGenerator &rng, unsigned int level) const |
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 |
Element | DecodeElement (const byte *encoded, bool checkForGroupMembership) const |
Integer | ConvertElementToInteger (const Element &element) const |
Integer | GetMaxExponent () const |
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 |
const DL_GroupPrecomputation < Element > & | GetGroupPrecomputation () const |
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 |
virtual void | SetSubgroupGenerator (const Element &base) |
virtual Element | ExponentiateBase (const Integer &exponent) const |
virtual Element | ExponentiateElement (const Element &base, const Integer &exponent) const |
virtual Integer | GetGroupOrder () const |
virtual void | EncodeElement (bool reversible, const Element &element, byte *encoded) const =0 |
virtual Integer | ConvertElementToInteger (const Element &element) const =0 |
virtual bool | ValidateElement (unsigned int level, const Element &element, const DL_FixedBasePrecomputation< Element > *precomp) const =0 |
virtual bool | IsIdentity (const Element &element) const =0 |
virtual void | SimultaneousExponentiate (Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const =0 |
void | GenerateRandomWithKeySize (RandomNumberGenerator &rng, unsigned int keySize) |
Generate a random key or crypto parameters. | |
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 |
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 > | |
T | GetValueWithDefault (const char *name, T defaultValue) const |
Get a named value. | |
std::string | GetValueNames () const |
Get a list of value names that can be retrieved. | |
bool | GetIntValue (const char *name, int &value) const |
Get a named value with type int. | |
int | GetIntValueWithDefault (const char *name, int defaultValue) const |
Get a named value with type int, with default. | |
template<class T > | |
void | GetRequiredParameter (const char *className, const char *name, T &value) const |
Retrieves a required name/value pair. | |
void | GetRequiredIntParameter (const char *className, const char *name, int &value) const |
Retrieves a required name/value pair. | |
Static Public Member Functions | |
static std::string | StaticAlgorithmNamePrefix () |
static OID | GetNextRecommendedParametersOID (const OID &oid) |
static std::string | StaticAlgorithmNamePrefix () |
static OID | GetNextRecommendedParametersOID (const OID &oid) |
static void | ThrowIfTypeMismatch (const char *name, const std::type_info &stored, const std::type_info &retrieving) |
Ensures an expected name and type is present. |
Elliptic Curve Parameters.
This class corresponds to the ASN.1 sequence of the same name in ANSI X9.62 (also SEC 1).
Definition at line 29 of file eccrypto.h.
bool DL_GroupParameters_EC< EC >::GetVoidValue | ( | const char * | name, | |
const std::type_info & | valueType, | |||
void * | pValue | |||
) | const [inline, virtual] |
Get a named value.
name | the name of the object or value to retrieve | |
valueType | reference to a variable that receives the value | |
pValue | void pointer to a variable that receives the value |
GetVoidValue() retrives the value of name if it exists.
Reimplemented from DL_GroupParameters< typenameEcPrecomputation< EC >::Element >.
Definition at line 468 of file eccrypto.cpp.
References Curve(), GroupOID(), and NameValuePairs::ThrowIfTypeMismatch().
void DL_GroupParameters_EC< EC >::AssignFrom | ( | const NameValuePairs & | source | ) | [inline, 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.
References Cofactor(), Curve(), NameValuePairs::GetRequiredParameter(), NameValuePairs::GetValue(), NameValuePairs::GetValueWithDefault(), GroupOID(), SubgroupGenerator(), SubgroupOrder(), and Integer::Zero().
Referenced by DL_GroupParameters_EC< EC >::GenerateRandom().
void DL_GroupParameters_EC< EC >::GenerateRandom | ( | RandomNumberGenerator & | rng, | |
const NameValuePairs & | alg | |||
) | [inline, 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.
References DL_GroupParameters_EC< EC >::AssignFrom().
bool DL_GroupParameters_EC< EC >::GetVoidValue | ( | const char * | name, | |
const std::type_info & | valueType, | |||
void * | pValue | |||
) | const [virtual] |
Get a named value.
name | the name of the object or value to retrieve | |
valueType | reference to a variable that receives the value | |
pValue | void pointer to a variable that receives the value |
GetVoidValue() retrives the value of name if it exists.
Reimplemented from DL_GroupParameters< typenameEcPrecomputation< EC >::Element >.
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.
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.
bool DL_GroupParameters< typenameEcPrecomputation< EC >::Element >::Validate | ( | RandomNumberGenerator & | rng, | |
unsigned int | level | |||
) | const [inline, virtual, inherited] |
Check this object for errors.
rng | a RandomNumberGenerator for objects which use randomized testing | |
level | the level of thoroughness |
There are four levels of thoroughness:
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.
Implements CryptoMaterial.
bool DL_GroupParameters< typenameEcPrecomputation< EC >::Element >::SupportsPrecomputation | ( | ) | const [inline, virtual, inherited] |
Determines whether the object supports precomputation.
Reimplemented from CryptoMaterial.
void DL_GroupParameters< typenameEcPrecomputation< EC >::Element >::Precompute | ( | unsigned int | precomputationStorage = 16 |
) | [inline, virtual, inherited] |
Perform precomputation.
precomputationStorage | the suggested number of objects for the precompute table |
NotImplemented |
The exact semantics of Precompute() varies, but it typically means calculate a table of n objects that can be used later to speed up computation.
If a derived class does not override Precompute, then the base class throws NotImplemented.
Reimplemented from CryptoMaterial.
void GeneratableCryptoMaterial::GenerateRandomWithKeySize | ( | RandomNumberGenerator & | rng, | |
unsigned int | keySize | |||
) | [inherited] |
Generate a random key or crypto parameters.
rng | a RandomNumberGenerator to produce keying material | |
keySize | the size of the key, in bits |
KeyingErr | if a key can't be generated or algorithm parameters are invalid |
GenerateRandomWithKeySize calls GenerateRandom with a NameValuePairs object with only "KeySize"
Definition at line 771 of file cryptlib.cpp.
References GeneratableCryptoMaterial::GenerateRandom(), and MakeParameters().
virtual void CryptoMaterial::ThrowIfInvalid | ( | RandomNumberGenerator & | rng, | |
unsigned int | level | |||
) | const [inline, virtual, inherited] |
Check this object for errors.
rng | a RandomNumberGenerator for objects which use randomized testing | |
level | the level of thoroughness |
InvalidMaterial |
Internally, ThrowIfInvalid() calls Validate() and throws InvalidMaterial if validation fails.
Definition at line 1939 of file cryptlib.h.
virtual void CryptoMaterial::Save | ( | BufferedTransformation & | bt | ) | const [inline, virtual, inherited] |
Saves a key to a BufferedTransformation.
bt | the destination BufferedTransformation |
NotImplemented |
Save writes the material to a BufferedTransformation.
If the material is a key, then the key is written with ASN.1 DER encoding. The key includes an object identifier with an algorthm id, like a subjectPublicKeyInfo.
A "raw" key without the "key info" can be saved using a key's DEREncode method.
If a derived class does not override Save, then the base class throws NotImplemented.
Reimplemented in InvertibleRSAFunction, RWFunction, and InvertibleRWFunction.
Definition at line 1951 of file cryptlib.h.
virtual void CryptoMaterial::Load | ( | BufferedTransformation & | bt | ) | [inline, virtual, inherited] |
Loads a key from a BufferedTransformation.
bt | the source BufferedTransformation |
KeyingErr |
Load attempts to read material from a BufferedTransformation. If the material is a key that was generated outside the library, then the following usually applies:
"key info" means the key should have an object identifier with an algorthm id, like a subjectPublicKeyInfo.
To read a "raw" key without the "key info", then call the key's BERDecode method.
Reimplemented in InvertibleRSAFunction, RWFunction, and InvertibleRWFunction.
Definition at line 1968 of file cryptlib.h.
bool NameValuePairs::GetThisObject | ( | T & | object | ) | const [inline, inherited] |
Get a copy of this object or subobject.
T | class or type |
object | reference to a variable that receives the value |
Definition at line 297 of file cryptlib.h.
Referenced by DL_PrivateKeyImpl< DL_GroupParameters_EC< EC > >::GenerateRandom().
bool NameValuePairs::GetThisPointer | ( | T *& | ptr | ) | const [inline, inherited] |
Get a pointer to this object.
T | class or type |
ptr | reference to a pointer to a variable that receives the value |
Definition at line 306 of file cryptlib.h.
bool NameValuePairs::GetValue | ( | const char * | name, | |
T & | value | |||
) | const [inline, inherited] |
Get a named value.
T | class or type |
name | the name of the object or value to retrieve | |
value | reference to a variable that receives the value |
Definition at line 319 of file cryptlib.h.
Referenced by DL_GroupParameters_EC< EC >::AssignFrom(), DL_GroupParameters_IntegerBased::GenerateRandom(), DL_GroupParameters_DSA::GenerateRandom(), InvertibleESIGNFunction::GenerateRandom(), Inflator::IsolatedInitialize(), StringSinkTemplate< T >::IsolatedInitialize(), ArraySink::IsolatedInitialize(), FileSink::IsolatedInitialize(), and Grouper::IsolatedInitialize().
T NameValuePairs::GetValueWithDefault | ( | const char * | name, | |
T | defaultValue | |||
) | const [inline, inherited] |
Get a named value.
T | class or type |
name | the name of the object or value to retrieve | |
defaultValue | the default value of the class or type if it does not exist |
Definition at line 332 of file cryptlib.h.
Referenced by DL_GroupParameters_EC< EC >::AssignFrom(), InvertibleRSAFunction::GenerateRandom(), InvertibleLUCFunction::GenerateRandom(), DL_GroupParameters_IntegerBased::GenerateRandom(), DL_GroupParameters_DSA::GenerateRandom(), InvertibleESIGNFunction::GenerateRandom(), Redirector::Initialize(), Deflator::IsolatedInitialize(), SignerFilter::IsolatedInitialize(), HashFilter::IsolatedInitialize(), FileSink::IsolatedInitialize(), and Base64URLEncoder::IsolatedInitialize().
std::string NameValuePairs::GetValueNames | ( | ) | const [inline, inherited] |
Get a list of value names that can be retrieved.
the items in the list are delimited with a colon.
Definition at line 344 of file cryptlib.h.
bool NameValuePairs::GetIntValue | ( | const char * | name, | |
int & | value | |||
) | const [inline, inherited] |
Get a named value with type int.
name | the name of the value to retrieve | |
value | the value retrieved upon success |
GetIntValue() is used to ensure we don't accidentally try to get an unsigned int or some other type when we mean int (which is the most common case)
Definition at line 355 of file cryptlib.h.
Referenced by InvertibleRWFunction::GenerateRandom(), InvertibleRSAFunction::GenerateRandom(), InvertibleRabinFunction::GenerateRandom(), InvertibleLUCFunction::GenerateRandom(), DL_GroupParameters_IntegerBased::GenerateRandom(), DL_GroupParameters_DSA::GenerateRandom(), and InvertibleESIGNFunction::GenerateRandom().
int NameValuePairs::GetIntValueWithDefault | ( | const char * | name, | |
int | defaultValue | |||
) | const [inline, inherited] |
Get a named value with type int, with default.
name | the name of the value to retrieve | |
defaultValue | the default value if the name does not exist |
Definition at line 364 of file cryptlib.h.
Referenced by DL_GroupParameters_IntegerBased::GenerateRandom(), Redirector::Initialize(), Deflator::IsolatedInitialize(), ByteQueue::IsolatedInitialize(), HashFilter::IsolatedInitialize(), Grouper::IsolatedInitialize(), Base64URLEncoder::IsolatedInitialize(), VMAC_Base::UncheckedSetKey(), SAFER::Base::UncheckedSetKey(), and Weak1::ARC4_Base::UncheckedSetKey().
static void NameValuePairs::ThrowIfTypeMismatch | ( | const char * | name, | |
const std::type_info & | stored, | |||
const std::type_info & | retrieving | |||
) | [inline, static, inherited] |
Ensures an expected name and type is present.
name | the name of the value | |
stored | the type that was stored for the name | |
retrieving | the type that is being retrieved for the name |
ValueTypeMismatch |
ThrowIfTypeMismatch() effectively performs a type safety check. stored and retrieving are C++ mangled names for the type.
Definition at line 376 of file cryptlib.h.
Referenced by DL_GroupParameters_EC< EC >::GetVoidValue().
void NameValuePairs::GetRequiredParameter | ( | const char * | className, | |
const char * | name, | |||
T & | value | |||
) | const [inline, inherited] |
Retrieves a required name/value pair.
T | class or type |
className | the name of the class | |
name | the name of the value | |
value | reference to a variable to receive the value |
InvalidArgument |
GetRequiredParameter() throws InvalidArgument if the name is not present or not of the expected type T.
Definition at line 390 of file cryptlib.h.
Referenced by DL_GroupParameters_EC< EC >::AssignFrom(), RandomNumberSink::IsolatedInitialize(), Grouper::IsolatedInitialize(), and BaseN_Decoder::IsolatedInitialize().
void NameValuePairs::GetRequiredIntParameter | ( | const char * | className, | |
const char * | name, | |||
int & | value | |||
) | const [inline, inherited] |
Retrieves a required name/value pair.
className | the name of the class | |
name | the name of the value | |
value | reference to a variable to receive the value |
InvalidArgument |
GetRequiredParameter() throws InvalidArgument if the name is not present or not of the expected type T.
Definition at line 405 of file cryptlib.h.
Referenced by BaseN_Decoder::IsolatedInitialize().