Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cHashBase.h
Go to the documentation of this file.
1 //
4 //
5 
6 #ifndef _INC_cHashBase_H
7 #define _INC_cHashBase_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "cHashCode.h"
13 #include "GrayCore/include/cBits.h"
14 #include "GrayCore/include/cMem.h"
16 
17 namespace GrayLib
18 {
19  class GRAYLIB_LINK cHashBase : public CObject // for cObjectFactory.
20  {
24  public:
25  static const BYTE k_Padding[128];
26  static const size_t k_HashSizeMax = 64;
27 
28  public:
29  virtual ~cHashBase()
30  {
32  }
33 
34  virtual void ResetHash() = 0;
35 
36  virtual void ProcessHashBuffer(const BYTE* pBuffer)
37  {
40  UNREFERENCED_PARAMETER(pBuffer);
41  }
42 
44  virtual void AddToHash(const void* pInput, size_t nInputSize) = 0;
45 
47  virtual size_t FinalizeHash(OUT BYTE* pOutput) = 0;
48 
49  size_t ComputeHash(BYTE* pOutput, const void* pInput, size_t nInputSize)
50  {
52  AddToHash(pInput, nInputSize);
53  return FinalizeHash(pOutput);
54  }
55 
56  virtual void InitHmac(const BYTE* pKey, size_t nKeySize)
57  {
60  UNREFERENCED_PARAMETER(nKeySize);
61  }
62 
64  virtual size_t FinalizeHmac(OUT BYTE* pOutput)
65  {
66  UNREFERENCED_PARAMETER(pOutput);
67  return 0;
68  }
69 
70  virtual void ResetHmac()
71  {
73  ResetHash();
74  }
75 
76  size_t ComputeHmac(BYTE* pOutput, const BYTE* pKey, size_t nKeySize, const void* pInput, size_t nInputSize)
77  {
79  InitHmac(pKey, nKeySize);
80  AddToHash(pInput, nInputSize);
81  return FinalizeHmac(pOutput);
82  }
83 
86  {
87  AddToHash(m.get_Data(), m.get_DataSize());
88  }
89 
90  StrLen_t AddToHashFromStr(const char* pszStr);
91  HRESULT AddToHashFromStream(cStreamInput& file, IStreamProgressCallback* pProgress = nullptr);
92  HRESULT AddToHashFromFile(const FILECHAR_t* pszFileName, IStreamProgressCallback* pProgress = nullptr);
93 
94  HRESULT ComputeHashFromStream(OUT BYTE* pOutput, cStreamInput& fin, IStreamProgressCallback* pProgress = nullptr);
95  HRESULT ComputeHashFromFile(OUT BYTE* pOutput, const FILECHAR_t* pszFileName, IStreamProgressCallback* pProgress = nullptr);
96  };
97 
98  typedef cMemBlock cHashTestData; // static init.
99  typedef cMemBlock cHashTestKey; // static init.
100 }
101 
102 #endif
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define UNREFERENCED_PARAMETER(P)
< _WIN32 type thing. get rid of stupid warning.
Definition: SysTypes.h:299
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cHashBase.h:20
virtual size_t FinalizeHash(OUT BYTE *pOutput)=0
Digest finalization function.
size_t ComputeHmac(BYTE *pOutput, const BYTE *pKey, size_t nKeySize, const void *pInput, size_t nInputSize)
Definition: cHashBase.h:76
virtual void AddToHash(const void *pInput, size_t nInputSize)=0
Digest update function.
size_t ComputeHash(BYTE *pOutput, const void *pInput, size_t nInputSize)
Definition: cHashBase.h:49
virtual ~cHashBase()
Definition: cHashBase.h:29
void AddToHashFromBlock(const cHeapBlock &m)
Helpers.
Definition: cHashBase.h:85
virtual void InitHmac(const BYTE *pKey, size_t nKeySize)
Definition: cHashBase.h:56
virtual void ResetHash()=0
virtual void ProcessHashBuffer(const BYTE *pBuffer)
Definition: cHashBase.h:36
virtual void ResetHmac()
Definition: cHashBase.h:70
virtual size_t FinalizeHmac(OUT BYTE *pOutput)
HMAC finalization function.
Definition: cHashBase.h:64
Definition: cObject.h:67
Definition: cHeap.h:156
void * get_Data() const noexcept
Definition: cHeap.h:363
Definition: cMem.h:311
size_t get_DataSize() const noexcept
Definition: cMem.h:344
Definition: cStream.h:306
Definition: cMesh.h:22
cMemBlock cHashTestData
Definition: cHashBase.h:98
cMemBlock cHashTestKey
Definition: cHashBase.h:99
int StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22
Definition: cStreamProgress.h:168