CMSDK  2.0.1
keccak.h
1 // //////////////////////////////////////////////////////////
2 // keccak.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 Keccak //: public Hash
37 {
38 public:
40  enum Bits { Keccak224 = 224, Keccak256 = 256, Keccak384 = 384, Keccak512 = 512 };
41 
43  explicit Keccak(Bits bits = Keccak256);
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 };
void add(const void *data, size_t numBytes)
add arbitrary number of bytes
Definition: keccak.cpp:172
void reset()
restart
Definition: keccak.cpp:25
std::string operator()(const void *data, size_t numBytes)
compute hash of a memory block
Definition: keccak.cpp:275
Bits
algorithm variants
Definition: keccak.h:40
Keccak(Bits bits=Keccak256)
same as reset()
Definition: keccak.cpp:16
compute Keccak hash (designated SHA3)
Definition: keccak.h:36
std::string getHash()
return latest hash as hex characters
Definition: keccak.cpp:236