Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
GrayLib::cKeyExECDH Class Reference

#include <cKeyExECDH.h>

Inheritance diagram for GrayLib::cKeyExECDH:
GrayLib::cKeyExBase

Public Member Functions

 cKeyExECDH () noexcept
 
 ~cKeyExECDH ()
 
virtual HRESULT MakeKeyExParams (BYTE *pOut, size_t nSizeOut, IRandomNoise *pRandom) override
 
virtual HRESULT ReadKeyEx (const BYTE *pBuffer, const BYTE *end) override
 
HRESULT GetECDHParams (const cKeyBase *pKey, bool bThierSide)
 
HRESULT MakeKeyPublic (BYTE *pBuffer, size_t nSizeBuffer, IRandomNoise *pRandom)
 
virtual HRESULT ReadKeyPublic (const BYTE *pBuffer, size_t nSizeBuffer) override
 
HRESULT MakeKeyExSecret (BYTE *pBuffer, size_t nSizeBuffer, IRandomNoise *pRandom)
 
 UNITTEST_FRIEND (cKeyExECDH)
 
- Public Member Functions inherited from GrayLib::cKeyExBase
virtual ~cKeyExBase ()
 

Public Attributes

cECPGroup m_grp
 elliptic curve used More...
 
cECPPoint m_Q
 our public value (public key) More...
 
cECPPoint m_Qp
 peer's public value (public key) More...
 
cBigInteger m_z
 shared secret More...
 
bool m_bCompressed
 format for point export in TLS messages. TLS_ECP_PF_COMPRESSED More...
 
cECPPoint m_Vi
 blinding value (for later) More...
 
cECPPoint m_Vf
 un-blinding value (for later) More...
 
- Public Attributes inherited from GrayLib::cKeyExBase
cBigUnsigned m_X
 secret value (private key) More...
 

Static Public Attributes

static const BYTE k_ECP_TLS_NAMED_CURVE = 3
 id for ECCurveType's named_curve from RFC 4492 More...
 

Detailed Description

Key exchange ECDH (ECP) isECDH() = SSL_KeyExchange_ECDHE_RSA, SSL_KeyExchange_ECDH_RSA, SSL_KeyExchange_ECDH_ECDSA, SSL_KeyExchange_ECDHE_PSK

Constructor & Destructor Documentation

◆ cKeyExECDH()

GrayLib::cKeyExECDH::cKeyExECDH ( )
inlinenoexcept

◆ ~cKeyExECDH()

GrayLib::cKeyExECDH::~cKeyExECDH ( )
inline

Member Function Documentation

◆ GetECDHParams()

HRESULT GrayLib::cKeyExECDH::GetECDHParams ( const cKeyBase pKey,
bool  bThierSide 
)

Setup an ECDH context from an EC key. (Used by clients and servers in place of the ServerKeyEchange for static ECDH: import ECDH parameters from a certificate's EC key information.)

  • pKey = cKeyECPPair to use
  • bThierSide = Is it our key (0) or the peer's key (1) ?
    Returns
    0 if successful, or <0 = error code

Get parameters from a keypair

◆ MakeKeyExParams()

HRESULT GrayLib::cKeyExECDH::MakeKeyExParams ( BYTE *  pOut,
size_t  nSizeOut,
IRandomNoise pRandom 
)
overridevirtual

Generate a public key and a TLS ServerKeyExchange payload. (First function used by a TLS server for ECDHE.)

  • pOut = destination buffer
  • nSizeOut = length of buffer
  • pRandom = RNG function
    Note
    This function assumes that this->grp has already been properly set (for example using put_ECPGroupId).
    Returns
    number of chars written if successful, or <0 = error code

Write the ECParameters record corresponding to a group (RFC 4492)

Implements GrayLib::cKeyExBase.

◆ MakeKeyExSecret()

HRESULT GrayLib::cKeyExECDH::MakeKeyExSecret ( BYTE *  pBuffer,
size_t  nSizeBuffer,
IRandomNoise pRandom 
)

Derive and export the shared secret. (Last function used by both TLS client en servers.)

  • pBuffer = destination buffer
  • nSizeBuffer = buffer length
  • pRandom = RNG function, see notes for "ComputeSharedKey()"
    Returns
    0 if successful, or <0 = error code

Premaster secret Derive and export the shared secret

◆ MakeKeyPublic()

HRESULT GrayLib::cKeyExECDH::MakeKeyPublic ( BYTE *  pBuffer,
size_t  nSizeBuffer,
IRandomNoise pRandom 
)

Generate a public key and a TLS ClientKeyExchange payload. (Second function used by a TLS client for ECDH(E).)

  • pBuffer = destination buffer
  • nSizeBuffer = size of destination buffer
  • pRandom = RNG function
    Returns
    size >=0 if successful, or <0 = error code

◆ ReadKeyEx()

HRESULT GrayLib::cKeyExECDH::ReadKeyEx ( const BYTE *  pBuffer,
const BYTE *  end 
)
overridevirtual

Parse and process a TLS ServerKeyExhange payload. (First function used by a TLS client for ECDHE.)

  • pBuffer = pointer to start of input buffer
  • end = one past end of buffer
    Returns
    length if successful, or <0 = error code

Set a group from a TLS ECParameters record. (RFC 4492) We expect at least three bytes (see below)

Implements GrayLib::cKeyExBase.

◆ ReadKeyPublic()

HRESULT GrayLib::cKeyExECDH::ReadKeyPublic ( const BYTE *  pBuffer,
size_t  nSizeBuffer 
)
overridevirtual

Parse and process a TLS ClientKeyExchange payload. (Second function used by a TLS server for ECDH(E).)

  • pBuffer = start of input buffer
  • nSizeBuffer = length of input buffer
    Returns
    0 if successful, or <0 = error code

Parse and import the client's public value

Implements GrayLib::cKeyExBase.

◆ UNITTEST_FRIEND()

GrayLib::cKeyExECDH::UNITTEST_FRIEND ( cKeyExECDH  )

Member Data Documentation

◆ k_ECP_TLS_NAMED_CURVE

const BYTE GrayLib::cKeyExECDH::k_ECP_TLS_NAMED_CURVE = 3
static

id for ECCurveType's named_curve from RFC 4492

◆ m_bCompressed

bool GrayLib::cKeyExECDH::m_bCompressed

format for point export in TLS messages. TLS_ECP_PF_COMPRESSED

◆ m_grp

cECPGroup GrayLib::cKeyExECDH::m_grp

elliptic curve used

◆ m_Q

cECPPoint GrayLib::cKeyExECDH::m_Q

our public value (public key)

◆ m_Qp

cECPPoint GrayLib::cKeyExECDH::m_Qp

peer's public value (public key)

◆ m_Vf

cECPPoint GrayLib::cKeyExECDH::m_Vf

un-blinding value (for later)

◆ m_Vi

cECPPoint GrayLib::cKeyExECDH::m_Vi

blinding value (for later)

◆ m_z

cBigInteger GrayLib::cKeyExECDH::m_z

shared secret


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