✍️ Sign & Verify
Sign a personal message or transaction bytes with an Ed25519, Secp256k1 or Secp256r1 key, or verify a signature and recover the signer.
How it works
The bytes are wrapped in an intent: 3,0,0 for a personal message (whose bytes are first BCS-encoded as vector<u8>, i.e. prefixed with their length) or 0,0,0 for transaction data. The signature covers BLAKE2b-256 of that intent message; Secp256k1 and Secp256r1 additionally hash it with SHA-256, as ECDSA does. The result wallets return is base64 of flag ‖ 64-byte signature ‖ public key.
Single-key Ed25519, Secp256k1 and Secp256r1 signatures are checked here. MultiSig, zkLogin and passkey signatures are recognised, but verifying them needs more context (and for zkLogin, the network), so they are not checked.