在Libtomcrypt加密库中,AES加密/解密以两种不同的方式实现。
LTC_SMALL_CODE
为真。#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代码使用libtomcrypt加密库执行AES加密和解密。
但是,代码调用使用8KB / 5KB查找表的AES实现
(表示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。