我已经下载了OpenSSL源代码并从中安装。我已经浏览了aes.h头文件,并且有一个函数AES_encrypt,它在aes.h中声明,但是在aes_core.c中定义。现在我想检查AES_encrypt在我的C程序中执行的时间,是否调用了AES_encrypt函数?为此,我在AES_encrypt函数中添加了一个print语句,然后从修改后的源文件中安装OpenSSL。但是当我执行我的程序时,我没有收到AES_encrypt函数的自定义消息。
以下是我在aes_core.c(/crypto / aes / aes_core.c)中所做的更改
void AES_encrypt(const unsigned char *in, unsigned char *out,
const AES_KEY *key) {
printf( " I am inside aes_core.c \n"); // added by me
我在定义了AES_encrypt()函数的每个文件中都添加了相同的消息。令我惊讶的是,AES_encrypt中没有打印任何消息(无论在何处定义此函数,我都在2-3个文件中写入)。
在我的C程序中调用AES_encrypt()之前,我调用了AES_set_encrypt_key()。
的定义
AES_set_encrypt_key()
{
printf(I am here inside aes_misc.c);// added by me
return (private_AES_set_encrypt_key()) ; // This invokes private_AES_set_encrypt_key() in other C program
}
令我惊讶的是,我只收到AES_set_encrypt_key的消息,该消息在aes_misc.c中声明(这间接调用另一个函数(返回 private_AES_set_encrypt_key())但不打印该private_AES_set_encrypt_key函数中的消息。 / p>
这是我的程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "openssl/aes.h"
int main(int argc, char* argv[])
{
AES_KEY aesKey_;
unsigned char userKey_[16];
unsigned char in_[16];
unsigned char out_[16];
strcpy((char *)userKey_,"0123456789123456");
strcpy((char *)in_,"0123456789123456");
//while(1)
{
fprintf(stdout,"Original message: %s\n", in_);
AES_set_encrypt_key(userKey_, 128, &aesKey_);
AES_encrypt(in_, out_, &aesKey_);
AES_set_decrypt_key(userKey_, 128, &aesKey_);
AES_decrypt(out_, in_,&aesKey_);
fprintf(stdout,"Recovered Original message: %s\n", in_);
}
return 0;
}
输出
Original message: 0123456789123456
I am here inside aes_misc.c
Recovered Original message: 0123456789123456
为什么会这样?如何调用其他函数?程序执行的流程是什么?我在Linux下使用GCC。
提前致谢。
答案 0 :(得分:0)
OpenSSL没有使用aes_core.c中的代码,除非您在配置时使用'no-asm'选项明确要求它。你可能已经看过了
#ifndef AES_ASM
在aes_core.c。
的开头真正的AES函数使用位于crypto / aes / asm /中的特定于体系结构的代码。根据您的体系结构以及您的CPU是否具有AES-NI指令集,您可能需要查看crypto / aes / asm / aes-x86_64.pl,crypto / aes / asm / aesni-x86_64.pl等等。 / p>