Security Scol plugin
Public Member Functions | List of all members
XTR_DH Class Reference

XTR-DH with key validation. More...

#include <xtrcrypt.h>

Inheritance diagram for XTR_DH:
SimpleKeyAgreementDomain CryptoParameters KeyAgreementAlgorithm GeneratableCryptoMaterial AsymmetricAlgorithm CryptoMaterial Algorithm NameValuePairs Clonable

Public Member Functions

 XTR_DH (const Integer &p, const Integer &q, const GFP2Element &g)
 
 XTR_DH (RandomNumberGenerator &rng, unsigned int pbits, unsigned int qbits)
 
 XTR_DH (BufferedTransformation &domainParams)
 
void DEREncode (BufferedTransformation &domainParams) const
 
bool Validate (RandomNumberGenerator &rng, unsigned int level) const
 Check this object for errors.
 
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.
 
CryptoParametersAccessCryptoParameters ()
 Retrieves a reference to Crypto Parameters.
 
unsigned int AgreedValueLength () const
 Provides the size of the agreed value.
 
unsigned int PrivateKeyLength () const
 Provides the size of the private key.
 
unsigned int PublicKeyLength () const
 Provides the size of the public key.
 
void GeneratePrivateKey (RandomNumberGenerator &rng, byte *privateKey) const
 Generate private key in this domain.
 
