Belle II Software  release-05-02-19
Hash.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2010 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Martin Ritter *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <framework/utilities/sha3hash/Hash.h>
12 #include <framework/logging/Logger.h>
13 
14 extern "C" {
15 #include "KeccakHash.h"
16 }
19 struct KeccakHashInstance: public Keccak_HashInstance {};
20 
21 namespace Belle2 {
27  SHA3Hash::SHA3Hash(EHashMode mode): m_mode(mode)
28  {
30  clear();
31  }
32 
34  {
35  delete m_instance;
36  }
37 
39  {
40  //Init the hash structure
41  switch (m_mode) {
42  case c_SHA3_224:
43  Keccak_HashInitialize_SHA3_224(m_instance);
44  break;
45  case c_SHA3_256:
46  Keccak_HashInitialize_SHA3_256(m_instance);
47  break;
48  case c_SHA3_384:
49  Keccak_HashInitialize_SHA3_384(m_instance);
50  break;
51  case c_SHA3_512:
52  Keccak_HashInitialize_SHA3_512(m_instance);
53  break;
54  default:
55  B2FATAL("Unknown mode for SHA3Hash");
56  }
57  }
58 
59  void SHA3Hash::update(int n, unsigned char* buff)
60  {
61  Keccak_HashUpdate(m_instance, buff, n * 8);
62  }
63 
64  void SHA3Hash::getHash(unsigned char* buff)
65  {
66  Keccak_HashFinal(m_instance, buff);
67  }
68 
69  std::vector<unsigned char> SHA3Hash::getHash()
70  {
71  std::vector<unsigned char> buff(m_mode);
72  getHash(buff.data());
73  return buff;
74  }
75 
76  ShakeHash::ShakeHash(EHashMode mode): m_mode(mode)
77  {
79  clear();
80  }
81 
83  {
84  delete m_instance;
85  }
86 
88  {
89  //Init the hash structure
90  switch (m_mode) {
91  case c_SHAKE128:
92  Keccak_HashInitialize_SHAKE128(m_instance);
93  break;
94  case c_SHAKE256:
95  Keccak_HashInitialize_SHAKE256(m_instance);
96  break;
97  default:
98  B2FATAL("Unknown mode for ShakeHash");
99  }
100  }
101 
102  void ShakeHash::update(int n, unsigned char* buff)
103  {
104  Keccak_HashUpdate(m_instance, buff, n * 8);
105  }
106 
107  void ShakeHash::getHash(int n, unsigned char* buff)
108  {
109  Keccak_HashSqueeze(m_instance, buff, n * 8);
110  }
111 
113 } //Belle2 namespace
Belle2::ShakeHash::c_SHAKE256
@ c_SHAKE256
variable hash size with up to 256 bit collision resistance
Definition: Hash.h:65
KeccakHashInstance
Since we cannot forward declare the memory structure directly due to some typedeffing we inherit from...
Definition: Hash.cc:19
Belle2::SHA3Hash::update
void update(int n, unsigned char *buff)
update the internal state by adding n bytes of data from buff
Definition: Hash.cc:59
Belle2::ShakeHash::EHashMode
EHashMode
Available hash modes according to FIPS 202 draft.
Definition: Hash.h:63
Belle2::SHA3Hash::c_SHA3_512
@ c_SHA3_512
384bit output size
Definition: Hash.h:32
Belle2::ShakeHash::getHash
void getHash(int n, unsigned char *buff)
obtain the hash value with a length of n bytes into buff
Definition: Hash.cc:107
Belle2::SHA3Hash::EHashMode
EHashMode
Available hash modes according to FIPS 202 draft.
Definition: Hash.h:28
Belle2::ShakeHash::~ShakeHash
~ShakeHash()
destructor freeing the memory
Definition: Hash.cc:82
Belle2::SHA3Hash::clear
void clear()
reinit the hash structure to create a new hash sum
Definition: Hash.cc:38
Belle2::SHA3Hash::c_SHA3_256
@ c_SHA3_256
224bit output size
Definition: Hash.h:30
Belle2::ShakeHash::m_instance
KeccakHashInstance * m_instance
memory structure to calculate the hash value
Definition: Hash.h:81
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::SHA3Hash::m_instance
KeccakHashInstance * m_instance
memory structure to calculate the hash value
Definition: Hash.h:53
Belle2::SHA3Hash::m_mode
EHashMode m_mode
chosen hash mode
Definition: Hash.h:55
Belle2::ShakeHash::ShakeHash
ShakeHash(EHashMode mode)
constructor initializing the hash structure
Definition: Hash.cc:76
Belle2::SHA3Hash::SHA3Hash
SHA3Hash(EHashMode length)
Constructor initializing the hash structure with a given output size.
Definition: Hash.cc:27
Belle2::SHA3Hash::c_SHA3_384
@ c_SHA3_384
256bit output size
Definition: Hash.h:31
Belle2::SHA3Hash::~SHA3Hash
~SHA3Hash()
destructor freeing the memory
Definition: Hash.cc:33
Belle2::ShakeHash::c_SHAKE128
@ c_SHAKE128
variable hash size with up to 128 bit collision resistance
Definition: Hash.h:64
Belle2::ShakeHash::m_mode
EHashMode m_mode
chosen hash mode
Definition: Hash.h:83
Belle2::SHA3Hash::getHash
std::vector< unsigned char > getHash()
obtain the hash value as a vector of unsigned char
Definition: Hash.cc:69