The purpose of this test suite is to demonstrate a path to interoperability for the BBS data integrity cryptosuite. The technologies explored in this test suite are experimental. This document contains the most recent interoperability report for a DataIntegrityProof using the BBS cryptosuite. This report is auto-generated.

Conformance Testing Results

Tests passed 401/444 90%

Tests failed 43/444 10%

Failures 43

Tests skipped 24

Total tests 468

These tests were run on

Key

🚫
Pending
Passed
Failed
Access Denied
Timeout
Not Implemented

The results of the tests are shown below:

Data Integrity (bbs-2023 issuers)

Issuer ⇒
Test Name
Digital Bazaar Grotto Networking Procivis One Core SpruceID
When expressing a data integrity proof on an object, a proof property MUST be used.
If present (proof), its value MUST be either a single object, or an unordered set of objects.
("proof.id") An optional identifier for the proof, which MUST be a URL.
The specific type of proof MUST be specified as a string that maps to a URL.
Expected "@type" URL to be parsed.: expected TypeError: Invalid URL { …(2) } to not exist
AssertionError: Expected "@type" URL to be parsed.: expected TypeError: Invalid URL { …(2) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at shouldBeUrl (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/data-integrity-test-suite-assertion/assertions.js:197:14)
                        at file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/data-integrity-test-suite-assertion/suites/create.js:82:30
                        at Array.every (<anonymous>)
                        at Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/data-integrity-test-suite-assertion/suites/create.js:82:17)
The type property MUST contain the string DataIntegrityProof.
The proofValue property MUST be used, as specified in 2.1 Proofs.
If the proof type is DataIntegrityProof, cryptosuite MUST be specified; otherwise, cryptosuite MAY be specified.
If specified (proof.cryptosuite), its value MUST be a string.
A verification method is the means and information needed to verify the proof. If included, the value MUST be a string that maps to a [URL].
Expected property "https://w3id.org/security#verificationMethod" to exist.: expected undefined to exist
AssertionError: Expected property "https://w3id.org/security#verificationMethod" to exist.: expected undefined to exist
                        at should.exist (node_modules/chai/lib/chai/interface/should.js:144:34)
                        at shouldMapToUrl (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/data-integrity-test-suite-assertion/assertions.js:215:12)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/data-integrity-test-suite-assertion/suites/create.js:174:9)
The reason the proof was created ("proof.proofPurpose") MUST be specified as a string that maps to a URL.
Expected property "https://w3id.org/security#proofPurpose" to exist.: expected undefined to exist
AssertionError: Expected property "https://w3id.org/security#proofPurpose" to exist.: expected undefined to exist
                        at should.exist (node_modules/chai/lib/chai/interface/should.js:144:34)
                        at shouldMapToUrl (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/data-integrity-test-suite-assertion/assertions.js:215:12)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/data-integrity-test-suite-assertion/suites/create.js:191:9)
("proof.proofValue") A string value that expresses base-encoded binary data necessary to verify the digital proof using the verificationMethod specified. The value MUST use a header and encoding as described in Section 2.4 Multibase of the Controller Documents 1.0 specification to express the binary data.
Cryptographic suite designers MUST use mandatory proof value properties defined in Section 2.1 Proofs, and MAY define other properties specific to their cryptographic suite.
Implementations that use JSON-LD processing, such as RDF Dataset Canonicalization [RDF-CANON], MUST throw an error, which SHOULD be DATA_LOSS_DETECTION_ERROR, when data is dropped by a JSON-LD processor, such as when an undefined term is detected in an input document.
The value of the cryptosuite property MUST be a string that identifies the cryptographic suite.
The value of the cryptosuite property MUST be a string that identifies the cryptographic suite. If the processing environment supports subtypes of string, the type of the cryptosuite value MUST be the https://w3id.org/security#cryptosuiteString subtype of string.
Expected property https://w3id.org/security#cryptosuite to exist.: expected undefined to exist
AssertionError: Expected property https://w3id.org/security#cryptosuite to exist.: expected undefined to exist
                        at should.exist (node_modules/chai/lib/chai/interface/should.js:144:34)
                        at Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/data-integrity-test-suite-assertion/suites/create.js:280:20)

bbs-2023 (issuers) VC Version 1.1

