{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://iarpg.com/integrity-bundle.schema.json",
  "title": "IARPG Portable Integrity Bundle",
  "type": "object",
  "required": [
    "bundle_id",
    "bundle_version",
    "package_id",
    "package_version",
    "package_digest",
    "component_digests",
    "canonicalization_profile",
    "hash_algorithm",
    "build_id",
    "generated_utc",
    "tool_version",
    "validation_result",
    "failure_explanations",
    "evidence_links",
    "integrity_boundary"
  ],
  "properties": {
    "$schema": {
      "type": "string"
    },
    "bundle_id": {
      "type": "string",
      "minLength": 1
    },
    "bundle_version": {
      "const": "1.0.0"
    },
    "package_id": {
      "type": "string"
    },
    "package_version": {
      "type": "string"
    },
    "package_digest": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    },
    "component_digests": {
      "type": "object",
      "additionalProperties": {
        "type": "string",
        "pattern": "^[a-f0-9]{64}$"
      }
    },
    "canonicalization_profile": {
      "const": "IARPG-CJSON-1"
    },
    "hash_algorithm": {
      "const": "SHA-256"
    },
    "build_id": {
      "type": "string"
    },
    "generated_utc": {
      "type": "string",
      "pattern": "Z$"
    },
    "tool_version": {
      "type": "string"
    },
    "validation_result": {
      "enum": [
        "pass",
        "fail"
      ]
    },
    "failure_explanations": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "evidence_links": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "extensions": {
      "type": "object"
    },
    "integrity_boundary": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
