SD-JWT debugger
Decode a Selective Disclosure JWT (RFC 9901) or an SD-JWT VC: every disclosure, its recomputed digest, the recreated claim set and the key-binding JWT — optionally verifying the issuer signature.
Requests are processed in memory on our server by the open-source PHP packages this site documents — nothing is stored, and request bodies are never logged.
Result
How SD-JWT selective disclosure works
The issuer never signs your claims in the clear: each selectively disclosable claim is
replaced by the digest of a disclosure — [salt, name, value], encoded
and hashed. The signed payload carries only digests (_sd arrays and
... array markers); the holder chooses which disclosures to hand over.
A verifier recomputes each digest and only accepts disclosures whose digest is actually
referenced by the signed payload — that's what the referenced flag shows here.
For presentations, the key-binding JWT proves the holder controls the key the credential was issued to. This tool decodes the KB-JWT but doesn't check it — a real verification needs your expected audience and nonce.
Do it in PHP
use K2gl\Dsse\PublicKey;
use K2gl\SdJwt\SdJwtVerifier;
// Verifies the issuer signature and every disclosure digest (RFC 9901),
// then hands back the recreated claims.
$claims = new SdJwtVerifier()
->verify($compactSdJwt, PublicKey::fromJwk($issuerJwk))
->claims();
Powered by k2gl/sd-jwt; for
dc+sd-jwt verifiable credentials (vct, issuer metadata, status), see
k2gl/sd-jwt-vc.