ECDSA 验证签名

#!/usr/bin/python

from tinyec import registry
from tinyec import ec
#import secrets
from sympy import mod_inverse
import hashlib, binascii

# the nist p-256 curve
curve = registry.get_curve('secp256r1')

# read public key from cert file


x = 0xe3e8508686b75ff37fcf19bc129642f519a3c40aca4d6de0adcf3aaa4f392426;
print(len(x))
print(len('74ebdd2578501ba7cf4e4de9106ac488fed49d2c3093e5405752868541a284a2'))
y = 0x875d94349dd33238e8f421c4dd384e2120ed771e3a2c2aa28295c5f438b545bf;
public_key = ec.Point(curve, x, y)

print('pulickey=',public_key)
print(len('875d94349dd33238e8f421c4dd384e2120ed771e3a2c2aa28295c5f438b545bf'))
# message for test 
#msg = open(somefile, 'rb').read()
msg = b'good'
print("msg:", msg)

# message's signaure (r, s) for test 
#r = 0xc4055604cc9a8b665fef4a70377340e401a5899dfd4851b929150c3294f85039;
#s = 0x1dd873ce70ad969644d2dd6839716d5ef1bbb133fbb0074bcbcba6e4b3cc9b2e;
r = 0x00b57d7dc046739c198b42ad3bbf1dd69306f4de55eafd4bcd578f9df7eacf6dbc 
s = 0x00f48e6ce213d7aeda74cae304dc8fa31b561e5efebe2f81efdee429f7b7466b5e;
print("signture r:" , hex(r))
print("signture s:" , hex(s))

#verify
sha = hashlib.sha256()
sha.update(msg)
v_dgst = sha.digest()
print("msg dgst:", binascii.hexlify(v_dgst))

w = mod_inverse(s, curve.field.n)
u1 = int.from_bytes(v_dgst, "big")*w % curve.field.n
u2 = r*w % curve.field.n
X = u1*curve.g + u2*public_key
v = X.x %  curve.field.n
print("v:" , hex(v))

verify_result = v == r 
print("verify result: ", verify_result)
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值