16.4.1.4. Credential Issuer Test MatrixΒΆ

This section provides the set of test cases designed for technical implementers and development teams responsible for creating and deploying Credential Issuer solutions. It is also intended for assessment bodies inspecting and validating the implementations of Credential Issuer solutions.

Test Case ID

Purpose

Description

Expected Result

CI_001

Trust, Security

Entity Configuration publication

Federation Entity publishes its own Entity Configuration in the .well-known/openid-federation endpoint.

CI_002

Trust, Interoperability

Entity Configuration response media type check

The Entity Configuration HTTP Response is set to media type to application/entity-statement+jwt.

CI_003

Trust, Security

Entity Configuration cryptography

The Entity Configuration is cryptographically signed

CI_004

Trust, Security

Public Key inclusion in Entity Configuration and Subordinate Statement

The Entity Configuration and the Subordinate Statement issued by the immediate superior both include the public part of the key.

CI_005

Trust, Security

Entity Configuration's Trust Marks

The Entity Configuration contains one or more Trust Marks.

CI_006

Trust, Interoperability

Entity Configurations parameters

Entity Configurations have in common these parameters: iss, sub, iat, exp, jwks, metadata.

CI_007

Trust, Security

Credential Issuer Discovery

The Credential Issuer exposes a well-known endpoint hosting its Entity Configuration.

CI_008

Trust, Interoperability

Credential Issuer metadata

Credential Issuer successfully provides the following metadata types: federation_entity, Oauth_authorization_server and openVCI_credential_issuer

CI_009

Trust, Interoperability

Inclusion of openVCI_credential_verifier Metadata in User Authentication via Wallet

When the (Q)EAA Providers authenticate users through their Wallet Instance, the openVCI_credential_verifier metadata is included in addition to the required metadata parameters.

CI_010

Issuance, Interoperability

Credential Offer URI Structure

Credential Issuer generates a Credential Offer consisting of a single URI query parameter named "credential_offer"ensuring the URL is well-formed and contains only this parameter for the offer data.

CI_011

Issuance, Interoperability

Credential Offer Delivery Methods

Credential Offer URL is successfully embedded in QR codes or included as clickable href buttons in HTML pages.

CI_012

Issuance, Interoperability

Credential Offer Mandatory Parameters

Credential Offer contains all three mandatory parameters (credential_issuer, credential_configuration_ids, and grants) with valid values

CI_013

Issuance, Interoperability

Credential Offer Grants Parameter Structure

The grants parameter successfully contains an authorization_code object that includes both required sub-parameters (issuer_state and authorization_server) with appropriate values

CI_014

Issuance, Interoperability

Credential Object Compilation

Credential Issuer ensures the Credential Object is properly compiled with all required fields, correct formatting, and valid data structures before delivery

CI_015

Issuance, Security

PAR Request Object Signature Validation

Credential Issuer successfully validates the Request Object signature

CI_015a

Issuance, Security

PAR Request Object Algorithm Header Processing

Credential Issuer uses the algorithm specified in the alg header parameter (RFC 9126/RFC 9101) to validate the Request Object Signature

CI_015b

Issuance, Security

PAR Wallet Attestation Public Key Retrieval

Credential Issuer successfully retrieves the public key from the Wallet Attestation's cnf.jwk claim

CI_015c

Issuance, Security

PAR JWT Key Identifier Reference

The Credential Issuer successfully references the correct key via the kid JWT header parameter

CI_015d

Issuance, Security

PAR Cryptographic Signature Integrity Validation

The Credential Issuer successfully complete cryptographic signature integrity before proceeding with any further validations

CI_016

Issuance, Interoperability

PAR HTTP POST Parameter Encoding

Credential Issuer successfully processes HTTP POST requests with message body parameters encoded in application/x-www-form-urlencoded format;

CI_017

Issuance, Interoperability

PAR Scope and Authorization Details Interpretation

When a request contains both scope value and authorization_details parameter, Credential Issuer processes each parameter independently

CI_017a

Issuance, Interoperability

PAR Authorization Details

When both scope and authorization_details request the same Credential type, Credential Issuer follows the specifications given by the authorization_details object

