Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cHashSHA256.h
Go to the documentation of this file.
1 //
5 
6 #ifndef _INC_cHashSHA256_H
7 #define _INC_cHashSHA256_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 #include "cHashBase.h"
12 #include "cHashTypeDef.h"
13 
14 namespace GrayLib
15 {
17 
18  class GRAYLIB_LINK cHashSHA256 : public cHashCodeT<32>
19  {
24 
25  friend class cHashSHA256Builder;
26  public:
28  {}
29  cHashSHA256(const char* pszHexDigest)
30  {
31  put_HexDigest(pszHexDigest);
32  }
33  static size_t GRAYCALL ComputeHash(BYTE pOutput[32], const void* pInput, size_t nInputSize, bool is224);
34  static size_t GRAYCALL ComputeHmac(BYTE pOutput[32], const BYTE* pKey, size_t nKeySize, const void* pInput, size_t nInputSize,bool is224);
35 
37  };
38 
39  class GRAYLIB_LINK cHashSHA224 : public cHashCodeT<28>
40  {
42 
43  friend class cHashSHA256Builder;
44  public:
46  {}
47  cHashSHA224(const char* pszHexDigest)
48  {
49  put_HexDigest(pszHexDigest);
50  }
51  };
52 
53  class GRAYLIB_LINK cHashSHA256Builder : public cHashBase
54  {
59 
60  typedef cHashBase SUPER_t;
61 
62  public:
63  static const size_t k_HashSize = 32; // SHA-256
64 
65  UINT32 m_total[2];
66  UINT32 m_state[8];
67  BYTE m_buffer[64];
68 
69  BYTE m_ipad[64];
70  BYTE m_opad[64];
71 
72  bool m_is224;
73 
74  public:
75  cHashSHA256Builder(bool is224=false)
76  : m_is224(is224)
77  {
78  SetZeroHash();
79  }
80  virtual ~cHashSHA256Builder()
81  {
82  cMem::ZeroSecure(m_total, sizeof(m_total));
83  cMem::ZeroSecure(m_state, sizeof(m_state));
84  cMem::ZeroSecure(m_buffer, sizeof(m_buffer));
85  }
86  void SetZeroHash()
87  {
88  cMem::Zero(m_buffer, sizeof(m_buffer));
89  cMem::Zero(m_ipad, sizeof(m_ipad));
90  cMem::Zero(m_opad, sizeof(m_opad));
91  ResetHash();
92  }
93 
94  virtual void ResetHash() override;
95  virtual void ProcessHashBuffer(const BYTE pBuffer[64]) override;
96  virtual void AddToHash(const void* pInput, size_t nInputSize) override;
97  virtual size_t FinalizeHash(BYTE* pOutput) override;
98 
100  virtual void InitHmac(const BYTE* pKey, size_t nKeySize) override;
101  virtual size_t FinalizeHmac(BYTE pOutput[32]) override;
102  virtual void ResetHmac() override;
103  };
104 
105  class cHashSHA224Builder : public cHashSHA256Builder
106  {
108  public:
109  static const size_t k_HashSize = 28;
110  public:
111  cHashSHA224Builder() : cHashSHA256Builder(true)
112  {
113  }
114  };
115 
117  {
119  public:
121  : cHashTypeDef(SSL_Hash_SHA224, "SHA224", cHashSHA224::k_Size)
122  {
123  }
124  virtual cHashBase* AllocHash(void) const override
125  {
126  return new cHashSHA256Builder(true);
127  }
128  virtual size_t ComputeHash(BYTE* pOutput, const BYTE* pInput, size_t nInputSize) const override
129  {
130  return cHashSHA256::ComputeHash(pOutput, pInput, nInputSize, true);
131  }
132  };
134  {
136  public:
138  : cHashTypeDef(SSL_Hash_SHA256, "SHA256", cHashSHA256::k_Size)
139  {
140  }
141  virtual cHashBase* AllocHash(void) const override
142  {
143  return new cHashSHA256Builder(false);
144  }
145  virtual size_t ComputeHash(BYTE* pOutput, const BYTE* pInput, size_t nInputSize) const override
146  {
147  return cHashSHA256::ComputeHash(pOutput, pInput, nInputSize, false);
148  }
149  };
150 }
151 
152 #endif // _INC_cHashSHA256_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
Definition: cHashBase.h:20
Definition: cHashCode.h:167
Definition: cHashSHA256.h:106
static const size_t k_HashSize
Definition: cHashSHA256.h:109
cHashSHA224Builder()
Definition: cHashSHA256.h:111
Definition: cHashSHA256.h:40
cHashSHA224(const char *pszHexDigest)
Definition: cHashSHA256.h:47
cHashSHA224()
Definition: cHashSHA256.h:45
Definition: cHashSHA256.h:19
static size_t GRAYCALL ComputeHash(BYTE pOutput[32], const void *pInput, size_t nInputSize, bool is224)
Definition: cHashSHA256.cpp:14
UNITTEST_FRIEND(cHashSHA256)
cHashSHA256()
Definition: cHashSHA256.h:27
cHashSHA256(const char *pszHexDigest)
Definition: cHashSHA256.h:29
Definition: cHashTypeDef.h:21
Definition: cHashSHA256.h:117
virtual size_t ComputeHash(BYTE *pOutput, const BYTE *pInput, size_t nInputSize) const override
Definition: cHashSHA256.h:128
cHashTypeSHA224()
Definition: cHashSHA256.h:120
virtual cHashBase * AllocHash(void) const override
Definition: cHashSHA256.h:124
Definition: cHashSHA256.h:134
cHashTypeSHA256()
Definition: cHashSHA256.h:137
virtual size_t ComputeHash(BYTE *pOutput, const BYTE *pInput, size_t nInputSize) const override
Definition: cHashSHA256.h:145
virtual cHashBase * AllocHash(void) const override
Definition: cHashSHA256.h:141
Definition: cMesh.h:22
UNITTEST2_PREDEF(cQuadtree)
@ SSL_Hash_SHA256
Definition: cHashCode.h:34
@ SSL_Hash_SHA224
Definition: cHashCode.h:33
static void Zero(void *pData, size_t nSizeBlock) noexcept
Definition: cMem.h:100
static void ZeroSecure(void *pData, size_t nSizeBlock) noexcept
Definition: cMem.h:110