Compliance checklist and evidence
SD-JWT VC / OpenID4VP Standards-Compliance Report
Assessment result
- Outcome: PENDING — no presentation has been verified yet
- Scope: OpenID for Verifiable Presentations 1.0; RFC 9901 SD-JWT; SD-JWT VC profile; ML-DSA and classic JOSE signatures
- Credential requested:
dc+sd-jwt,vct=urn:eudi:pid:1 - Transport observed/requested: direct_post / QR
- Trust boundary: cryptographic verification is enabled; issuer authorization, PKI chain trust, certificate validity/revocation, status-list resolution, and trust-list policy are intentionally NOT checked
- Failure evidence: none
OpenID4VP request profile
response_type=vp_token- DCQL Credential Query id is
pid_sd_jwtand format isdc+sd-jwt require_cryptographic_holder_binding=true- Requested claims are unique and use JSON claim paths; the mdoc-only
intent_to_retainis not sent for SD-JWT - Verifier advertises issuer and KB-JWT algorithms: ML-DSA-44/65/87, ES256/384/512, EdDSA, RS256/384/512, and PS256/384/512
- Nonce/session value is generated with 144 random bits:
not generated - QR flow uses
client_id=redirect_uri:<response_uri>,response_mode=direct_post, and an exact state value - Same-device unsigned DC API request uses
response_mode=dc_api, omitsclient_id, and returns the Authorization Response object inDigitalCredential.data - KB-JWT audience is
origin:<verifier-origin>
- Requested claims: family_name, given_name, birthdate, address
Authorization Response checklist
- NOT ESTABLISHED — direct_post body is UTF-8 application/x-www-form-urlencoded
- NOT ESTABLISHED — state is present and exactly matches the verifier session
- NOT ESTABLISHED — vp_token is a DCQL-keyed JSON object containing exactly one pid_sd_jwt array entry and one Presentation
- NOT ESTABLISHED — the presented credential contains every requested DCQL claim
- NOT ESTABLISHED — the successful direct_post session is configured as one-time and replay protected
SD-JWT VC and JOSE checklist
- NOT ESTABLISHED — Complete SD-JWT issuer, disclosure, and holder-binding cryptographic evidence is present
- NOT ESTABLISHED — Issuer JWS is compact, signed, and uses protected typ=dc+sd-jwt
- NOT ESTABLISHED — Issuer algorithm is an allowed ML-DSA or classic JOSE algorithm
- NOT ESTABLISHED — Issuer verification key has exactly one unambiguous source (public AKP JWK or x5c leaf)
- NOT ESTABLISHED — Disclosures are valid UTF-8 JSON, canonically base64url encoded, digest-bound, unique, connected, and collision-free
- NOT ESTABLISHED — Undisclosed and decoy digests are ignored as required by RFC 9901
- NOT ESTABLISHED — Reserved SD-JWT VC claims are not selectively disclosed and _sd_alg occurs only at top level
- NOT ESTABLISHED — Holder key is taken from the issuer-signed cnf.jwk and is a public ML-DSA, EC, OKP, or RSA verification key
- NOT ESTABLISHED — KB-JWT signature verifies with the cnf.jwk key and protected typ=kb+jwt
- NOT ESTABLISHED — KB-JWT nonce matches this transaction
- NOT ESTABLISHED — KB-JWT aud is one exact string for this verifier
- NOT ESTABLISHED — KB-JWT iat is within the verifier freshness window
- NOT ESTABLISHED — KB-JWT sd_hash matches the exact presented SD-JWT and disclosures
- NOT ESTABLISHED — unsupported JOSE critical headers, unencoded payloads, ambiguous keys, private JWK material, and invalid key/signature lengths are rejected
Observed cryptography and keys
- Issuer proof: not observed
- Issuer public key: Not observed because verification did not complete.
- Holder proof: not observed
- Holder public key: Not observed because verification did not complete.
- Disclosure hash: not observed
- Disclosure count: not observed
- KB-JWT nonce: not observed
- KB-JWT audience: not observed
- KB-JWT issued-at: not observed
- KB-JWT sd_hash: not observed
- Response body encoding evidence: not observed
- Response state evidence: not established
- Response shape: not observed
- Response parameters: not observed
Verifier-enforced ambiguity and violation checks
- Duplicate JSON object member names are rejected before JSON materialization.
- Duplicate form parameters, disclosure digests, salts, embedded digest references, and colliding disclosed claim names are rejected.
- Non-canonical base64url, invalid UTF-8, malformed compact JWS/SD-JWT+KB, nested
_sd_alg, illegal...placeholders, and unreferenced disclosures are rejected. - Unknown Authorization Response parameters are ignored as required by OpenID4VP; extra DCQL credential-map entries are rejected because this request contains exactly one mandatory Credential Query with
multiple=false. - Issuer and holder signatures are verified using the observed ML-DSA or classic JOSE algorithm, with strict protected-header/key matching.