Fabcoin Core  0.16.2
P2P Digital Currency
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION > Class Template Reference

MQV domain for performing authenticated key agreement. More...

#include <mqv.h>

Inheritance diagram for MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >:
[legend]
Collaboration diagram for MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >:
[legend]

Public Types

typedef GROUP_PARAMETERS GroupParameters
 
typedef GroupParameters::Element Element
 
typedef MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION > Domain
 

Public Member Functions

 MQV_Domain ()
 Construct a MQV domain. More...
 
 MQV_Domain (const GroupParameters &params)
 Construct a MQV domain. More...
 
 MQV_Domain (BufferedTransformation &bt)
 Construct a MQV domain. More...
 
template<class T1 , class T2 >
 MQV_Domain (T1 v1, T2 v2)
 Construct a MQV domain. More...
 
template<class T1 , class T2 , class T3 >
 MQV_Domain (T1 v1, T2 v2, T3 v3)
 Construct a MQV domain. More...
 
template<class T1 , class T2 , class T3 , class T4 >
 MQV_Domain (T1 v1, T2 v2, T3 v3, T4 v4)
 Construct a MQV domain. More...
 
const GroupParametersGetGroupParameters () const
 Retrieves the group parameters for this domain. More...
 
GroupParametersAccessGroupParameters ()
 Retrieves the group parameters for this domain. More...
 
CryptoParametersAccessCryptoParameters ()
 Retrieves the crypto parameters for this domain. More...
 
unsigned int AgreedValueLength () const
 Provides the size of the agreed value. More...
 
unsigned int StaticPrivateKeyLength () const
 Provides the size of the static private key. More...
 
unsigned int StaticPublicKeyLength () const
 Provides the size of the static public key. More...
 
void GenerateStaticPrivateKey (RandomNumberGenerator &rng, byte *privateKey) const
 Generate static private key in this domain. More...
 
