我正在尝试编写一个验证ECDSA签名的python脚本,我正在努力做到这一点。
这是我使用的代码:
public_key = ecdsa.VerifyingKey.from_string(pubkey, curve=ecdsa.SECP256k1)
verified = public_key.verify_digest(signature, val, sigdecode=ecdsa.util.sigdecode_der)
如果签名 r 和 s 为正,则效果很好,但如果其中任何一个为负数,则会产生断言错误。我检查了ecdsa源代码,我看到了这一行:
nbytes = numberbytes[0] if isinstance(numberbytes[0], integer_types) else ord(numberbytes[0])
assert nbytes < 0x80 # can't support negative numbers yet
https://github.com/warner/python-ecdsa/blob/master/ecdsa/der.py#L105
为什么会这样?这个图书馆不是“官方的”吗?我有什么替代品?删除断言行是否安全?
答案 0 :(得分:2)
ECDSA本身不使用负数,因此我不希望Python的实现支持负数。 ECDSA使用的数字类型介于0和一些大素数之间,它们遵循模运算的规律。