This is a interoperability report for implementers for the Verifiable Credentials Data Model v2.0 specification.

Conformance Testing Results

Tests passed 133/156 85%

Tests failed 23/156 15%

Failures 23

Tests skipped 52

Total tests 208

These tests were run on

Key

The results of the tests are shown below:

Basic Conformance

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
verifiers MUST produce errors when non-conforming documents are detected.

Contexts

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
Verifiable credentials MUST include a @context property.
Verifiable presentations MUST include a @context property.
Verifiable credentials: The value of the @context property MUST be an ordered set where the first item is a URL with the value https://www.w3.org/ns/credentials/v2.
Verifiable presentations: The value of the @context property MUST be an ordered set where the first item is a URL with the value https://www.w3.org/ns/credentials/v2.
Verifiable credential @context: "Subsequent items in the ordered set MUST be composed of any combination of URLs and/or objects where each is processable as a JSON-LD Context."

Identifiers

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
If present, the value of the id property MUST be a single URL, which MAY be dereferenceable.

Types

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
Verifiable credentials MUST contain a type property with an associated value.
Verifiable presentations MUST contain a type property with an associated value.
The value of the type property MUST be one or more terms and/or absolute URL strings.
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:220:9)"
                    }
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:220:9)"
                    }
If more than one (type) value is provided, the order does not matter.
VerifiableCredential, VerifiablePresentation, credentialStatus, termsOfUse, refreshService, credentialSchema, and evidence are "objects that MUST have a type specified."
{
                      "name": "HTTPError",
                      "message": "Request failed with status code 400 Bad Request",
                      "stack": "HTTPError: Request failed with status code 400 Bad Request\n    at fn (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/ky/distribution/core/Ky.js:28:29)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async _handleResponse (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/@digitalbazaar/http-client/lib/httpClient.js:101:16)\n    at async makeHttpsRequest (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/vc-test-suite-implementations/lib/requests.js:49:14)\n    at async post (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/TestEndpoints.js:62:27)\n    at async TestEndpoints.verifyVp (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/TestEndpoints.js:50:20)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:255:9)"
                    }
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:275:9)"
                    }
{
                      "name": "HTTPError",
                      "message": "Request failed with status code 500 Internal Server Error",
                      "stack": "HTTPError: Request failed with status code 500 Internal Server Error\n    at fn (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/ky/distribution/core/Ky.js:28:29)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async _handleResponse (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/@digitalbazaar/http-client/lib/httpClient.js:101:16)\n    at async makeHttpsRequest (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/vc-test-suite-implementations/lib/requests.js:49:14)\n    at async post (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/TestEndpoints.js:62:27)\n    at async TestEndpoints.verifyVp (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/TestEndpoints.js:50:20)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:255:9)"
                    }

Names and Descriptions

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
If present, the value of the name property MUST be a string or a language value object as described in 11.1 Language and Base Direction.
{
                      "name": "HTTPError",
                      "message": "An unspecified error occurred.",
                      "stack": "HTTPError: An unspecified error occurred.\n    at fn (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/ky/distribution/core/Ky.js:28:29)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async _handleResponse (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/@digitalbazaar/http-client/lib/httpClient.js:101:16)\n    at async zcapRequest (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/vc-test-suite-implementations/lib/requests.js:83:14)\n    at async post (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/TestEndpoints.js:62:27)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:310:9)"
                    }
If present, the value of the description property MUST be a string or a language value object as described in 11.1 Language and Base Direction.
{
                      "name": "HTTPError",
                      "message": "An unspecified error occurred.",
                      "stack": "HTTPError: An unspecified error occurred.\n    at fn (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/ky/distribution/core/Ky.js:28:29)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async _handleResponse (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/@digitalbazaar/http-client/lib/httpClient.js:101:16)\n    at async zcapRequest (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/vc-test-suite-implementations/lib/requests.js:83:14)\n    at async post (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/TestEndpoints.js:62:27)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:327:9)"
                    }
If present (on `issuer`), the value of the name property MUST be a string or a language value object as described in 11.1 Language and Base Direction.
{
                      "name": "HTTPError",
                      "message": "An unspecified error occurred.",
                      "stack": "HTTPError: An unspecified error occurred.\n    at fn (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/ky/distribution/core/Ky.js:28:29)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async _handleResponse (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/@digitalbazaar/http-client/lib/httpClient.js:101:16)\n    at async zcapRequest (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/vc-test-suite-implementations/lib/requests.js:83:14)\n    at async post (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/TestEndpoints.js:62:27)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:347:9)"
                    }
