Товарищи криптоаналитики, криптоэксерты и просто криптолюбители! Перед вами модифиация TEA от Tom St Denis, который предложил увеличить размер блока до 128 бит и ключ до 256 бит. Используется забеливание, по-умолчанию предложено использовать 32 цикла, каждый с двумя раундами Сети Фейстеля. Дополнительно реализовано забеливание. Выглядит довольно солидно, но достаточно ли в данной конфигурации 32 циклов? В каждом цикле изменяются всего 64 бита блока из 128, но в отличие от TEA используются зависимые от данных операции. Какие константы сдвигов лучше использовать, 4 и 5, или все же 6 и 8 (6 и 9) ? Код (Text): void crypt (u32 * plain, u32 *key) { u32 a, b, c, d, sum, r, t; sum = 0; a = plain[0] + key[0]; b = plain[1] + key[1]; c = plain[2] + key[2]; d = plain[3] + key[3]; for (r = 0; r != 32; r++) { a = a + (((b << 4) + _lrotl (key[(sum % 4) + 4], b)) ^ (d + sum) ^ ((b >> 5) + _lrotl (key[sum % 4], b >> 27))); sum = sum + 0x9E3779B9; c = c + (((d << 4) + _lrotl (key[((sum >> 11) % 4) + 4], d)) ^ (b + sum) ^ ((d >> 5) + _lrotl (key[(sum >> 11) % 4], d >> 27))); t = a; a = b; b = c; c = d; d = t; } plain[0] = a ^ key[4]; plain[1] = b ^ key[5]; plain[2] = c ^ key[6]; plain[3] = d ^ key[7]; }