OpenSSL中EC_GROUP_free和EC_KEY_free出错

在实现SM2算法测试用例时,遇到OpenSSL中调用EC_GROUP_free和EC_KEY_free导致程序崩溃的问题。错误发生在释放EC_GROUP和EC_KEY对象之后,尽管ERR_get_error和ERR_error_string未报告错误。通过调整代码结构和避免使用EC_POINT_new分配空间,解决了潜在的内存冲突,使得EC_KEY_free不再崩溃。
摘要由CSDN通过智能技术生成

这两天想根据国家密码管理局提供的SM2算法,写一个使用椭圆曲线加解密和一个数字签名验签的测试用例,SM2算法提供的加解密逻辑和数字签名验签逻辑与OpenSSL中提供的示例有一定的差别,OpenSSL提供的示例都是按照ECC原理模型来写的,而SM2算法在基本原理模型上有一定的扩展~~

在调试数字签名验签的测试用例时,发现在EC_GROUP_free函数和EC_KEY_free函数运行时程序直接崩溃,崩溃一般是由于内存访问错误引起的,在调用这两个函数前,使用ERR_get_error和ERR_error_string来获取错误原因时,确显示没有错误~~

为了找到出错地方,想到移动EC_GROUP_free函数和EC_KEY_free函数的位置,后来发现在某个函数运行后使用EC_GROUP_free和EC_KEY_free时发生崩溃,进去函数后,没找到任何错误。后来看到程序代码中有一处可以优化,即把

EC_POINT *Q = NULL;
Q = EC_POINT_new(group);
Q = EC_KEY_get0_public_key(key);
EC_POINT_mul(group,C2,NULL,Q,t,ctx);
EC_POINT_free(Q);
 

优化为

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值