有没有办法自定义OpenSSL源代码

时间:2014-02-07 18:24:46

标签: c linux encryption openssl

我已经下载了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。

提前致谢。

1 个答案:

答案 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>