Implementation ⇒
Test Name
Digital Bazaar Grotto Networking Procivis One Core SpruceID
The cryptosuite property of the proof MUST be bbs-2023.
The type property of the proof MUST be DataIntegrityProof.
The value of the proofValue property of the proof MUST be a BBS signature or BBS proof produced according to [CFRG-BBS-SIGNATURE] that is serialized and encoded according to procedures in section 3. Algorithms.
A conforming proof is any concrete expression of the data model that complies with the normative statements in this specification. Specifically, all relevant normative statements in Sections 2. Data Model and 3. Algorithms of this document MUST be enforced.
"issuanceDate" property is required.
Error: "issuanceDate" property is required.
                        at _checkCredential (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/@digitalbazaar/vc/lib/index.js:605:13)
                        at Module.derive (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/@digitalbazaar/vc/lib/index.js:174:3)
                        at deriveCredential (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/vc-generator/index.js:75:13)
                        at shouldVerifyDerivedProof (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:190:29)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/create.js:122:11)
The verificationMethod property of the proof MUST be a URL.
Dereferencing "verificationMethod" MUST result in an object containing a type property with "Multikey" value.
The publicKeyMultibase property represents a Multibase-encoded Multikey expression of a BLS12-381 public key in the G2 group. The encoding of this field is the two-byte prefix 0xeb01 followed by the 96-byte compressed public key data. The 98-byte value is then encoded using base58-btc (z) as the prefix. Any other encodings MUST NOT be allowed.
The transformation options MUST contain a type identifier for the cryptographic suite (type), a cryptosuite identifier (cryptosuite), and a verification method (verificationMethod).
the HMAC key MUST be the same length as the digest size
CBOR-encode components per [RFC8949] where CBOR tagging MUST NOT be used on any of the components. Append the produced encoded value to proofValue.
The transformation options MUST contain an array of mandatory JSON pointers (mandatoryPointers)
Initialize components to an array that is the result of CBOR-decoding the bytes that follow the three-byte BBS disclosure proof header. If the result is not an array of five or six elements — a byte array, a map of integers to integers, two arrays of integers, and one or two byte arrays; an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR.

bbs-2023 (issuers) VC Version 2.0

Implementation ⇒
Test Name
Digital Bazaar Grotto Networking Procivis One Core SpruceID
The cryptosuite property of the proof MUST be bbs-2023.
The type property of the proof MUST be DataIntegrityProof.
The value of the proofValue property of the proof MUST be a BBS signature or BBS proof produced according to [CFRG-BBS-SIGNATURE] that is serialized and encoded according to procedures in section 3. Algorithms.
A conforming proof is any concrete expression of the data model that complies with the normative statements in this specification. Specifically, all relevant normative statements in Sections 2. Data Model and 3. Algorithms of this document MUST be enforced.
JSON pointer "/issuanceDate" does not match document.
TypeError: JSON pointer "/issuanceDate" does not match document.
                        at _selectPaths (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/@digitalbazaar/di-sd-primitives/lib/select.js:87:13)
                        at selectJsonLd (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/@digitalbazaar/di-sd-primitives/lib/select.js:35:5)
                        at selectCanonicalNQuads (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/@digitalbazaar/di-sd-primitives/lib/select.js:59:21)
                        at file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/@digitalbazaar/di-sd-primitives/lib/group.js:29:32
                        at Array.map (<anonymous>)
                        at canonicalizeAndGroup (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/@digitalbazaar/di-sd-primitives/lib/group.js:28:29)
                        at async _createDisclosureData (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/@digitalbazaar/bbs-2023-cryptosuite/lib/disclose.js:77:7)
                        at async Object._derive [as derive] (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/node_modules/@digitalbazaar/bbs-2023-cryptosuite/lib/disclose.js:172:7)
                        at async ProofSet.derive (node_modules/jsonld-signatures/lib/ProofSet.js:123:25)
                        at async Object.derive (node_modules/jsonld-signatures/lib/jsonld-signatures.js:60:12)
                        at async shouldVerifyDerivedProof (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:190:23)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/create.js:122:11)
The verificationMethod property of the proof MUST be a URL.
Dereferencing "verificationMethod" MUST result in an object containing a type property with "Multikey" value.
The publicKeyMultibase property represents a Multibase-encoded Multikey expression of a BLS12-381 public key in the G2 group. The encoding of this field is the two-byte prefix 0xeb01 followed by the 96-byte compressed public key data. The 98-byte value is then encoded using base58-btc (z) as the prefix. Any other encodings MUST NOT be allowed.
The transformation options MUST contain a type identifier for the cryptographic suite (type), a cryptosuite identifier (cryptosuite), and a verification method (verificationMethod).
the HMAC key MUST be the same length as the digest size
CBOR-encode components per [RFC8949] where CBOR tagging MUST NOT be used on any of the components. Append the produced encoded value to proofValue.
The transformation options MUST contain an array of mandatory JSON pointers (mandatoryPointers)
Initialize components to an array that is the result of CBOR-decoding the bytes that follow the three-byte BBS disclosure proof header. If the result is not an array of five or six elements — a byte array, a map of integers to integers, two arrays of integers, and one or two byte arrays; an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR.

