本项目基于C语言实现了国家密码算法标准中的SM2椭圆曲线数字签名算法(ECDSA)的验证部分。代码简洁高效,适用于需要国密算法支持的应用场景。
在goldboar的SM2签名及验签函数的基础上进行了改写,形成一个专门用于SM2签名验证的功能模块。此功能需要使用OpenSSL的头文件和库文件(如libeay32.lib或libeay32.dll)来编译。与原始程序相比,主要改进如下:
1. 只支持验签操作,不提供签名能力;
2. 验证过程中的SM2公钥以(x,y)坐标形式从外部传入;
3. 输入的签名数据同样采用(r,s)坐标形式;
4. 优化了内存管理机制,在关键位置加入了清理语句,减少了潜在的内存泄漏问题;
5. 使用的是符合GM/T 0003.5-2012标准定义的椭圆曲线参数,而非示例参数。
6. 对于某些对椭圆曲线参数进行验证的操作被限制在_DEBUG宏下。由于所使用的参数已经过官方推荐并经过了充分测试,在非调试版本中可以跳过这些检查以提升性能。
以上修改使得新函数更加符合实际应用需求,并提高了运行效率和安全性。