OpenSSL Engine编写方法

OpenSSL引擎分为两类:

  • 动态引擎,Version => 0.9.7
  • 静态引擎,0.9.7 <= Version < 1.1.0
    以下介绍以动态Engine为例。

1. AES引擎

Openssl定义好的主接口

IMPLEMENT_DYNAMIC_BIND_FN(bind_func)
IMPLEMENT_DYNAMIC_CHECK_FN()

只需自定义bind函数即可,而bind函数的定义如下所示:

Static int bind(ENGINE *e){
   
	available(); //自定义函数,用于一些硬件实现时检查硬件是否支持,可选
	ENGINE_set_id(e,id);//设置ENGINE的唯一性ID
	ENGINE_set_name(e,name); //设置ENGINE可识别名字
	ENGINE_set_init_function(e,init_func); //加解密算法的初始化工作,内容可为空
	ENGINE_set_cipher(e,cipher_func); //加解密算法的真实实现
}

可以发现其中最为重要的是cipher_func函数,其定义如下所示:

static int cipher_func(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid){
   
	
}

其中,EVP_CIPHER的定义如下图所示,do_cipher 函数是算法过程的真正实现过程。

在这里插入图片描述

测试方法:

openssl enc -aes-128-ecb -nopad -in plain -out cipher -e -K 0123456789ABCDEFFEDCBA9876543210 -engine `pwd`/SM4.so

2. SHA引擎

以SM3为例进行说明,主要是实现以下函数接口。

static int sm3_init(EVP_MD_CTX *ctx);
static int sm3_update(EVP_MD_CTX *ctx,const void *data,size_t len);
static int sm3_final(EVP_MD_CTX *ctx,unsigned char *md);

static const EVP_MD digest_sm3 ={
   
	NID_sha256,
	0,
	32,
	0,
	sm3_init,
	sm3_update,
	sm3_final,
	NULL,
	
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值