8 #include <botan/wid_wake.h>
9 #include <botan/loadstor.h>
10 #include <botan/internal/xor_buf.h>
19 while(length >= buffer.
size() - position)
21 xor_buf(out, in, &buffer[position], buffer.
size() - position);
22 length -= (buffer.
size() - position);
23 in += (buffer.
size() - position);
24 out += (buffer.
size() - position);
25 generate(buffer.
size());
27 xor_buf(out, in, &buffer[position], length);
34 void WiderWake_41_BE::generate(
size_t length)
37 R2 = state[2],
R3 = state[3],
40 for(
size_t i = 0; i != length; i += 8)
46 R0a = R4 +
R3; R3 +=
R2; R2 +=
R1; R1 +=
R0;
47 R0a = (R0a >> 8) ^ T[(R0a & 0xFF)];
48 R1 = (R1 >> 8) ^ T[(R1 & 0xFF)];
49 R2 = (R2 >> 8) ^ T[(R2 & 0xFF)];
50 R3 = (R3 >> 8) ^ T[(R3 & 0xFF)];
55 R0a = R4 +
R3; R3 +=
R2; R2 +=
R1; R1 +=
R0;
56 R0a = (R0a >> 8) ^ T[(R0a & 0xFF)];
57 R1 = (R1 >> 8) ^ T[(R1 & 0xFF)];
58 R2 = (R2 >> 8) ^ T[(R2 & 0xFF)];
59 R3 = (R3 >> 8) ^ T[(R3 & 0xFF)];
75 void WiderWake_41_BE::key_schedule(
const byte key[],
size_t)
77 for(
size_t i = 0; i != 4; ++i)
80 static const u32bit MAGIC[8] = {
81 0x726A8F3B, 0xE69A3B5C, 0xD3C71FE5, 0xAB3C73D2,
82 0x4D3A8EB3, 0x0396D6E8, 0x3D4C2F7A, 0x9EE27CF3 };
84 for(
size_t i = 0; i != 4; ++i)
87 for(
size_t i = 4; i != 256; ++i)
89 u32bit X = T[i-1] + T[i-4];
90 T[i] = (X >> 3) ^ MAGIC[X % 8];
93 for(
size_t i = 0; i != 23; ++i)
97 u32bit Z = (T[59] | 0x01000001) & 0xFF7FFFFF;
98 for(
size_t i = 0; i != 256; ++i)
100 X = (X & 0xFF7FFFFF) + Z;
101 T[i] = (T[i] & 0x00FFFFFF) ^ X;
104 X = (T[X & 0xFF] ^ X) & 0xFF;
107 for(
size_t i = 1; i != 256; ++i)
110 X = (T[i ^ X] ^ X) & 0xFF;
117 const byte ZEROS[8] = { 0 };
118 set_iv(ZEROS,
sizeof(ZEROS));
129 for(
size_t i = 0; i != 4; ++i)
133 state[0] ^= state[4];
137 generate(buffer.
size());
void cipher(const byte[], byte[], size_t)
void set_iv(const byte[], size_t)
u32bit load_be< u32bit >(const byte in[], size_t off)
void store_be(u16bit in, byte out[2])
void xor_buf(byte out[], const byte in[], size_t length)
bool valid_iv_length(size_t iv_len) const
void zeroise(MemoryRegion< T > &vec)