Aller au contenu
ecdsa.com
Bitcoin Core RPCPortefeuilles et signatures Web3

Message d’erreur

Malformed base64 encoding

Également affiché sous la forme

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

`bitcoin-cli` affiche « error code: -3 » et « error message: » avant le texte. Une chaîne base64 bien formée qui n’est pas une signature valide renvoie `false` au lieu d’une erreur.

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

Ce que cela signifie

`verifymessage` attend la signature compacte de 65 octets, encodée en base64 standard (88 caractères, commençant généralement par `H`, `I`, `G` ou `J`). La chaîne que vous avez transmise n’est pas du base64 valide : Core n’a donc même pas tenté de récupérer une clé et a renvoyé l’erreur RPC -3. La signature est peut-être correcte, mais elle n’est pas dans le bon encodage de texte.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Convertir les signatures hexadécimales en base64

    Décodez l’hexadécimal en 65 octets et encodez-les en base64 standard, sans sauts de ligne.

    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.

    Annuler l’encodage URL et base64url

    Décodez d’abord l’encodage-pourcent, puis convertissez le base64url en base64 standard avec remplissage.

    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

Erreurs associées

Parcourir toute la base de données des erreurs de signature