Verify a signed message
This tool runs entirely in your browser. Nothing you type here is transmitted.
Paste an address, the exact message, and the signature a wallet produced, and this page tells you whether that address really signed it.
What a verified signature proves, and what it doesn't
A valid result means whoever holds the private key behind that address produced this exact signature over this exact message - nothing more. It does not prove the address currently holds any balance, that it is not also controlled by someone else with the same key, or anything about why the message was signed. Proof of control is the whole claim; treat it as exactly that. Nothing you paste is transmitted: verification is pure arithmetic that runs on your device, the same way the wallet produced the signature in the first place.
Formats this page verifies
Support is scoped to what wallets actually produce for a "sign message" flow today, not every scheme that has ever existed.
- Ethereum and every EVM chain: personal_sign (EIP-191), the format MetaMask, WalletConnect and hardware wallets all use - one scheme, every EVM network.
- Bitcoin legacy addresses (starting with 1): the classic signed-message scheme, both compressed and uncompressed keys.
- Bitcoin nested segwit (starting with 3) and native segwit bech32 addresses: the same scheme with the header byte BIP-137 defines for each address type.
Formats this page declines, and says so
Several real formats exist that this page cannot verify, and it says exactly why rather than returning a blank or a false negative.
- Taproot addresses (starting bc1p): these sign with Schnorr or with BIP-322, not the classic scheme this page checks - a gap several existing public verifiers have too, and quietly fail on rather than disclose.
- Multisig and other script addresses, including native segwit script addresses: there is no single public key to recover a signature against, so no page can verify these from the address alone.
- Any signature that is not exactly 65 bytes: that shape usually means a BIP-322 signature rather than the classic format.
The message has to match byte for byte
A signature covers the exact text that was signed, including any leading or trailing space. Paste precisely what the signing wallet showed - retyping it, or letting an editor trim whitespace, produces a signature that no longer verifies, which reads identically to a wrong or forged one.
Questions
- Which wallets produce a signature this page can check?
- For Ethereum and other EVM chains: MetaMask, WalletConnect-connected wallets and most hardware wallets via personal_sign. For Bitcoin: Bitcoin Core, Electrum, and hardware wallets that offer "Sign Message" against a legacy or segwit address.
- It says my Taproot address is unsupported. Is my wallet broken?
- No. Taproot addresses sign with a different scheme (Schnorr, or BIP-322) than the classic ECDSA message-signing this page verifies. That is a gap in what this page covers, not a problem with the signature.
- Does anything I paste in reach SwapSS?
- No. The address, the message and the signature are all read and checked locally, in your browser, and never transmitted anywhere.