8 #include <botan/seed.h>
9 #include <botan/loadstor.h>
27 for(
size_t i = 0; i != blocks; ++i)
36 for(
size_t j = 0; j != 16; j += 2)
41 T1 = G(B2 ^ B3 ^ K[2*j+1]);
48 T1 = G(B0 ^ B1 ^ K[2*j+3]);
67 for(
size_t i = 0; i != blocks; ++i)
76 for(
size_t j = 0; j != 16; j += 2)
81 T1 = G(B2 ^ B3 ^ K[31-2*j]);
88 T1 = G(B0 ^ B1 ^ K[29-2*j]);
105 void SEED::key_schedule(
const byte key[],
size_t)
108 0x9E3779B9, 0x3C6EF373, 0x78DDE6E6, 0xF1BBCDCC,
109 0xE3779B99, 0xC6EF3733, 0x8DDE6E67, 0x1BBCDCCF,
110 0x3779B99E, 0x6EF3733C, 0xDDE6E678, 0xBBCDCCF1,
111 0x779B99E3, 0xEF3733C6, 0xDE6E678D, 0xBCDCCF1B
114 SecureVector<u32bit> WK(4);
116 for(
size_t i = 0; i != 4; ++i)
121 for(
size_t i = 0; i != 16; i += 2)
123 K[2*i ] = G(WK[0] + WK[2] - RC[i]);
124 K[2*i+1] = G(WK[1] - WK[3] + RC[i]) ^ K[2*i];
127 WK[0] = (WK[0] >> 8) | (
get_byte(3, WK[1]) << 24);
128 WK[1] = (WK[1] >> 8) | (T << 24);
130 K[2*i+2] = G(WK[0] + WK[2] - RC[i+1]);
131 K[2*i+3] = G(WK[1] - WK[3] + RC[i+1]) ^ K[2*i+2];
134 WK[3] = (WK[3] << 8) |
get_byte(0, WK[2]);
135 WK[2] = (WK[2] << 8) | T;
void decrypt_n(const byte in[], byte out[], size_t blocks) const
byte get_byte(size_t byte_num, T input)
void encrypt_n(const byte in[], byte out[], size_t blocks) const
u32bit load_be< u32bit >(const byte in[], size_t off)
void store_be(u16bit in, byte out[2])