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 blockcerts
@context MUST be one or more URIs
@context first value MUST be https://www.w3.org/2018/credentials/v1
@context subsequent items can be objects that express context information
`id` properties MUST be a single URI
`type` properties MUST be one or more URIs
`type` properties for Credential MUST be `VerifiableCredential` plus specific type
`credentialSubject` property MUST be present
`credentialSubject` property MUST be present, may be a set of objects
`issuer` property MUST be present
`issuer` property MUST be a single URI
`issuanceDate` property MUST be present
`issuanceDate` property MUST be an RFC3339 datetime
`expirationDate` property MUST be an RFC3339 datetime
Presentations MUST be of type `VerifiablePresentation`
Presentations MUST include `verifiableCredential` and `proof`
@context MUST be one or more URIs (negative)
@context first value MUST be https://www.w3.org/2018/credentials/v1 (negative)
`id` properties MUST be a single URI (negative)
`type` properties MUST be one or more URIs (negative)
`type` properties for Credential MUST be `VerifiableCredential` plus specific type (negative)
`credentialSubject` property MUST be present (negative - credentialSubject missing)
`issuer` property MUST be present (negative - missing issuer)
`issuer` property MUST be a single URI (negative - not URI)
`issuer` property MUST be a single URI (negative - Array)
`issuanceDate` property MUST be present (negative - missing issuanceDate)
`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 (negative - RFC3339)
`expirationDate` property MUST be an RFC3339 datetime (negative - Array)
Presentations MUST include `verifiableCredential` and `proof` (negative - missing `verifiableCredential`)
Presentations MUST include `verifiableCredential` and `proof` (negative - missing `proof`)

Credential Status (optional)

Test blockcerts
`credentialStatus` property MUST include `id` and `type`
`credentialStatus` property MUST include `id` and `type` (negative - missing `id`)
`credentialStatus` property MUST include `id` and `type` (negative - missing `type`)

Linked Data Proofs (optional)

Test blockcerts
`proof` property MUST be present
`proof` property MUST include specific method using the type property
`proof` property MUST include type property (negative - missing proof type)

Credential Schema (optional)

Test blockcerts
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
`credentialSchema` MUST provide one or more data schemas

Refresh Service (optional)

Test blockcerts
each object within `refreshService`... MUST specify a `type` property with a valid value
each object within `refreshService`... MUST specify an `id` property
each object within `refreshService`... value of `id` MUST be a URL identifying a service endpoint
`refreshService` MUST provide one or more refresh services

Terms of Use (optional)

Test blockcerts
each object within `termsOfUse`... MUST specify a `type` property with a valid value
`termsOfUse` MUST provide one or more ToU objects

Evidence (optional)

Test blockcerts
each object within `evidence`... MUST specify a `type` property with a valid value
`evidence` MUST provide one or more evidence objects

JWT (optional)

Test blockcerts

Zero-Knowledge Proofs (optional)

Test blockcerts