This is the most recent implementation report for the Verifiable Credentials Data Model specification.

Comments regarding this document are welcome. Please file issues directly on GitHub, or send them to public-vc-comments@w3.org (subscribe, archives).

Introduction

The purpose of this document is to demonstrate that there are at least two interoperable implementations of processors that are capable of generating output that is conformant to the Verifiable Credentials Data Model.

Testing Methodology

The testing framework for the Verifiable Credentials Data Model executes the following process for every conformance statement in the Verifiable Credentials Data Model:

  1. Take an input file template that exercises the feature and feed it to a developer provided Verifiable Credentials Data Model generator.
  2. If the input is valid, generate a Verifiable Credential that is conformant to the data model.
  3. The test suite then ensures that the generated Verifiable Credential is conformant to the feature being tested.

Conformance Testing Results

Key

The results of the conformance testing are shown below:

Basic Documents

Test BrightLinkCredlyEvernymFactom-Harmony-IntegrateGravityGuillaume-DaumasOpenAttestationSovrin-Ken_EbertSpruceToulouse-KentuPort-kotlinuPortvc.jsverifiable-credentials-java
@context MUST be one or more URIs
@context MUST be one or more URIs (negative)
@context first value MUST be https://www.w3.org/2018/credentials/v1
@context first value MUST be https://www.w3.org/2018/credentials/v1 (negative)
@context subsequent items can be objects that express context information
`id` properties MUST be a single URI
`id` properties MUST be a single URI (negative)
`type` properties MUST be one or more URIs
`type` properties MUST be one or more URIs (negative)
`type` properties for Credential MUST be `VerifiableCredential` plus specific type
`type` properties for Credential MUST be `VerifiableCredential` plus specific type (negative)
`credentialSubject` property MUST be present
`credentialSubject` property MUST be present, may be a set of objects
`credentialSubject` property MUST be present (negative - credentialSubject missing)
`issuer` property MUST be present
`issuer` property MUST be present (negative - missing issuer)
`issuer` property MUST be a single URI
`issuer` property MUST be a single URI (negative - not URI)
`issuer` property MUST be a single URI (negative - Array)
`issuanceDate` property MUST be present
`issuanceDate` property MUST be present (negative - missing issuanceDate)
`issuanceDate` property MUST be an RFC3339 datetime
`issuanceDate` property MUST be an RFC3339 datetime (negative - RFC3339)
`issuanceDate` property MUST be an RFC3339 datetime (negative - Array)
`expirationDate` property MUST be an RFC3339 datetime
`expirationDate` property MUST be an RFC3339 datetime (negative - RFC3339)
`expirationDate` property MUST be an RFC3339 datetime (negative - Array)
Presentations MUST be of type `VerifiablePresentation`

Credential Status (optional)

Test BrightLinkCredlyEvernymFactom-Harmony-IntegrateGravityGuillaume-DaumasOpenAttestationSovrin-Ken_EbertSpruceToulouse-KentuPort-kotlinuPortvc.jsverifiable-credentials-java
`credentialStatus` property MUST include `id` and `type` no support
`credentialStatus` property MUST include `id` and `type` (negative - missing `id`) no support
`credentialStatus` property MUST include `id` and `type` (negative - missing `type`) no support

Linked Data Proofs (optional)

Test BrightLinkCredlyEvernymFactom-Harmony-IntegrateGravityGuillaume-DaumasOpenAttestationSovrin-Ken_EbertSpruceToulouse-KentuPort-kotlinuPortvc.jsverifiable-credentials-java
`proof` property MUST be present no support no support
`proof` property MUST include specific method using the type property no support no support
`proof` property MUST include type property (negative - missing proof type) no support no support

Credential Schema (optional)

Test BrightLinkCredlyEvernymFactom-Harmony-IntegrateGravityGuillaume-DaumasOpenAttestationSovrin-Ken_EbertSpruceToulouse-KentuPort-kotlinuPortvc.jsverifiable-credentials-java
`credentialSchema` MUST provide one or more data schemas no support
each object within `credentialSchema`... MUST specify a `type` property with a valid value
each object within `credentialSchema`... MUST specify an `id` property
each object within `credentialSchema`... value of `id` MUST be a URI identifying a schema file

Refresh Service (optional)

