为什么 python ECDSA 还不能支持负数?
Why can't python ECDSA support negative numbers yet?
我正在尝试编写一个 python 脚本来验证 ECDSA 签名,但我在尝试这样做时遇到了麻烦。
这是我使用的代码:
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
为什么会这样?这个图书馆不是"oficial"吗?我有什么选择?删除断言行是否安全?
ECDSA 本身不使用负数,所以我不希望它的 Python 实现支持负数。 ECDSA使用的数字类型介于0和一些大质数之间,它们遵守模运算法则。
我正在尝试编写一个 python 脚本来验证 ECDSA 签名,但我在尝试这样做时遇到了麻烦。
这是我使用的代码:
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
为什么会这样?这个图书馆不是"oficial"吗?我有什么选择?删除断言行是否安全?
ECDSA 本身不使用负数,所以我不希望它的 Python 实现支持负数。 ECDSA使用的数字类型介于0和一些大质数之间,它们遵守模运算法则。