Функция шифрования
This commit is contained in:
parent
533089aea1
commit
2c3625c389
48
main.c
48
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;
|
||||
}
|
Loading…
Reference in New Issue