python 加法式子_Python中有限域上的椭圆曲线点加法

这里有几个问题。首先,你有错误的公式:这些公式是求和的求反的公式,或者相当于曲线的第三个点,它位于P和Q的直线上。与你在Wikipedia上链接的公式相比,你会发现你得到的Z.y是它们的值的否定。在

第二个问题是你的公式没有考虑原点:如果p是群定律中Q的逆,那么p+Q就是原点,它不在曲线的仿射部分,因此不能用(x, y)坐标来描述。所以你需要一些方法来指定原点。在

让我们写一些代码。首先,我们需要曲线上点的表示。我们使用字符串'Origin'来表示原点,并使用一个简单的命名元组来表示椭圆曲线的仿射部分上的点。在# Create a simple Point class to represent the affine points.

from collections import namedtuple

Point = namedtuple("Point", "x y")

# The point at infinity (origin for the group law).

O = 'Origin'

为了演示的目的,我们选择了一条特殊的椭圆曲线和素数。素数应该大于3才能使加法公式有效。我们还编写了一个函数,可以用来检查某个特定点是否是曲线上某个点的有效表示。这将有助于检查我们在实现加法公式时没有犯任何错误。在

^{pr2}$

要对模p进行除法,您需要一些方法来计算模p的逆数。这里一个简单而有效的技巧是使用Python的pow函数的三参数变量:根据Fermat的小定理,pow(a, p-2, p)将给出a模p的逆(当然前提是该逆存在,即a不能被{}整除)。在def inv_mod_p(x):

"&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值