Test BrightLinkCredlyEvernymFactom-Harmony-IntegrateGravityGuillaume-DaumasOpenAttestationSovrin-Ken_EbertSpruceToulouse-KentuPort-kotlinuPortvc.jsverifiable-credentials-java
`refreshService` MUST provide one or more refresh services no support no support no support
each object within `refreshService`... MUST specify a `type` property with a valid value no support no support
each object within `refreshService`... MUST specify an `id` property no support no support
each object within `refreshService`... value of `id` MUST be a URL identifying a service endpoint no support no support

Terms of Use (optional)

Test BrightLinkCredlyEvernymFactom-Harmony-IntegrateGravityGuillaume-DaumasOpenAttestationSovrin-Ken_EbertSpruceToulouse-KentuPort-kotlinuPortvc.jsverifiable-credentials-java
`termsOfUse` MUST provide one or more ToU objects no support no support no support
each object within `termsOfUse`... MUST specify a `type` property with a valid value no support no support

Evidence (optional)

Test BrightLinkCredlyEvernymFactom-Harmony-IntegrateGravityGuillaume-DaumasOpenAttestationSovrin-Ken_EbertSpruceToulouse-KentuPort-kotlinuPortvc.jsverifiable-credentials-java
`evidence` MUST provide one or more evidence objects no support no support no support
each object within `evidence`... MUST specify a `type` property with a valid value no support no support

JWT (optional)

Test BrightLinkCredlyEvernymFactom-Harmony-IntegrateGravityGuillaume-DaumasOpenAttestationSovrin-Ken_EbertSpruceToulouse-KentuPort-kotlinuPortvc.jsverifiable-credentials-java
A verifiable credential ... vc MUST be present in a JWT verifiable credential. no support no support no support no support no support no support no support no support
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... If no explicit rule is specified, properties are encoded in the same way as with a standardverifiable credential, and are added to the vc property of the JWT. no support no support no support no support no support no support no support no support
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... if typ is present, it MUST be set to JWT. no support no support no support no support no support no support no support no support
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... alg MUST be used for RSA and ECDSA-based digital signatures. no support no support no support no support no support no support no support no support
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... If no JWS is present, a proof property MUST be provided. no support no support no support no support no support no support no support no support
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... If only the proof attribute is used, the alg header MUST be set to none. no support no support no support no support no support no support no support no support
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... exp MUST represent expirationDate, encoded as a UNIX timestamp (NumericDate). no support no support no support no support no support no support no support no support
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... exp MUST represent expirationDate, encoded as a UNIX timestamp (NumericDate) -- negative, no exp expected. no support no support no support no support no support no support no support no support
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... iss MUST represent the issuer property. no support no support no support no support no support no support no support no support
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... nbf MUST represent issuanceDate, encoded as a UNIX timestamp (NumericDate). no support no support no support no support no support no support no support no support
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... jti MUST represent the id property of the verifiable credential, or verifiable presentation. no support no support no support untested untested untested no support untested untested untested untested no support untested
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... jti MUST represent the id property of the verifiable credential, or verifiable presentation -- negative, no jti expected no support no support no support untested untested untested no support untested untested untested untested no support untested
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... sub MUST represent the id property contained in the verifiable credential subject. no support no support no support no support no support no support no support no support
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... aud MUST represent the subject of the consumer of the verifiable presentation. no support no support no support untested untested untested no support untested untested untested untested no support untested
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... Additional claims MUST be added to the credentialSubject property of the JWT. no support no support no support no support no support no support no support no support
To decode a JWT to a standard verifiable credential, the following transformation MUST be performed... Add the content from the vc property to the new JSON object. no support no support no support no support no support no support no support no support
To decode a JWT to a standard verifiable credential, the following transformation MUST be performed... To transform the JWT specific headers and claims, the following MUST be done: If exp is present, the UNIX timestamp MUST be converted to an [RFC3339] date-time, and MUST be used to set the value of the expirationDate property of credentialSubject of the new JSON object. no support no support no support no support no support no support no support no support
To decode a JWT to a standard verifiable credential, the following transformation MUST be performed... To transform the JWT specific headers and claims, the following MUST be done: If iss is present, the value MUST be used to set the issuer property of the new JSON object. no support no support no support no support no support no support no support no support
To decode a JWT to a standard verifiable credential, the following transformation MUST be performed... To transform the JWT specific headers and claims, the following MUST be done: If nbf is present, the UNIX timestamp MUST be converted to an [RFC3339] date-time, and MUST be used to set the value of the issuanceDate property of the new JSON object. no support no support no support no support no support no support no support no support
To decode a JWT to a standard verifiable credential, the following transformation MUST be performed... To transform the JWT specific headers and claims, the following MUST be done: If sub is present, the value MUST be used to set the value of the id property of credentialSubject of the new JSON object. no support no support no support no support no support no support no support no support
To decode a JWT to a standard verifiable credential, the following transformation MUST be performed... To transform the JWT specific headers and claims, the following MUST be done: If jti is present, the value MUST be used to set the value of the id property of the new JSON object. no support no support no support no support no support no support no support no support
A verifiable presentation ... vp MUST be present in a JWT verifiable presentation. no support no support no support untested untested untested no support untested untested untested untested no support untested
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... jti MUST represent the id property of the verifiable credential. untested untested untested no support no support untested no support untested untested
A verifiable credential ... To encode a verifiable credential as a JWT, specific properties introduced by thisspecification MUST be either 1) encoded as standard JOSE header parameters, 2) encoded as registered JWT claim names, or 3) contained in the JWS signature part... jti MUST represent the id property of the verifiable credential -- negative, no jti expected untested untested untested no support no support untested no support untested untested
A verifiable presentation ... vp MUST be present in a JWT verifiable presentation untested untested untested no support no support untested no support untested untested
A verifiable presentation ... aud MUST represent the subject of the consumer of the verifiable presentation untested untested untested no support no support untested no support untested untested
A verifiable presentation ... jti MUST represent the id property of [...] the verifiable presentation untested untested untested no support no support untested no support untested untested
A verifiable presentation ... jti MUST represent the id property of [...] the verifiable presentation -- negative, no jti expected untested untested untested no support no support untested no support untested untested
A verifiable presentation ... iss MUST represent [...] the holder property of a verifiable presentation untested untested untested no support no support untested no support untested untested
A verifiable presentation ... iss MUST represent [...] the holder property of a verifiable presentation. -- negative, no jti expected untested untested untested no support no support untested no support untested untested

