我正在用python实现Montgomery梯形图,当我尝试运行它时,它的速度变得非常慢。我做错了什么
def addPoints(xp, zp, xq, zq, xpq, zpq):
u = (xp + zp) * (xq - zq)
v = (xp - zp) * (xq + zq)
w = u + v
t = u - v
w = w * w
t = t * t
X = w * zpq
Z = t * xpq
return X, Z
def duplicatePoint(xp, zp, b):
u = xp + zp
v = xp - zp
u = u * u
v = v * v
uv = u - v
t = b * uv + v
x2p = u * v
z2p = uv * t
return x2p, z2p
def montgomeryLadder(k, px, pz, a24):
qx, qz = px, pz
rx, rz = duplicatePoint(px, pz, a24)
for i in bin(k)[3:]:
print(i)
if i == 1:
qx, qz = addPoints(rx, rz, qx, qz, px, pz)
rx, rz = duplicatePoint(rx, rz, a24)
else:
rx, rz = addPoints(qx, qz, rx, rz, px, pz)
qx, qz = duplicatePoint(qx, qz, a24)
return qx, qz
算法如下所示:https://www.iacr.org/archive/ches2006/10/10.pdf
我知道它不应该运行得这么慢,因为它应该是椭圆曲线上点的标量乘法的最快算法之一。我使用的测试用例是:
montgomeryLadder(80219347, 3, 2, 5)
我100%确信它不应该像这样运行
目前没有回答
相关问题 更多 >
编程相关推荐