为什么python ECDSA不支持负数呢?

时间:2016-01-10 14:56:00

标签: python openssl ecdsa

我正在尝试编写一个验证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

为什么会这样?这个图书馆不是“官方的”吗?我有什么替代品?删除断言行是否安全?

1 个答案:

答案 0 :(得分:2)

ECDSA本身不使用负数,因此我不希望Python的实现支持负数。 ECDSA使用的数字类型介于0和一些大素数之间,它们遵循模运算的规律。