DKIM2 browser verifier

Paste a complete email below. Every DKIM2-Signature and Message-Instance level is verified entirely in your browser — parsing, hashing, and signature cryptography all run locally. About DKIM2 · server validator

A result reports only whether the message travelled here unmodified and unreplayed (§14.1). It says nothing about whether the message is wanted, or whether any declared modification was benign.

Checks follow draft-ietf-dkim-dkim2-spec-08. New in -08: s= and h= may offer alternatives (a,b|c passes if both a and b pass, or c does), and an algorithm this verifier does not implement (including ML-DSA-44, mldsa44) is an error unless an alternative passes; Auto-Submitted and VBR-Info are now covered by the header hash; tag names and Recipe JSON keys must be lowercase; an invalid Recipe step is named (Recipe b[1] is invalid); a malformed public key (an RSA key under 1024 bits, an Ed25519 key that is not 32 octets) is reported as such; and a timestamp, Chain of Custody or From Authentic failure is FAIL. A message whose history includes a null body Recipe passes but is marked not fully verified: the earlier body cannot be checked. Still checked as in -07: the From: must be Authentic, the Chain of Custody hop by hop, and Recipes carry lines that are not UTF-8 as "u" steps. A pasted message has no delivery time, so timestamps are checked against now: a signature more than 14 days old shows as signature expired. When a message has more than one fault, the first error listed is the primary one and sets the result: the Message-Instances (structure, Recipes, then the hashes, top down) are checked before the signatures, and no public key is used until they all pass.

Public keys are fetched over DNS-over-HTTPS from Cloudflare (cloudflare-dns.com), so the signing domains and selectors in your message are sent to Cloudflare. The message body never leaves your browser.

load example

Results

Results appear here.