sm2 国密算法 中 常数 乘以 点坐标 函数 详解

完整代码参考链接:密码学算法之 SM2国密算法

  • 部分代码:
    def oval_multiply(self,k,G):
        """
        椭圆曲线上的点乘以常数 k
        :param k: int 型 k*G 中的 k
        :param G: 生成元,基点
        :return: 相乘之后的点
        """
        # if k==1:
        #     return G   # 只有 k 取 1 时,才有这种可能

        if k==2:
            return self.oval_same_add(G)

        if k==3:
            return self.oval_diff_add(G,self.oval_same_add(G))

        if k%2==0:
            return self.oval_same_add(self.oval_multiply(k//2,G))  # return 里只能有一个 oval_multiply 函数,两个及以上很有可能出错,进入无限循环

        if k%2==1:
            return self.oval_diff_add_near(self.oval_multiply(k//2,G),G)
  • 递归函数详解:(这里显示了一个通常的递归函数过程伪代码)


    sm2 国密算法 中 常数 乘以 点坐标 函数 详解_第1张图片
    递归函数执行过程详解
  • 本例中 的 k=13 可以按如下思路进行分解,其中 左边 虚线部分,是 递归函数 中 k 的取值列表,递归函数是由 3G -> 6G -> 13G 来计算 13*G 这个 常数乘以点坐标的。


    sm2 国密算法 中 常数 乘以 点坐标 函数 详解_第2张图片

你可能感兴趣的:(sm2 国密算法 中 常数 乘以 点坐标 函数 详解)