8 #include <botan/tiger.h>     9 #include <botan/exceptn.h>    10 #include <botan/loadstor.h>    11 #include <botan/parsing.h>    20 inline void mix(MemoryRegion<u64bit>& X)
    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;
    46 void 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)
    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];
    76 void Tiger::copy_out(
byte output[])
    79       output[i] = 
get_byte(7 - (i % 8), digest[i/8]);
    86                  const MemoryRegion<u64bit>& X,
   153    digest[0] = 0x0123456789ABCDEF;
   154    digest[1] = 0xFEDCBA9876543210;
   155    digest[2] = 0xF096A5B4C3B2E187;
 T load_le(const byte in[], size_t off)
std::invalid_argument Invalid_Argument
size_t output_length() const
byte get_byte(size_t byte_num, T input)
unsigned long long u64bit
Tiger(size_t out_size=24, size_t passes=3)
size_t hash_block_size() const
std::string to_string(u64bit n, size_t min_len)
void zeroise(MemoryRegion< T > &vec)