首页 > 解决方案 > 为什么 fastecdsa 和 secp256k1 会产生不同的签名?

问题描述

fastecdsaPython 包支持 secp256k1 曲线。fastecdsa使用 secp256k1 和secp256k1包匹配从同一私钥生成的公钥。但是,签名不匹配:

import secp256k1
pk = secp256k1.PrivateKey(k.secret_exponent)
raw_sig = pk.ecdsa_sign(message, digest=blake2b_32)
sig = pk.ecdsa_serialize_compact(raw_sig)
print("secp lib sig: " + base58_encode(sig, b"spsig").decode())

import fastecdsa
from fastecdsa.ecdsa import sign
from fastecdsa.encoding.util import bytes_to_int, int_to_bytes
r, s = sign(msg=message, d=bytes_to_int(k.secret_exponent), curve=fastecdsa.curve.secp256k1, hashfunc=blake2b_32)
fsig = int_to_bytes(r) + int_to_bytes(s)
print(base58_encode(fsig, b"spsig"))

k.secret_exponent来自包的 Key 类pytezos,但在这种情况下并不重要,它只有 32 个字节。secp256k1主要的是在和的调用中是相同的fastecdsa

base58_encode也来自,我可以只输出具有相同结果的pytezos字节。hex()

如果曲线相同,为什么签名会不同?

fastecdsa              1.7.3
secp256k1              0.13.2

标签: pythoncryptographyecdsa

解决方案


推荐阅读