Data Integrity (bbs-2023 verifiers) VC 1.1

Verifier ⇒
Test Name
Digital Bazaar Grotto Networking Procivis One Core SpruceID
When deserializing to RDF, implementations MUST ensure that the base URL is set to null.
Conforming processors MUST produce errors when non-conforming documents are consumed.
If the "proof" field is missing, an error MUST be raised.
If the "proof" field is invalid, an error MUST be raised.
If the "proof.type" field is missing, an error MUST be raised.
If the "proof.type" field is not the string "DataIntegrityProof", an error MUST be raised.
If the "proof.verificationMethod" field is missing, an error MUST be raised.
If the "proof.verificationMethod" field is invalid, an error MUST be raised.
If the "proof.proofPurpose" field is missing, an error MUST be raised.
If the "proof.proofPurpose" field is invalid, an error MUST be raised.
If expectedProofPurpose was given, and it does not match proof.proofPurpose, an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR.
The proofValue property MUST be used, as specified in 2.1 Proofs.
("proof.proofValue") A string value that contains the base-encoded binary data necessary to verify the digital proof using the verificationMethod specified. The contents of the value MUST be expressed with a header and encoding as described in Section 2.4 Multibase of the Controller Documents 1.0 specification.
Implementations that use JSON-LD processing, such as RDF Dataset Canonicalization [RDF-CANON], MUST throw an error, which SHOULD be DATA_LOSS_DETECTION_ERROR, when data is dropped by a JSON-LD processor, such as when an undefined term is detected in an input document.
The value of the cryptosuite property MUST be a string that identifies the cryptographic suite. If the processing environment supports subtypes of string, the type of the cryptosuite value MUST be the https://w3id.org/security#cryptosuiteString subtype of string.
If options has a non-null domain item, it MUST be equal to proof.domain or an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR.
If options has a non-null challenge item, it MUST be equal to proof.challenge or an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR.

Data Integrity (bbs-2023 verifiers) VC 2.0

Verifier ⇒
Test Name
Digital Bazaar Grotto Networking Procivis One Core SpruceID
When deserializing to RDF, implementations MUST ensure that the base URL is set to null.
Conforming processors MUST produce errors when non-conforming documents are consumed.
If the "proof" field is missing, an error MUST be raised.
If the "proof" field is invalid, an error MUST be raised.
If the "proof.type" field is missing, an error MUST be raised.
If the "proof.type" field is not the string "DataIntegrityProof", an error MUST be raised.
If the "proof.verificationMethod" field is missing, an error MUST be raised.
If the "proof.verificationMethod" field is invalid, an error MUST be raised.
If the "proof.proofPurpose" field is missing, an error MUST be raised.
If the "proof.proofPurpose" field is invalid, an error MUST be raised.
If expectedProofPurpose was given, and it does not match proof.proofPurpose, an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR.
The proofValue property MUST be used, as specified in 2.1 Proofs.
("proof.proofValue") A string value that contains the base-encoded binary data necessary to verify the digital proof using the verificationMethod specified. The contents of the value MUST be expressed with a header and encoding as described in Section 2.4 Multibase of the Controller Documents 1.0 specification.
Implementations that use JSON-LD processing, such as RDF Dataset Canonicalization [RDF-CANON], MUST throw an error, which SHOULD be DATA_LOSS_DETECTION_ERROR, when data is dropped by a JSON-LD processor, such as when an undefined term is detected in an input document.
The value of the cryptosuite property MUST be a string that identifies the cryptographic suite. If the processing environment supports subtypes of string, the type of the cryptosuite value MUST be the https://w3id.org/security#cryptosuiteString subtype of string.
If options has a non-null domain item, it MUST be equal to proof.domain or an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR.
If options has a non-null challenge item, it MUST be equal to proof.challenge or an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR.

bbs-2023 (verifiers) VC 1.1