CI_018

Issuance, Security

PAR Request Object Signature Validation

Credential Issuer successfully validates the Request Object signature using the algorithm from the alg header parameter and the public key from the Wallet Attestation's cnf.jwk claim (referenced by kid), confirming signature integrity (RFC 9126/RFC 9101)

CI_019

Issuance, Security

PAR Algorithm Compliance Check

Credential Issuer verifies the signing algorithm in the alg header matches one of the approved algorithms listed in the Cryptographic Algorithms section; rejects requests with non-compliant algorithms and returns appropriate error.

CI_020

Issuance, Security

PAR Client ID Consistency Validation

Credential Issuer confirms the client_id in the PAR request body exactly matches the client_id claim in the Request Object; mismatched values trigger request rejection with clear error message.

CI_021

Issuance, Security

Issuer-Client ID Matching in the PAR request

Credential Issuer validates that the iss claim in the Request Object matches the client_id claim within the same Request Object (RFC 9126/RFC 9101); discrepancies result in request denial.

CI_022

Issuance, Security

PAR Audience Claim Verification

Credential Issuer confirms the aud claim in the Request Object equals the Credential Issuer's own identifier (RFC 9126/RFC 9101); incorrect audience values cause immediate request rejection.

CI_023

Issuance, Security

PAR Request URI Parameter Rejection

Credential Issuer detects and rejects any PAR request containing the request_uri parameter (RFC 9126), returning an appropriate error response indicating the parameter is not supported.

CRFCI_024

Issuance, Security

PAR Mandatory Parameters Validation

Credential Issuer verifies all mandatory HTTP parameters are present in the Request Object and validates their values against the defined Table specifications (derived from RFC 9126); missing or invalid parameters trigger structured error responses.

CI_025

Issuance, Security

PAR Token Expiration Check

Credential Issuer validates the Request Object has not expired by checking the exp claim against current time; expired tokens are rejected with timestamp-related error messages.

CI_026

Issuance, Security

PAR Token Issuance Time Validation

Credential Issuer confirms the iat claim represents a past timestamp

CI_026a

Issuance, Security

Recommended PAR Token Issuance Time rejection

Credential Issuer reject requests where iat is more than 5 minutes from current time (RFC 9126); timing violations result in "invalid_request" errors.

CI_027

Issuance, Security

PAR Replay Attack Prevention

Credential Issuer successfully checks that the jti claim in the Request Object has not been used before by the Wallet Instance identified by the client_id.

CI_028

Issuance, Security, Interoperability

OAuth Client Attestation PoP Validation

.Credential Issuer successfully validates the OAuth-Client-Attestation-PoP parameter according to Section 4 of [OAUTH-ATTESTATION-CLIENT-AUTH], confirming proof-of-possession and rejecting invalid attestations with detailed error responses.

CI_029

Issuance, Trust

Wallet Instance Trustworthiness Verification

Credential Issuer successfully verifies the trustworthiness and indirect Federation membership of the Wallet Instance through comprehensive Wallet Attestation validation

CI_030

Issuance, Trust

Wallet Provider Federation Membership Validation

Credential Issuer confirms the Wallet Provider (issuer of the Wallet Attestation) is a recognized and trusted Federation member by checking Federation registries and trust lists;

CI_031

Issuance, Security

Wallet Attestation Cryptographic Signature Validation

Credential Issuer successfully validates the cryptographic signature of the Wallet Attestation using the Wallet Provider's public key, ensuring signature integrity and authenticity;

CI_032

Issuance, Security

Wallet Attestation Expiration Check

Credential Issuer verifies the Wallet Attestation has not expired at verification time by checking timestamp claims against current time

CI_033

Issuance, Security

Wallet Attestation Attested Cryptographic Key Acceptance

Credential Issuer accepts and uses only cryptographic keys that are properly derived from the attested Wallet Instance during the credential issuance process;

CI_034

Issuance, Security

Wallet Attestation Device Security and Compliance Verification

Credential Issuer relies on Wallet Attestation claims to confirm the Wallet Instance operates on a secure, trusted device that meets the Issuer's required security standards;

