Saltar al contenido
ecdsa.com
Bitcoin Core RPCBilleteras y firmas Web3

Mensaje de error

Malformed base64 encoding

También se muestra como

  • error code: -3 error message: Malformed base64 encoding

`bitcoin-cli` muestra «error code: -3» y «error message:» antes del texto. Una cadena base64 bien formada que no es una firma válida devuelve `false` en lugar de un error.

Bitcoin Core RPC — verifymessage with a signature that is not base64

Qué significa

`verifymessage` espera la firma compacta de 65 bytes codificada en base64 estándar (88 caracteres, que suelen empezar por `H`, `I`, `G` o `J`). La cadena que le pasas no es base64 válido, así que Core ni siquiera intenta recuperar una clave y devuelve el error RPC -3. Puede que la firma sea correcta, pero está en la codificación de texto equivocada.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Convertir las firmas hexadecimales a base64

    Decodifica el hexadecimal a 65 bytes y codifícalos en base64 estándar sin saltos de línea.

    bash
    sig_b64=$(printf '%s' "$SIG_HEX" | xxd -r -p | base64 -w0)   # 65 bytes -> 88 base64 characters
    bitcoin-cli verifymessage "$ADDRESS" "$sig_b64" "$MESSAGE"
  2. 2.

    Deshacer la codificación URL y base64url

    Primero deshaz la codificación porcentual y después convierte base64url a base64 estándar con relleno.

    python
    import base64, urllib.parse
    
    sig = urllib.parse.unquote(sig_from_query)                     # undo %2B / %2F / %3D
    sig = base64.b64encode(base64.urlsafe_b64decode(sig + "=" * (-len(sig) % 4))).decode()  # base64url -> base64

Errores relacionados

Explorar toda la base de datos de errores de firma