From 2c3625c389d93c2fb146b20d8f67be8cf2e76786 Mon Sep 17 00:00:00 2001 From: "re.kovalev" Date: Wed, 15 Jun 2022 17:01:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=88=D0=B8=D1=84=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) 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