SM2签名和验签的驱动函数,是错误的!其走的是ECC的流程,只是曲线参数为SM2的而已。
SM2算法正确的流程是:
6.1 数字签名的生成算法
设待签名的消息为M,为了获取消息M的数字签名(r,s),作为签名者的用户A应实现以下运算步
骤:
A1:置M=Z A ∥ M;
A2:计算e = H v (M),按本文本第1部分4.2.3和4.2.2给出的细节将e的数据类型转换为整数;
A3:用随机数发生器产生随机数k ∈[1,n-1];
A4:计算椭圆曲线点(x 1 ,y 1 )=[k]G,按本文本第1部分4.2.7给出的细节将x 1 的数据类型转换为整
数;
A5:计算r=(e+x 1 ) modn,若r=0或r+k=n则返回A3;
A6:计算s = ((1 + d A ) −1 · (k − r · d A )) modn,若s=0则返回A3;
A7:按本文本第1部分4.2.1给出的细节将r、s的数据类型转换为字节串,消息M 的签名为(r,s)。 |