{
  "purpose": "GATE 1 tamper-resistance, exercised: mint a certificate, verify the honest baseline, then prove the verifier rejects each forgery.",
  "verifier": "service/verify_certificate.py",
  "unit_property": "tests/test_certificate_v2.py",
  "binding": "the certificate binds decoder_binary_sha256 + probe_set_merkle_root + outcome_trace_merkle_root + a self-hash; re-derive with service/verify_certificate.py.",
  "reproduce": "make tamper-test",
  "n_tampers": 7,
  "n_detected": 7,
  "all_detected": true,
  "verdict": "all_tampering_attempts_detected",
  "blocks": [
    {
      "label": "Live decoder (binary / corpus / self-hash)",
      "decoder": "tools/dav1d_src/build/tools/dav1d -o /dev/null -i",
      "format": "AV1",
      "n_probes": 200,
      "mode": "quick",
      "baseline_verifies": true,
      "baseline_checks": [
        {
          "check": "certificate self-hash matches",
          "result": true
        },
        {
          "check": "ed25519 signature verifies",
          "result": true
        },
        {
          "check": "decoder binary sha256 matches",
          "result": true
        },
        {
          "check": "seed sha256 matches",
          "result": true
        },
        {
          "check": "probe-set merkle root matches",
          "result": true
        },
        {
          "check": "outcome-trace merkle root matches (re-run)",
          "result": null
        }
      ],
      "n_tampers": 3,
      "n_detected": 3,
      "block_ok": true,
      "tampers": [
        {
          "variant": "swap_decoder_binary_sha256",
          "description": "replace the bound decoder binary hash with a different value",
          "expected_failed_check": "decoder binary sha256 matches",
          "mode": "quick",
          "field_before": "c3e70a96\u2026ffa282fe",
          "field_after": "00000000\u202600000000",
          "verify_ok": false,
          "expected_check_result": false,
          "failed_checks": [
            "decoder binary sha256 matches"
          ],
          "detected": true
        },
        {
          "variant": "mutate_probe_set_merkle_root",
          "description": "alter the Merkle root that binds the exact probe corpus",
          "expected_failed_check": "probe-set merkle root matches",
          "mode": "quick",
          "field_before": "db0968bc\u20262cba8db5",
          "field_after": "1b0968bc\u20262cba8db5",
          "verify_ok": false,
          "expected_check_result": false,
          "failed_checks": [
            "probe-set merkle root matches"
          ],
          "detected": true
        },
        {
          "variant": "edit_metric_no_reseal",
          "description": "edit the verdict/score but forget to recompute the self-hash",
          "expected_failed_check": "certificate self-hash matches",
          "mode": "quick",
          "field_before": "hardened",
          "field_after": "hardened",
          "verify_ok": false,
          "expected_check_result": false,
          "failed_checks": [
            "certificate self-hash matches",
            "ed25519 signature verifies"
          ],
          "detected": true
        }
      ]
    },
    {
      "label": "Deterministic stub (adds outcome-trace re-run)",
      "decoder": ".venv-fcm/bin/python tests/_stub_decoder.py",
      "format": "STUB",
      "n_probes": 120,
      "mode": "full (incl. outcome-trace re-run)",
      "baseline_verifies": true,
      "baseline_checks": [
        {
          "check": "certificate self-hash matches",
          "result": true
        },
        {
          "check": "ed25519 signature verifies",
          "result": true
        },
        {
          "check": "decoder binary sha256 matches",
          "result": true
        },
        {
          "check": "seed sha256 matches",
          "result": true
        },
        {
          "check": "probe-set merkle root matches",
          "result": true
        },
        {
          "check": "outcome-trace merkle root matches (re-run)",
          "result": true
        },
        {
          "check": "bug-class counts consistent with re-run",
          "result": true
        }
      ],
      "n_tampers": 4,
      "n_detected": 4,
      "block_ok": true,
      "tampers": [
        {
          "variant": "swap_decoder_binary_sha256",
          "description": "replace the bound decoder binary hash with a different value",
          "expected_failed_check": "decoder binary sha256 matches",
          "mode": "quick",
          "field_before": "e5a95e4a\u20268a4f5393",
          "field_after": "00000000\u202600000000",
          "verify_ok": false,
          "expected_check_result": false,
          "failed_checks": [
            "decoder binary sha256 matches"
          ],
          "detected": true
        },
        {
          "variant": "mutate_probe_set_merkle_root",
          "description": "alter the Merkle root that binds the exact probe corpus",
          "expected_failed_check": "probe-set merkle root matches",
          "mode": "quick",
          "field_before": "ada71672\u202618123fbc",
          "field_after": "1da71672\u202618123fbc",
          "verify_ok": false,
          "expected_check_result": false,
          "failed_checks": [
            "probe-set merkle root matches"
          ],
          "detected": true
        },
        {
          "variant": "edit_metric_no_reseal",
          "description": "edit the verdict/score but forget to recompute the self-hash",
          "expected_failed_check": "certificate self-hash matches",
          "mode": "quick",
          "field_before": "memory-c\u2026on-FOUND",
          "field_after": "hardened",
          "verify_ok": false,
          "expected_check_result": false,
          "failed_checks": [
            "certificate self-hash matches",
            "ed25519 signature verifies"
          ],
          "detected": true
        },
        {
          "variant": "mutate_outcome_trace_merkle_root",
          "description": "alter the outcome-trace root that binds the actual execution (forced through a full decoder re-run)",
          "expected_failed_check": "outcome-trace merkle root matches (re-run)",
          "mode": "full",
          "field_before": "1cd0e647\u202605cf3d45",
          "field_after": "2cd0e647\u202605cf3d45",
          "verify_ok": false,
          "expected_check_result": false,
          "failed_checks": [
            "outcome-trace merkle root matches (re-run)"
          ],
          "detected": true
        }
      ]
    }
  ]
}