The purpose of this test suite is to demonstrate a path to interoperability for the ECDSA data integrity cryptosuites. The technologies explored in this test suite are experimental. This document contains the most recent interoperability report for a DataIntegrityProof using the `ecdsa-rdfc-2019`, `ecdsa-jcs-2019`, or `ecdsa-sd-2023` cryptosuites. This report is auto-generated.
These tests were run on
| 🚫 | Pending | 
| ✓ | Passed | 
| ❌ | Failed | 
| ⊘ | Access Denied | 
| ⏱ | Timeout | 
| — | Not Implemented | 
The results of the tests are shown below:
| 
                  Verifier ⇒
                   
                  ⇓Issuer
                   | apicatalog.com: P-256, P-384 | CredenceID: P-256 | Digital Bazaar, Inc.: P-256, P-384 | Gen Digital: P-384, P-256 | Grotto Networking: P-256 | MakoLab: P-256 | Netis: P-256, P-384 | Procivis One Core: P-256 | SpruceID: P-256, P-384 | Trential: P-256, P-384 | bovine: P-256 | 
|---|---|---|---|---|---|---|---|---|---|---|---|
| apicatalog.com: P-256 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 
| apicatalog.com: P-384 | ❌ | 🚫 | ❌ | ❌ | 🚫 | 🚫 | ❌ | 🚫 | ❌ | ❌ | 🚫 | 
| Digital Bazaar, Inc.: P-256 | ✓ | ❌ | ✓ | ❌ | ✓ | ❌ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| Digital Bazaar, Inc.: P-384 | ✓ | 🚫 | ✓ | ❌ | 🚫 | 🚫 | ✓ | 🚫 | ✓ | ✓ | 🚫 | 
| Gen Digital: P-384 | ❌ | 🚫 | ❌ | ❌ | 🚫 | 🚫 | ❌ | 🚫 | ❌ | ❌ | 🚫 | 
| Grotto Networking: P-256 | ✓ | ❌ | ✓ | ❌ | ✓ | ❌ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| MakoLab: P-256 | ✓ | ❌ | ✓ | ❌ | ✓ | ❌ | ✓ | ❌ | ❌ | ✓ | ❌ | 
| Procivis One Core: P-256 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 
| SpruceID: P-256 | ✓ | ❌ | ✓ | ❌ | ✓ | ❌ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| SpruceID: P-384 | ✓ | 🚫 | ✓ | ❌ | 🚫 | 🚫 | ✓ | 🚫 | ✓ | ✓ | 🚫 | 
| Trential: P-256 | ✓ | ❌ | ✓ | ❌ | ✓ | ❌ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| Trential: P-384 | ✓ | 🚫 | ✓ | ❌ | 🚫 | 🚫 | ✓ | 🚫 | ✓ | ✓ | 🚫 | 
| bovine: P-256 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 
| 
                  Verifier ⇒
                   
                  ⇓Issuer
                   | apicatalog.com: P-256, P-384 | Digital Bazaar, Inc.: P-256, P-384 | Grotto Networking: P-256 | MakoLab: P-256 | Netis: P-256, P-384 | SpruceID: P-256, P-384 | Trential: P-256, P-384 | 