CI_035

Issuance, Trust

Wallet Provider Trust Chain Evaluation

Credential Issuer successfully evaluates the complete Trust Chain of the Wallet Attestation's issuer (Wallet Provider)

CI_036

Issuance, Trust, Interoperability

Federation Metadata Retrieval

Credential Issuer successfully uses Federation API endpoints (.well-known/openid-federation, /fetch) to retrieve current metadata and configurations of Federation participants, including Wallet Providers

CI_037

Issuance, Trust, Interoperability

Wallet Provider Trust Establishment

Credential Issuer establishes trust in the Wallet Provider as an authorized Federation entity by querying Federation API endpoints (e.g., .well-known/openid-federation, /fetch) and validating the provider's federation status through official channels and trust verification processes.

CI_038

Issuance, Interoperability

One-Time Request URI Provision in the PAR response

Credential Issuer generates and provides a unique, one-time use request_uri value

CI_039

Issuance, Security

Request URI Client Binding in the PAR response

Issued request_uri value is cryptographically bound to the specific client_id provided in the Request Object

CI_040

Issuance, Security

Recommended PAR Response Request URI Validity Duration

request_uri validity time is set to less than one minute

CI_041

Issuance, Security

PAR response Request URI Cryptographic Random Value Integration

Generated request_uri includes a cryptographic random value of at least 128 bits

CI_042

Issuance, Security

Recommended PAR response Request URI Length Limitation

Complete request_uri doesn't exceed 512 ASCII characters

CI_043

Issuance, Interoperability

PAR Response Successful Verification Response

When verification is successful, Credential Issuer returns an HTTP response with 201 status code

CI_044

Issuance, Interoperability

JSON PAR Response Structure

HTTP response message body uses application/json media type (RFC 8259) and includes the required top-level parameters

CI_044a

Issuance, Security

PAR Response request_uri Parameter

HTTP response includes request_uri parameter containing the generated one-time authorization URI

CI_044b

Issuance, Security

PAR Response expires_in Parameter

HTTP response includes expires_in parameter specifying the validity duration in seconds

CI_045

Issuance, Interoperability

PAR Response HTTP Status Code table

When PAR request processing encounters errors, the Credential Issuer responds as defined in RFC 9126, according to the HTTP Status Codes

CI_046

Issuance, Security and Privacy

User Identity Verification during authorization request

Authorization Server successfully verifies the identity of the User who owns the credential through appropriate authentication mechanisms, confirming user ownership before proceeding with credential authorization

CI_047

Issuance, Security

Request URI One-Time Use and Expiration in the Authorization Request

Credential Issuer treats each request_uri value as single-use only and successfully rejects any expired requests

CI_048

Issuance, Security

Optional Duplicate Request Tolerance in the Authorization Request

Credential Issuer allow duplicate requests when they result from User reloading or refreshing their user-agent (derived from RFC 9126)

CI_049

Issuance, Security

PAR Request Identification in the Authorization Request

Credential Issuer successfully identifies and correlates each authorization request as a direct result of a previously submitted PAR (derived from RFC 9126)

CI_050

Issuance, Security

Request URI Parameter Requirement of the Authorization Request

Credential Issuer rejects all Authorization Requests that do not contain the request_uri parameter, since PAR is the exclusive method for passing Authorization Requests from the Wallet Instance (derived from RFC 9126).

CI_051

Issuance, Security

CieID High-Level Authentication

PID Provider successfully performs User authentication based on CieID scheme with LoAHigh (CIE L3)

CI_052

Issuance, Security and Privacy

User Consent for PID Issuance

PID Provider obtains explicit User consent before proceeding with PID issuance

CI_053

Issuance, Privacy

Optional Contact Details Collection

PID Provider MAY request User's contact details (email, phone number) for sending notifications about the issued PID

CI_054

Presentation, Issuance Security

PID-Based User Authentication

(Q)EAA Provider successfully performs User authentication by requesting and validating a valid PID from the Wallet Instance

CI_055

Presentation, Issuance, Interoperability

OpenID4VP Protocol Usage

(Q)EAA Provider uses OpenID4VP protocol to request PID presentation from the Wallet Instance

