Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cKeyExDHM.h
Go to the documentation of this file.
1 //
4 //
5 #ifndef _INC_cKeyExDHM_H
6 #define _INC_cKeyExDHM_H
7 
8 #include "cKeyExBase.h"
9 
10 namespace GrayLib
11 {
13 
15  {
32 
33  public:
34  static const char* k_pszPEM; // = "DH PARAMETERS";
35 
36  size_t m_len;
39 
43 
48 
50  static const char* k_default_P;
51  static const char* k_default_G;
52 
53  private:
54  static HRESULT ReadBigIntSig(OUT cBigUnsigned& X, const BYTE* p, const BYTE* end);
55  static bool IsValidDHM(const cBigUnsigned& param, const cBigUnsigned& P);
56  HRESULT UpdateBlinding(IRandomNoise* pRandom);
57 
58  public:
59  cKeyExDHM() noexcept
60  : m_len(0)
61  {
62  }
64  {
66  m_len = 0;
67  }
68 
69  bool isKeyEx() const
70  {
71  return m_len != 0;
72  }
73  bool isKeyValid() const
74  {
75  return m_len >= 64 && m_len <= 512;
76  }
77 
86  virtual HRESULT MakeKeyExParams(BYTE* pOut, size_t nSizeOut, IRandomNoise* pRandom) override;
87 
92  virtual HRESULT ReadKeyEx(const BYTE* pBuffer, const BYTE* end) override;
93 
98  virtual HRESULT ReadKeyPublic(const BYTE* pInput, size_t nSizeIn) override;
99 
106  HRESULT MakePublicDHM(size_t nSizeX, BYTE* pOutput, size_t nOutputSize, IRandomNoise* pRandom);
107 
112  //
114  //
120 
121  HRESULT MakePrivateDHM(BYTE* pOutput, size_t* nOutputSize, IRandomNoise* pRandom);
122 
127  //
128  HRESULT ReadFromBlock(const BYTE* dhmin, size_t dhminlen);
129 
133  HRESULT ReadFromFile(const FILECHAR_t* pszFilePath);
134 
136  };
137 }
138 
139 #endif // cKeyExDHM
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define P(a, b, c, d, k, s, t)
Definition: cBigInteger.h:18
Definition: cBigUnsigned.h:22
Definition: cKeyExBase.h:15
Definition: cKeyExDHM.h:15
UNITTEST_FRIEND(cKeyExDHM)
size_t m_len
size(P) in chars
Definition: cKeyExDHM.h:36
cBigInteger m_K
key = GY^X mod P
Definition: cKeyExDHM.h:42
cBigInteger m_GY
peer = G^Y mod P
Definition: cKeyExDHM.h:41
static const char * k_default_G
DHM_RFC5114_MODP_1024_G.
Definition: cKeyExDHM.h:51
static const char * k_default_P
InitSSL SetKeyExDHMParams default params for RFC5114.
Definition: cKeyExDHM.h:50
cBigInteger m_Vi
blinding value
Definition: cKeyExDHM.h:45
cKeyExDHM() noexcept
Definition: cKeyExDHM.h:59
bool isKeyValid() const
Definition: cKeyExDHM.h:73
cBigUnsigned m_RP
cached R^2 mod P
Definition: cKeyExDHM.h:44
bool isKeyEx() const
Definition: cKeyExDHM.h:69
static const char * k_pszPEM
Definition: cKeyExDHM.h:34
cBigInteger m_GX
self = G^X mod P
Definition: cKeyExDHM.h:40
~cKeyExDHM()
Definition: cKeyExDHM.h:63
cBigUnsigned m_P
prime modulus. m_dhm_P
Definition: cKeyExDHM.h:37
cBigInteger m_G
generator. m_dhm_G
Definition: cKeyExDHM.h:38
cBigInteger m_Vf
un-blinding value
Definition: cKeyExDHM.h:46
cBigInteger m_XPrev
previous X
Definition: cKeyExDHM.h:47
Definition: cMesh.h:22
UNITTEST2_PREDEF(cQuadtree)
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22
Definition: cRandom.h:19