1 /* 2 * Whirlpool 3 * (C) 1999-2007 Jack Lloyd 4 * 5 * Botan is released under the Simplified BSD License (see license.txt) 6 */ 7 8 #ifndef BOTAN_WHIRLPOOL_H_ 9 #define BOTAN_WHIRLPOOL_H_ 10 11 #include <botan/mdx_hash.h> 12 13 BOTAN_FUTURE_INTERNAL_HEADER(whrlpool.h) 14 15 namespace Botan { 16 17 /** 18 * Whirlpool 19 */ 20 class BOTAN_PUBLIC_API(2,0) Whirlpool final : public MDx_HashFunction 21 { 22 public: name()23 std::string name() const override { return "Whirlpool"; } output_length()24 size_t output_length() const override { return 64; } clone()25 HashFunction* clone() const override { return new Whirlpool; } 26 std::unique_ptr<HashFunction> copy_state() const override; 27 28 void clear() override; 29 Whirlpool()30 Whirlpool() : MDx_HashFunction(64, true, true, 32), m_M(8), m_digest(8) 31 { clear(); } 32 private: 33 void compress_n(const uint8_t[], size_t blocks) override; 34 void copy_out(uint8_t[]) override; 35 36 static const uint64_t C0[256]; 37 static const uint64_t C1[256]; 38 static const uint64_t C2[256]; 39 static const uint64_t C3[256]; 40 static const uint64_t C4[256]; 41 static const uint64_t C5[256]; 42 static const uint64_t C6[256]; 43 static const uint64_t C7[256]; 44 45 secure_vector<uint64_t> m_M, m_digest; 46 }; 47 48 } 49 50 #endif 51