Zero-Knowledge Proofs (optional)

Test BrightLinkCredlyEvernymFactom-Harmony-IntegrateGravityGuillaume-DaumasOpenAttestationSovrin-Ken_EbertSpruceToulouse-KentuPort-kotlinuPortvc.jsverifiable-credentials-java
A verifiable credential... MUST contain a credentialSchema no support no support no support no support no support no support no support no support
A verifiable credential... MUST contain a credentialSchema (negative - credentialSchema missing) no support no support no support no support no support no support no support no support
A verifiable credential... MUST contain a proof no support no support no support no support no support no support no support no support
A verifiable credential... MUST contain a proof (negative - missing) no support no support no support no support no support no support no support no support
A verifiable credential... Each credentialSchema... MUST specify a type no support no support no support no support no support no support no support no support
A verifiable credential... Each credentialSchema... MUST specify a type (negative - type missing) no support no support no support no support no support no support no support no support
A verifiable credential... Each credentialSchema... MUST specify an `id` property no support no support no support no support no support no support no support no support
A verifiable credential... Each credentialSchema... MUST specify an `id` property (negative - `id` missing) no support no support no support no support no support no support no support no support
A verifiable credential... Each credentialSchema... value of `id` MUST be a URI identifying a schema file no support no support no support no support no support no support no support no support
A verifiable credential... Each proof... MUST include specific method using the type property no support no support no support no support no support no support no support no support
A verifiable credential... Each proof... proof MUST include type property (negative - missing proof type) no support no support no support no support no support no support no support no support
A verifiable presentation... MUST be of type `VerifiablePresentation` no support no support no support no support no support no support no support no support
A verifiable presentation... MUST include `proof` no support no support no support no support no support no support no support no support
A verifiable presentation... MUST include `proof` (negative - missing `proof`) no support no support no support no support no support no support no support no support
A verifiable presentation... Each verifiable credential... MUST have a `credentialSchema` member no support no support no support no support no support no support no support no support
A verifiable presentation... Each verifiable credential... MUST contain a credentialSchema (negative - credentialSchema missing) no support no support no support no support no support no support no support no support