|---|
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Gen Digital | Grotto Networking | MakoLab | Procivis One Core | SpruceID | Trential | bovine | 
|---|---|---|---|---|---|---|---|---|---|
| The publicKeyMultibase value of the verification method MUST start with the base-58-btc prefix (z), as defined in the Multibase section of Controller Documents 1.0. | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| A Multibase-encoded ECDSA 256-bit public key value or an ECDSA 384-bit public key value follows, as defined in the Multikey section of Controller Documents 1.0. Any other encoding MUST NOT be allowed. | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Gen Digital | Grotto Networking | MakoLab | Procivis One Core | SpruceID | Trential | bovine | 
|---|---|---|---|---|---|---|---|---|---|
| A proof contains the attributes specified in the Proofs section of [VC-DATA-INTEGRITY]. | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| The type property MUST be DataIntegrityProof. | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| The cryptosuite property MUST be ecdsa-rdfc-2019, ecdsa-jcs-2019, or ecdsa-sd-2023. | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Grotto Networking | bovine | 
|---|---|---|---|---|
| A data integrity proof (map), or an error, is produced as output. | ✓ | ✓ | ✓ | ❌ | 
| If unsecuredDocument.@context is present, set proof.@context to unsecuredDocument.@context. | ❌ | ✓ | ✓ | ❌ | 
| Let proof.proofValue be a base58-btc-encoded Multibase value of the proofBytes. | ✓ | ✓ | ✓ | ❌ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Grotto Networking | bovine | 
|---|---|---|---|---|
| The following algorithm specifies how to verify a data integrity proof given an secured data document. Required inputs are an secured data document (map securedDocument). This algorithm returns a verification result. | ✓ | ❌ | ✓ | ❌ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Grotto Networking | bovine | 
|---|---|---|---|---|
| The proof options MUST contain a type identifier for the cryptographic suite (type) and MAY contain a cryptosuite identifier (cryptosuite). | ✓ | ✓ | ✓ | ❌ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Gen Digital | Grotto Networking | MakoLab | Procivis One Core | SpruceID | Trential | bovine | 
|---|---|---|---|---|---|---|---|---|---|
| A data integrity proof (map), or an error, is produced as output. | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| Let proof.proofValue be a base58-btc-encoded Multibase value of the proofBytes. | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | CredenceID | Digital Bazaar, Inc. | Gen Digital | Grotto Networking | MakoLab | Netis | Procivis One Core | SpruceID | Trential | bovine | 
|---|---|---|---|---|---|---|---|---|---|---|---|
| The following algorithm specifies how to verify a data integrity proof given an secured data document. Required inputs are an secured data document (map securedDocument). This algorithm returns a verification result. | ✓ | ❌ | ❌ | ❌ | ✓ | ❌ | ❌ | ❌ | ✓ | ✓ | ❌ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Gen Digital | Grotto Networking | MakoLab | Procivis One Core | SpruceID | Trential | bovine | 
|---|---|---|---|---|---|---|---|---|---|
| The transformation options MUST contain a type identifier for the cryptographic suite (type) and a cryptosuite identifier (cryptosuite). | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| Whenever this algorithm encodes strings, it MUST use UTF-8 encoding. | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| If options.type is not set to the string DataIntegrityProof or options.cryptosuite is not set to the string ecdsa-rdfc-2019, an error MUST be raised and SHOULD convey an error type of PROOF_TRANSFORMATION_ERROR. | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Gen Digital | Grotto Networking | MakoLab | Procivis One Core | SpruceID | Trential | bovine | 
|---|---|---|---|---|---|---|---|---|---|
| The proof options MUST contain a type identifier for the cryptographic suite (type) and MUST contain a cryptosuite identifier (cryptosuite). | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| If proofConfig.type is not set to DataIntegrityProof and/or proofConfig.cryptosuite is not set to ecdsa-rdfc-2019, an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR. | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| 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. | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Gen Digital | Grotto Networking | MakoLab | Procivis One Core | SpruceID | Trential | bovine | 
|---|---|---|---|---|---|---|---|---|---|
| The proof options MUST contain a type identifier for the cryptographic suite (type) and MAY contain a cryptosuite identifier (cryptosuite). | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | ❌ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Grotto Networking | MakoLab | SpruceID | Trential | 
|---|---|---|---|---|---|---|
| A data integrity proof (map), or an error, is produced as output. | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| Let proof.proofValue be a base64-url-encoded Multibase value of the proofBytes. | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Grotto Networking | MakoLab | SpruceID | Trential | 
|---|---|---|---|---|---|---|
| The transformation options MUST contain a type identifier for the cryptographic suite (type), a cryptosuite identifier (cryptosuite), and a verification method (verificationMethod). | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| The transformation options MUST contain an array of mandatory JSON pointers (mandatoryPointers) and MAY contain additional options, such as a JSON-LD document loader. | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| Whenever this algorithm encodes strings, it MUST use UTF-8 encoding. | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| Per the recommendations of [RFC2104], the HMAC key MUST be the same length as the digest size; for SHA-256, this is 256 bits or 32 bytes. | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Grotto Networking | MakoLab | SpruceID | Trential | 
|---|---|---|---|---|---|---|
| The proof options MUST contain a type identifier for the cryptographic suite (type) and MUST contain a cryptosuite identifier (cryptosuite). | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| If proofConfig.type is not set to DataIntegrityProof and/or proofConfig.cryptosuite is not set to ecdsa-sd-2023, an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR. | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| 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. | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Grotto Networking | MakoLab | SpruceID | Trential | 
|---|---|---|---|---|---|---|
| The proof options MUST contain a type identifier for the cryptographic suite (type) and MAY contain a cryptosuite identifier (cryptosuite). | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Grotto Networking | MakoLab | Netis | SpruceID | Trential | 
|---|---|---|---|---|---|---|---|
| If the length of signatures does not match the length of nonMandatory, an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR, indicating that the signature count does not match the non-mandatory message count. | ✓ | ❌ | ✓ | ✓ | ❌ | ✓ | ✓ | 
| 
                   ⇒
                   
                  ⇓Test Name
                   | apicatalog.com | Digital Bazaar, Inc. | Grotto Networking | MakoLab | SpruceID | Trential | 
|---|---|---|---|---|---|---|
| Set value to parentValue.path. If value is now undefined, an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR, indicating that the JSON pointer does not match the given document. | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |