完整代码参考链接:密码学算法之 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)
-
递归函数详解:(这里显示了一个通常的递归函数过程伪代码)
递归函数执行过程详解 -
本例中 的 k=13 可以按如下思路进行分解,其中 左边 虚线部分,是 递归函数 中 k 的取值列表,递归函数是由 3G -> 6G -> 13G 来计算 13*G 这个 常数乘以点坐标的。
网友评论