🎫 Verifiable credentials (SD-JWT)
An issuer signs a credential whose claims are HASHED into a digest array — the values live in
separate disclosures. You (the holder) choose which disclosures to reveal in
a presentation; anything you leave out is never transmitted, so its value can
never leak. This is OID4VP's core idea: prove one fact, hide
the rest.
Honest simulation — read this first
given_name is derived from your account email (the Lab is
passwordless and collects almost nothing else), and date_of_birth is a fixed synthetic demo value — there's no real DOB anywhere in this system. The optional Key
Binding JWT (below) is signed with the Lab's own key rather than a separate holder-controlled
keypair a real wallet app would hold. What's fully real: the _sd digest mechanics, the disclosure format, presentation assembly, and every verify check — a
genuine, standards-shaped SD-JWT VC you can inspect byte by byte below.
1. Issue a credential
The Lab (issuer) mints a fixed membership credential into your wallet: given_name, email, membership_level, date_of_birth, member_since — each one a separate, salted disclosure.
Your wallet
2. Build a presentation
Tick which claims to reveal. Everything left unticked is simply never included — its disclosure stays in your wallet, and its value never touches the network.
Issue a credential above, then select it.
3. Verify a presentation
Paste any presentation (yours from above, or a tampered copy) to see it checked: issuer signature,
then every presented disclosure's digest against _sd.
4. Issue via OpenID4VCI (the real protocol)
Step 1 above is a Lab shortcut — one click, no protocol. This is the STANDARDS-CORRECT round trip a
real issuer and wallet run instead: a credential offer carrying a single-use,
hashed-at-rest pre-authorized code + PIN, a token exchange for a short-lived access
token + c_nonce, and a credential endpoint call that
only succeeds once you prove — with a real key minted right here in your browser — that you hold the
private half of a keypair. The resulting credential carries a cnf claim binding it to that exact key.