If present (on `issuer`), the value of the description property MUST be a string or a language value object as described in 11.1 Language and Base Direction.
{
                      "name": "HTTPError",
                      "message": "An unspecified error occurred.",
                      "stack": "HTTPError: An unspecified error occurred.\n    at fn (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/ky/distribution/core/Ky.js:28:29)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async _handleResponse (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/@digitalbazaar/http-client/lib/httpClient.js:101:16)\n    at async zcapRequest (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/vc-test-suite-implementations/lib/requests.js:83:14)\n    at async post (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/TestEndpoints.js:62:27)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:364:9)"
                    }

Credential Subject

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
A verifiable credential MUST have a credentialSubject property.
The value of the credentialSubject property is defined as a set of objects where each object MUST be the subject of one or more claims, which MUST be serialized inside the credentialSubject property.
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:396:9)"
                    }

Issuer

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
A verifiable credential MUST have an issuer property.
The value of the issuer property MUST be either a URL, or an object containing an id property whose value is a URL.
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection: Failed to reject an issuer identifier that was not a URL.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection: Failed to reject an issuer identifier that was not a URL.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:430:9)"
                    }
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection: Failed to reject an issuer identifier that was not a URL.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection: Failed to reject an issuer identifier that was not a URL.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:430:9)"
                    }

Validity Period

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
If present, the value of the validFrom property MUST be an [XMLSCHEMA11-2] dateTimeStamp string value representing the date and time the credential becomes valid, which could be a date and time in the future or in the past.
If present, the value of the validUntil property MUST be an [XMLSCHEMA11-2] dateTimeStamp string value representing the date and time the credential ceases to be valid, which could be a date and time in the past or in the future.
{
                      "name": "HTTPError",
                      "message": "Expired",
                      "stack": "HTTPError: Expired\n    at fn (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/ky/distribution/core/Ky.js:28:29)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async _handleResponse (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/@digitalbazaar/http-client/lib/httpClient.js:101:16)\n    at async makeHttpsRequest (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/vc-test-suite-implementations/lib/requests.js:49:14)\n    at async post (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/TestEndpoints.js:62:27)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:474:9)"
                    }
If a validUntil value also exists, the validFrom value MUST express a datetime that is temporally the same or earlier than the datetime expressed by the validUntil value.
If a validFrom value also exists, the validUntil value MUST express a datetime that is temporally the same or later than the datetime expressed by the validFrom value.

Securing Mechanisms

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
A conforming document MUST be secured by at least one securing mechanism as described in Section 4.9 Securing Mechanisms.
A conforming issuer implementation produces conforming documents, MUST include all required properties in the conforming documents that it produces, and MUST secure the conforming documents it produces using a securing mechanism as described in Section 4.9 Securing Mechanisms.
A conforming verifier implementation consumes conforming documents, MUST perform verification on a conforming document as described in Section 4.9 Securing Mechanisms, MUST check that each required property satisfies the normative requirements for that property, and MUST produce errors when non-conforming documents are detected.

Status

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
If present (credentialStatus.id), the normative guidance in Section 4.3 Identifiers MUST be followed.
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:630:9)"
                    }
(If a credentialStatus property is present), The type property is REQUIRED. It is used to express the type of status information expressed by the object. The related normative guidance in Section 4.4 Types MUST be followed.
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:638:9)"
                    }
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:640:9)"
                    }

Verifiable Presentations

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
If [the `id` field is] present, the normative guidance in Section 4.3 Identifiers MUST be followed.
🚫
🚫
🚫
🚫
The type property MUST be present. One value of this property MUST be VerifiablePresentation, but additional types MAY be included.The related normative guidance in Section 4.4 Types MUST be followed.
🚫
🚫
🚫
🚫
The verifiableCredential property MAY be present. The value MUST be one or more verifiable credential and/or enveloped verifiable credential objects (to be clear, the values MUST NOT be non-object values such as numbers, strings, or URLs).
{
                      "name": "HTTPError",
                      "message": "Request failed with status code 400 Bad Request",
                      "stack": "HTTPError: Request failed with status code 400 Bad Request\n    at fn (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/ky/distribution/core/Ky.js:28:29)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async _handleResponse (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/@digitalbazaar/http-client/lib/httpClient.js:101:16)\n    at async makeHttpsRequest (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/vc-test-suite-implementations/lib/requests.js:49:14)\n    at async post (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/TestEndpoints.js:62:27)\n    at async TestEndpoints.verifyVp (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/TestEndpoints.js:50:20)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:698:9)"
                    }
{
                      "name": "HTTPError",
                      "message": "Request failed with status code 500 Internal Server Error",
                      "stack": "HTTPError: Request failed with status code 500 Internal Server Error\n    at fn (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/ky/distribution/core/Ky.js:28:29)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async _handleResponse (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/@digitalbazaar/http-client/lib/httpClient.js:101:16)\n    at async makeHttpsRequest (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/node_modules/vc-test-suite-implementations/lib/requests.js:49:14)\n    at async post (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/TestEndpoints.js:62:27)\n    at async TestEndpoints.verifyVp (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/TestEndpoints.js:50:20)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:698:9)"
                    }

