Функция шифрования

This commit is contained in:
re.kovalev 2022-06-15 17:01:06 +03:00
parent 533089aea1
commit 2c3625c389
1 changed files with 47 additions and 1 deletions

46
main.c
View File

@ -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;
}