Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cHashSHA1.h
Go to the documentation of this file.
1 //
4 //
5 #ifndef _INC_cHashSHA1_H
6 #define _INC_cHashSHA1_H
7 #ifndef NO_PRAGMA_ONCE
8 #pragma once
9 #endif
10 #include "cHashBase.h"
11 #include "cHashTypeDef.h"
12 
13 namespace GrayLib
14 {
16 
17  class GRAYLIB_LINK cHashSHA1 : public cHashCodeT<20>
18  {
25 
26  friend class cHashSHA1Builder;
27  public:
29  {}
30  cHashSHA1(const char* pszHexDigest)
31  {
32  put_HexDigest(pszHexDigest);
33  }
34 
35  static size_t GRAYCALL ComputeHash(BYTE pOutput[20], const void* pInput, size_t nInputSize);
36  static size_t GRAYCALL ComputeHmac(BYTE pOutput[20], const BYTE* pKey, size_t nKeySize, const void* pInput, size_t nInputSize);
37 
39  };
40 
42  {
46 
47  typedef cHashBase SUPER_t;
48 
49  public:
50  static const size_t k_HashSize = 20;
51 
52  UINT32 m_total[2];
53  UINT32 m_state[5];
54  BYTE m_buffer[64];
55 
56  BYTE m_ipad[64];
57  BYTE m_opad[64];
58 
59  public:
61  {
62  cMem::Zero(m_buffer, sizeof(m_buffer));
63  cMem::Zero(m_ipad, sizeof(m_ipad));
64  cMem::Zero(m_opad, sizeof(m_opad));
65  ResetHash();
66  }
67 
69  {
70  cMem::ZeroSecure(m_total, sizeof(m_total));
71  cMem::ZeroSecure(m_state, sizeof(m_state));
72  cMem::ZeroSecure(m_buffer, sizeof(m_buffer));
73  }
74 
75  virtual void ResetHash() override;
76  virtual void ProcessHashBuffer(const BYTE pBuffer[64]) override;
77  virtual void AddToHash(const void* pInput, size_t nInputSize) override;
78  virtual size_t FinalizeHash(BYTE* pOutput) override;
79 
81  virtual void InitHmac(const BYTE* pKey, size_t nKeySize) override;
82  virtual size_t FinalizeHmac(BYTE pOutput[20]) override;
83  virtual void ResetHmac() override;
84  };
85 
87  {
90 
91  public:
93  : cHashTypeDef(SSL_Hash_SHA1, "SHA1", cHashSHA1::k_Size)
94  {
95  }
96  virtual cHashBase* AllocHash(void) const override
97  {
98  return new cHashSHA1Builder();
99  }
100  virtual size_t ComputeHash(BYTE* pOutput, const BYTE* pInput, size_t nInputSize) const override
101  {
102  return cHashSHA1::ComputeHash(pOutput, pInput, nInputSize);
103  }
104  };
105 }
106 #endif // _INC_cHashSHA1_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: cHashSHA1.h:42
cHashSHA1Builder()
Definition: cHashSHA1.h:60
virtual ~cHashSHA1Builder()
Definition: cHashSHA1.h:68
Definition: cHashSHA1.h:18
cHashSHA1(const char *pszHexDigest)
Definition: cHashSHA1.h:30
static size_t GRAYCALL ComputeHash(BYTE pOutput[20], const void *pInput, size_t nInputSize)
Definition: cHashSHA1.cpp:14
cHashSHA1()
Definition: cHashSHA1.h:28
UNITTEST_FRIEND(cHashSHA1)
Definition: cHashTypeDef.h:21
Definition: cHashSHA1.h:87
cHashTypeSHA1()
Definition: cHashSHA1.h:92
virtual cHashBase * AllocHash(void) const override
Definition: cHashSHA1.h:96
virtual size_t ComputeHash(BYTE *pOutput, const BYTE *pInput, size_t nInputSize) const override
Definition: cHashSHA1.h:100
Definition: cMesh.h:22
UNITTEST2_PREDEF(cQuadtree)
@ SSL_Hash_SHA1
Definition: cHashCode.h:32
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