Как скомпилировать / запустить C-код для вызова libtomcrypt AES 2KB реализации на основе таблицы поиска

В криптографической библиотеке Libtomcrypt шифрование / дешифрование AES осуществляется двумя различными способами.

  1. Использование справочной таблицы размером 8 КБ (шифрование)/5 КБ (дешифрование).
  2. Использование справочной таблицы размером 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.

0 ответов

Другие вопросы по тегам