链接到OpenSSL函数中的ENGINE_load_private_key

时间:2017-12-11 10:26:53

标签: openssl openssl-engine

我正在为我的应用程序开发一个示例OpenSSL Engine。

#include <openssl/engine.h>

static const char *engine_id = "sample";
static const char *engine_name = "developed by Devang";

static int engine_init(ENGINE *e);  
static EVP_PKEY *load_key(ENGINE *e, const char *id, UI_METHOD *ui, void *cb);

int bind_helper(ENGINE*e, const char *id)  {
      if(!ENGINE_set_id(e, engine_id) ||
         !ENGINE_set_init_function(e, engine_init) ||
         !ENGINE_set_load_privkey_function(e, load_key))
         return 0;

  return 1;  

}

IMPLEMENT_DYNAMIC_CHECK_FN(); IMPLEMENT_DYANMIC_BIND_FN(bind_helper);

static int engine_init(ENGINE *e) 
{
    printf("In engine_init \n"); 
} 
static EVP_PKEY *load_key(ENGINE *e, const char *id, UI_METHOD *ui, void *cb) {    
    printf(" In load_key function\n"); 
}

我构建了这个openssl引擎(sample.so)和我投入的共享库 /usr/lib/x86_64-linu-gnu/openssl-1.0.0/engines /

我创建了一个示例应用程序 sampleTest.c

#include <openssl/engine.h>

int main(void)
{
    ENGINE_load_dynamic();
    ENGINE *en = ENGINE_by_id("sample");
    ENGINE_init(en);
    ENGINE_load_private_key(en, NULL, UI_OpenSSL(), NULL);
}

我运行此示例应用程序, 输出:

  

在engine_init

为什么不调用load_key函数? 任何人都可以帮我链接到我的应用程序中的load_key函数吗?

1 个答案:

答案 0 :(得分:1)

尝试从 engine_init() 函数返回 1。 Openssl 会认为你的引擎初始化失败,否则不会使用更多的函数引用。

即:它认为您的“硬件加速器”没有插入或其他类型的故障。

get

我将此添加到您的示例中,并从您正在寻找的 load_key() 获得了输出。