Verify a packet
Someone has handed you an assertion about themselves. This checks whether it is authentic, still valid, limited to the scope it claims, and which parts of it anyone other than the subject has vouched for.
This page verifies locally. The packet you paste is never uploaded
— this page has no backend and makes no network request. Verification is a
signature check your own browser performs. You do not have to trust us, and you
do not have to ask us whether a packet is real. The algorithm is written out at
the bottom so you can implement it yourself in any language; it is about two
hundred lines.
How verification works
Implement this and you never need us. The packet carries the subject's public key, so there is no registry to query and no service to depend on.
- Remove
proof.sigfrom the packet object. - Serialise what remains canonically: object keys sorted by Unicode code unit, no insignificant whitespace, UTF-8.
- Verify that signature over those bytes using
proof.key(a public JWK) withECDSA / P-256 / SHA-256, signature as rawr‖s, base64url. - Check
subjectequals the RFC 7638 thumbprint ofproof.key— this is what binds the key to the identifier. - Check
expiresis in the future. - For each claim, treat an attestation as evidence only if its tier is
signedand its signature verifies over that claim's canonical form.