{
  "schema": "com.catellix.mvps.snap_pcap_receipt_v1",
  "draft": "draft-melegassi-dispatch-mvps-snap-backup-01",
  "generated_at_utc": "2026-05-26T18:10:24.396660+00:00",
  "wire_format": {
    "linktype": "LINKTYPE_ETHERNET (1)",
    "transport": "TCP (HTTP/1.1 cleartext for reviewer readability)",
    "tcp_dst_port": 80,
    "tcp_src_port": 51234,
    "ip_src": "203.0.113.30",
    "ip_dst": "203.0.113.40",
    "content_type": "application/snap+jcs+json",
    "snap_profile": "Standard",
    "rfc_anchors": [
      "RFC 7950 (YANG 1.1)",
      "RFC 7951 (JSON Encoding of YANG)",
      "RFC 6991 (YANG types)",
      "RFC 8785 (JSON Canonicalization Scheme)",
      "RFC 7932 (Brotli)",
      "RFC 4648 (Base64)",
      "FIPS 180-4 (SHA-256)",
      "RFC 9110 (HTTP semantics)"
    ],
    "transport_alternatives_in_draft": [
      "HTTP/2 over TLS (RFC 9113 + RFC 9110) \u2014 equivalent at SNAP layer",
      "WebSocket over TLS (RFC 6455) \u2014 equivalent at SNAP layer"
    ],
    "envelope_layout_jcs": {
      "snap-version": "string",
      "snap-profile": "Minimal | Standard | Full",
      "manifest": {
        "operator-id": "string",
        "epoch-id": "uint64",
        "yang-module": "ietf-mvps-snap-backup@2026-05-26",
        "files": "list of {path, size_bytes, sha256}",
        "uncompressed-blob-sha256": "hex sha256",
        "compressed-bytes": "uint",
        "compression": "br | identity"
      },
      "payload-encoding": "br+base64",
      "payload": "Base64 of Brotli-compressed file blob"
    }
  },
  "snap_envelope": {
    "snap-version": "1.0",
    "snap-profile": "Standard",
    "envelope-jcs-sha256": "082b84e0122d101354ade59ea516747909831ffa314eff0677b4e9d98d33ff44",
    "envelope-bytes": 1422,
    "manifest_excerpt": {
      "operator-id": "OP-CATELLIX-PROD",
      "epoch-id": 494450,
      "yang-module": "ietf-mvps-snap-backup@2026-05-26",
      "files": [
        {
          "path": "evidence/validator_summary.txt",
          "size_bytes": 481,
          "sha256": "d78893bb2213ad17d3a3a6730c0eb533ced641bc96f29083957e595c0eb43502"
        },
        {
          "path": "docs/MVPS_PCAP_PROOF_excerpt.txt",
          "size_bytes": 167,
          "sha256": "53dfd486a06a2eb4bb016b11651c19768e1122712b8d65d4dfc13b0e764bb0d7"
        },
        {
          "path": "snap.yang.checksum",
          "size_bytes": 101,
          "sha256": "5aff24e81f8bc80545e04144f9eec58ddccda6d0c006fd0b9fbfc0dc4ed185ab"
        }
      ],
      "uncompressed-blob-sha256": "d4c8abe6e3103de23d7e78fa6d94d9842c1492cb122eee6120a94353e1df0019",
      "compressed-bytes": 507,
      "compression": "br"
    },
    "payload-encoding": "br+base64",
    "payload-base64-bytes": 676,
    "payload-compressed-bytes": 507,
    "payload-uncompressed-bytes": 847,
    "round_trip_check": "snap_decode(snap_encode(F)) == F over YANG schema closure (A.6)"
  },
  "files": [
    {
      "path": "frontend/static/download/mvps_snap_archive.pcap",
      "bytes": 2944,
      "file_sha256": "0b581ab4dc11cd35016dd9ca9affbdad71868eb8419bc674c62f3fa3570cf03c",
      "n_pcap_records": 13,
      "tcp_request_bytes": 1708,
      "tcp_response_bytes": 302,
      "regime": "archive (POST /snap/upload)"
    },
    {
      "path": "frontend/static/download/mvps_snap_restore.pcap",
      "bytes": 2808,
      "file_sha256": "205a06c4472cc41dd7c68c6d05092b48f97741757121632425b03e9fe7789cc9",
      "n_pcap_records": 13,
      "tcp_request_bytes": 203,
      "tcp_response_bytes": 1671,
      "regime": "restore (GET /snap/download/<id>)"
    }
  ],
  "validation": {
    "open_in_wireshark": "wireshark mvps_snap_archive.pcap",
    "tshark_follow_tcp": "tshark -r mvps_snap_archive.pcap -q -z follow,tcp,raw,0",
    "tcpdump_hexdump": "tcpdump -X -nn -r mvps_snap_archive.pcap",
    "search_jcs_marker": "tshark -r mvps_snap_archive.pcap -Y 'tcp.payload contains \"snap-version\"'",
    "expected_finding": "The TCP stream begins with the HTTP/1.1 request line 'POST /snap/upload HTTP/1.1' followed by headers including 'Content-Type: application/snap+jcs+json' and 'X-SNAP-Envelope-SHA256: 082b84e0122d101354ade59ea516747909831ffa314eff0677b4e9d98d33ff44'.  After the blank line the body is the JCS-canonical SNAP envelope (sorted keys, no whitespace).  Decoding the 'payload' field as Base64 then Brotli yields the original file blob byte-for-byte (Theorem A.6 round-trip correctness).  The server echoes the envelope SHA-256 in its 200 OK response."
  },
  "interpretation": "These libpcap files are the byte-on-the-wire evidence for MVPS draft D-11 (SNAP \u2014 Simple Native Archive Protocol).  Every byte of the SNAP envelope appears verbatim in the TCP stream so any reviewer can: (1) recompute the JCS canonical hash and check it against the X-SNAP-Envelope-SHA256 header (A.6 round-trip); (2) Base64-decode and Brotli-decompress the payload to recover the original file blob; (3) verify each per-file SHA-256 in the manifest against the recovered file content (A.5 manifest verification).  Both A.6 and A.5 are then proven on the wire."
}