Crypto++ 8.9 Free C++ class library of cryptographic schemes

Public Types | Public Member Functions | Static Public Member Functions | List of all members
DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION > Class Template Reference

Diffie-Hellman domain. More...

Inheritance diagram for DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >:

## Public Types
typedef GROUP_PARAMETERS | GroupParameters
typedef GroupParameters::Element | Element
typedef DL_KeyAgreementAlgorithm_DH< Element, COFACTOR_OPTION > | DH_Algorithm
typedef DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION > | Domain
Public Types inherited from DL_SimpleKeyAgreementDomainBase< GROUP_PARAMETERS::Element >
typedef GROUP_PARAMETERS::Element | Element

## Public Member Functions
| DH_Domain ()
| Construct a Diffie-Hellman domain.
| DH_Domain (const GroupParameters &params)
| Construct a Diffie-Hellman domain. More...
| DH_Domain (BufferedTransformation &bt)
| Construct a Diffie-Hellman domain. More...
template<class T2 >
| DH_Domain (RandomNumberGenerator &v1, const T2 &v2)
| Create a Diffie-Hellman domain. More...
template<class T2 , class T3 >
| DH_Domain (RandomNumberGenerator &v1, const T2 &v2, const T3 &v3)
| Create a Diffie-Hellman domain. More...
template<class T2 , class T3 , class T4 >
| DH_Domain (RandomNumberGenerator &v1, const T2 &v2, const T3 &v3, const T4 &v4)
| Create a Diffie-Hellman domain. More...
template<class T1 , class T2 >
| DH_Domain (const T1 &v1, const T2 &v2)
| Construct a Diffie-Hellman domain. More...
template<class T1 , class T2 , class T3 >
| DH_Domain (const T1 &v1, const T2 &v2, const T3 &v3)
| Construct a Diffie-Hellman domain. More...
template<class T1 , class T2 , class T3 , class T4 >
| DH_Domain (const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4)
| Construct a Diffie-Hellman domain. More...
const GroupParameters & | GetGroupParameters () const
| Retrieves the group parameters for this domain. More...
GroupParameters & | AccessGroupParameters ()
| Retrieves the group parameters for 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...
std::string | AlgorithmName () const
| Provides the name of this algorithm. More...
Public Member Functions inherited from DL_SimpleKeyAgreementDomainBase< GROUP_PARAMETERS::Element >
CryptoParameters & | AccessCryptoParameters ()
| Retrieves a reference to 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...
const Element & | GetGenerator () const
| Retrieves a reference to the group generator. More...
Public Member Functions inherited from SimpleKeyAgreementDomain
virtual void | GenerateKeyPair (RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const
| Generate a private/public key pair. 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 const CryptoParameters & | GetCryptoParameters () const
| Retrieves a reference to Crypto Parameters. More...
Public Member Functions inherited from Algorithm
| Algorithm (bool checkSelfTestStatus=true)
| Interface for all crypto algorithms. 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...

## Static Public Member Functions
static std::string | StaticAlgorithmName ()

## Detailed Description

### template<class GROUP_PARAMETERS, class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
class DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >

Diffie-Hellman domain.

Template Parameters

  GROUP_PARAMETERS | group parameters
  COFACTOR_OPTION | cofactor multiplication option

A Diffie-Hellman domain is a set of parameters that must be shared by two parties in a key agreement protocol, along with the algorithms for generating key pairs and deriving agreed values.

For COFACTOR_OPTION, see CofactorMultiplicationOption.

See also
  DL_SimpleKeyAgreementDomainBase

Since
  Crypto++ 1.0

Definition at line 25 of file dh.h.

## Constructor & Destructor Documentation

## ◆ DH_Domain() [1/8]

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>

DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::DH_Domain | ( | const GroupParameters & | params | ) |
| inline

Construct a Diffie-Hellman domain.

Parameters

  params | group parameters and options

Definition at line 42 of file dh.h.

## ◆ DH_Domain() [2/8]

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>

DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::DH_Domain | ( | BufferedTransformation & | bt | ) |
| inline

Construct a Diffie-Hellman domain.

Parameters

  bt | BufferedTransformation with group parameters and options

Definition at line 47 of file dh.h.

## ◆ DH_Domain() [3/8]

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
template<class T2 >

DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::DH_Domain | ( | RandomNumberGenerator & | v1,
|  | const T2 & | v2
| ) |  |
| inline

Create a Diffie-Hellman domain.

Template Parameters

  T2 | template parameter used as a constructor parameter

Parameters

  v1 | RandomNumberGenerator derived class
  v2 | second parameter

v1 and v2 are passed directly to the GROUP_PARAMETERS object.

Definition at line 56 of file dh.h.

## ◆ DH_Domain() [4/8]

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
template<class T2 , class T3 >

DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::DH_Domain | ( | RandomNumberGenerator & | v1,
|  | const T2 & | v2,
|  | const T3 & | v3
| ) |  |
| inline

Create a Diffie-Hellman domain.

Template Parameters

  T2 | template parameter used as a constructor parameter
  T3 | template parameter used as a constructor parameter

Parameters

  v1 | RandomNumberGenerator derived class
  v2 | second parameter
  v3 | third parameter

v1, v2 and v3 are passed directly to the GROUP_PARAMETERS object.

Definition at line 67 of file dh.h.

## ◆ DH_Domain() [5/8]

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
template<class T2 , class T3 , class T4 >

DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::DH_Domain | ( | RandomNumberGenerator & | v1,
|  | const T2 & | v2,
|  | const T3 & | v3,
|  | const T4 & | v4
| ) |  |
| inline

Create a Diffie-Hellman domain.

Template Parameters

  T2 | template parameter used as a constructor parameter
  T3 | template parameter used as a constructor parameter
  T4 | template parameter used as a constructor parameter

Parameters

  v1 | RandomNumberGenerator derived class
  v2 | second parameter
  v3 | third parameter
  v4 | fourth parameter

v1, v2, v3 and v4 are passed directly to the GROUP_PARAMETERS object.

Definition at line 80 of file dh.h.

## ◆ DH_Domain() [6/8]

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
template<class T1 , class T2 >

DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::DH_Domain | ( | const T1 & | v1,
|  | const T2 & | v2
| ) |  |
| inline

Construct a Diffie-Hellman domain.

Template Parameters

  T1 | template parameter used as a constructor parameter
  T2 | template parameter used as a constructor parameter

Parameters

  v1 | first parameter
  v2 | second parameter

v1 and v2 are passed directly to the GROUP_PARAMETERS object.

Definition at line 90 of file dh.h.

## ◆ DH_Domain() [7/8]

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
template<class T1 , class T2 , class T3 >

DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::DH_Domain | ( | const T1 & | v1,
|  | const T2 & | v2,
|  | const T3 & | v3
| ) |  |
| inline

Construct a Diffie-Hellman domain.

Template Parameters

  T1 | template parameter used as a constructor parameter
  T2 | template parameter used as a constructor parameter
  T3 | template parameter used as a constructor parameter

Parameters

  v1 | first parameter
  v2 | second parameter
  v3 | third parameter

v1, v2 and v3 are passed directly to the GROUP_PARAMETERS object.

Definition at line 102 of file dh.h.

## ◆ DH_Domain() [8/8]

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
template<class T1 , class T2 , class T3 , class T4 >

DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::DH_Domain | ( | const T1 & | v1,
|  | const T2 & | v2,
|  | const T3 & | v3,
|  | const T4 & | v4
| ) |  |
| inline

Construct a Diffie-Hellman domain.

Template Parameters

  T1 | template parameter used as a constructor parameter
  T2 | template parameter used as a constructor parameter
  T3 | template parameter used as a constructor parameter
  T4 | template parameter used as a constructor parameter

Parameters

  v1 | first parameter
  v2 | second parameter
  v3 | third parameter
  v4 | fourth parameter

v1, v2, v3 and v4 are passed directly to the GROUP_PARAMETERS object.

Definition at line 116 of file dh.h.

## Member Function Documentation

## ◆ GetGroupParameters()

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>

const GroupParameters& DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::GetGroupParameters | ( |  | ) | const
| inline

Retrieves the group parameters for this domain.

Returns
  the group parameters for this domain as a const reference

Definition at line 121 of file dh.h.

## ◆ AccessGroupParameters()

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>

GroupParameters& DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::AccessGroupParameters | ( |  | ) |
| inline

Retrieves the group parameters for this domain.

Returns
  the group parameters for this domain as a non-const reference

Definition at line 124 of file dh.h.

## ◆ GeneratePublicKey()

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>

void DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::GeneratePublicKey | ( | RandomNumberGenerator & | rng,
|  | const byte * | privateKey,
|  | byte * | publicKey
| ) |  | const
| inline virtual

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

Parameters

  rng | RandomNumberGenerator derived class
  privateKey | byte buffer with the previously generated private key
  publicKey | byte buffer for the generated public key in this domain

If using a FIPS 140-2 validated library on Windows, then this class will perform a self test to ensure the key pair is pairwise consistent. Non-FIPS and non-Windows builds of the library do not provide FIPS validated cryptography, so the code should be removed by the optimizer.

Precondition
  `COUNTOF(publicKey) == PublicKeyLength()`

Implements SimpleKeyAgreementDomain.

Definition at line 135 of file dh.h.

## ◆ AlgorithmName()

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>

std::string DH_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::AlgorithmName | ( |  | ) | const
| inline virtual

Provides the name of this algorithm.

Returns
  the standard algorithm name

The standard algorithm name can be a name like `AES` or `AES/GCM`. Some algorithms do not have standard names yet. For example, there is no standard algorithm name for Shoup's ECIES.

Note
  AlgorithmName is not universally implemented yet.

Reimplemented from Algorithm.

Definition at line 158 of file dh.h.

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

- dh.h