Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cKeyECPPair.h
Go to the documentation of this file.
1 //
4 //
5 #ifndef _INC_cKeyECPPair_H
6 #define _INC_cKeyECPPair_H
7 #ifndef NO_PRAGMA_ONCE
8 #pragma once
9 #endif
10 
11 #include "cKeyBase.h"
12 #include "cKeyTypeDef.h"
13 #include "cECPGroup.h"
14 #include "../Hash/cHashWrap.h"
15 #include "../File/cASNReader.h"
16 #include "../File/cASNWriterRev.h"
17 #include "../Math/cBigInteger.h"
18 
19 namespace GrayLib
20 {
22 
24  {
29  typedef cKeyBase SUPER_t;
30 
31  public:
35 
36  protected:
37  static HRESULT GRAYCALL ReadECParameters(cASNReader& r, OUT cASNBuf& params);
38 
39  HRESULT MakeSignatureSeed(BYTE* pOut, const cBigInteger& d, const BYTE* buf, size_t nSizeBuf) const;
40  HRESULT MakeSignatureDer(cASNWriterRev& w, const cBigInteger& r, const cBigInteger& s) const;
41 
42  public:
43  cKeyECPPair() noexcept
44  {
45  }
46  virtual ~cKeyECPPair()
47  {
48  }
49 
50  virtual size_t get_KeySize() const override
51  {
52  return cBits::GetSizeBytes(this->m_grp.m_nPBits);
53  }
54 
55  virtual int GetKeyValues(cValue* items) const override
56  {
58  items->m_pszName = "eckey.Q";
59  items->m_pValue = &(this->m_Q);
60  return 1;
61  }
62 
63  virtual void SetZeroKey() override
64  {
66  m_grp.SetEmptyECPGroup();
67  m_d.SetNullVal();
68  m_Q.SetEmptyPoint();
69  }
70 
71  void SetCopyKey(const cKeyECPPair& key)
72  {
74  this->m_grp.SetCopyECP(key.m_grp);
75  this->m_d.SetCopyInt(key.m_d);
76  this->m_Q.SetCopyPoint(key.m_Q);
77  }
78 
79  virtual HRESULT CheckPublicPrivatePair(const cKeyBase* pKeyPrivate) const override;
80  virtual HRESULT VerifySignature(SSL_Hash_TYPE eHashType, const BYTE* pHash, size_t nSizeHash, const BYTE* pSig, size_t nSizeSig) const override;
81  virtual HRESULT MakeSignature(BYTE* pSig, SSL_Hash_TYPE eHashType, const BYTE* pHash, size_t nSizeHash, IRandomNoise* pRandom) const override;
82 
83  HRESULT GenerateKeys(ECPGroup_TYPE eECPGroupId, IRandomNoise* pRandom);
84  HRESULT WriteECParameters(cASNWriterRev& w) const;
85 
86  virtual HRESULT ReadPrivateKey(cASNReader& r, cASNBuf* pAlgParams) override;
87  virtual HRESULT ReadPublicKey(cASNReader& r, cASNBuf* pAlgParams) override;
88 
89  virtual HRESULT WritePrivateKey(cASNWriterRev& w) const override;
90  virtual HRESULT WritePublicKey(cASNWriterRev& w) const override;
91 
93  };
94 
96  {
99  typedef cKeyTypeDef SUPER_t;
100  public:
101  cKeyTypeEC() noexcept
102  : cKeyTypeDef(SSL_Key_ECKEY, "EC")
103  {
104  }
105  cKeyTypeEC(SSL_Key_TYPE eKeyType, const char* name)
106  : cKeyTypeDef(eKeyType, name)
107  {
108  }
109  virtual bool HasKeyType(SSL_Key_TYPE eKeyType) const noexcept
110  {
111  return eKeyType == SSL_Key_ECKEY || eKeyType == SSL_Key_ECKEY_DH || eKeyType == SSL_Key_ECDSA ;
112  }
113  virtual cKeyBase* AllocKey() const
114  {
115  return new cKeyECPPair();
116  }
117  };
118 
120  {
123  typedef cKeyTypeEC SUPER_t;
124  public:
126  : cKeyTypeEC(SSL_Key_ECKEY_DH, "EC_DH")
127  {
128  }
129  virtual bool HasKeyType(SSL_Key_TYPE eKeyType) const noexcept
130  {
131  return eKeyType == SSL_Key_ECKEY || eKeyType == SSL_Key_ECKEY_DH ;
132  }
133  };
134 }
135 
136 #endif // _INC_cKeyECP_H
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cASN.h:78
Definition: cASNReader.h:22
Definition: cASNWriterRev.h:22
Definition: cBigInteger.h:18
void SetNullVal()
Definition: cBigInteger.h:224
void SetCopyInt(const cBigInteger &x)
Definition: cBigInteger.cpp:173
BIT_ENUM_t m_nPBits
number of used bits in P. m_P.get_Highest1Bit();
Definition: cECPGroupParams.h:124
Definition: cECPGroup.h:34
void SetEmptyECPGroup()
Definition: cECPGroup.cpp:1245
HRESULT SetCopyECP(const cECPGroup &rSrc)
Definition: cECPGroup.cpp:25
Definition: cECPGroupParams.h:41
void SetCopyPoint(const cECPPoint &Q)
Definition: cECPGroupParams.cpp:16
void SetEmptyPoint()
Definition: cECPGroupParams.h:62
Definition: cKeyBase.h:56
@ VALTYPE_ECP
cECPPoint* for cKeyECPPair and derived (cKeyECDSA).
Definition: cKeyBase.h:68
Definition: cKeyECPPair.h:24
cECPPoint m_Q
our public value
Definition: cKeyECPPair.h:34
void SetCopyKey(const cKeyECPPair &key)
Definition: cKeyECPPair.h:71
UNITTEST_FRIEND(cKeyECPPair)
cKeyECPPair() noexcept
Definition: cKeyECPPair.h:43
virtual int GetKeyValues(cValue *items) const override
Interface with the debug module. get debug values.
Definition: cKeyECPPair.h:55
virtual ~cKeyECPPair()
Definition: cKeyECPPair.h:46
virtual void SetZeroKey() override
Secure zero the key.
Definition: cKeyECPPair.h:63
cECPGroup m_grp
Elliptic curve and base point.
Definition: cKeyECPPair.h:32
cBigInteger m_d
our secret value
Definition: cKeyECPPair.h:33
virtual size_t get_KeySize() const override
Get key size in bytes.
Definition: cKeyECPPair.h:50
Definition: cKeyTypeDef.h:22
Definition: cKeyECPPair.h:120
cKeyTypeECDH()
Definition: cKeyECPPair.h:125
virtual bool HasKeyType(SSL_Key_TYPE eKeyType) const noexcept
Tell if the context implements this type (e.g. ECKEY can do ECDSA)
Definition: cKeyECPPair.h:129
Definition: cKeyECPPair.h:96
virtual cKeyBase * AllocKey() const
Allocate a new context.
Definition: cKeyECPPair.h:113
cKeyTypeEC(SSL_Key_TYPE eKeyType, const char *name)
Definition: cKeyECPPair.h:105
virtual bool HasKeyType(SSL_Key_TYPE eKeyType) const noexcept
Tell if the context implements this type (e.g. ECKEY can do ECDSA)
Definition: cKeyECPPair.h:109
cKeyTypeEC() noexcept
Definition: cKeyECPPair.h:101
Definition: cMesh.h:22
ECPGroup_TYPE
Definition: cECPGroupParams.h:28
UNITTEST2_PREDEF(cQuadtree)
SSL_Key_TYPE
Definition: cKeyBase.h:24
@ SSL_Key_ECDSA
SSL_KeyExchange_ECDHE_ECDSA.
Definition: cKeyBase.h:32
@ SSL_Key_ECKEY_DH
OID_EC_ALG_ECDH.
Definition: cKeyBase.h:31
@ SSL_Key_ECKEY
SSL_KeyExchange_ECDH_RSA = "EC PRIVATE KEY" = k_pszPEM_EC.
Definition: cKeyBase.h:30
SSL_Hash_TYPE
Definition: cHashCode.h:23
Definition: cKeyBase.h:74
const char * m_pszName
Definition: cKeyBase.h:78
const void * m_pValue
e.g. const cBigInt* if VALTYPE_RSA
Definition: cKeyBase.h:79
VALTYPE_TYPE m_eValueType
type of value.
Definition: cKeyBase.h:77
Definition: cRandom.h:19
static constexpr size_t GetSizeBytes(BIT_ENUM_t nBits) noexcept
Definition: cBits.h:54