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.

Conformance Testing Results

These tests were run on

Key

🚫
Pending
✓
Passed
❌
Failed
⊘
Access Denied
⏱
Timeout
—
Not Implemented

The results of the tests are shown below:

Data Integrity (ecdsa-rdfc-2019 issuers)

Issuer ⇒
⇓Test Name
Accredify: P-256 Accredify: P-384
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.
✓
✓
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].
✓
✓
The reason the proof was created ("proof.proofPurpose") MUST be specified as a string that maps to a URL.
✓
✓
("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.
✓
✓
If the algorithm produces an error, the error MUST be propagated and SHOULD convey the error type.
✓
✓
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.
✓
✓

Data Integrity (ecdsa-rdfc-2019 verifiers) VC 1.1

Verifier ⇒
⇓Test Name
Accredify: P-256
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 either securedDocument is not a map or securedDocument.proof is not a map, an error MUST be raised and SHOULD convey an error type of PARSING_ERROR.
✓
If one or more of proof.type, proof.verificationMethod, and proof.proofPurpose does not exist, an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR
✓
The type property MUST contain the string DataIntegrityProof.
✓
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.
✓

Data Integrity (ecdsa-rdfc-2019 verifiers) VC 2.0

Verifier ⇒
⇓Test Name
Accredify: P-256
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 either securedDocument is not a map or securedDocument.proof is not a map, an error MUST be raised and SHOULD convey an error type of PARSING_ERROR.
✓
If one or more of proof.type, proof.verificationMethod, and proof.proofPurpose does not exist, an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR
✓
The type property MUST contain the string DataIntegrityProof.
✓
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.
✓

ecdsa-rdfc-2019 (interop)

Verifier ⇒
⇓Issuer
Accredify: P-256, P-384

Data Integrity (ecdsa-sd-2023 issuers)

Issuer ⇒
⇓Test Name
Accredify: P-256
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.
✓
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].
✓
The reason the proof was created ("proof.proofPurpose") MUST be specified as a string that maps to a URL.
✓
("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.
✓
If the algorithm produces an error, the error MUST be propagated and SHOULD convey the error type.
✓
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.
✓

Data Integrity (ecdsa-sd-2023 verifiers) VC 1.1

Verifier ⇒
⇓Test Name
Accredify: P-256
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 either securedDocument is not a map or securedDocument.proof is not a map, an error MUST be raised and SHOULD convey an error type of PARSING_ERROR.
✓
If one or more of proof.type, proof.verificationMethod, and proof.proofPurpose does not exist, an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR
✓
The type property MUST contain the string DataIntegrityProof.
✓
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.
✓

Data Integrity (ecdsa-sd-2023 verifiers) VC 2.0

Verifier ⇒
⇓Test Name
Accredify: P-256
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 either securedDocument is not a map or securedDocument.proof is not a map, an error MUST be raised and SHOULD convey an error type of PARSING_ERROR.
✓
If one or more of proof.type, proof.verificationMethod, and proof.proofPurpose does not exist, an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR
✓
The type property MUST contain the string DataIntegrityProof.
✓
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.
✓

ecdsa-sd-2023 (interop)

Verifier ⇒
⇓Issuer
Accredify: P-256, P-384

Data Model - Verification Methods (Multikey)

Data Model - Proof Representations

Algorithms - Create Proof (ecdsa-jcs-2019)

Issuer ⇒
⇓Test Name

Algorithms - Verify Proof (ecdsa-jcs-2019)

Verifier ⇒
⇓Test Name

Algorithms - Transformation (ecdsa-jcs-2019)

Issuer ⇒
⇓Test Name

Algorithms - Proof Configuration (ecdsa-jcs-2019)

Issuer ⇒
⇓Test Name

Algorithms - Proof Serialization (ecdsa-jcs-2019)

Issuer ⇒
⇓Test Name

Algorithms - Create Proof (ecdsa-rdfc-2019)

Algorithms - Verify Proof (ecdsa-rdfc-2019)

Algorithms - Transformation (ecdsa-rdfc-2019)

Algorithms - Proof Configuration (ecdsa-rdfc-2019)

Algorithms - Proof Serialization (ecdsa-rdfc-2019)

Algorithms - Create Base Proof (ecdsa-sd-2023)

Algorithms - Base Proof Transformation (ecdsa-sd-2023)

Algorithms - Base Proof Configuration

Algorithms - Base Proof Serialization (ecdsa-sd-2023)

Algorithms - Verify Derived Proof (ecdsa-sd-2023)

Functions - Selective Disclosure

Functions - ecdsa-sd-2023

At Risk

Reason ⇒
⇓Statement
At least 2 passing implementations
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 either securedDocument is not a map or securedDocument.proof is not a map, an error MUST be raised and SHOULD convey an error type of PARSING_ERROR.
❌
If one or more of proof.type, proof.verificationMethod, and proof.proofPurpose does not exist, an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR
❌
The type property MUST contain the string DataIntegrityProof.
❌
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.
❌
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.
❌
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].
❌
The reason the proof was created ("proof.proofPurpose") MUST be specified as a string that maps to a URL.
❌
("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.
❌
If the algorithm produces an error, the error MUST be propagated and SHOULD convey the error type.
❌
The value of the cryptosuite property MUST be a string that identifies the cryptographic suite.
❌
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.
❌
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.
❌
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.
❌
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.
❌
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.
❌
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.
❌
The proof options MUST contain a type identifier for the cryptographic suite (type) and MAY contain a cryptosuite identifier (cryptosuite).
❌
Let proof.proofValue be a base64-url-encoded Multibase value of the proofBytes.
❌
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.
❌
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.
❌
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 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.
❌
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.
❌
CBOR-encode components per [RFC8949] where CBOR tagging MUST NOT be used on any of the components.
❌
If the proofValue string does not start with 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 decodedProofValue does not start with the ECDSA-SD disclosure proof header bytes 0xd9, 0x5d, and 0x01, an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR.
❌
Initialize components to an array that is the result of CBOR-decoding the bytes that follow the three-byte ECDSA-SD disclosure proof header. If the result is not an array of the following five elements — a byte array of length 64; a byte array of length 36; an array of byte arrays, each of length 64; a map of integers to byte arrays, each of length 32; and an array of integers — an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR.
❌