CMSDK  2.0.1
sha3.h
1 // //////////////////////////////////////////////////////////
2 // sha3.h
3 // Copyright (c) 2014,2015 Stephan Brumme. All rights reserved.
4 // see http://create.stephan-brumme.com/disclaimer.html
5 //
6 
7 #pragma once
8 
9 //#include "hash.h"
10 #include <string>
11 
12 // define fixed size integer types
13 #ifdef _MSC_VER
14 // Windows
15 typedef unsigned __int8 uint8_t;
16 typedef unsigned __int64 uint64_t;
17 #else
18 // GCC
19 #include <stdint.h>
20 #endif
21 
22 
24 
36 class SHA3 //: public Hash
37 {
38 public:
40  enum Bits { Bits224 = 224, Bits256 = 256, Bits384 = 384, Bits512 = 512 };
41 
43  explicit SHA3(Bits bits = Bits256);
44 
46  std::string operator()(const void* data, size_t numBytes);
48  std::string operator()(const std::string& text);
49 
51  void add(const void* data, size_t numBytes);
52 
54  std::string getHash();
55 
57  void reset();
58 
59 private:
61  void processBlock(const void* data);
63  void processBuffer();
64 
66  enum { StateSize = 1600 / (8 * 8),
67  MaxBlockSize = 200 - 2 * (224 / 8) };
68 
70  uint64_t m_hash[StateSize];
72  uint64_t m_numBytes;
74  size_t m_blockSize;
76  size_t m_bufferSize;
78  uint8_t m_buffer[MaxBlockSize];
80  Bits m_bits;
81 };
compute SHA3 hash
Definition: sha3.h:36
Bits
algorithm variants
Definition: sha3.h:40
void reset()
restart
Definition: sha3.cpp:25
std::string operator()(const void *data, size_t numBytes)
compute hash of a memory block
Definition: sha3.cpp:275
std::string getHash()
return latest hash as hex characters
Definition: sha3.cpp:235
SHA3(Bits bits=Bits256)
same as reset()
Definition: sha3.cpp:16
void add(const void *data, size_t numBytes)
add arbitrary number of bytes
Definition: sha3.cpp:172