CI_056

Presentation, Issuance, Security

Presentation Request Delivery

(Q)EAA Provider successfully provides the presentation request to the Wallet

CI_057

Issuance, Privacy

Optional Contact Details Collection for Credentials

Credential Issuers request User's contact details (email, phone number) for sending notifications about issued Digital Credential(s)

CI_058

Issuance, Interoperability

Authorization Response parameters validation

Credential Issuer successfully sends an authorization code response to the Wallet Instance that includes all three required parameters

CI_058a

Issuance, Security

Authorization Response code parameter validation

Authorization code response includes the authorization code parameter

CI_058b

Issuance, Security

Authorization Response state parameter validation

Authorization code response includes the state parameter matching the original request

CI_058c

Issuance, Security

Authorization Response iss parameter validation

Authorization code response includes the iss parameter identifying the issuer

CI_059

Issuance, Interoperability

Authorization Response HTTP Status Code table

When Authorization Response encounter errors, the Authorization Server redirects the User to the redirect_uri HTTP status code 302 according to the HTTP Status Code table

CI_060

Issuance, Security

Authorization Code Issuance Verification of the Token request

Credential Issuer ensures the Authorization code is issued to the authenticated Wallet Instance (RFC 6749) and has not been replayed

CI_061

Issuance, Security

Authorization Code Validity and Usage Check of the Token Request

Credential Issuer verifies the Authorization code is valid and has not been previously used (RFC 6749).

CI_062

Issuance, Security

Redirect URI Matching Validation of the Token Request

Credential Issuer confirms the redirect_uri exactly matches the value included in the previous Request Object (see Section 3.1.3.1. of [OIDC]).

CI_063

Issuance, Security

DPoP Proof JWT Validation of the Token Request

Credential Issuer successfully validates the DPoP Proof JWT, according to (RFC 9449) Section 4.3.

CI_064

Issuance, Interoperability

Access Token Provision in the token response

Credential Issuer provides the Wallet Instance with a valid Access Token upon successful authorization

CI_065

Issuance, Interoperability

Optional Refresh Token Provision

If supported by the Credential Issuer, a Refresh Token is provided to the Wallet Instance

CI_066

Issuance, Security

DPoP Key Binding for Access Token and Refresh Token

Both Access Token and Refresh Token (when issued) are cryptographically bound to the DPoP key

CI_067

Issuance, Interoperability

Token Response HTTP Status Code table

When any errors occur during the validation of the Token Request, the Authorization Server return an error response as defined in RFC 6749, according to the HTTP Status Code Table

CI_068

Issuance, Interoperability

c_nonce Provision

Credential Issuer provides a c_nonce value to the Wallet Instance

CI_069

Issuance, Security

C_nonce Format and Security

The c_nonce parameter is provided as a string value with sufficient unpredictability to prevent guessing attacks, serving as a cryptographic challenge that the Wallet Instance uses to create proof of possession of the key (proof claim)

CI_070

Issuance, Security

C_nonce Reusability and Renewal

The received c_nonce value can be reused by the Wallet Instance to create multiple proofs until the Credential Issuer provides a new c_nonce value

CI_071

Issuance, Interoperability

JWT Proof Required Claims Validation

JWT proof successfully includes all required claims as specified in the Token Request table

CI_072

Issuance, Security

Batch JWT Proof Required Claims Validation

Credential Issuer successfully verify that the jwk attribute in each key proof is unique

CI_073

Issuance, Interoperability

Credential Request Key Proof Type Declaration

Key proof is explicitly typed using appropriate header parameters defined for the respective proof type

CI_074

Issuance, Security

Asymmetric Algorithm Requirement in the Credential Request

The header parameter alg indicates a registered asymmetric digital signature algorithm and is never set to none

CI_075

Issuance, Security

Credential Request Public Key Signature Verification

Signature on the key proof is successfully verified using the public key specified in the header parameter

CI_076

Issuance, Security

Private Key Header Exclusion in the Credential Request

Header parameters do not contain any private key material

CI_077

Issuance, Security

c_nonce Matching in the Credential Request

