参考网上的例子,实现Engine的方法,但无法测试绑定的算法。
设置了Engine的id和name,并进行了绑定
#include <openssl/engine.h>
static const char *engine_sm2_id = "sm2_engine";
static const char *engine_sm2_name = "Gmssl sm2 engine";
int gmssl_init(ENGINE *e) {
printf("sm2 Engine Initializatzion!\n");
return 786;
}
int bind_gmssl_helper(ENGINE * e, const char *id)
{
printf("begin bind ... \n");
if (!ENGINE_set_id(e, engine_sm2_id) ||
!ENGINE_set_name(e, engine_sm2_name) ||
!ENGINE_set_init_function(e,gmssl_init)
)
return 0;
return 1;
}
IMPLEMENT_DYNAMIC_CHECK_FN();
IMPLEMENT_DYNAMIC_BIND_FN(bind_gmssl_helper);
在main函数中,通过ENGINE_by_id不能创建test_engine
ENGINE *test_engine = ENGINE_by_id("sm2_engine");
if(test_engine == NULL)
{
printf("Could not load sm2 engine, why? err: %lx \n", ERR_get_error());
return;
}
运行结果
Could not load sm2 engine, why? err: 25066067