8 #include <botan/whrlpool.h>     9 #include <botan/loadstor.h>    16 void Whirlpool::compress_n(
const byte in[], 
size_t blocks)
    18    static const u64bit RC[10] = {
    19       0x1823C6E887B8014F, 0x36A6D2F5796F9152,
    20       0x60BC9B8EA30C7B35, 0x1DE0D7C22E4BFE57,
    21       0x157737E59FF04ADA, 0x58C9290AB1A06B85,
    22       0xBD5D10F4CB3E0567, 0xE427418BA77D95D8,
    23       0xFBEE7C66DD17479E, 0xCA2DBF07AD5A8333
    26    for(
size_t i = 0; i != blocks; ++i)
    30       u64bit K0, K1, K2, K3, K4, K5, K6, K7;
    31       K0 = digest[0]; K1 = digest[1]; K2 = digest[2]; K3 = digest[3];
    32       K4 = digest[4]; K5 = digest[5]; K6 = digest[6]; K7 = digest[7];
    34       u64bit B0, B1, B2, B3, B4, B5, B6, B7;
    35       B0 = K0 ^ M[0]; B1 = K1 ^ M[1]; B2 = K2 ^ M[2]; B3 = K3 ^ M[3];
    36       B4 = K4 ^ M[4]; B5 = K5 ^ M[5]; B6 = K6 ^ M[6]; B7 = K7 ^ M[7];
    38       for(
size_t j = 0; j != 10; ++j)
    40          u64bit T0, T1, T2, T3, T4, T5, T6, T7;
    74          K0 = T0; K1 = T1; K2 = T2; K3 = T3;
    75          K4 = T4; K5 = T5; K6 = T6; K7 = T7;
   110          B0 = T0; B1 = T1; B2 = T2; B3 = T3;
   111          B4 = T4; B5 = T5; B6 = T6; B7 = T7;
   114       digest[0] ^= B0 ^ M[0];
   115       digest[1] ^= B1 ^ M[1];
   116       digest[2] ^= B2 ^ M[2];
   117       digest[3] ^= B3 ^ M[3];
   118       digest[4] ^= B4 ^ M[4];
   119       digest[5] ^= B5 ^ M[5];
   120       digest[6] ^= B6 ^ M[6];
   121       digest[7] ^= B7 ^ M[7];
   130 void Whirlpool::copy_out(
byte output[])
 T load_be(const byte in[], size_t off)
size_t output_length() const
byte get_byte(size_t byte_num, T input)
unsigned long long u64bit
void store_be(u16bit in, byte out[2])
size_t hash_block_size() const
void zeroise(MemoryRegion< T > &vec)