Recover the signer of a personal_sign or EIP-712 typed-data signature and verify it against an address.
Loading tool
About Verify Signatures
Recover the address that signed a personal_sign (EIP-191) message or EIP-712 typed data, and compare it with an expected address. It accepts 65-byte r||s||v signatures (v as 27/28 or 0/1) and 64-byte EIP-2098 compact signatures, and flags high-s (malleable) signatures that OpenZeppelin's ECDSA library rejects. Recovery uses secp256k1 ecrecover locally in your browser; the message and signature are not sent anywhere.
Common uses
- Check that a Sign-In with Ethereum or login message was signed by the claimed wallet
- Debug why a contract's signature check fails for an EIP-712 permit or order
- Confirm which account produced a signature in a test or support ticket
- Expand a compact EIP-2098 signature
FAQ
- How does personal_sign work?
- The wallet signs keccak256 of "\x19Ethereum Signed Message:\n" + the message length + the message (EIP-191). The prefix stops a signed message from being valid as a transaction.
- Why does my recovered address not match?
- The signed data must match exactly: the same message text and encoding (text vs hex bytes), or the same EIP-712 domain, types, primaryType and message. Any difference yields a different, valid-looking address.
- Can this verify signatures from smart contract wallets?
- No. Contract wallets such as Safe use ERC-1271, which requires calling the wallet contract on-chain. This tool only recovers EOA signatures with ecrecover.