diff --git a/main.c b/main.c index c630391..d8f0e38 100644 --- a/main.c +++ b/main.c @@ -156,6 +156,31 @@ void gen_round_keys(uint8_t* key, chunk* round_keys) } } +// Функция шифрования +// Поддерживает запись результата в исходный массив +void kuznechik_encrypt(chunk *round_keys, chunk in, chunk out) +{ + chunk p; + // Создадим копию входных данных + memcpy(p, in, sizeof(chunk)); + // В течении 10 итераций + for (int i = 0; i < 10; i++) + { + // Преобразование X + X(p, round_keys[i], p); + // Для всех итераций кроме последней + if (i < 9) + { + // Преобразование S + S(p); + // Преобразование L + L((uint8_t*)&p); + } + } + // Копируем полученный результат + memcpy(out, p, sizeof(chunk)); +} + // Печать чанка void print_chunk(chunk p) { @@ -188,6 +213,27 @@ int main(int argc, char *argv[]) for (i = 0; i < 10; i++) print_chunk(round_keys[i]); - + // Открытые данные + uint8_t data[KUZNECHIK_BLOCK_SIZE] = { + 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x00, + 0xff,0xee,0xdd,0xcc,0xbb,0xaa,0x99,0x88 + }; + + // Вывод открытых данных + printf("Открытые данные:\n"); + // (void*) для избежания предупреждений о неверном типе, передаваемом в функцию + print_chunk((void*)data); + + // Зашифрованные данные + chunk encrypted; + + // Шифрование + // (void*) для избежания предупреждений о неверном типе, передаваемом в функцию + kuznechik_encrypt(round_keys, (void*)data, encrypted); + + // Вывод зашифрованных данных + printf("Зашифрованные данные:\n"); + print_chunk(encrypted); + return 0; } \ No newline at end of file