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