1 /* 2 * Tiger 3 * (C) 1999-2007 Jack Lloyd 4 * 5 * Botan is released under the Simplified BSD License (see license.txt) 6 */ 7 8 #ifndef BOTAN_TIGER_H_ 9 #define BOTAN_TIGER_H_ 10 11 #include <botan/mdx_hash.h> 12 13 BOTAN_FUTURE_INTERNAL_HEADER(tiger.h) 14 15 namespace Botan { 16 17 /** 18 * Tiger 19 */ 20 class BOTAN_PUBLIC_API(2,0) Tiger final : public MDx_HashFunction 21 { 22 public: 23 std::string name() const override; output_length()24 size_t output_length() const override { return m_hash_len; } 25 clone()26 HashFunction* clone() const override 27 { 28 return new Tiger(output_length(), m_passes); 29 } 30 31 std::unique_ptr<HashFunction> copy_state() const override; 32 33 void clear() override; 34 35 /** 36 * @param out_size specifies the output length; can be 16, 20, or 24 37 * @param passes to make in the algorithm 38 */ 39 Tiger(size_t out_size = 24, size_t passes = 3); 40 private: 41 void compress_n(const uint8_t[], size_t block) override; 42 void copy_out(uint8_t[]) override; 43 44 static void pass(uint64_t& A, uint64_t& B, uint64_t& C, 45 const secure_vector<uint64_t>& M, 46 uint8_t mul); 47 48 static const uint64_t SBOX1[256]; 49 static const uint64_t SBOX2[256]; 50 static const uint64_t SBOX3[256]; 51 static const uint64_t SBOX4[256]; 52 53 secure_vector<uint64_t> m_X, m_digest; 54 const size_t m_hash_len, m_passes; 55 }; 56 57 } 58 59 #endif 60