FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH > Class Template Reference

Fully Hashed Menezes-Qu-Vanstone in GF(p) More...

Inheritance diagram for FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >:

## Public Types

typedef GROUP_PARAMETERS | GroupParameters
typedef GroupParameters::Element | Element
typedef FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH > | Domain

## Public Member Functions

| FHMQV_Domain (bool clientRole=true)
| FHMQV_Domain (const GroupParameters &params, bool clientRole=true)
| FHMQV_Domain (BufferedTransformation &bt, bool clientRole=true)
template<class T1 >
| FHMQV_Domain (T1 v1, bool clientRole=true)
template<class T1 , class T2 >
| FHMQV_Domain (T1 v1, T2 v2, bool clientRole=true)
template<class T1 , class T2 , class T3 >
| FHMQV_Domain (T1 v1, T2 v2, T3 v3, bool clientRole=true)
template<class T1 , class T2 , class T3 , class T4 >
| FHMQV_Domain (T1 v1, T2 v2, T3 v3, T4 v4, bool clientRole=true)
const GroupParameters & | GetGroupParameters () const
GroupParameters & | AccessGroupParameters ()
CryptoParameters & | AccessCryptoParameters ()
| Retrieves a reference to Crypto Parameters. More...
unsigned int | AgreedValueLength () const
| return length of agreed value produced
unsigned int | StaticPrivateKeyLength () const
| return length of static private keys in this domain
unsigned int | StaticPublicKeyLength () const
| return length of static public keys in this domain
void | GenerateStaticPrivateKey (RandomNumberGenerator &rng, byte *privateKey) const
| generate static private key More...
void | GenerateStaticPublicKey (RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
| generate static public key More...
unsigned int | EphemeralPrivateKeyLength () const
| Provides the size of ephemeral private key. More...
unsigned int | EphemeralPublicKeyLength () const
| Provides the size of ephemeral public key. More...
void | GenerateEphemeralPrivateKey (RandomNumberGenerator &rng, byte *privateKey) const
| return length of ephemeral private keys in this domain
void | GenerateEphemeralPublicKey (RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
| return length of ephemeral public keys in this domain
bool | Agree (byte *agreedValue, const byte *staticPrivateKey, const byte *ephemeralPrivateKey, const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey, bool validateStaticOtherPublicKey=true) const
| derive agreed value from your private keys and couterparty's public keys, return false in case of failure More...
Public Member Functions inherited from AuthenticatedKeyAgreementDomain
virtual void | GenerateStaticKeyPair (RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const
| Generate a static private/public key pair. More...
virtual void | GenerateEphemeralKeyPair (RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const
| Generate 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 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

### template<class GROUP_PARAMETERS, class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption, class HASH = SHA512>
class FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >

Fully Hashed Menezes-Qu-Vanstone in GF(p)

This implementation follows Augustin P. Sarr and Philippe Elbaz–Vincent, and Jean–Claude Bajard's A Secure and Efficient Authenticated Diffie-Hellman Protocol. Note: this is FHMQV, Protocol 5, from page 11; and not FHMQV-C.

See also
  MQV, HMQV, FHMQV, and AuthenticatedKeyAgreementDomain

Since
  Crypto++ 5.6.4

Definition at line 24 of file fhmqv.h.

## Member Function Documentation

## AccessCryptoParameters()

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

CryptoParameters& FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >::AccessCryptoParameters | ( |  | ) |

inline virtual

Retrieves a reference to Crypto Parameters.

Returns
  a reference the crypto parameters

Implements KeyAgreementAlgorithm.

Definition at line 69 of file fhmqv.h.

## GenerateStaticPrivateKey()

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

void FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >::GenerateStaticPrivateKey | ( | RandomNumberGenerator & | rng,
|  | byte * | privateKey
| ) |  | const

inline virtual

generate static private key

Precondition
  size of privateKey == PrivateStaticKeyLength()

Implements AuthenticatedKeyAgreementDomain.

Definition at line 80 of file fhmqv.h.

## GenerateStaticPublicKey()

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

void FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >::GenerateStaticPublicKey | ( | RandomNumberGenerator & | rng,
|  | const byte * | privateKey,
|  | byte * | publicKey
| ) |  | const

inline virtual

generate static public key

Precondition
  size of publicKey == PublicStaticKeyLength()

Implements AuthenticatedKeyAgreementDomain.

Definition at line 88 of file fhmqv.h.

## EphemeralPrivateKeyLength()

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

unsigned int FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >::EphemeralPrivateKeyLength | ( |  | ) | const

inline virtual

Provides the size of ephemeral private key.

Returns
  the size of ephemeral private key in this domain

Implements AuthenticatedKeyAgreementDomain.

Definition at line 97 of file fhmqv.h.

## EphemeralPublicKeyLength()

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

unsigned int FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >::EphemeralPublicKeyLength | ( |  | ) | const

inline virtual

Provides the size of ephemeral public key.

Returns
  the size of ephemeral public key in this domain

Implements AuthenticatedKeyAgreementDomain.

Definition at line 98 of file fhmqv.h.

## Agree()

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

bool FHMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >::Agree | ( | byte * | agreedValue,
|  | const byte * | staticPrivateKey,
|  | const byte * | ephemeralPrivateKey,
|  | const byte * | staticOtherPublicKey,
|  | const byte * | ephemeralOtherPublicKey,
|  | bool | validateStaticOtherPublicKey = `true`
| ) |  | const

inline virtual

derive agreed value from your private keys and couterparty's public keys, return false in case of failure

Note
  The ephemeral public key will always be validated. If you have previously validated the static public key, use validateStaticOtherPublicKey=false to save time.

Precondition
  size of agreedValue == AgreedValueLength()
  length of staticPrivateKey == StaticPrivateKeyLength()
  length of ephemeralPrivateKey == EphemeralPrivateKeyLength()
  length of staticOtherPublicKey == StaticPublicKeyLength()
  length of ephemeralOtherPublicKey == EphemeralPublicKeyLength()

Implements AuthenticatedKeyAgreementDomain.

Definition at line 126 of file fhmqv.h.

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

- fhmqv.h