Перейти к содержимому
ecdsa.com
web3.py / eth-account / eth-keys (Python)Кошельки и подписи Web3

Сообщение об ошибке

eth_keys.exceptions.BadSignature: Invalid signature

Также выводится как

  • BadSignature: Invalid signature

web3.py / eth-account / eth-keys (Python) — BadSignature from public-key recovery

Что это означает

Длина подписи правильная, но её значения не описывают ни одну корректную подпись secp256k1, поэтому восстановить открытый ключ нельзя: r или s равно нулю или не меньше порядка группы, либо r не совпадает с координатой x ни одной точки кривой. Это не то же самое, что подпись другим ключом: по такой подписи без всякого исключения восстанавливается другой адрес. BadSignature означает, что эти байты вообще не подпись.

Почему это происходит

Как исправить

  1. 1.

    Считайте такую подпись отклонённой

    Перехватывайте BadSignature вместе с ошибками длины и значений и отклоняйте запрос; не пытайтесь повторить с другими значениями v.

    python
    from eth_keys.exceptions import BadSignature
    from eth_utils.exceptions import ValidationError
    
    def recover_or_none(message, signature) -> str | None:
        try:
            return Account.recover_message(message, signature=signature)
        except (BadSignature, ValidationError, ValueError):
            return None  # reject the request: the signature is malformed

Связанные ошибки

Открыть всю базу ошибок подписей