python 椭圆曲线加法_椭圆曲线上点的运算

https://aaron67.cc/2020/09/26/ec-point-operation/

对定义在有限域上的椭圆曲线

E

=

(

p

,

a

,

b

,

G

,

n

,

h

)

E = (p, a, b, G, n, h)

E

=

(

p

,

a

,

b

,

G

,

n

,

h

)

y

2

x

3

+

a

x

+

b

(

m

o

d

p

)

y^2 \equiv x^3 + ax + b \pmod{p}

y

2

x

3

+

a

x

+

b

(

m

o

d

p

)

本文将通过代码计算下面两个问题:

已知曲线上的点

P

=

(

x

P

,

y

P

)

P = (x_P, y_P)

P

=

(

x

P

,

y

P

)

Q

=

(

x

Q

,

y

Q

)

Q = (x_Q, y_Q)

Q

=

(

x

Q

,

y

Q

)

,求点

R

=

P

+

Q

R = P + Q

R

=

P

+

Q

已知整数

k

k

k

,求点

K

=

k

G

K = k \cdot G

K

=

k

G

比特币使用的椭圆曲线由

Secp256k1

标准定义,我们可以事先声明好这些参数,并实现一些基础方法。

import collections

EllipticCurve = collections.namedtuple('EllipticCurve', 'name p a b g n h')

curve = EllipticCurve(

name='Secp256k1',

p=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f,

a=0,

b=7,

g=(0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8),

n=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141,

h=1,

)

def on_curve(point):

"""Returns True if the given point lies on the elliptic curve."""

if point is None:

# None represents the point at inf

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值