void GeneratePublicKey (RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
 Generate a public key from a private key in this domain.
 
bool Agree (byte *agreedValue, const byte *privateKey, const byte *otherPublicKey, bool validateOtherPublicKey=true) const
 Derive agreed value.
 
const IntegerGetModulus () const
 
const IntegerGetSubgroupOrder () const
 
const GFP2ElementGetSubgroupGenerator () const
 
void SetModulus (const Integer &p)
 
void SetSubgroupOrder (const Integer &q)
 
void SetSubgroupGenerator (const GFP2Element &g)
 
- Public Member Functions inherited from SimpleKeyAgreementDomain
virtual void GenerateKeyPair (RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const
 Generate a private/public key pair.
 
- Public Member Functions inherited from KeyAgreementAlgorithm
CryptoMaterialAccessMaterial ()
 Retrieves a reference to Crypto Parameters.
 
const CryptoMaterialGetMaterial () const
 Retrieves a reference to Crypto Parameters.
 
virtual const CryptoParametersGetCryptoParameters () const
 Retrieves a reference to Crypto Parameters.
 
- Public Member Functions inherited from Algorithm
 Algorithm (bool checkSelfTestStatus=true)
 Interface for all crypto algorithms.
 
virtual std::string AlgorithmName () const
 Provides the name of this algorithm.
 
virtual std::string AlgorithmProvider () const
 Retrieve the provider of this algorithm.
 
- Public Member Functions inherited from Clonable
virtual ClonableClone () const
 Copies this object.
 
- Public Member Functions inherited from GeneratableCryptoMaterial
virtual void GenerateRandom (RandomNumberGenerator &rng, const NameValuePairs &params=g_nullNameValuePairs)
 Generate a random key or crypto parameters.
 
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.
 
virtual bool SupportsPrecomputation () const
 Determines whether the object supports precomputation.
 
virtual void Precompute (unsigned int precomputationStorage)
 Perform precomputation.
 
virtual void LoadPrecomputation (BufferedTransformation &storedPrecomputation)
 Retrieve previously saved precomputation.
 
virtual void SavePrecomputation (BufferedTransformation &storedPrecomputation) const
 Save precomputation for later use.
 
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.
 

Additional Inherited Members

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

Detailed Description

XTR-DH with key validation.

Definition at line 15 of file xtrcrypt.h.

Constructor & Destructor Documentation

◆ XTR_DH() [1/3]

XTR_DH::XTR_DH ( const Integer p,
const Integer q,
const GFP2Element g 
)

Definition at line 14 of file xtrcrypt.cpp.

◆ XTR_DH() [2/3]

XTR_DH::XTR_DH ( RandomNumberGenerator rng,
unsigned int  pbits,
unsigned int  qbits 
)

Definition at line 19 of file xtrcrypt.cpp.

◆ XTR_DH() [3/3]

XTR_DH::XTR_DH ( BufferedTransformation domainParams)

Definition at line 24 of file xtrcrypt.cpp.

Member Function Documentation

◆ AccessCryptoParameters()

CryptoParameters & XTR_DH::AccessCryptoParameters ( )
inlinevirtual

Retrieves a reference to Crypto Parameters.

Returns
a reference the crypto parameters

Implements KeyAgreementAlgorithm.

Definition at line 29 of file xtrcrypt.h.

◆ Agree()

bool XTR_DH::Agree ( byte agreedValue,
const byte privateKey,
const byte otherPublicKey,
bool  validateOtherPublicKey = true 
) const
virtual

Derive agreed value.

Parameters
agreedValuea byte buffer for the shared secret
privateKeya byte buffer with your private key in this domain
otherPublicKeya byte buffer with the other party's public key in this domain
validateOtherPublicKeya flag indicating if the other party's public key should be validated
Returns
true upon success, false in case of failure

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.

Precondition
COUNTOF(agreedValue) == AgreedValueLength()
COUNTOF(privateKey) == PrivateKeyLength()
COUNTOF(otherPublicKey) == PublicKeyLength()

Implements SimpleKeyAgreementDomain.

Definition at line 104 of file xtrcrypt.cpp.

◆ AgreedValueLength()

unsigned int XTR_DH::AgreedValueLength ( ) const
inlinevirtual

Provides the size of the agreed value.

Returns
size of agreed value produced in this domain

Implements SimpleKeyAgreementDomain.

Definition at line 30 of file xtrcrypt.h.

◆ AssignFrom()

void XTR_DH::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 81 of file xtrcrypt.cpp.

◆ DEREncode()

void XTR_DH::DEREncode ( BufferedTransformation domainParams) const

Definition at line 34 of file xtrcrypt.cpp.

◆ GeneratePrivateKey()

void XTR_DH::GeneratePrivateKey ( RandomNumberGenerator rng,
byte privateKey 
) const
virtual

Generate private key in this domain.

Parameters
rnga RandomNumberGenerator derived class
privateKeya byte buffer for the generated private key in this domain
Precondition
COUNTOF(privateKey) == PrivateKeyLength()

Implements SimpleKeyAgreementDomain.

Definition at line 90 of file xtrcrypt.cpp.

◆ GeneratePublicKey()

void XTR_DH::GeneratePublicKey ( RandomNumberGenerator rng,
const byte privateKey,
byte publicKey 
) const
virtual

Generate a public key from a private key in this domain.

Parameters
rnga RandomNumberGenerator derived class
privateKeya byte buffer with the previously generated private key
publicKeya byte buffer for the generated public key in this domain
Precondition
COUNTOF(publicKey) == PublicKeyLength()

Implements SimpleKeyAgreementDomain.

Definition at line 96 of file xtrcrypt.cpp.

◆ GetModulus()

const Integer & XTR_DH::GetModulus ( ) const
inline

Definition at line 38 of file xtrcrypt.h.

◆ GetSubgroupGenerator()

const GFP2Element & XTR_DH::GetSubgroupGenerator ( ) const
inline

Definition at line 40 of file xtrcrypt.h.

◆ GetSubgroupOrder()

const Integer & XTR_DH::GetSubgroupOrder ( ) const
inline

Definition at line 39 of file xtrcrypt.h.

◆ GetVoidValue()

bool XTR_DH::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 72 of file xtrcrypt.cpp.

◆ PrivateKeyLength()

unsigned int XTR_DH::PrivateKeyLength ( ) const
inlinevirtual

Provides the size of the private key.

Returns
size of private keys in this domain

Implements SimpleKeyAgreementDomain.

Definition at line 31 of file xtrcrypt.h.

◆ PublicKeyLength()

unsigned int XTR_DH::PublicKeyLength ( ) const
inlinevirtual

Provides the size of the public key.

Returns
size of public keys in this domain

Implements SimpleKeyAgreementDomain.

Definition at line 32 of file xtrcrypt.h.

◆ SetModulus()

void XTR_DH::SetModulus ( const Integer p)
inline

Definition at line 42 of file xtrcrypt.h.

◆ SetSubgroupGenerator()

void XTR_DH::SetSubgroupGenerator ( const GFP2Element g)
inline

Definition at line 44 of file xtrcrypt.h.

◆ SetSubgroupOrder()

void XTR_DH::SetSubgroupOrder ( const Integer q)
inline

Definition at line 43 of file xtrcrypt.h.

◆ Validate()

bool XTR_DH::Validate ( RandomNumberGenerator rng,
unsigned int  level 
) const
virtual

Check this object for errors.

Parameters
rnga RandomNumberGenerator for objects which use randomized testing
levelthe level 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.

See also
ThrowIfInvalid()

Implements CryptoMaterial.

Definition at line 44 of file xtrcrypt.cpp.


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