void GenerateStaticPublicKey (RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
 Generate a static public key from a private key in this domain. 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
 Generate ephemeral private key. More...
 
void GenerateEphemeralPublicKey (RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
 Generate ephemeral public key. More...
 
bool Agree (byte *agreedValue, const byte *staticPrivateKey, const byte *ephemeralPrivateKey, const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey, bool validateStaticOtherPublicKey=true) const
 Derive agreed value. More...
 
- Public Member Functions inherited from AuthenticatedKeyAgreementDomain
virtual ~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
virtual ~KeyAgreementAlgorithm ()
 
CryptoMaterialAccessMaterial ()
 Retrieves a reference to Crypto Parameters. More...
 
const CryptoMaterialGetMaterial () const
 Retrieves a reference to Crypto Parameters. More...
 
virtual const CryptoParametersGetCryptoParameters () const
 Retrieves a reference to Crypto Parameters. More...
 
- Public Member Functions inherited from AsymmetricAlgorithm
virtual ~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
virtual ~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 ()
 
virtual ClonableClone () const
 Copies this object. More...
 

Private Member Functions

DL_GroupParameters< Element > & AccessAbstractGroupParameters ()
 
const DL_GroupParameters< Element > & GetAbstractGroupParameters () const
 

Private Attributes

GroupParameters m_groupParameters
 

Detailed Description

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

MQV domain for performing authenticated key agreement.

Template Parameters
GROUP_PARAMETERSdoamin parameters
COFACTOR_OPTIONcofactor option

GROUP_PARAMETERS parameters include the curve coefcients and the base point. Binary curves use a polynomial to represent its characteristic, while prime curves use a prime number.

See also
MQV, HMQV, FHMQV, and AuthenticatedKeyAgreementDomain

Definition at line 27 of file mqv.h.

Member Typedef Documentation

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
typedef MQV_Domain<GROUP_PARAMETERS, COFACTOR_OPTION> MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::Domain

Definition at line 32 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
typedef GroupParameters::Element MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::Element

Definition at line 31 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
typedef GROUP_PARAMETERS MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::GroupParameters

Definition at line 30 of file mqv.h.

Constructor & Destructor Documentation

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::MQV_Domain ( )
inline

Construct a MQV domain.

Definition at line 35 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::MQV_Domain ( const GroupParameters params)
inline

Construct a MQV domain.

Parameters
paramsgroup parameters and options

Definition at line 39 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::MQV_Domain ( BufferedTransformation bt)
inline

Construct a MQV domain.

Parameters
btBufferedTransformation with group parameters and options

Definition at line 44 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
template<class T1 , class T2 >
MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::MQV_Domain ( T1  v1,
T2  v2 
)
inline

Construct a MQV domain.

Template Parameters
T1template parameter used as a constructor parameter
T2template parameter used as a constructor parameter
Parameters
v1first parameter
v2second parameter

v1 and v2 are passed directly to the GROUP_PARAMETERS object.

Definition at line 54 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
template<class T1 , class T2 , class T3 >
MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::MQV_Domain ( T1  v1,
T2  v2,
T3  v3 
)
inline

Construct a MQV domain.

Template Parameters
T1template parameter used as a constructor parameter
T2template parameter used as a constructor parameter
T3template parameter used as a constructor parameter
Parameters
v1first parameter
v2second parameter
v3third parameter

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

Definition at line 66 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
template<class T1 , class T2 , class T3 , class T4 >
MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::MQV_Domain ( T1  v1,
T2  v2,
T3  v3,
T4  v4 
)
inline

Construct a MQV domain.

Template Parameters
T1template parameter used as a constructor parameter
T2template parameter used as a constructor parameter
T3template parameter used as a constructor parameter
T4template parameter used as a constructor parameter
Parameters
v1first parameter
v2second parameter
v3third parameter
v4third parameter

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

Definition at line 80 of file mqv.h.

Member Function Documentation

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
DL_GroupParameters<Element>& MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::AccessAbstractGroupParameters ( )
inlineprivate

Definition at line 209 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
CryptoParameters& MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::AccessCryptoParameters ( )
inlinevirtual

Retrieves the crypto parameters for this domain.

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

Implements KeyAgreementAlgorithm.

Definition at line 93 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
GroupParameters& MQV_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 89 of file mqv.h.

Here is the caller graph for this function:

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
bool MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::Agree ( byte agreedValue,
const byte staticPrivateKey,
const byte ephemeralPrivateKey,
const byte staticOtherPublicKey,
const byte ephemeralOtherPublicKey,
bool  validateStaticOtherPublicKey = true 
) const
inlinevirtual

Derive agreed value.

Parameters
agreedValuea byte buffer for the shared secret
staticPrivateKeya byte buffer with your static private key in this domain
ephemeralPrivateKeya byte buffer with your ephemeral private key in this domain
staticOtherPublicKeya byte buffer with the other party's static public key in this domain
ephemeralOtherPublicKeya byte buffer with the other party's ephemeral public key in this domain
validateStaticOtherPublicKeya 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()

Implements AuthenticatedKeyAgreementDomain.

Definition at line 159 of file mqv.h.

Here is the call graph for this function:

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
unsigned int MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::AgreedValueLength ( ) const
inlinevirtual

Provides the size of the agreed value.

Returns
size of agreed value produced in this domain

The length is calculated using GetEncodedElementSize(false), which means the element is encoded in a non-reversible format. A non-reversible format means its a raw byte array, and it lacks presentation format like an ASN.1 BIT_STRING or OCTET_STRING.

Implements AuthenticatedKeyAgreementDomain.

Definition at line 100 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
unsigned int MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::EphemeralPrivateKeyLength ( ) const
inlinevirtual

Provides the size of ephemeral private key.

Returns
the size of ephemeral private key in this domain

Implements AuthenticatedKeyAgreementDomain.

Definition at line 141 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
unsigned int MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::EphemeralPublicKeyLength ( ) const
inlinevirtual

Provides the size of ephemeral public key.

Returns
the size of ephemeral public key in this domain

Implements AuthenticatedKeyAgreementDomain.

Definition at line 142 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
void MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::GenerateEphemeralPrivateKey ( RandomNumberGenerator rng,
byte privateKey 
) const
inlinevirtual

Generate ephemeral private key.

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

Implements AuthenticatedKeyAgreementDomain.

Definition at line 144 of file mqv.h.

Here is the call graph for this function:

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
void MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::GenerateEphemeralPublicKey ( RandomNumberGenerator rng,
const byte privateKey,
byte publicKey 
) const
inlinevirtual

Generate ephemeral public key.

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

Implements AuthenticatedKeyAgreementDomain.

Definition at line 153 of file mqv.h.

Here is the call graph for this function:

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
void MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::GenerateStaticPrivateKey ( RandomNumberGenerator rng,
byte privateKey 
) const
inlinevirtual

Generate static private key in this domain.

Parameters
rnga RandomNumberGenerator derived class
privateKeya byte buffer for the generated private key in this domain

The private key is a random scalar used as an exponent in the range [1,MaxExponent()].

Precondition
COUNTOF(privateKey) == PrivateStaticKeyLength()

Implements AuthenticatedKeyAgreementDomain.

Definition at line 119 of file mqv.h.

Here is the call graph for this function:

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
void MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::GenerateStaticPublicKey ( RandomNumberGenerator rng,
const byte privateKey,
byte publicKey 
) const
inlinevirtual

Generate a static 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

The public key is an element or point on the curve, and its stored in a revrsible format. A reversible format means it has a presentation format, and its an ANS.1 encoded element or point.

Precondition
COUNTOF(publicKey) == PublicStaticKeyLength()

Implements AuthenticatedKeyAgreementDomain.

Definition at line 132 of file mqv.h.

Here is the call graph for this function:

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
const DL_GroupParameters<Element>& MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::GetAbstractGroupParameters ( ) const
inlineprivate

Definition at line 210 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
const GroupParameters& MQV_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 85 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
unsigned int MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::StaticPrivateKeyLength ( ) const
inlinevirtual

Provides the size of the static private key.

Returns
size of static private keys in this domain

The length is calculated using the byte count of the subgroup order.

Implements AuthenticatedKeyAgreementDomain.

Definition at line 105 of file mqv.h.

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
unsigned int MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::StaticPublicKeyLength ( ) const
inlinevirtual

Provides the size of the static public key.

Returns
size of static public keys in this domain

The length is calculated using GetEncodedElementSize(true), which means the element is encoded in a reversible format. A reversible format means it has a presentation format, and its an ANS.1 encoded element or point.

Implements AuthenticatedKeyAgreementDomain.

Definition at line 112 of file mqv.h.

Member Data Documentation

template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption>
GroupParameters MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::m_groupParameters
private

Definition at line 212 of file mqv.h.


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