When a c_nonce value was previously provided by the server, the nonce claim in the JWT exactly matches this c_nonce value

CI_078

Issuance, Security

JWT Temporal Validity in the Credential Request

The creation time of the JWT (via iat claim or server-managed timestamp through nonce claim) falls within the server's acceptable time window

CI_079

Issuance, Interoperability

Credential Registration for Revocation

Credential Issuer registers all issued Credentials in a revocation registry for potential future revocation needs

CI_080

Issuance, Interoperability

Recommended Fresh Cryptographic Key Generation in the Credential Request

Credential Issuer registers all issued Credentials in a revocation registry for potential future revocation needs

CI_081

Issuance, Security

Recommended Deferred Flow support

When the requested Credential cannot be issued immediately and requires more time, the Credential Issuer supports the Deferred Flow

CI_081a

Issuance, Security

Deferred Flow batch issuance consistency

When using the Deferred Flow for batch issuance, the same transaction_id allows retrieval of all Credentials requested in the batch.

CI_082

Issuance, Security

DPoP JWT Proof and Access Token Validation in the Credential Response

Credential Issuer successfully validates the DPoP JWT Proof based on the steps defined in Section 4.3 of (RFC 9449) procedures and confirms the Access Token is valid and suitable for the requested Credent

CI_083

Issuance, Security

Key Material Proof of Possession Validation in the Credential Response

Credential Issuer validates the proof of possession for the key material to which the new Credential will be bound, according to OpenID4VCI Section 8.2.2.

CI_084

Issuance, Security

Credential Creation and Binding in the Credential Response

When all validation checks succeed, Credential Issuer creates a new Credential cryptographically bound to the validated key material and provides it to the Wallet Instance

CI_084a

Issuance, Security

Credential type check

Credential Issuer ensure the credential type matches the request before issuing the new Credential

CI_085

Issuance, Interoperability

Credential Response Table of HTTP Status Codes

When the Credential Request does not contain a valid Access Token, the Credential Endpoint returns an error response such as defined in Section 3 of [RFC 6750], according to the Table of HTTP Status Codes

CI_086

Issuance, Interoperability

Unified Notification ID for Batch Operations

For batch-issued Digital Credentials, a single notification_id covers the entire batch-issued Credentials. The notification response applies to all Credentials, any partial failure is treated as a batch failure.

CI_087

Issuance, Interoperability

Notification Response Table of HTTP Status Codes

When the Notification Request does not contain a valid Access Token, the Notification Endpoint returns an error response such as defined in Section 3 of [RFC 6750], according to the Table of HTTP Status Codes

CI_088

Issuance, Security

Access Token Scope Restriction

Access Token obtained through a Refresh Token flow is successfully limited to three specific endpoints: Deferred endpoint, Notification endpoint and Credential endpoint

CI_088a

Issuance, Security

Deferred Endpoint Access Authorization

Access Token allows access to Deferred endpoint for obtaining new Digital Credentials after lead_time or readiness notification

CI_088b

Issuance, Security

Notification Endpoint Access Authorization

Access Token allows access to Notification endpoint for notifying Digital Credential deletion to the Credential Issuer

CI_089c

Issuance, Security

Credential Endpoint Access Authorization

Access Token allows access to Credential endpoint for Digital Credential refresh/re-issuance of existing credentials

CI_090

Issuance, Security

DPoP-Bound Refresh Token Security

Refresh Tokens are bound to DPoP keys to mitigate stolen token impact

CI_091

Issuance,Interoperability

OAuth Client Attestation PoP Validation for Refresh

Credential Issuer successfully validates the OAuth-Client-Attestation-PoP parameter based on Section 4 of [OAUTH-ATTESTATION-CLIENT-AUTH]

CI_092

Issuance, Security

DPoP Proof JWT Validation for Refresh

Credential Issuer validates the DPoP Proof JWT according to (RFC 6949) Section 4.3.

CI_093

Issuance, Security

Refresh Token Validity and Key Binding Check

Credential Issuer verifies the Refresh Token is not expired, not revoked, and is bound to the same DPoP keys used in the DPoP Proof JWT

CI_094

Issuance, Security

