AuthenticatedKeyAgreementDomain Class Referenceabstract

Interface for domains of authenticated key agreement protocols. More...

Inheritance diagram for AuthenticatedKeyAgreementDomain:

## Public Member Functions

virtual unsigned int | AgreedValueLength () const =0
| Provides the size of the agreed value. More...
virtual unsigned int | StaticPrivateKeyLength () const =0
| Provides the size of the static private key. More...
virtual unsigned int | StaticPublicKeyLength () const =0
| Provides the size of the static public key. More...
virtual void | GenerateStaticPrivateKey (RandomNumberGenerator &rng, byte *privateKey) const =0
| Generate static private key in this domain. More...
virtual void | GenerateStaticPublicKey (RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const =0
| Generate a static public key from a private key in this domain. More...
virtual void | GenerateStaticKeyPair (RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const
| Generate a static private/public key pair. More...
virtual unsigned int | EphemeralPrivateKeyLength () const =0
| Provides the size of ephemeral private key. More...
virtual unsigned int | EphemeralPublicKeyLength () const =0
| Provides the size of ephemeral public key. More...
virtual void | GenerateEphemeralPrivateKey (RandomNumberGenerator &rng, byte *privateKey) const =0
| Generate ephemeral private key. More...
virtual void | GenerateEphemeralPublicKey (RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const =0
| Generate ephemeral public key. More...
virtual void | GenerateEphemeralKeyPair (RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const
| Generate private/public key pair. More...
virtual bool | Agree (byte *agreedValue, const byte *staticPrivateKey, const byte *ephemeralPrivateKey, const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey, bool validateStaticOtherPublicKey=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...
Public Member Functions inherited from AsymmetricAlgorithm
void | BERDecode (BufferedTransformation &bt)
| Loads this object from a BufferedTransformation. More...
void | DEREncode (BufferedTransformation &bt) const
| Saves this object to a BufferedTransformation. 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...
Public Member Functions inherited from Clonable
virtual Clonable * | Clone () const
| Copies this object. More...

## Detailed Description

Interface for domains of authenticated key agreement protocols.

In an authenticated key agreement protocol, each party has two key pairs. The long-lived key pair is called the static key pair, and the short-lived key pair is called the ephemeral key pair.

Definition at line 2747 of file cryptlib.h.

## Member Function Documentation

## AgreedValueLength()

virtual unsigned int AuthenticatedKeyAgreementDomain::AgreedValueLength | ( |  | ) | const

pure virtual

Provides the size of the agreed value.

Returns
  size of agreed value produced in this domain

Implemented in MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >, FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, and DH2.

## StaticPrivateKeyLength()

virtual unsigned int AuthenticatedKeyAgreementDomain::StaticPrivateKeyLength | ( |  | ) | const

pure virtual

Provides the size of the static private key.

Returns
  size of static private keys in this domain

Implemented in MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >, FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, and DH2.

## StaticPublicKeyLength()

virtual unsigned int AuthenticatedKeyAgreementDomain::StaticPublicKeyLength | ( |  | ) | const

pure virtual

Provides the size of the static public key.

Returns
  size of static public keys in this domain

Implemented in MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >, FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, and DH2.

## GenerateStaticPrivateKey()

virtual void AuthenticatedKeyAgreementDomain::GenerateStaticPrivateKey | ( | RandomNumberGenerator & | rng,
|  | byte * | privateKey
| ) |  | const

pure virtual

Generate static private key in this domain.

Parameters

  rng | a RandomNumberGenerator derived class
  privateKey | a byte buffer for the generated private key in this domain

Precondition
  `COUNTOF(privateKey) == PrivateStaticKeyLength()`

Implemented in MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >, FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, and DH2.

## GenerateStaticPublicKey()

virtual void AuthenticatedKeyAgreementDomain::GenerateStaticPublicKey | ( | RandomNumberGenerator & | rng,
|  | const byte * | privateKey,
|  | byte * | publicKey
| ) |  | const

pure virtual

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

Parameters

  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

Precondition
  `COUNTOF(publicKey) == PublicStaticKeyLength()`

Implemented in MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >, FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, and DH2.

## GenerateStaticKeyPair()

void AuthenticatedKeyAgreementDomain::GenerateStaticKeyPair | ( | RandomNumberGenerator & | rng,
|  | byte * | privateKey,
|  | byte * | publicKey
| ) |  | const

virtual

Generate a static private/public key pair.

Parameters

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

GenerateStaticKeyPair() is equivalent to calling GenerateStaticPrivateKey() and then GenerateStaticPublicKey().

Precondition
  `COUNTOF(privateKey) == PrivateStaticKeyLength()`
  `COUNTOF(publicKey) == PublicStaticKeyLength()`

Reimplemented in DH2.

Definition at line 928 of file cryptlib.cpp.

## EphemeralPrivateKeyLength()

virtual unsigned int AuthenticatedKeyAgreementDomain::EphemeralPrivateKeyLength | ( |  | ) | const

pure virtual

Provides the size of ephemeral private key.

Returns
  the size of ephemeral private key in this domain

Implemented in MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >, FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, and DH2.

## EphemeralPublicKeyLength()

virtual unsigned int AuthenticatedKeyAgreementDomain::EphemeralPublicKeyLength | ( |  | ) | const

pure virtual

Provides the size of ephemeral public key.

Returns
  the size of ephemeral public key in this domain

Implemented in MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >, FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, and DH2.

## GenerateEphemeralPrivateKey()

virtual void AuthenticatedKeyAgreementDomain::GenerateEphemeralPrivateKey | ( | RandomNumberGenerator & | rng,
|  | byte * | privateKey
| ) |  | const

pure virtual

Generate ephemeral private key.

Parameters

  rng | a RandomNumberGenerator derived class
  privateKey | a byte buffer for the generated private key in this domain

Precondition
  `COUNTOF(privateKey) == PrivateEphemeralKeyLength()`

Implemented in MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >, FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, and DH2.

## GenerateEphemeralPublicKey()

virtual void AuthenticatedKeyAgreementDomain::GenerateEphemeralPublicKey | ( | RandomNumberGenerator & | rng,
|  | const byte * | privateKey,
|  | byte * | publicKey
| ) |  | const

pure virtual

Generate ephemeral public key.

Parameters

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

Precondition
  `COUNTOF(publicKey) == PublicEphemeralKeyLength()`

Implemented in MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >, FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, and DH2.

## GenerateEphemeralKeyPair()

void AuthenticatedKeyAgreementDomain::GenerateEphemeralKeyPair | ( | RandomNumberGenerator & | rng,
|  | byte * | privateKey,
|  | byte * | publicKey
| ) |  | const

virtual

Generate private/public key pair.

Parameters

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

GenerateEphemeralKeyPair() is equivalent to calling GenerateEphemeralPrivateKey() and then GenerateEphemeralPublicKey()

Reimplemented in DH2.

Definition at line 934 of file cryptlib.cpp.

## Agree()

virtual bool AuthenticatedKeyAgreementDomain::Agree | ( | byte * | agreedValue,
|  | const byte * | staticPrivateKey,
|  | const byte * | ephemeralPrivateKey,
|  | const byte * | staticOtherPublicKey,
|  | const byte * | ephemeralOtherPublicKey,
|  | bool | validateStaticOtherPublicKey = `true`
| ) |  | const

pure virtual

Derive agreed value.

Parameters

  agreedValue | a byte buffer for the shared secret
  staticPrivateKey | a byte buffer with your static private key in this domain
  ephemeralPrivateKey | a byte buffer with your ephemeral private key in this domain
  staticOtherPublicKey | a byte buffer with the other party's static public key in this domain
  ephemeralOtherPublicKey | a byte buffer with the other party's ephemeral public key in this domain
  validateStaticOtherPublicKey | a 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 ephemeral 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(staticPrivateKey) == StaticPrivateKeyLength()`
  `COUNTOF(ephemeralPrivateKey) == EphemeralPrivateKeyLength()`
  `COUNTOF(staticOtherPublicKey) == StaticPublicKeyLength()`
  `COUNTOF(ephemeralOtherPublicKey) == EphemeralPublicKeyLength()`

Implemented in MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >, FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >, and DH2.

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

- cryptlib.h
- cryptlib.cpp