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 hash_block_size() const
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])
void zeroise(MemoryRegion< T > &vec)