Access Token Generation and Bound

When all validation checks succeed, Credential Issuer generates new Access Token and new Refresh Token, both bound to the DPoP key

CI_095

Issuance, Security

Successful Refresh Token Response

Both the Access Token and the Refresh Token are sent back to the Wallet Instance

CI_096

Issuance, Security

Invalid Refresh Token Error Handling

When the Refresh Token is expired or invalid, Credential Issuer issues an error response with error type member set to invalid_grant

CI_097

Issuance, Security

Refresh Token Confidentiality Protection

Confidentiality of Refresh Tokens is guaranteed both in transit and storage through appropriate encryption and secure handling mechanisms

CI_098

Issuance, Security

TLS-Protected Refresh Token Transmission

All token transmissions use TLS-protected connections, ensuring encrypted communication channels for token exchange

CI_099

Issuance, Security

Refresh Token Security Properties

Refresh tokens are generated with unguessable values and protected from modification through cryptographic integrity mechanisms

CI_100

Issuance, Security

Cryptographic Refresh Token Binding

Authorization Servers cryptographically bind Refresh Tokens to the Wallet Instance according to RFC 9449 specifications

CI_101

Issuance, Security

Consistent DPoP Key Binding between Refresh and Access token

Access Tokens and Refresh Tokens are bound to the same DPoP key

CI_102

Issuance, Security

DPoP Proof Requirement for Refresh Token

DPoP Proof is required for all refresh token operations to obtain new Access Tokens

CI_103

Issuance, Security

Consistent DPoP Key Usage for Refresh Token

The same DPoP key is used to generate Access Token DPoP Proofs across all Credential Requests

CI_104

Issuance, Security

Refresh Token Usage Duration Management

Credential Issuers manage and limit the duration for which refresh tokens can be used to refresh credentials versus requiring complete re-issuance flow restart. As specified in OPENID4VC-HAIP

CI_105

Issuance, Security

Recommended Re-issued Credential Expiration Alignment

New Digital Credentials obtained through re-issuance flow maintain the same expiration as the refreshed credential

CI_106

Issuance, Security

Post-Expiration Issuance Requirement

Once a Digital Credential expires, Users complete the entire issuance process again to obtain new Digital Credentials

CI_107

Issuance, Security

Consistent Issuer Requirement for Re-Issuance

New Digital Credentials are issued exclusively by the same Credential Issuers that originally provided the existing credentials to the same Wallet Instance

CI_108

Issuance, Security

Refresh Token Scope Limitation for Re-issuance

Access Tokens obtained through Refresh Token flows are restricted from issuing Digital Credentials not already present in the Wallet Instance (first-time-issuance)

CI_109

Issuance, Security

Re-issuance Process Scope Limitation

The re-issuance process is limited to two specific update types: Data model/format technical updates and User's attribute set updates

CI_110

Issuance, Security

Not Recommended Technical Update User Interaction

For data model/format technical updates, the replacement and storage of Digital Credentials don't require direct user involvement

CI_111

Issuance, Security and Privacy

Attribute Update User Authorization

For User's attribute set updates, the Wallet Instance informs the User about attribute data set changes and requests explicit User authorization before storing the new Digital Credential

CI_112

Issuance, Security

Expiry Date Consistency for Re-Issuance

Newly issued Digital Credentials maintain the same expiry date as the previous credential version

CI_113

Issuance, Privacy

Optional Out-of-Band Re-Issuance Update Notification

When a Digital Credential requires updating, Credential Issuers send notifications to Users through registered out-of-band communication channels (email, SMS, push notifications)

CI_114

Issuance, Security

First-Time Issuance Restriction for Refresh Tokens

Access Tokens obtained through Refresh Token flows are prohibited from being used for first-time issuance of Digital Credentials

CI_115

Issuance, Security

Mandatory Expiry Date Consistency after Re-Issuance

Credential Issuer sets the same expiry date for re-issued Digital Credentials as the previous credential version

CI_116

Issuance, Privacy

User Consent for Attribute-Based Re-issuance

For re-issuance processes triggered by attribute changes, User consent is obtained before storing the new Digital Credential