Saltar al contenido
ecdsa.com
web3.py / eth-account / eth-keys (Python)Billeteras y firmas Web3

Mensaje de error

eth_keys.exceptions.BadSignature: Invalid signature

También se muestra como

  • BadSignature: Invalid signature

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

Qué significa

La firma tiene la longitud correcta, pero sus valores no describen ninguna firma secp256k1 válida, así que no se puede recuperar ninguna clave pública: r o s es cero o no es menor que el orden de la curva, o r no es la coordenada x de un punto de la curva. Es distinto de una firma hecha con otra clave: esa firma recupera una dirección diferente sin lanzar ninguna excepción. BadSignature significa que los bytes ni siquiera son una firma.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Tratarla como una firma rechazada

    Captura BadSignature junto con los errores de longitud y de valor, y rechaza la solicitud; no vuelvas a intentarlo con otros valores de 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

Errores relacionados

Explorar toda la base de datos de errores de firma