我正在为我的应用程序开发一个示例 OpenSSL 引擎。
#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 函数?