Crypto++ 8.7
Free C++ class library of cryptographic schemes
|
x25519 with key validation More...
#include <xed25519.h>
Public Member Functions | |
x25519 () | |
Create a x25519 object. More... | |
x25519 (const byte y[PUBLIC_KEYLENGTH], const byte x[SECRET_KEYLENGTH]) | |
Create a x25519 object. More... | |
x25519 (const byte x[SECRET_KEYLENGTH]) | |
Create a x25519 object. More... | |
x25519 (const Integer &y, const Integer &x) | |
Create a x25519 object. More... | |
x25519 (const Integer &x) | |
Create a x25519 object. More... | |
x25519 (RandomNumberGenerator &rng) | |
Create a x25519 object. More... | |
x25519 (BufferedTransformation ¶ms) | |
Create a x25519 object. More... | |
x25519 (const OID &oid) | |
Create a x25519 object. More... | |
void | ClampKey (byte x[SECRET_KEYLENGTH]) const |
Clamp a private key. More... | |
bool | IsClamped (const byte x[SECRET_KEYLENGTH]) const |
Determine if private key is clamped. More... | |
bool | IsSmallOrder (const byte y[PUBLIC_KEYLENGTH]) const |
Test if a key has small order. More... | |
OID | GetAlgorithmID () const |
Get the Object Identifier. More... | |
void | SetAlgorithmID (const OID &oid) |
Set the Object Identifier. More... | |
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... | |
void | AssignFrom (const NameValuePairs &source) |
Assign values to this object. More... | |
CryptoParameters & | AccessCryptoParameters () |
Retrieves a reference to Crypto Parameters. More... | |
void | Save (BufferedTransformation &bt) const |
DER encode ASN.1 object. More... | |
void | Save (BufferedTransformation &bt, bool v1) const |
DER encode ASN.1 object. More... | |
void | Load (BufferedTransformation &bt) |
BER decode ASN.1 object. More... | |
void | BERDecode (BufferedTransformation &bt) |
Decode this object from a BufferedTransformation. More... | |
void | DEREncode (BufferedTransformation &bt) const |
Encode this object into a BufferedTransformation. More... | |
void | BERDecodePrivateKey (BufferedTransformation &bt, bool parametersPresent, size_t size) |
Decode privateKey part of privateKeyInfo. More... | |
void | DEREncodePrivateKey (BufferedTransformation &bt) const |
Encode privateKey part of privateKeyInfo. More... | |
void | DEREncode (BufferedTransformation &bt, int version) const |
DER encode ASN.1 object. More... | |
void | BERDecodeAndCheckAlgorithmID (BufferedTransformation &bt) |
Determine if OID is valid for this object. More... | |
void | GenerateRandom (RandomNumberGenerator &rng, const NameValuePairs ¶ms) |
Generate a random key or crypto parameters. More... | |
unsigned int | AgreedValueLength () const |
Provides the size of the agreed value. More... | |
unsigned int | PrivateKeyLength () const |
Provides the size of the private key. More... | |
unsigned int | PublicKeyLength () const |
Provides the size of the public key. More... | |
void | GeneratePrivateKey (RandomNumberGenerator &rng, byte *privateKey) const |
Generate private key in this domain. More... | |
void | GeneratePublicKey (RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const |
Generate a public key from a private key in this domain. More... | |
bool | Agree (byte *agreedValue, const byte *privateKey, const byte *otherPublicKey, bool validateOtherPublicKey=true) const |
Derive agreed value. More... | |
Public Member Functions inherited from SimpleKeyAgreementDomain | |
virtual unsigned int | AgreedValueLength () const =0 |
Provides the size of the agreed value. More... | |
virtual unsigned int | PrivateKeyLength () const =0 |
Provides the size of the private key. More... | |
virtual unsigned int | PublicKeyLength () const =0 |
Provides the size of the public key. More... | |
virtual void | GeneratePrivateKey (RandomNumberGenerator &rng, byte *privateKey) const =0 |
Generate private key in this domain. More... | |
virtual void | GeneratePublicKey (RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const =0 |
Generate a public key from a private key in this domain. More... | |
virtual void | GenerateKeyPair (RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const |
Generate a private/public key pair. More... | |
virtual bool | Agree (byte *agreedValue, const byte *privateKey, const byte *otherPublicKey, bool validateOtherPublicKey=true) const =0 |
Derive agreed value. More... | |
Public Member Functions inherited from KeyAgreementAlgorithm | |
CryptoMaterial & | AccessMaterial () |
Retrieves a reference to Crypto Parameters. More... | |
const CryptoMaterial & | GetMaterial () const |
Retrieves a reference to Crypto Parameters. More... | |
virtual CryptoParameters & | AccessCryptoParameters ()=0 |
Retrieves a reference to Crypto Parameters. More... | |
virtual const CryptoParameters & | GetCryptoParameters () const |
Retrieves a reference to Crypto Parameters. More... | |
virtual CryptoMaterial & | AccessMaterial ()=0 |
Retrieves a reference to CryptoMaterial. More... | |
virtual const CryptoMaterial & | GetMaterial () const =0 |
Retrieves a reference to CryptoMaterial. More... | |
Public Member Functions inherited from Algorithm | |
Algorithm (bool checkSelfTestStatus=true) | |
Interface for all crypto algorithms. More... | |
virtual std::string | AlgorithmName () const |
Provides the name of this algorithm. More... | |
virtual std::string | AlgorithmProvider () const |
Retrieve the provider of this algorithm. More... | |
Public Member Functions inherited from Clonable | |
virtual Clonable * | Clone () const |
Copies this object. More... | |
Public Member Functions inherited from GeneratableCryptoMaterial | |
virtual void | GenerateRandom (RandomNumberGenerator &rng, const NameValuePairs ¶ms=g_nullNameValuePairs) |
Generate a random key or crypto parameters. More... | |
void | GenerateRandomWithKeySize (RandomNumberGenerator &rng, unsigned int keySize) |
Generate a random key or crypto parameters. More... | |
Public Member Functions inherited from CryptoMaterial | |
virtual void | AssignFrom (const NameValuePairs &source)=0 |
Assign values to this object. More... | |
virtual bool | Validate (RandomNumberGenerator &rng, unsigned int level) const =0 |
Check this object for errors. More... | |
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... | |
virtual bool | SupportsPrecomputation () const |
Determines whether the object supports precomputation. More... | |
virtual void | Precompute (unsigned int precomputationStorage) |
Perform precomputation. More... | |
virtual void | LoadPrecomputation (BufferedTransformation &storedPrecomputation) |
Retrieve previously saved precomputation. More... | |
virtual void | SavePrecomputation (BufferedTransformation &storedPrecomputation) const |
Save precomputation for later use. 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 > | |
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... | |
virtual CRYPTOPP_DLL bool | GetVoidValue (const char *name, const std::type_info &valueType, void *pValue) const =0 |
Get a named value. More... | |
Public Member Functions inherited from PKCS8PrivateKey | |
void | BERDecode (BufferedTransformation &bt) |
Decode this object from a BufferedTransformation. More... | |
void | DEREncode (BufferedTransformation &bt) const |
Encode this object into a BufferedTransformation. More... | |
virtual OID | GetAlgorithmID () const =0 |
Retrieves the OID of the algorithm. More... | |
virtual bool | BERDecodeAlgorithmParameters (BufferedTransformation &bt) |
Decode optional parameters. More... | |
virtual bool | DEREncodeAlgorithmParameters (BufferedTransformation &bt) const |
Encode optional parameters. More... | |
virtual void | BERDecodePrivateKey (BufferedTransformation &bt, bool parametersPresent, size_t size)=0 |
Decode privateKey part of privateKeyInfo. More... | |
virtual void | DEREncodePrivateKey (BufferedTransformation &bt) const =0 |
Encode privateKey part of privateKeyInfo. More... | |
virtual void | BERDecodeOptionalAttributes (BufferedTransformation &bt) |
Decode optional attributes. More... | |
virtual void | DEREncodeOptionalAttributes (BufferedTransformation &bt) const |
Encode optional attributes. More... | |
Public Member Functions inherited from ASN1CryptoMaterial< PrivateKey > | |
void | Save (BufferedTransformation &bt) const |
DER encode ASN.1 object. More... | |
void | Load (BufferedTransformation &bt) |
BER decode ASN.1 object. More... | |
Public Member Functions inherited from ASN1Object | |
virtual void | BERDecode (BufferedTransformation &bt)=0 |
Decode this object from a BufferedTransformation. More... | |
virtual void | DEREncode (BufferedTransformation &bt) const =0 |
Encode this object into a BufferedTransformation. More... | |
virtual void | BEREncode (BufferedTransformation &bt) const |
Encode this object into a BufferedTransformation. More... | |
Static Public Attributes | |
static const int | SECRET_KEYLENGTH = 32 |
Size of the private key. More... | |
static const int | PUBLIC_KEYLENGTH = 32 |
Size of the public key. More... | |
static const int | SHARED_KEYLENGTH = 32 |
Size of the shared key. More... | |
Additional Inherited Members | |
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... | |
|
inlinevirtual |
Definition at line 67 of file xed25519.h.
|
inline |
Create a x25519 object.
This constructor creates an empty x25519 object. It is intended for use in loading existing parameters, like CryptoBox parameters. If you are performing key agreement you should use a constructor that generates random parameters on construction.
Definition at line 74 of file xed25519.h.
Create a x25519 object.
y | public key |
x | private key |
This constructor creates a x25519 object using existing parameters.
Definition at line 74 of file xed25519.cpp.
x25519::x25519 | ( | const byte | x[SECRET_KEYLENGTH] | ) |
Create a x25519 object.
x | private key |
This constructor creates a x25519 object using existing parameters. The public key is calculated from the private key.
Definition at line 83 of file xed25519.cpp.
Create a x25519 object.
y | public key |
x | private key |
This constructor creates a x25519 object using existing parameters.
Definition at line 92 of file xed25519.cpp.
x25519::x25519 | ( | const Integer & | x | ) |
Create a x25519 object.
x | private key |
This constructor creates a x25519 object using existing parameters. The public key is calculated from the private key.
Definition at line 104 of file xed25519.cpp.
x25519::x25519 | ( | RandomNumberGenerator & | rng | ) |
Create a x25519 object.
rng | RandomNumberGenerator derived class |
This constructor creates a new x25519 using the random number generator.
Definition at line 116 of file xed25519.cpp.
x25519::x25519 | ( | BufferedTransformation & | params | ) |
Create a x25519 object.
params | public and private key |
This constructor creates a x25519 object using existing parameters. The params
can be created with Save
.
Definition at line 123 of file xed25519.cpp.
x25519::x25519 | ( | const OID & | oid | ) |
void x25519::ClampKey | ( | byte | x[SECRET_KEYLENGTH] | ) | const |
Clamp a private key.
x | private key |
ClampKeys() clamps a private key and then regenerates the public key from the private key.
Definition at line 128 of file xed25519.cpp.
bool x25519::IsClamped | ( | const byte | x[SECRET_KEYLENGTH] | ) | const |
Determine if private key is clamped.
x | private key |
Definition at line 133 of file xed25519.cpp.
bool x25519::IsSmallOrder | ( | const byte | y[PUBLIC_KEYLENGTH] | ) | const |
|
inlinevirtual |
Get the Object Identifier.
The default OID is from RFC 8410 using id-X25519
. The default private key format is RFC 5208.
Implements PKCS8PrivateKey.
Definition at line 138 of file xed25519.h.
|
inline |
Set the Object Identifier.
oid | the new Object Identifier |
Definition at line 144 of file xed25519.h.
|
virtual |
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.
Definition at line 267 of file xed25519.cpp.
|
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() retrieves the value of name if it exists.
Implements NameValuePairs.
Definition at line 290 of file xed25519.cpp.
|
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 319 of file xed25519.cpp.
|
inlinevirtual |
Retrieves a reference to Crypto Parameters.
Implements KeyAgreementAlgorithm.
Definition at line 154 of file xed25519.h.
|
inlinevirtual |
DER encode ASN.1 object.
bt | BufferedTransformation object |
Save() will write the OID associated with algorithm or scheme. In the case of public and private keys, this function writes the subjectPublicKeyInfo parts.
The default OID is from RFC 8410 using id-X25519
. The default private key format is RFC 5208, which is the old format. The old format provides the best interop, and keys will work with OpenSSL.
Reimplemented from CryptoMaterial.
Definition at line 167 of file xed25519.h.
|
inline |
DER encode ASN.1 object.
bt | BufferedTransformation object |
v1 | flag indicating v1 |
Save() will write the OID associated with algorithm or scheme. In the case of public and private keys, this function writes the subjectPublicKeyInfo parts.
The default OID is from RFC 8410 using id-X25519
. The default private key format is RFC 5208.
v1 means INTEGER 0 is written. INTEGER 0 means RFC 5208 format, which is the old format. The old format provides the best interop, and keys will work with OpenSSL. The other option uses INTEGER 1. INTEGER 1 means RFC 5958 format, which is the new format.
Definition at line 186 of file xed25519.h.
|
inlinevirtual |
BER decode ASN.1 object.
bt | BufferedTransformation object |
Reimplemented from CryptoMaterial.
Definition at line 194 of file xed25519.h.
|
virtual |
Decode this object from a BufferedTransformation.
bt | BufferedTransformation object |
Uses Basic Encoding Rules (BER)
Reimplemented from PKCS8PrivateKey.
Definition at line 166 of file xed25519.cpp.
|
inlinevirtual |
Encode this object into a BufferedTransformation.
bt | BufferedTransformation object |
Uses Distinguished Encoding Rules (DER)
Reimplemented from PKCS8PrivateKey.
Definition at line 200 of file xed25519.h.
|
virtual |
Decode privateKey part of privateKeyInfo.
bt | BufferedTransformation object |
parametersPresent | flag indicating if algorithm parameters are present |
size | number of octets to read for the parameters, in bytes |
BERDecodePrivateKey() the decodes privateKey part of privateKeyInfo, without the OCTET STRING header.
When parametersPresent = true
then BERDecodePrivateKey() calls BERDecodeAlgorithmParameters() to parse algorithm parameters.
Implements PKCS8PrivateKey.
Definition at line 238 of file xed25519.cpp.
|
virtual |
Encode privateKey part of privateKeyInfo.
bt | BufferedTransformation object |
DEREncodePrivateKey() encodes the privateKey part of privateKeyInfo, without the OCTET STRING header.
Implements PKCS8PrivateKey.
Definition at line 259 of file xed25519.cpp.
void x25519::DEREncode | ( | BufferedTransformation & | bt, |
int | version | ||
) | const |
DER encode ASN.1 object.
bt | BufferedTransformation object |
version | indicates version |
DEREncode() will write the OID associated with algorithm or scheme. In the case of public and private keys, this function writes the subjectPublicKeyInfo parts.
The default OID is from RFC 8410 using id-X25519
. The default private key format is RFC 5208.
The value of version is written as the INTEGER. INTEGER 0 means RFC 5208 format, which is the old format. The old format provides the best interop, and keys will work with OpenSSL. The INTEGER 1 means RFC 5958 format, which is the new format.
Definition at line 211 of file xed25519.cpp.
void x25519::BERDecodeAndCheckAlgorithmID | ( | BufferedTransformation & | bt | ) |
Determine if OID is valid for this object.
BERDecodeAndCheckAlgorithmID() parses the OID from bt
and determines if it valid for this object. The problem in practice is there are multiple OIDs available to denote curve25519 operations. The OIDs include an old GNU OID used by SSH, OIDs specified in draft-josefsson-pkix-newcurves, and OIDs specified in draft-ietf-curdle-pkix.
By default BERDecodeAndCheckAlgorithmID() accepts an OID set by the user, ASN1::curve25519()
and ASN1::X25519()
. ASN1::curve25519()
is generic and says "this key is valid for
curve25519 operations". ASN1::X25519()
is specific and says "this key is valid for x25519 key exchange."
Definition at line 148 of file xed25519.cpp.
|
virtual |
Generate a random key or crypto parameters.
rng | a RandomNumberGenerator to produce keying material |
params | additional initialization parameters |
KeyingErr | if a key can't be generated or algorithm parameters are invalid |
If a derived class does not override GenerateRandom(), then the base class throws NotImplemented.
Reimplemented from GeneratableCryptoMaterial.
Definition at line 343 of file xed25519.cpp.
|
inlinevirtual |
Provides the size of the agreed value.
Implements SimpleKeyAgreementDomain.
Definition at line 236 of file xed25519.h.
|
inlinevirtual |
Provides the size of the private key.
Implements SimpleKeyAgreementDomain.
Definition at line 237 of file xed25519.h.
|
inlinevirtual |
Provides the size of the public key.
Implements SimpleKeyAgreementDomain.
Definition at line 238 of file xed25519.h.
|
virtual |
Generate private key in this domain.
rng | a RandomNumberGenerator derived class |
privateKey | a byte buffer for the generated private key in this domain |
COUNTOF(privateKey) == PrivateKeyLength()
Implements SimpleKeyAgreementDomain.
Definition at line 354 of file xed25519.cpp.
|
virtual |
Generate a public key from a private key in this domain.
rng | a RandomNumberGenerator derived class |
privateKey | a byte buffer with the previously generated private key |
publicKey | a byte buffer for the generated public key in this domain |
COUNTOF(publicKey) == PublicKeyLength()
Implements SimpleKeyAgreementDomain.
Definition at line 360 of file xed25519.cpp.
|
virtual |
Derive agreed value.
agreedValue | a byte buffer for the shared secret |
privateKey | a byte buffer with your private key in this domain |
otherPublicKey | a byte buffer with the other party's public key in this domain |
validateOtherPublicKey | a flag indicating if the other party's public key should be validated |
Agree() derives an agreed value from your private keys and couterparty's public keys.
The other party's public key is validated by default. If you have previously validated the static public key, use validateStaticOtherPublicKey=false
to save time.
COUNTOF(agreedValue) == AgreedValueLength()
COUNTOF(privateKey) == PrivateKeyLength()
COUNTOF(otherPublicKey) == PublicKeyLength()
Implements SimpleKeyAgreementDomain.
Definition at line 366 of file xed25519.cpp.
|
static |
Size of the private key.
SECRET_KEYLENGTH is the size of the private key, in bytes.
Definition at line 59 of file xed25519.h.
|
static |
Size of the public key.
PUBLIC_KEYLENGTH is the size of the public key, in bytes.
Definition at line 62 of file xed25519.h.
|
static |
Size of the shared key.
SHARED_KEYLENGTH is the size of the shared key, in bytes.
Definition at line 65 of file xed25519.h.