Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.5 KiB

  1. #ifndef CRYPTOPP_TRUNHASH_H
  2. #define CRYPTOPP_TRUNHASH_H
  3. #include "cryptlib.h"
  4. NAMESPACE_BEGIN(CryptoPP)
  5. class NullHash : public HashTransformation
  6. {
  7. public:
  8. void Update(const byte *input, size_t length)
  9. {CRYPTOPP_UNUSED(input);CRYPTOPP_UNUSED(length);}
  10. unsigned int DigestSize() const
  11. {return 0;}
  12. void TruncatedFinal(byte *digest, size_t digestSize)
  13. {CRYPTOPP_UNUSED(digest);CRYPTOPP_UNUSED(digestSize);}
  14. bool TruncatedVerify(const byte *digest, size_t digestLength)
  15. {CRYPTOPP_UNUSED(digest);CRYPTOPP_UNUSED(digestLength);return true;}
  16. };
  17. //! construct new HashModule with smaller DigestSize() from existing one
  18. template <class T>
  19. class TruncatedHashTemplate : public HashTransformation
  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. void Restart()
  29. {m_hm.Restart();}
  30. void Update(const byte *input, size_t length)
  31. {m_hm.Update(input, length);}
  32. unsigned int DigestSize() const {return m_digestSize;}
  33. void TruncatedFinal(byte *digest, size_t digestSize)
  34. {m_hm.TruncatedFinal(digest, digestSize);}
  35. bool TruncatedVerify(const byte *digest, size_t digestLength)
  36. {return m_hm.TruncatedVerify(digest, digestLength);}
  37. private:
  38. T m_hm;
  39. unsigned int m_digestSize;
  40. };
  41. typedef TruncatedHashTemplate<HashTransformation &> TruncatedHashModule;
  42. NAMESPACE_END
  43. #endif