Как скомпилировать / запустить C-код для вызова libtomcrypt AES 2KB реализации на основе таблицы поиска
В криптографической библиотеке Libtomcrypt шифрование / дешифрование AES осуществляется двумя различными способами.
- Использование справочной таблицы размером 8 КБ (шифрование)/5 КБ (дешифрование).
- Использование справочной таблицы размером 2 КБ (шифрование)/2 КБ (дешифрование). В этом случае
LTC_SMALL_CODE
правда.
Это исходный код aes_tab.c
а также aes.c
,
#ifdef LTC_SMALL_CODE
#define Te0(x) TE0[x]
#define Te1(x) RORc(TE0[x], 8)
#define Te2(x) RORc(TE0[x], 16)
#define Te3(x) RORc(TE0[x], 24)
#define Td0(x) TD0[x]
#define Td1(x) RORc(TD0[x], 8)
#define Td2(x) RORc(TD0[x], 16)
#define Td3(x) RORc(TD0[x], 24)
#define Te4_0 0x000000FF & Te4
#define Te4_1 0x0000FF00 & Te4
#define Te4_2 0x00FF0000 & Te4
#define Te4_3 0xFF000000 & Te4
#else
#define Te0(x) TE0[x]
#define Te1(x) TE1[x]
#define Te2(x) TE2[x]
#define Te3(x) TE3[x]
#define Td0(x) TD0[x]
#define Td1(x) TD1[x]
#define Td2(x) TD2[x]
#define Td3(x) TD3[x]
#endif /* ENCRYPT_ONLY */
#endif /* SMALL CODE */
Следующий код C выполняет шифрование и дешифрование AES с использованием криптографической библиотеки libtomcrypt. Тем не менее, код вызывает реализацию AES, которая использует таблицу поиска 8KB/5KB (означает LTC_SMALL_CODE
состояние становится false
).
//aes_tom_example.c
#include <tomcrypt.h>
static const unsigned char key[] = {
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
};
int main()
{
unsigned char text[]="hello world!";
unsigned char enc_out[80];
unsigned char dec_out[80];
symmetric_key skey;
int keysize = 32;
int status;
status = aes_keysize(&keysize);
status = aes_setup(key, 32, 0, &skey);
status = aes_ecb_encrypt(text,enc_out,&skey);
status = aes_ecb_decrypt(enc_out, dec_out, &skey);
int i;
printf("original:\t");
for(i=0;*(text+i)!=0x00;i++)
printf("%c ",*(text+i));
printf("\nencrypted:\t");
for(i=0;*(enc_out+i)!=0x00;i++)
printf("%X ",*(enc_out+i));
printf("\ndecrypted:\t");
for(i=0;*(dec_out+i)!=0x00;i++)
printf("%c ",*(dec_out+i));
printf("\n");
return 0;
}
Скомпилируйте и запустите, как показано ниже,
gcc aes_tom_example.c -o aes -ltomcrypt
./aes
Sample Output
original: h e l l o w o r l d !
encrypted: AE 21 D5 A5 5E D5 F1 EF 6D FC E5 30 60 34 3D 12
decrypted: h e l l o w o r l d !
Мои вопросы:
Как изменить этот код C так, чтобы он вызывал
#ifdef LTC_SMALL_CODE
часть условия (означает, что вызван код реализации на основе таблицы поиска 2KB)?Как запустить приведенный выше код с
LTC_SMALL_CODE
состояниеtrue
?
Нужен ли какой-то параметр перед вызовом SETUP (aes_setup
) функция? Или мне нужно передать некоторые параметры во время компиляции / выполнения?
Было бы здорово, если бы кто-нибудь смог предоставить ссылку или пример кода.
Я использую Ubuntu 16.04 / Debian 8. gcc v-4.9.