{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://schema.twindev.org/w3c-did/DataIntegrityProof",
    "title": "DataIntegrityProof",
    "description": "Interface describing a did proof.\nhttps://www.w3.org/TR/vc-data-integrity/",
    "type": "object",
    "properties": {
        "@context": {
            "anyOf": [
                {
                    "const": "https://w3id.org/security/data-integrity/v2"
                },
                {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "https://schema.twindev.org/json-ld/JsonLdContextDefinitionElement"
                            },
                            {
                                "const": "https://w3id.org/security/data-integrity/v2"
                            }
                        ]
                    },
                    "contains": {
                        "const": "https://w3id.org/security/data-integrity/v2"
                    },
                    "minContains": 1,
                    "maxContains": 1,
                    "minItems": 1
                }
            ],
            "description": "JSON-LD Context."
        },
        "type": {
            "const": "DataIntegrityProof",
            "description": "JSON-LD Type."
        },
        "cryptosuite": {
            "anyOf": [
                {
                    "$ref": "https://schema.twindev.org/w3c-did/DidCryptoSuites"
                },
                {
                    "type": "string"
                }
            ],
            "description": "An identifier for the cryptographic suite that can be used to verify the proof."
        },
        "id": {
            "type": "string",
            "description": "The id of the proof."
        },
        "proofPurpose": {
            "type": "string",
            "description": "The reason the proof was created."
        },
        "proofValue": {
            "type": "string",
            "description": "Contains the base-encoded binary data necessary to verify the\ndigital proof using the verificationMethod specified."
        },
        "verificationMethod": {
            "type": "string",
            "description": "The verification method of the proof."
        },
        "created": {
            "type": "string",
            "description": "The iso date of when the proof was created."
        },
        "expires": {
            "type": "string",
            "description": "The iso date of when the proof expires."
        },
        "domain": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            ],
            "description": "One or more security domains in which the proof is meant to be used."
        },
        "challenge": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            ],
            "description": "Provided to mitigate replay attacks on domains."
        },
        "previousProof": {
            "type": "string",
            "description": "Identifies another data integrity proof that MUST verify before\nthe current proof is processed"
        },
        "nonce": {
            "type": "string",
            "description": "Use of this field is to increase privacy by decreasing linkability\nthat is the result of deterministically generated signatures."
        }
    },
    "required": [
        "type",
        "cryptosuite",
        "proofPurpose"
    ]
}