VP - Enveloped Verifiable Credentials

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
The @context property of the object MUST be present and include a context, such as the base context for this specification, that defines at least the id, type, and EnvelopedVerifiableCredential terms as defined by the base context provided by this specification.
🚫
🚫
🚫
🚫
The id value of the object MUST be a data: URL [RFC2397] that expresses a secured verifiable credential using an enveloping security scheme, such as Securing Verifiable Credentials using JOSE and COSE [VC-JOSE-COSE].
🚫
🚫
🚫
🚫
The type value of the object MUST be EnvelopedVerifiableCredential.
🚫
🚫
🚫
🚫

VP - Enveloped Verifiable Presentations

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
The @context property of the object MUST be present and include a context, such as the base context for this specification, that defines at least the id, type, and EnvelopedVerifiablePresentation terms as defined by the base context provided by this specification.
🚫
🚫
🚫
🚫
The id value of the object MUST be a data: URL [RFC2397] that expresses a secured verifiable presentation using an enveloping securing mechanism, such as Securing Verifiable Credentials using JOSE and COSE [VC-JOSE-COSE].
🚫
🚫
🚫
🚫
The type value of the object MUST be EnvelopedVerifiablePresentation.
🚫
🚫
🚫
🚫

VP - Presentations Including Holder Claims

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
A verifiable presentation that includes a self-asserted verifiable credential that is only secured using the same mechanism as the verifiable presentation MUST include a holder property.
🚫
🚫
🚫
🚫
When a self-asserted verifiable credential is secured using the same mechanism as the verifiable presentation, the value of the issuer property of the verifiable credential MUST be identical to the holder property of the verifiable presentation.
🚫
🚫
🚫
🚫

Data Schemas

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
The value of the credentialSchema property MUST be one or more data schemas that provide verifiers with enough information to determine whether the provided data conforms to the provided schema(s).
Each credentialSchema MUST specify its type (for example, JsonSchema), and an id property that MUST be a URL identifying the schema file.
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection: Failed to reject credentialSchema without a `type`.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection: Failed to reject credentialSchema without a `type`.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:852:9)"
                    }
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection: Failed to reject credentialSchema without a `type`.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection: Failed to reject credentialSchema without a `type`.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:852:9)"
                    }
If multiple schemas are present, validity is determined according to the processing rules outlined by each associated credentialSchema type property.

Advanced Concepts

Implementer ⇒
Test Name
apicatalog.com Digital Bazaar Open Security and Identity SpruceID
JSON-LD-based processors MUST produce an error when a JSON-LD context redefines any term in the active context.
The value of the refreshService property MUST be one or more refresh services that provides enough information to the recipient's software such that the recipient can refresh the verifiable credential.
Each refreshService value MUST specify its type.
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:910:11)"
                    }
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:910:11)"
                    }
The value of the termsOfUse property MUST specify one or more terms of use policies under which the creator issued the credential or presentation.
Each termsOfUse value MUST specify its type, for example, IssuerPolicy, and MAY specify its instance id.
{
                      "name": "AssertionError",
                      "message": "Missing expected rejection.",
                      "stack": "AssertionError [ERR_ASSERTION]: Missing expected rejection.\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Context. (file:///home/runner/work/vc-data-model-2.0-test-suite/vc-data-model-2.0-test-suite/tests/10-vcdm2.js:925:9)"
                    }
The value of the evidence property MUST be one or more evidence schemes providing enough information for a verifier to determine whether the evidence gathered by the issuer meets its confidence requirements for relying on the credential.