Crypto++
trunhash.h
1 #ifndef CRYPTOPP_TRUNHASH_H
2 #define CRYPTOPP_TRUNHASH_H
3 
4 #include "cryptlib.h"
5 
6 NAMESPACE_BEGIN(CryptoPP)
7 
9 {
10 public:
11  void Update(const byte *input, size_t length) {}
12  unsigned int DigestSize() const {return 0;}
13  void TruncatedFinal(byte *digest, size_t digestSize) {}
14  bool TruncatedVerify(const byte *digest, size_t digestLength) {return true;}
15 };
16 
17 //! construct new HashModule with smaller DigestSize() from existing one
18 template <class T>
20 {
21 public:
22  TruncatedHashTemplate(T hm, unsigned int digestSize)
23  : m_hm(hm), m_digestSize(digestSize) {}
24  TruncatedHashTemplate(const byte *key, size_t keyLength, unsigned int digestSize)
25  : m_hm(key, keyLength), m_digestSize(digestSize) {}
26  TruncatedHashTemplate(size_t digestSize)
27  : m_digestSize(digestSize) {}
28 
29  void Restart()
30  {m_hm.Restart();}
31  void Update(const byte *input, size_t length)
32  {m_hm.Update(input, length);}
33  unsigned int DigestSize() const {return m_digestSize;}
34  void TruncatedFinal(byte *digest, size_t digestSize)
35  {m_hm.TruncatedFinal(digest, digestSize);}
36  bool TruncatedVerify(const byte *digest, size_t digestLength)
37  {return m_hm.TruncatedVerify(digest, digestLength);}
38 
39 private:
40  T m_hm;
41  unsigned int m_digestSize;
42 };
43 
45 
46 NAMESPACE_END
47 
48 #endif