8#include <botan/tiger.h>
9#include <botan/exceptn.h>
10#include <botan/loadstor.h>
11#include <botan/parsing.h>
22 X[0] -= X[7] ^ 0xA5A5A5A5A5A5A5A5;
25 X[3] -= X[2] ^ ((~X[1]) << 19);
28 X[6] -= X[5] ^ ((~X[4]) >> 23);
32 X[1] -= X[0] ^ ((~X[7]) << 19);
35 X[4] -= X[3] ^ ((~X[2]) >> 23);
38 X[7] -= X[6] ^ 0x0123456789ABCDEF;
46void Tiger::compress_n(
const byte input[],
size_t blocks)
48 u64bit A = digest[0], B = digest[1], C = digest[2];
50 for(
size_t i = 0; i != blocks; ++i)
52 load_le(&X[0], input, X.size());
54 pass(A, B, C, X, 5); mix(X);
55 pass(C, A, B, X, 7); mix(X);
58 for(
size_t j = 3; j != passes; ++j)
62 u64bit T = A; A = C; C = B; B = T;
66 B = digest[1] = B - digest[1];
76void Tiger::copy_out(
byte output[])
79 output[i] =
get_byte(7 - (i % 8), digest[i/8]);
153 digest[0] = 0x0123456789ABCDEF;
154 digest[1] = 0xFEDCBA9876543210;
155 digest[2] = 0xF096A5B4C3B2E187;
virtual size_t hash_block_size() const
MDx_HashFunction(size_t block_length, bool big_byte_endian, bool big_bit_endian, size_t counter_size=8)
size_t output_length() const
Tiger(size_t out_size=24, size_t passes=3)
void zeroise(MemoryRegion< T > &vec)
byte get_byte(size_t byte_num, T input)
unsigned long long u64bit
std::string to_string(u64bit n, size_t min_len)
T load_le(const byte in[], size_t off)
std::invalid_argument Invalid_Argument