Verifier ⇒
Test Name
Digital Bazaar Grotto Networking Procivis One Core SpruceID
MUST verify a valid VC with a bbs-2023 proof.
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:56:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:56:13)
MUST verify a valid VC with nested disclosed properties.
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:61:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:61:13)
MUST verify a valid VC with disclosed properties and bnodes.
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:66:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:66:13)
MUST verify with full array revealed properties
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:71:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:71:13)
MUST verify with fewer array revealed properties
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:76:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:76:13)
MUST verify w/o first element revealed properties
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:82:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:82:13)
If the proofValue string does not start with u (U+0075 LATIN SMALL LETTER U), indicating that it is a multibase-base64url-no-pad-encoded value, an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR.
If the "cryptosuite" field is not the string "bbs-2023", an error MUST be raised.
If proofConfig.type is not set to DataIntegrityProof and/or proofConfig.cryptosuite is not set to bbs-2023, an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR.
Whenever this algorithm (base proof) encodes strings, it MUST use UTF-8 encoding.
The proof options MUST contain a type identifier for the cryptographic suite (type) and MUST contain a cryptosuite identifier (cryptosuite). A proof configuration object is produced as output.
CBOR-encode components per [RFC8949] where CBOR tagging MUST NOT be used on any of the components. Append the produced encoded value to proofValue.
If proofConfig.created is set and if the value is not a valid [XMLSCHEMA11-2] datetime, an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR.
MUST fail to verify a base proof.
MUST fail to verify a modified disclosed credential.
Conforming processors MUST produce errors when non-conforming documents are consumed.
If the decodedProofValue starts with any other three byte sequence, an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR.

bbs-2023 (verifiers) VC 2.0

Verifier ⇒
Test Name
Digital Bazaar Grotto Networking Procivis One Core SpruceID
MUST verify a valid VC with a bbs-2023 proof.
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:56:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:56:13)
MUST verify a valid VC with nested disclosed properties.
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:61:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:61:13)
MUST verify a valid VC with disclosed properties and bnodes.
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:66:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:66:13)
MUST verify with full array revealed properties
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:71:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:71:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:71:13)
MUST verify with fewer array revealed properties
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:76:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:76:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:76:13)
MUST verify w/o first element revealed properties
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:82:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:82:13)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/suites/verify.js:82:13)
If the proofValue string does not start with u (U+0075 LATIN SMALL LETTER U), indicating that it is a multibase-base64url-no-pad-encoded value, an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR.
If the "cryptosuite" field is not the string "bbs-2023", an error MUST be raised.
If proofConfig.type is not set to DataIntegrityProof and/or proofConfig.cryptosuite is not set to bbs-2023, an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR.
Whenever this algorithm (base proof) encodes strings, it MUST use UTF-8 encoding.
The proof options MUST contain a type identifier for the cryptographic suite (type) and MUST contain a cryptosuite identifier (cryptosuite). A proof configuration object is produced as output.
CBOR-encode components per [RFC8949] where CBOR tagging MUST NOT be used on any of the components. Append the produced encoded value to proofValue.
If proofConfig.created is set and if the value is not a valid [XMLSCHEMA11-2] datetime, an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR.
MUST fail to verify a base proof.
MUST fail to verify a modified disclosed credential.
Conforming processors MUST produce errors when non-conforming documents are consumed.
If the decodedProofValue starts with any other three byte sequence, an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR.

bbs-2023 (interop)

Verifier ⇒
Issuer
Digital Bazaar Grotto Networking Procivis One Core SpruceID
Digital Bazaar
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/30-bbs-interop.js:63:9)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/30-bbs-interop.js:63:9)
Grotto Networking
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/30-bbs-interop.js:63:9)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/30-bbs-interop.js:63:9)
Procivis One Core
Expected verifier to not error.: expected HTTPError: A validation error occured in … { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: A validation error occured in … { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/30-bbs-interop.js:63:9)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/30-bbs-interop.js:63:9)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/30-bbs-interop.js:63:9)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(5) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(5) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/30-bbs-interop.js:63:9)
SpruceID
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/30-bbs-interop.js:63:9)
Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
AssertionError: Expected verifier to not error.: expected HTTPError: Request failed with status cod… { …(6) } to not exist
                        at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)
                        at verificationSuccess (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/assertions.js:52:14)
                        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
                        at async Context.<anonymous> (file:///home/runner/work/vc-di-bbs-test-suite/vc-di-bbs-test-suite/tests/30-bbs-interop.js:63:9)

At Risk

Reason ⇒
Statement
At least 2 passing implementations
MUST verify with full array revealed properties
MUST verify with fewer array revealed properties
MUST verify w/o first element revealed properties