01 / 03 · Verify privately
SandboxProve you’re 18+ without sharing your birth date.
- connect
- prove
- share
Sharing
Over 18
Not requested by Lens
Birth date, address, licence number, photo.
Purpose: Confirm the holder is 18 or older.
Technical details
Midnight Lens acts as a verifier. It asks your wallet, through the browser’s Digital Credentials API, for a single ISO mdoc data element: org.iso.18013.5.1/age_over_18 with intent_to_retain: false. The request is a signed OpenID4VP 1.0 request object (openid4vp-v1-signed) and the response is encrypted to a one-time key that exists only for this session.
The wallet response is validated on the server: issuer authentication, device authentication, certificate chain against pinned sandbox issuing-authority roots, the session transcript rebuilt from this page’s origin, the request nonce and the encryption key thumbprint, plus session state, one-time use and expiry. Only if every check passes is the result recorded as verified.
Nothing identifying is stored. The server keeps the session metadata, a SHA-256 digest of the wallet response, and the normalized result { verified, claim: age_over_18, assurance: issuer_backed, format: mso_mdoc }. No birth date, address, licence number, portrait, ID image, or decrypted response is written to storage.
This is a sandbox build and is not production ready. Zero-knowledge age proof (Longfellow mso_mdoc_zk) is not implemented yet, and no Midnight proof, on-chain anchor, or Compact contract is wired up — the Midnight anchor on every receipt is empty.