这两天想根据国家密码管理局提供的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);
优化为