The purpose of this test suite is to demonstrate a path to interoperability for the merkle-proof-2019 cryptosuite. The technologies explored in this test suite are experimental. This document contains the most recent interoperability report for a [DataIntegrityProof](https://www.w3.org/TR/vc-data-integrity/#dataintegrityproof) using the merkle-proof-2019 cryptosuite. 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 (merkle-proof-2019 issuers)

Issuer ⇒
Test Name
Blockcerts
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 (merkle-proof-2019 verifiers)

Verifier ⇒
Test Name
Blockcerts
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.

merkle-proof-2019 - Data Model - Proof Representations

At Risk

Reason ⇒
Statement
At least 2 passing implementations
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.
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
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.
("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.
The type property MUST be DataIntegrityProof.
The cryptosuite property of the proof MUST be merkle-proof-2019.
The proofValue property of the proof MUST be encoded using the base-58-btc header and alphabet as described in the Multibase section of Controller Documents 1.0.