Verification says invalid, but you are sure everything is right? Paste the key, message and signature — the explainer tries every common interpretation until one verifies, then tells you exactly which assumption the two sides disagree on.
100% local — everything runs in your browser, nothing is sent to any server
Almost every "invalid signature" between two correct implementations is not broken cryptography — it is two sides silently assuming different conventions. The explainer builds a small grid of those conventions: candidate curves for your key, DER and raw signature readings (including swapped r/s), your message as literal text or hex/base64-decoded bytes, and the usual digests — SHA-256, SHA-384, SHA-512, legacy SHA-1, Bitcoin-style double SHA-256, plus the case where the message already is a digest. Each combination is actually verified with the audited @noble/curves library, in small batches so the page stays responsive. When one combination verifies, you get the exact mismatch and a code-level fix; when none does, you get an honest list of causes no tool can see from these three inputs. Everything runs inside your browser tab — the key, message and signature never leave your machine.