Skip to main content
Version: v0.25.0 (Latest)

mdoc VICAL and CWT status-list integration

An mdoc verifier makes several independent decisions. It validates the issuer-signed mdoc and its DSC chain, decides whether the IACA or VICAL-derived authority is admitted, validates holder or device authentication, and evaluates the status entry carried by the MSO. A success in one step cannot replace another.

This page is the mdoc branch of Credentials, status, and trust. It deliberately separates VICAL trust from CWT status.

Separate the artifacts first

ArtifactDecisionEncoding / transportFailure must mean
DSC and IACA chainDoes the document signer chain to an admitted issuing authority?X.509 certificate chainIssuer authentication fails
VICALWhich mdoc certificate authorities may be admitted from a signed list?Signed CBOR/COSE artifactTrust is unavailable or rejected, never silently empty-success
CWT Token Status ListIs the indexed mdoc status entry current?Raw COSE_Sign1 as application/statuslist+cwtCredential status fails closed
ETSI trusted-entity listWhich entities and roles are admitted by that separate trust source?Signed JSON/JAdES publicationIt cannot substitute for VICAL

VICAL and CWT both use CBOR/COSE technologies, but their payloads, signers, APIs, caching, and security decisions are different.

1. Build the mdoc signing chain

The credential signing key must match the DSC public key. The DSC must chain to the intended IACA, and the credential must carry the intended x5chain. A provider-native KMS reference controls the private-key operation without moving private material into EDK.

Navigation: Resources > KMS > Keys and Certificates

KMS certificate inventory for mdoc DSC material

Inspect the certificate detail and its linked key before selecting the alias in an issuer or status-list configuration.

2. Establish the trust domain

Create a domain, add active anchors, assign admission classes, activate the domain, and attach it to the verifier or another intended consumer. A valid DSC outside the resolved domain remains untrusted.

Navigation: Resources > Trust domains > Domains

Verifier attachment: Open Protocols > Verifier > Settings > Trust domains

Trust-domain anchors for VICAL signers and mdoc issuers

Use the Bindings tab to confirm which consumer resolves the domain. Narrower attachments replace broader selections rather than silently merging with them.

Trust-domain consumer bindings

Use MDOC_VICAL_SIGNER for anchors permitted to verify the VICAL artifact and CREDENTIAL_ISSUER for authorities permitted to issue credentials. Do not grant one admission merely because the same organization performs both roles operationally.

3. Configure VICAL on the provider anchor

Configure the VICAL URL on the anchor representing its provider, and explicitly name the signer and issuer anchor ids it is allowed to use.

Open the provider anchor in Resources > Trust domains, inspect its admissions, and use diagnostics to distinguish configuration, source health, and active trust material.

Trust-domain diagnostics used to inspect trust source state

The screenshot documents the operator surface; it is not proof of a successful remote VICAL fetch or cryptographic consumption.

Runtime acceptance requires separate evidence for the remote response and content type, COSE signature and VICAL-signer admission, artifact freshness, IACA extraction, cache/refresh behavior, and a verification decision that actually uses the derived authorities.

4. Create the CWT Token Status List

The status-management request selects an IETF Token Status List, CWT proof, the mdoc one-bit profile, an X.509-oriented signing selection, and a stable public URI. The private key stays behind the chosen KMS provider.

Navigation: Resources > Status Lists > Lists

Create status list in the Admin Console

After creation, inspect Token and confirm application/statuslist+cwt. The public response is binary COSE_Sign1; it is not a JSON envelope containing base64 data.

Hosted CWT status-list token detail

5. Issue mdoc with the allocated status entry

Create an MSO_MDOC design with the correct ISO docType and namespaced elements. Execute the OID4VCI offer and credential request using mso_mdoc. Decode the returned credential as CBOR and inspect the issuer-signed MSO; do not parse it as JWT.

Use Open Protocols > Credential Issuer > Credentials to confirm the mdoc configuration and Test to execute it.

Credential issuer configurations including mdocIssuer testing surface for mdoc issuance

The MSO status URI and index are the join to the CWT list. Verify the index was allocated once and exists in that list; do not invent or reuse an index in a credential template.

6. Revoke and verify the same credential

Change the allocated entry through the authenticated management API, wait according to the list cache policy, then fetch the public CWT again. The mdoc and its signature do not change; the status decision does.

Open the status list and inspect Entries before changing the value. Record the exact index and resulting publication timestamp.

mdoc status-list entry transition

The verifier must reject the same mdoc after it resolves the refreshed list and observes INVALID. It must still report issuer-signature, device/holder, trust, and status outcomes separately enough to diagnose which boundary failed.

Fail-closed acceptance

For CWT status, prove rejection of unavailable, expired, malformed, wrong-media-type, wrong-protected-type, wrong-algorithm, and wrong-certificate publications. Prove the valid credential before revocation and rejection after a genuine refresh.

When the deployment claims runtime VICAL consumption, also prove:

  • a VICAL signed by an anchor without MDOC_VICAL_SIGNER is rejected;
  • an IACA not allowed by the configured issuer-anchor set is not admitted;
  • expired, malformed, unavailable, and wrong-media-type VICAL material fails closed;
  • refresh and cache behavior do not retain an expired or replaced artifact indefinitely; and
  • valid ETSI trust material cannot satisfy a missing VICAL decision, nor vice versa.

The EDK Credential Status Profiles collection contains the customer-neutral mdoc design, CWT status, issuance, public fetch, and transition shapes. It does not turn a CWT request into VICAL evidence.