This verifier needs JavaScript (runs locally in your browser).
Note: only the cryptographic mapping of message, signature, and address is checked — not whether the signer is trustworthy. Examples use a public demo key, no real funds.
How verification works
When signing, the wallet prepends the prefix \x19Ethereum Signed Message:\n + length to the message, hashes everything with Keccak-256, and signs with the private key. The prefix prevents a signature from accidentally being reused as a transaction.
Verification runs backwards: public-key recovery computes the signer address from message and signature and compares it to the claimed one. If they match, the holder of that key provably signed exactly this message.
Typical uses: proving airdrop eligibility, passwordless logins, checking the authenticity of announcements — and wherever AI agents sign claims: verify, don't trust.
Use the tabs above to switch standards: EIP-712 for structured typed data (domain + types + values as JSON) and Bitcoin for classic message signatures in Bitcoin Core format (Base64).
Frequently asked questions
Do I need my private key?
What does it mean if the signature does not match?
Does this work with EIP-712 (typed data)?
Which Bitcoin addresses are supported?
1…, P2PKH) and native SegWit addresses (bc1q…), each verified via public-key recovery. Taproot (bc1p…) uses Schnorr signatures (BIP340) and is not supported.Does my input leave the browser?
?message=…&sig=…&address=…) — only actively sharing leaves the browser.Address verified — but is it well-formed?
Combine the Message Verifier with the Address Validator: first check who owns a statement — then whether the address is cleanly encoded.