我正在嘗試編寫一個驗證ECDSA簽名的python腳本,並且我正在嘗試這麼做的可怕時間。爲什麼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和小號是積極的,它工作得很好,但如果其中一方爲負,斷言錯誤引發。我檢查了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
爲什麼會出現這種情況?這個圖書館不是「官方的」嗎?我有什麼替代方案?刪除該斷言行是否安全?
您應該詢問軟件的作者:) –
嘗試在r和s的值的開頭插入一個零('0x00')字節(例如,將'81AABB ...'更改爲0081AABB。 ..'),以確保數字被解釋爲正數(注意:這可能會很棘手,因爲您可能需要調整編碼簽名中的長度 - 取決於如何將「r」和「s」值傳遞給ecdsa圖書館)。 – vlp