From 0cdfbebc48439fc2ffbf2858af05dd34d59bfe04 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 11:58:47 +0000 Subject: [PATCH 01/12] Add closed-subset Git pack and index verifier --- git_dag_lab/__init__.py | 5 + git_dag_lab/cli.py | 22 +- git_dag_lab/lab.py | 1 + git_dag_lab/pack.py | 612 ++++++++++++++++++++++++++++++++++++++++ tests/test_pack_lab.py | 396 ++++++++++++++++++++++++++ 5 files changed, 1034 insertions(+), 2 deletions(-) create mode 100644 git_dag_lab/pack.py create mode 100644 tests/test_pack_lab.py diff --git a/git_dag_lab/__init__.py b/git_dag_lab/__init__.py index 4d5c901..35ff0d1 100644 --- a/git_dag_lab/__init__.py +++ b/git_dag_lab/__init__.py @@ -1,14 +1,19 @@ """Deterministic experiments with real Git objects.""" from .lab import LabError, LabReport, git_object_oid, parse_commit, parse_tree, run_lab +from .pack import PackReport, parse_index, parse_pack, run_pack_lab __all__ = [ "LabError", "LabReport", + "PackReport", "git_object_oid", + "parse_index", + "parse_pack", "parse_commit", "parse_tree", "run_lab", + "run_pack_lab", ] __version__ = "0.1.0" diff --git a/git_dag_lab/cli.py b/git_dag_lab/cli.py index 4528062..95185c3 100644 --- a/git_dag_lab/cli.py +++ b/git_dag_lab/cli.py @@ -9,6 +9,7 @@ from typing import TextIO from .lab import LabError, run_lab +from .pack import run_pack_lab def build_parser() -> argparse.ArgumentParser: @@ -27,6 +28,20 @@ def build_parser() -> argparse.ArgumentParser: action="store_true", help="emit canonical JSON on one line instead of indented JSON", ) + + subparsers.add_parser( + "pack-verify", + help="build and independently verify a real Git pack v2/index v2 pair", + ) + pack_inspect_parser = subparsers.add_parser( + "pack-inspect", + help="print the complete machine-readable pack/index evidence document", + ) + pack_inspect_parser.add_argument( + "--compact", + action="store_true", + help="emit canonical JSON on one line instead of indented JSON", + ) return parser @@ -44,12 +59,15 @@ def main( args = build_parser().parse_args(argv) try: - report = run_lab(root if root is not None else Path.cwd()) + if args.command.startswith("pack-"): + report = run_pack_lab(root if root is not None else Path.cwd()) + else: + report = run_lab(root if root is not None else Path.cwd()) except LabError as exc: errors.write(f"ERROR git-dag-lab: {exc}\n") return 1 - if args.command == "verify": + if args.command in {"verify", "pack-verify"}: output.write(report.receipt_line + "\n") else: output.write(report.to_json(pretty=not args.compact) + "\n") diff --git a/git_dag_lab/lab.py b/git_dag_lab/lab.py index 21a79b5..3e70cd6 100644 --- a/git_dag_lab/lab.py +++ b/git_dag_lab/lab.py @@ -54,6 +54,7 @@ "hash-object", "merge-base", "mktree", + "pack-objects", "rev-list", "symbolic-ref", "update-ref", diff --git a/git_dag_lab/pack.py b/git_dag_lab/pack.py new file mode 100644 index 0000000..0da23da --- /dev/null +++ b/git_dag_lab/pack.py @@ -0,0 +1,612 @@ +"""Build and independently verify a bounded, deterministic Git pack/index pair. + +The fixture uses real ``git pack-objects`` output but validates the pack v2 and +index v2 bytes with Python's standard library. Delta entries are disabled for +this first closed subset and rejected by the parser. +""" + +from __future__ import annotations + +from collections.abc import Mapping +from dataclasses import dataclass +import binascii +import hashlib +import json +import os +from pathlib import Path +import stat +import tempfile +from typing import Any +import zlib + +from .lab import ( + LabError, + VerificationError, + _GitRunner, + _canonical_json, + _deep_freeze, + _find_git, + _mutable_copy, + _new_workspace, + _store_blob, + _validate_root, + git_object_oid, +) + +PACK_SCHEMA_VERSION = "git-pack-index-lab/v1" +PACK_VERSION = 2 +INDEX_VERSION = 2 +PACK_MAGIC = b"PACK" +INDEX_MAGIC = b"\xfftOc" +MAX_PACK_BYTES = 1_048_576 +MAX_PACK_OBJECTS = 64 +MAX_OBJECT_BYTES = 262_144 + +PACK_BLOBS = ( + ("binary-header", bytes(range(32))), + ("content-addressing", b"content-addressed systems\n"), + ( + "index-fanout", + b"fanout tables map object-id prefixes to sorted index ranges\n", + ), +) +_TYPE_BY_CODE = {1: "commit", 2: "tree", 3: "blob", 4: "tag"} + + +@dataclass(frozen=True, slots=True) +class PackEntry: + """One independently decoded non-delta pack entry.""" + + crc32: int + object_type: str + offset: int + oid: str + packed_size: int + payload_sha256: str + size: int + + def as_dict(self) -> dict[str, object]: + return { + "crc32": f"{self.crc32:08x}", + "object_type": self.object_type, + "offset": self.offset, + "oid": self.oid, + "packed_size": self.packed_size, + "payload_sha256": self.payload_sha256, + "size": self.size, + } + + +@dataclass(frozen=True, slots=True) +class ParsedPack: + """Verified pack header, entries, and trailer.""" + + entries: tuple[PackEntry, ...] + trailer_sha1: str + version: int + + +@dataclass(frozen=True, slots=True) +class IndexEntry: + """One verified index v2 row.""" + + crc32: int + offset: int + oid: str + + def as_dict(self) -> dict[str, object]: + return { + "crc32": f"{self.crc32:08x}", + "offset": self.offset, + "oid": self.oid, + } + + +@dataclass(frozen=True, slots=True) +class ParsedIndex: + """Verified index v2 fanout, rows, and checksums.""" + + entries: tuple[IndexEntry, ...] + fanout: tuple[int, ...] + index_sha1: str + pack_sha1: str + version: int + + +@dataclass(frozen=True, slots=True) +class PackReport: + """Canonical evidence document for one real pack/index build.""" + + payload: Mapping[str, Any] + receipt_sha256: str + + @property + def document(self) -> dict[str, Any]: + return { + "report": _mutable_copy(self.payload), + "receipt": { + "algorithm": "sha256", + "canonicalization": "UTF-8 JSON; sorted keys; compact separators", + "sha256": self.receipt_sha256, + }, + } + + @property + def receipt_line(self) -> str: + pack = self.payload["pack"] + index = self.payload["index"] + return ( + f"PASS {PACK_SCHEMA_VERSION} " + f"objects={pack['object_count']} " + f"pack_version={pack['version']} " + f"index_version={index['version']} " + "deltas=0 " + f"pack_sha1={pack['trailer_sha1']} " + f"receipt_sha256={self.receipt_sha256}" + ) + + def to_json(self, *, pretty: bool = False) -> str: + if pretty: + return json.dumps( + self.document, + ensure_ascii=True, + indent=2, + sort_keys=True, + ) + return _canonical_json(self.document).decode("utf-8") + + +def _uint32(content: bytes, offset: int, *, label: str) -> int: + end = offset + 4 + if offset < 0 or end > len(content): + raise VerificationError(f"{label} is truncated") + return int.from_bytes(content[offset:end], "big") + + +def _uint64(content: bytes, offset: int, *, label: str) -> int: + end = offset + 8 + if offset < 0 or end > len(content): + raise VerificationError(f"{label} is truncated") + return int.from_bytes(content[offset:end], "big") + + +def _read_regular_file(path: Path, *, label: str) -> bytes: + """Read one bounded, single-link regular file without following a symlink.""" + + try: + before = path.lstat() + except OSError as exc: + raise VerificationError(f"{label} is unavailable") from exc + if ( + not stat.S_ISREG(before.st_mode) + or before.st_nlink != 1 + or before.st_size < 1 + or before.st_size > MAX_PACK_BYTES + ): + raise VerificationError(f"{label} is not a bounded single-link file") + + flags = os.O_RDONLY + flags |= getattr(os, "O_CLOEXEC", 0) + flags |= getattr(os, "O_NOFOLLOW", 0) + try: + descriptor = os.open(path, flags) + except OSError as exc: + raise VerificationError(f"{label} could not be opened safely") from exc + try: + observed = os.fstat(descriptor) + if ( + not stat.S_ISREG(observed.st_mode) + or observed.st_nlink != 1 + or observed.st_dev != before.st_dev + or observed.st_ino != before.st_ino + or observed.st_size != before.st_size + ): + raise VerificationError(f"{label} changed before it was read") + chunks: list[bytes] = [] + remaining = observed.st_size + while remaining: + chunk = os.read(descriptor, min(65_536, remaining)) + if not chunk: + raise VerificationError(f"{label} ended before its declared size") + chunks.append(chunk) + remaining -= len(chunk) + if os.read(descriptor, 1): + raise VerificationError(f"{label} grew while it was read") + finally: + os.close(descriptor) + return b"".join(chunks) + + +def _decode_entry_header( + content: bytes, + offset: int, + *, + end: int, +) -> tuple[str, int, int]: + if offset >= end: + raise VerificationError("pack entry header is truncated") + first = content[offset] + offset += 1 + type_code = (first >> 4) & 0x07 + if type_code not in _TYPE_BY_CODE: + if type_code in {6, 7}: + raise VerificationError("delta pack entries are outside the reviewed subset") + raise VerificationError("pack entry type is invalid") + + size = first & 0x0F + shift = 4 + current = first + while current & 0x80: + if offset >= end or shift > 60: + raise VerificationError("pack entry size header is malformed") + current = content[offset] + offset += 1 + size |= (current & 0x7F) << shift + shift += 7 + if size > MAX_OBJECT_BYTES: + raise VerificationError("pack entry expands beyond the reviewed bound") + return _TYPE_BY_CODE[type_code], size, offset + + +def parse_pack(content: bytes) -> ParsedPack: + """Parse and verify one bounded SHA-1 pack v2 without invoking Git.""" + + if ( + type(content) is not bytes + or len(content) < 32 + or len(content) > MAX_PACK_BYTES + ): + raise VerificationError("pack bytes are outside the reviewed bound") + if content[:4] != PACK_MAGIC: + raise VerificationError("pack signature is invalid") + version = _uint32(content, 4, label="pack version") + if version != PACK_VERSION: + raise VerificationError("pack version is outside the reviewed subset") + count = _uint32(content, 8, label="pack object count") + if count < 1 or count > MAX_PACK_OBJECTS: + raise VerificationError("pack object count is outside the reviewed bound") + + pack_end = len(content) - 20 + trailer = content[pack_end:] + if hashlib.sha1(content[:pack_end], usedforsecurity=False).digest() != trailer: + raise VerificationError("pack trailer does not match the preceding bytes") + + entries: list[PackEntry] = [] + offset = 12 + seen: set[str] = set() + for _ in range(count): + entry_start = offset + object_type, declared_size, payload_start = _decode_entry_header( + content, + offset, + end=pack_end, + ) + inflater = zlib.decompressobj() + try: + payload = inflater.decompress( + content[payload_start:pack_end], + MAX_OBJECT_BYTES + 1, + ) + except zlib.error as exc: + raise VerificationError("pack entry zlib stream is invalid") from exc + if len(payload) > MAX_OBJECT_BYTES: + raise VerificationError("pack entry expands beyond the reviewed bound") + if not inflater.eof or inflater.unconsumed_tail: + raise VerificationError("pack entry zlib stream is incomplete or oversized") + consumed = pack_end - payload_start - len(inflater.unused_data) + if consumed < 1: + raise VerificationError("pack entry has an empty zlib stream") + offset = payload_start + consumed + if offset > pack_end or len(payload) != declared_size: + raise VerificationError("pack entry size does not match its payload") + + oid = git_object_oid(object_type, payload) + if oid in seen: + raise VerificationError("pack contains a duplicate logical object") + seen.add(oid) + packed = content[entry_start:offset] + entries.append( + PackEntry( + crc32=binascii.crc32(packed) & 0xFFFFFFFF, + object_type=object_type, + offset=entry_start, + oid=oid, + packed_size=len(packed), + payload_sha256=hashlib.sha256(payload).hexdigest(), + size=len(payload), + ) + ) + if offset != pack_end: + raise VerificationError("pack has trailing bytes outside its declared entries") + return ParsedPack( + entries=tuple(entries), + trailer_sha1=trailer.hex(), + version=version, + ) + + +def _expected_fanout(oids: tuple[str, ...]) -> tuple[int, ...]: + counts = [0] * 256 + for oid in oids: + counts[int(oid[:2], 16)] += 1 + total = 0 + fanout: list[int] = [] + for count in counts: + total += count + fanout.append(total) + return tuple(fanout) + + +def parse_index(content: bytes) -> ParsedIndex: + """Parse and verify one bounded Git index v2 without invoking Git.""" + + minimum = 8 + (256 * 4) + 40 + if ( + type(content) is not bytes + or len(content) < minimum + or len(content) > MAX_PACK_BYTES + ): + raise VerificationError("index bytes are outside the reviewed bound") + if content[:4] != INDEX_MAGIC: + raise VerificationError("index signature is invalid") + version = _uint32(content, 4, label="index version") + if version != INDEX_VERSION: + raise VerificationError("index version is outside the reviewed subset") + + fanout = tuple( + _uint32(content, 8 + (bucket * 4), label="index fanout") + for bucket in range(256) + ) + if any(left > right for left, right in zip(fanout, fanout[1:])): + raise VerificationError("index fanout table is not cumulative") + count = fanout[-1] + if count < 1 or count > MAX_PACK_OBJECTS: + raise VerificationError("index object count is outside the reviewed bound") + + oid_start = 8 + (256 * 4) + crc_start = oid_start + (count * 20) + offset_start = crc_start + (count * 4) + large_start = offset_start + (count * 4) + fixed_end = large_start + 40 + if fixed_end > len(content): + raise VerificationError("index tables are truncated") + + oids = tuple( + content[oid_start + (row * 20) : oid_start + ((row + 1) * 20)].hex() + for row in range(count) + ) + if tuple(sorted(oids)) != oids or len(set(oids)) != count: + raise VerificationError("index object IDs are not unique and sorted") + if fanout != _expected_fanout(oids): + raise VerificationError("index fanout does not match its object IDs") + + crc_values = tuple( + _uint32(content, crc_start + (row * 4), label="index CRC table") + for row in range(count) + ) + offset_words = tuple( + _uint32(content, offset_start + (row * 4), label="index offset table") + for row in range(count) + ) + large_indexes = [word & 0x7FFFFFFF for word in offset_words if word & 0x80000000] + if sorted(large_indexes) != list(range(len(large_indexes))): + raise VerificationError("index large-offset references are not canonical") + checksum_start = large_start + (len(large_indexes) * 8) + if checksum_start + 40 != len(content): + raise VerificationError("index has an invalid table length") + + large_offsets = tuple( + _uint64(content, large_start + (row * 8), label="index large-offset table") + for row in range(len(large_indexes)) + ) + offsets: list[int] = [] + for word in offset_words: + if word & 0x80000000: + offsets.append(large_offsets[word & 0x7FFFFFFF]) + else: + offsets.append(word) + + pack_sha1 = content[checksum_start : checksum_start + 20].hex() + index_sha1 = content[checksum_start + 20 :].hex() + expected_index_sha1 = hashlib.sha1( + content[: checksum_start + 20], + usedforsecurity=False, + ).hexdigest() + if index_sha1 != expected_index_sha1: + raise VerificationError("index checksum does not match the preceding bytes") + + entries = tuple( + IndexEntry(crc32=crc_values[row], offset=offsets[row], oid=oids[row]) + for row in range(count) + ) + return ParsedIndex( + entries=entries, + fanout=fanout, + index_sha1=index_sha1, + pack_sha1=pack_sha1, + version=version, + ) + + +def _cross_check(pack: ParsedPack, index: ParsedIndex) -> None: + if index.pack_sha1 != pack.trailer_sha1: + raise VerificationError("index does not bind the verified pack checksum") + pack_entries = {entry.oid: entry for entry in pack.entries} + if len(pack_entries) != len(index.entries): + raise VerificationError("pack and index object counts differ") + for indexed in index.entries: + packed = pack_entries.get(indexed.oid) + if packed is None: + raise VerificationError("index references an object absent from the pack") + if indexed.offset != packed.offset or indexed.crc32 != packed.crc32: + raise VerificationError("index offset or CRC does not match the pack entry") + + +def _build_and_verify_pack(runner: _GitRunner, private: Path) -> PackReport: + runner.initialize() + expected_payloads: dict[str, bytes] = {} + labels_by_oid: dict[str, str] = {} + for label, payload in PACK_BLOBS: + oid = _store_blob(runner, payload) + expected_payloads[oid] = payload + labels_by_oid[oid] = label + if len(expected_payloads) != len(PACK_BLOBS): + raise VerificationError("fixed pack fixture contains duplicate objects") + + ordered_oids = tuple(sorted(expected_payloads)) + prefix = private / "fixture" + result = runner.run( + "pack-objects", + "--window=0", + "--depth=0", + "--no-reuse-delta", + "--no-reuse-object", + os.fspath(prefix), + stdin=("".join(f"{oid}\n" for oid in ordered_oids)).encode("ascii"), + ) + if result.stderr: + raise VerificationError("git pack-objects produced unexpected diagnostics") + try: + pack_name = result.stdout.decode("ascii").strip() + except UnicodeDecodeError as exc: + raise VerificationError("git pack-objects returned a non-ASCII checksum") from exc + if ( + len(pack_name) != 40 + or any(character not in "0123456789abcdef" for character in pack_name) + ): + raise VerificationError("git pack-objects returned an invalid checksum") + + pack_path = Path(f"{prefix}-{pack_name}.pack") + index_path = Path(f"{prefix}-{pack_name}.idx") + pack_bytes = _read_regular_file(pack_path, label="generated pack") + index_bytes = _read_regular_file(index_path, label="generated index") + parsed_pack = parse_pack(pack_bytes) + parsed_index = parse_index(index_bytes) + _cross_check(parsed_pack, parsed_index) + if parsed_pack.trailer_sha1 != pack_name: + raise VerificationError("git pack name does not match the verified trailer") + if {entry.oid for entry in parsed_pack.entries} != set(expected_payloads): + raise VerificationError("generated pack object inventory is not exact") + for entry in parsed_pack.entries: + payload = expected_payloads[entry.oid] + if ( + entry.object_type != "blob" + or entry.size != len(payload) + or entry.payload_sha256 != hashlib.sha256(payload).hexdigest() + ): + raise VerificationError("generated pack object differs from the fixture") + + index_rows = {entry.oid: entry for entry in parsed_index.entries} + objects = [] + for entry in parsed_pack.entries: + indexed = index_rows[entry.oid] + objects.append( + { + **entry.as_dict(), + "index_crc32": f"{indexed.crc32:08x}", + "index_offset": indexed.offset, + "label": labels_by_oid[entry.oid], + } + ) + + nonzero_buckets = [ + { + "cumulative": parsed_index.fanout[bucket], + "prefix": f"{bucket:02x}", + "range_start": 0 if bucket == 0 else parsed_index.fanout[bucket - 1], + } + for bucket in range(256) + if ( + parsed_index.fanout[bucket] + != (0 if bucket == 0 else parsed_index.fanout[bucket - 1]) + ) + ] + payload: dict[str, object] = { + "checks": { + "all_fixture_objects_present": True, + "delta_entries_absent": True, + "index_checksum_verified": True, + "index_crc32_matches_pack": True, + "index_fanout_matches_sorted_oids": True, + "index_offsets_match_pack": True, + "pack_trailer_verified": True, + }, + "command_trace": list(runner.trace), + "fixture": { + "object_count": len(PACK_BLOBS), + "objects": [ + { + "label": label, + "oid": git_object_oid("blob", body), + "payload_sha256": hashlib.sha256(body).hexdigest(), + "size": len(body), + } + for label, body in PACK_BLOBS + ], + }, + "index": { + "bytes": len(index_bytes), + "index_sha1": parsed_index.index_sha1, + "nonzero_fanout_buckets": nonzero_buckets, + "pack_sha1": parsed_index.pack_sha1, + "sha256": hashlib.sha256(index_bytes).hexdigest(), + "version": parsed_index.version, + }, + "object_format": "sha1", + "objects_in_pack_order": objects, + "pack": { + "bytes": len(pack_bytes), + "delta_count": 0, + "object_count": len(parsed_pack.entries), + "sha256": hashlib.sha256(pack_bytes).hexdigest(), + "trailer_sha1": parsed_pack.trailer_sha1, + "version": parsed_pack.version, + }, + "scope": { + "authentication_claim": False, + "delta_entries_supported": False, + "fixture_kind": "three deterministic synthetic blobs", + "git_pack_objects_executed": True, + "network_required": False, + }, + "schema_version": PACK_SCHEMA_VERSION, + } + receipt = hashlib.sha256(_canonical_json(payload)).hexdigest() + return PackReport(payload=_deep_freeze(payload), receipt_sha256=receipt) + + +def run_pack_lab(root: Path | str = ".") -> PackReport: + """Build and verify a real pack/index pair below ``root``, then remove it.""" + + try: + validated_root = _validate_root(Path(root)) + git = _find_git() + with tempfile.TemporaryDirectory( + prefix=".git-pack-index-lab-", + dir=validated_root, + ) as private_name: + workspace = _new_workspace(validated_root, Path(private_name)) + runner = _GitRunner(git, workspace) + return _build_and_verify_pack(runner, workspace.private) + except LabError: + raise + except (OSError, TypeError, ValueError) as exc: + raise LabError("isolated pack lab setup failed") from exc + + +__all__ = [ + "INDEX_VERSION", + "MAX_OBJECT_BYTES", + "MAX_PACK_BYTES", + "MAX_PACK_OBJECTS", + "PACK_SCHEMA_VERSION", + "PACK_VERSION", + "IndexEntry", + "PackEntry", + "PackReport", + "ParsedIndex", + "ParsedPack", + "parse_index", + "parse_pack", + "run_pack_lab", +] diff --git a/tests/test_pack_lab.py b/tests/test_pack_lab.py new file mode 100644 index 0000000..8a4c843 --- /dev/null +++ b/tests/test_pack_lab.py @@ -0,0 +1,396 @@ +from __future__ import annotations + +import binascii +import hashlib +import io +import json +import os +from pathlib import Path +import tempfile +import unittest +import zlib +from unittest import mock + +from git_dag_lab import pack as pack_module +from git_dag_lab.cli import main +from git_dag_lab.lab import VerificationError, git_object_oid +from git_dag_lab.pack import ( + INDEX_MAGIC, + INDEX_VERSION, + MAX_PACK_BYTES, + PACK_MAGIC, + PACK_SCHEMA_VERSION, + PACK_VERSION, + parse_index, + parse_pack, + run_pack_lab, +) + + +def _entry_header(type_code: int, size: int) -> bytes: + first = (type_code << 4) | (size & 0x0F) + size >>= 4 + output = bytearray((first,)) + if size: + output[0] |= 0x80 + while size: + current = size & 0x7F + size >>= 7 + if size: + current |= 0x80 + output.append(current) + return bytes(output) + + +def _resign_pack(prefix: bytes) -> bytes: + return prefix + hashlib.sha1(prefix, usedforsecurity=False).digest() + + +def _build_pack(payloads: tuple[bytes, ...]) -> tuple[bytes, list[dict[str, int | str]]]: + body = bytearray(PACK_MAGIC) + body.extend(PACK_VERSION.to_bytes(4, "big")) + body.extend(len(payloads).to_bytes(4, "big")) + rows: list[dict[str, int | str]] = [] + for payload in payloads: + offset = len(body) + packed = _entry_header(3, len(payload)) + zlib.compress(payload, level=9) + body.extend(packed) + rows.append( + { + "crc32": binascii.crc32(packed) & 0xFFFFFFFF, + "offset": offset, + "oid": git_object_oid("blob", payload), + } + ) + return _resign_pack(bytes(body)), rows + + +def _resign_index(prefix: bytes) -> bytes: + return prefix + hashlib.sha1(prefix, usedforsecurity=False).digest() + + +def _build_index( + rows: list[dict[str, int | str]], + pack_sha1: str, +) -> bytes: + ordered = sorted(rows, key=lambda row: str(row["oid"])) + counts = [0] * 256 + for row in ordered: + counts[int(str(row["oid"])[:2], 16)] += 1 + fanout: list[int] = [] + total = 0 + for count in counts: + total += count + fanout.append(total) + + body = bytearray(INDEX_MAGIC) + body.extend(INDEX_VERSION.to_bytes(4, "big")) + for value in fanout: + body.extend(value.to_bytes(4, "big")) + for row in ordered: + body.extend(bytes.fromhex(str(row["oid"]))) + for row in ordered: + body.extend(int(row["crc32"]).to_bytes(4, "big")) + for row in ordered: + body.extend(int(row["offset"]).to_bytes(4, "big")) + body.extend(bytes.fromhex(pack_sha1)) + return _resign_index(bytes(body)) + + +class PackParserTests(unittest.TestCase): + def setUp(self) -> None: + self.payloads = (b"fixture\n", b"\x00binary\xff\n") + self.pack_bytes, self.rows = _build_pack(self.payloads) + + def test_decodes_real_envelopes_and_verifies_trailer(self) -> None: + parsed = parse_pack(self.pack_bytes) + self.assertEqual(parsed.version, PACK_VERSION) + self.assertEqual(len(parsed.entries), 2) + self.assertEqual( + {entry.oid for entry in parsed.entries}, + {git_object_oid("blob", payload) for payload in self.payloads}, + ) + self.assertEqual( + parsed.trailer_sha1, + hashlib.sha1(self.pack_bytes[:-20], usedforsecurity=False).hexdigest(), + ) + for entry, payload in zip(parsed.entries, self.payloads, strict=True): + self.assertEqual(entry.object_type, "blob") + self.assertEqual(entry.size, len(payload)) + self.assertEqual(entry.payload_sha256, hashlib.sha256(payload).hexdigest()) + self.assertGreater(entry.packed_size, 1) + + def test_rejects_non_bytes_and_outer_boundary_drift(self) -> None: + cases = ( + bytearray(self.pack_bytes), + b"", + self.pack_bytes[:31], + b"x" * (MAX_PACK_BYTES + 1), + ) + for content in cases: + with self.subTest(size=len(content)), self.assertRaises(VerificationError): + parse_pack(content) # type: ignore[arg-type] + + def test_rejects_signature_version_and_count_drift(self) -> None: + bad_signature = b"FAIL" + self.pack_bytes[4:] + bad_version = bytearray(self.pack_bytes) + bad_version[4:8] = (3).to_bytes(4, "big") + bad_count = bytearray(self.pack_bytes) + bad_count[8:12] = (0).to_bytes(4, "big") + for content in ( + bad_signature, + _resign_pack(bytes(bad_version[:-20])), + _resign_pack(bytes(bad_count[:-20])), + ): + with self.assertRaises(VerificationError): + parse_pack(content) + + def test_rejects_delta_type_size_zlib_and_trailer_mutations(self) -> None: + delta = bytearray(self.pack_bytes[:-20]) + delta[12] = (delta[12] & 0x8F) | 0x60 + + wrong_size = bytearray(self.pack_bytes[:-20]) + wrong_size[12] = (wrong_size[12] & 0xF0) | ((len(self.payloads[0]) + 1) & 0x0F) + + corrupt_zlib = bytearray(self.pack_bytes[:-20]) + corrupt_zlib[14] ^= 0xFF + + bad_trailer = bytearray(self.pack_bytes) + bad_trailer[-1] ^= 0x01 + + for content in ( + _resign_pack(bytes(delta)), + _resign_pack(bytes(wrong_size)), + _resign_pack(bytes(corrupt_zlib)), + bytes(bad_trailer), + ): + with self.assertRaises(VerificationError): + parse_pack(content) + + def test_rejects_declared_extra_object_and_trailing_body_bytes(self) -> None: + extra_object = bytearray(self.pack_bytes[:-20]) + extra_object[8:12] = (3).to_bytes(4, "big") + trailing = self.pack_bytes[:-20] + b"\x00" + for content in ( + _resign_pack(bytes(extra_object)), + _resign_pack(trailing), + ): + with self.assertRaises(VerificationError): + parse_pack(content) + + +class IndexParserTests(unittest.TestCase): + def setUp(self) -> None: + self.pack_bytes, self.rows = _build_pack((b"alpha\n", b"omega\n")) + self.pack = parse_pack(self.pack_bytes) + self.index_bytes = _build_index(self.rows, self.pack.trailer_sha1) + + def test_decodes_fanout_rows_and_both_checksums(self) -> None: + parsed = parse_index(self.index_bytes) + self.assertEqual(parsed.version, INDEX_VERSION) + self.assertEqual(parsed.pack_sha1, self.pack.trailer_sha1) + self.assertEqual(parsed.fanout[-1], len(self.rows)) + self.assertEqual( + tuple(entry.oid for entry in parsed.entries), + tuple(sorted(str(row["oid"]) for row in self.rows)), + ) + self.assertEqual( + parsed.index_sha1, + hashlib.sha1(self.index_bytes[:-20], usedforsecurity=False).hexdigest(), + ) + pack_module._cross_check(self.pack, parsed) + + def test_rejects_signature_version_checksum_and_length_drift(self) -> None: + bad_version = bytearray(self.index_bytes) + bad_version[4:8] = (3).to_bytes(4, "big") + bad_checksum = bytearray(self.index_bytes) + bad_checksum[-1] ^= 0x01 + trailing = self.index_bytes[:-20] + b"\x00" + for content in ( + b"FAIL" + self.index_bytes[4:], + _resign_index(bytes(bad_version[:-20])), + bytes(bad_checksum), + _resign_index(trailing), + ): + with self.assertRaises(VerificationError): + parse_index(content) + + def test_rejects_fanout_oid_and_large_offset_drift(self) -> None: + oid_start = 8 + (256 * 4) + wrong_oid = bytearray(self.index_bytes[:-20]) + wrong_oid[oid_start] ^= 0x01 + + count = len(self.rows) + offset_start = oid_start + (count * 20) + (count * 4) + bad_large_offset = bytearray(self.index_bytes[:-20]) + bad_large_offset[offset_start : offset_start + 4] = ( + 0x80000001 + ).to_bytes(4, "big") + + for content in ( + _resign_index(bytes(wrong_oid)), + _resign_index(bytes(bad_large_offset)), + ): + with self.assertRaises(VerificationError): + parse_index(content) + + def test_cross_check_rejects_crc_offset_inventory_and_pack_binding_drift(self) -> None: + parsed = parse_index(self.index_bytes) + + changed_crc = bytearray(self.index_bytes[:-20]) + count = len(self.rows) + oid_start = 8 + (256 * 4) + crc_start = oid_start + (count * 20) + changed_crc[crc_start + 3] ^= 0x01 + + changed_offset = bytearray(self.index_bytes[:-20]) + offset_start = crc_start + (count * 4) + changed_offset[offset_start + 3] ^= 0x01 + + changed_pack = bytearray(self.index_bytes[:-20]) + changed_pack[-1] ^= 0x01 + + for content in ( + _resign_index(bytes(changed_crc)), + _resign_index(bytes(changed_offset)), + _resign_index(bytes(changed_pack)), + ): + with self.assertRaises(VerificationError): + pack_module._cross_check(self.pack, parse_index(content)) + self.assertEqual(len(parsed.entries), 2) + + +class PackRuntimeTests(unittest.TestCase): + def test_real_pack_and_index_are_deterministic_and_leave_no_files(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + first = run_pack_lab(root) + self.assertEqual(list(root.iterdir()), []) + second = run_pack_lab(root) + self.assertEqual(list(root.iterdir()), []) + + self.assertEqual(first.to_json(), second.to_json()) + report = first.document["report"] + self.assertEqual(report["schema_version"], PACK_SCHEMA_VERSION) + self.assertEqual(report["pack"]["version"], PACK_VERSION) + self.assertEqual(report["index"]["version"], INDEX_VERSION) + self.assertEqual(report["pack"]["object_count"], 3) + self.assertEqual(report["pack"]["delta_count"], 0) + self.assertEqual( + report["command_trace"], + ["init", "hash-object", "hash-object", "hash-object", "pack-objects"], + ) + self.assertTrue(all(report["checks"].values())) + self.assertFalse(report["scope"]["delta_entries_supported"]) + self.assertFalse(report["scope"]["authentication_claim"]) + + def test_receipt_binds_the_complete_payload(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + result = run_pack_lab(Path(temporary)) + document = result.document + canonical = json.dumps( + document["report"], + ensure_ascii=True, + separators=(",", ":"), + sort_keys=True, + ).encode("utf-8") + self.assertEqual( + document["receipt"]["sha256"], + hashlib.sha256(canonical).hexdigest(), + ) + self.assertEqual(json.loads(result.to_json()), document) + + def test_pack_cli_exposes_receipt_and_canonical_document(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + stdout = io.StringIO() + stderr = io.StringIO() + self.assertEqual( + main( + ["pack-verify"], + root=root, + stdout=stdout, + stderr=stderr, + ), + 0, + ) + self.assertEqual(stderr.getvalue(), "") + self.assertRegex( + stdout.getvalue(), + rf"^PASS {PACK_SCHEMA_VERSION} objects=3 .* receipt_sha256=[0-9a-f]{{64}}\n$", + ) + + inspect_output = io.StringIO() + self.assertEqual( + main( + ["pack-inspect", "--compact"], + root=root, + stdout=inspect_output, + stderr=io.StringIO(), + ), + 0, + ) + inspected = json.loads(inspect_output.getvalue()) + self.assertEqual(inspected["report"]["schema_version"], PACK_SCHEMA_VERSION) + + def test_pack_cli_returns_sanitized_lab_errors(self) -> None: + stdout = io.StringIO() + stderr = io.StringIO() + with mock.patch( + "git_dag_lab.cli.run_pack_lab", + side_effect=VerificationError("reviewed failure"), + ): + self.assertEqual( + main( + ["pack-verify"], + root=Path.cwd(), + stdout=stdout, + stderr=stderr, + ), + 1, + ) + self.assertEqual(stdout.getvalue(), "") + self.assertEqual(stderr.getvalue(), "ERROR git-dag-lab: reviewed failure\n") + + +class PackFileBoundaryTests(unittest.TestCase): + def test_reads_one_regular_single_link_file(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + path = Path(temporary) / "pack" + path.write_bytes(b"bounded") + self.assertEqual( + pack_module._read_regular_file(path, label="fixture"), + b"bounded", + ) + + @unittest.skipUnless(hasattr(os, "symlink"), "symlink support is required") + def test_rejects_symlink_and_hardlink_inputs(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + target = root / "target" + target.write_bytes(b"bounded") + symlink = root / "symlink" + symlink.symlink_to(target.name) + hardlink = root / "hardlink" + os.link(target, hardlink) + for path in (symlink, target, hardlink): + with self.subTest(path=path.name), self.assertRaises( + VerificationError + ): + pack_module._read_regular_file(path, label="fixture") + + def test_rejects_empty_and_oversized_files(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + empty = root / "empty" + empty.write_bytes(b"") + oversized = root / "oversized" + with oversized.open("wb") as stream: + stream.truncate(MAX_PACK_BYTES + 1) + for path in (empty, oversized): + with self.assertRaises(VerificationError): + pack_module._read_regular_file(path, label="fixture") + + +if __name__ == "__main__": + unittest.main() From b12bc07b36327b4413034bcf7efacdb8364a5182 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 12:09:03 +0000 Subject: [PATCH 02/12] Add source-bound pack evidence pipeline --- .github/workflows/ci.yml | 13 +- .github/workflows/stage-pack-evidence.yml | 86 +++ README.md | 50 +- SECURITY.md | 8 +- git_dag_lab/pack.py | 1 + tests/test_pack_evidence.py | 228 +++++++ tools/capture_pack_report.sh | 325 +++++++++ tools/generate_pack_evidence.py | 775 ++++++++++++++++++++++ 8 files changed, 1476 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/stage-pack-evidence.yml create mode 100644 tests/test_pack_evidence.py create mode 100755 tools/capture_pack_report.sh create mode 100755 tools/generate_pack_evidence.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 25eea94..29dd7ce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,6 +64,10 @@ jobs: cmp docs/demo/git-dag-v1/verify.txt "$RUNNER_TEMP/verify.txt" env -u PYTHONHOME -u PYTHONPATH python -B -m git_dag_lab inspect --compact > "$RUNNER_TEMP/inspect.json" cmp evidence/git-dag-v1.json "$RUNNER_TEMP/inspect.json" + env -u PYTHONHOME -u PYTHONPATH python -B -m git_dag_lab pack-verify > "$RUNNER_TEMP/pack-verify.txt" + cmp docs/demo/git-pack-index-v1/verify.txt "$RUNNER_TEMP/pack-verify.txt" + env -u PYTHONHOME -u PYTHONPATH python -B -m git_dag_lab pack-inspect --compact > "$RUNNER_TEMP/pack-inspect.json" + cmp evidence/git-pack-index-v1.json "$RUNNER_TEMP/pack-inspect.json" - name: Check tests, evidence freshness, and shell boundary shell: bash @@ -71,9 +75,11 @@ jobs: set -euo pipefail env -u PYTHONHOME -u PYTHONPATH python -W error -m unittest discover -s tests -v env -u PYTHONHOME -u PYTHONPATH python -B tools/generate_evidence.py --check + env -u PYTHONHOME -u PYTHONPATH python -B tools/generate_pack_evidence.py --check bash -n tools/capture_report.sh + bash -n tools/capture_pack_report.sh test "$(shellcheck --version | awk '$1 == "version:" {print $2}')" = "0.9.0" - shellcheck tools/capture_report.sh + shellcheck tools/capture_report.sh tools/capture_pack_report.sh test "$(git status --porcelain=v1 --untracked-files=normal --ignore-submodules=none)" = "" distribution: @@ -119,6 +125,11 @@ jobs: env -u PYTHONHOME -u PYTHONPATH "$runtime/bin/python" -B -m git_dag_lab verify ) > "$RUNNER_TEMP/wheel-verify.txt" cmp docs/demo/git-dag-v1/verify.txt "$RUNNER_TEMP/wheel-verify.txt" + ( + cd "$RUNNER_TEMP" + env -u PYTHONHOME -u PYTHONPATH "$runtime/bin/python" -B -m git_dag_lab pack-verify + ) > "$RUNNER_TEMP/wheel-pack-verify.txt" + cmp docs/demo/git-pack-index-v1/verify.txt "$RUNNER_TEMP/wheel-pack-verify.txt" test "$(git status --porcelain=v1 --untracked-files=normal --ignore-submodules=none)" = "" - name: Upload verified distributions diff --git a/.github/workflows/stage-pack-evidence.yml b/.github/workflows/stage-pack-evidence.yml new file mode 100644 index 0000000..71e4088 --- /dev/null +++ b/.github/workflows/stage-pack-evidence.yml @@ -0,0 +1,86 @@ +name: Stage pack evidence (temporary) + +on: + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: stage-pack-evidence-${{ github.ref }} + cancel-in-progress: false + +env: + PYTHONDONTWRITEBYTECODE: "1" + PYTHONNOUSERSITE: "1" + PYTHONHASHSEED: "0" + TZ: UTC + +jobs: + stage: + name: Generate read-only pack evidence artifact + runs-on: ubuntu-24.04 + timeout-minutes: 20 + steps: + - name: Check out the exact feature revision + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + fetch-depth: 1 + persist-credentials: false + ref: ${{ github.sha }} + + - name: Set up exact Python + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + with: + python-version: "3.12.12" + + - name: Assert the bounded staging context + shell: bash + run: | + set -euo pipefail + test "$GITHUB_REPOSITORY" = "omar07ibrahim/hello-git" + test "$GITHUB_EVENT_NAME" = "workflow_dispatch" + test "$GITHUB_REF" = "refs/heads/agent/pack-index-inspector" + test "$(git rev-parse HEAD)" = "$GITHUB_SHA" + test "$(python -c 'import platform; print(platform.python_version())')" = "3.12.12" + test -z "${OPENAI_API_KEY:-}" + test "$(git status --porcelain=v1 --untracked-files=normal --ignore-submodules=none)" = "" + + - name: Acquire the digest-pinned browser image + shell: bash + run: | + set -euo pipefail + image='mcr.microsoft.com/playwright@sha256:2f29369043d81d6d69a815ceb80760f55e85f5020371ad06a4d996f18503ad1c' + docker pull "$image" + test "$(docker image inspect --format '{{index .RepoDigests 0}}' "$image")" = "$image" + + - name: Generate and independently replay both evidence packages + shell: bash + run: | + set -euo pipefail + tools/capture_pack_report.sh + python -B tools/generate_evidence.py --write + python -B tools/generate_evidence.py --check + python -B tools/generate_pack_evidence.py --check + python -W error -m unittest discover -s tests -v + bash -n tools/capture_pack_report.sh + test "$(shellcheck --version | awk '$1 == "version:" {print $2}')" = "0.9.0" + shellcheck tools/capture_pack_report.sh + + - name: Upload generated evidence without repository write access + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: git-pack-index-evidence-${{ github.sha }} + path: | + docs/assets/git-pack-cli.svg + docs/assets/git-pack-fanout.svg + docs/assets/git-pack-integrity.svg + docs/assets/git-pack-layout.svg + docs/assets/git-pack-report.png + docs/demo/git-dag-v1/manifest.json + docs/demo/git-pack-index-v1/ + evidence/git-pack-index-v1.json + if-no-files-found: error + include-hidden-files: false + compression-level: 0 + retention-days: 1 diff --git a/README.md b/README.md index 0273555..e7ecd8a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Git DAG Evidence Lab -> A dependency-free Python systems lab that constructs a real Git object database from plumbing commands and independently verifies every byte-addressed object. +> A dependency-free Python systems lab that constructs real Git object storage, then independently verifies loose-object DAGs plus closed-subset pack v2/index v2 bytes. The experiment demonstrates a subtle but important property: a merge commit and a rebase-shaped replay can resolve to **exactly the same tree** while preserving **different histories**. @@ -15,6 +15,8 @@ Requirements: Python 3.10+ and Git 2.29+. There are no runtime Python dependenci ```bash python3 -m git_dag_lab verify python3 -m git_dag_lab inspect +python3 -m git_dag_lab pack-verify +python3 -m git_dag_lab pack-inspect python3 -m unittest discover -s tests -v ``` @@ -34,6 +36,27 @@ The fixture contains three blobs, six trees, and five commits. `merge` stores th The replay is called **rebase-shaped** because it is constructed directly with `git commit-tree`. The lab does not claim to execute porcelain `git rebase`. + +## A second systems slice: verify pack and index bytes + +The pack path stores three fixed synthetic blobs in a fresh private SHA-1 repository, invokes real `git pack-objects`, then removes the repository after independently decoding both generated files. The CLI receipt below is actual stdout from that production path: + +![Exact real pack-verify stdout with actual pack and receipt digests](docs/assets/git-pack-cli.svg) + +The offline report is rendered from the same canonical receipt and captured by digest-pinned Chromium in a read-only, network-disabled container: + +![Actual pinned-Chromium screenshot of the verified pack v2 and index v2 report](docs/assets/git-pack-report.png) + +The verifier does not trust the pack filename or Git's index. It parses the variable-length pack entry headers, bounds each zlib stream, reconstructs logical blob IDs, verifies the pack trailer, then parses the 256-entry cumulative fanout table, sorted OIDs, CRC32 rows, 32/64-bit offsets, pack binding, and index checksum. + +![Actual byte offsets and sizes decoded from the generated pack and index](docs/assets/git-pack-layout.svg) + +![Actual populated fanout buckets, sorted object IDs, and lookup ranges](docs/assets/git-pack-fanout.svg) + +![Receipt-derived integrity chain from pack header through index checksum](docs/assets/git-pack-integrity.svg) + +This is deliberately a closed subset: pack v2 and index v2, at most 64 objects, 1 MiB files, 256 KiB expanded objects, and non-delta entries only. OFS/REF deltas, other object formats, arbitrary repositories, reachability, and pack optimization are not claimed. SHA-1 and CRC32 model Git storage integrity here; neither is presented as authentication, a signature, or collision-resistant security. + ## The hard part: verify Git without trusting Git Writing an object with Git and asking Git to identify it would only prove that Git agrees with itself. This lab reads the raw stored bytes and independently computes: @@ -51,7 +74,7 @@ SHA-1 is used because this scenario models a SHA-1 Git object database. Here it ## Isolation and execution boundaries - Git is resolved once to an absolute executable and invoked with argument arrays, never a shell. -- 10 local subcommands are allow-listed, while one fixed isolated `git init` creates the bare database; transport commands and remote-looking arguments are rejected. +- 11 local subcommands are allow-listed, including the bounded `pack-objects` path, while one fixed isolated `git init` creates each bare database; transport commands and remote-looking arguments are rejected. - `HOME`, `XDG_CONFIG_HOME`, and `TMPDIR` are private; inherited Git config, hooks, replacement objects, identity, and object-directory redirects are ignored. - fixed synthetic identity `dag-lab@example.invalid`, fixed UTC timestamps, and fixed LF payloads make object IDs reproducible. - symlinked workspace components are rejected; stdout/stderr are spooled privately and checked before bounded reads. @@ -61,24 +84,26 @@ See [SECURITY.md](SECURITY.md) for the threat model and trusted-input boundary. ## Evidence pipeline -Every README visual begins with the same canonical CLI document. The generator runs fresh experiments twice, requires byte-identical outputs, derives the SVG and offline HTML, and binds each artifact into a hash manifest. Digest-pinned Chromium then captures the report in a read-only container with `--network none`. A separate attestation binds the exact report, rendered DOM, PNG, browser binary/version, container digest, isolation policy, viewport, and capture-script hash; without that attestation, the generator refuses to call the screenshot verified. +Every README visual begins with a canonical production CLI document. The DAG and pack generators each run fresh experiments twice, require byte-identical outputs, derive their SVGs and offline HTML, and bind every artifact into a hash manifest. Digest-pinned Chromium captures both reports in read-only containers with `--network none`. Separate attestations bind each exact report, rendered DOM, PNG, browser binary/version, container digest, isolation policy, viewport, and capture-script hash; without the matching attestation, a generator refuses to call its screenshot verified. ![Architecture of the fixed scenario, real Git plumbing, independent verification, and evidence publication pipeline](docs/assets/evidence-pipeline.svg) ### Reproduce the checked-in evidence ```bash -# Verify JSON, transcripts, SVGs, HTML, source hashes, and the existing PNG. +# Verify both JSON/transcript/visual/report/manifest packages and PNG attestations. python3 -B tools/generate_evidence.py --check +python3 -B tools/generate_pack_evidence.py --check -# Rebuild evidence and recapture the report with the pinned browser container. +# Rebuild and recapture either offline report with pinned Chromium. tools/capture_report.sh +tools/capture_pack_report.sh -# Run all engine, boundary, CLI, evidence, and provenance tests. +# Run all parser, boundary, CLI, evidence, and provenance tests. python3 -W error -m unittest discover -s tests -v ``` -Current verified baseline: **61 tests**, **9/9 graph invariants**, **57 isolated Git invocations**, report receipt `2da1ccd8…69c84`, and screenshot SHA-256 `e539db11…e17e`. +Current verified baseline: **89 tests**, **9/9 graph invariants**, **7/7 pack/index checks**, 57 isolated Git invocations in the DAG evidence run, two independently replayed evidence packages, and two attested offline browser captures. | Artifact | What it proves | |---|---| @@ -89,13 +114,22 @@ Current verified baseline: **61 tests**, **9/9 graph invariants**, **57 isolated | [`rendered-dom.html`](docs/demo/git-dag-v1/rendered-dom.html) | Actual DOM emitted by Chromium during the attested capture | | [`capture-attestation.json`](docs/demo/git-dag-v1/capture-attestation.json) | Report/DOM/PNG hashes plus verified browser, container, isolation, viewport, and script provenance | | [`manifest.json`](docs/demo/git-dag-v1/manifest.json) | SHA-256, byte size, role, source hashes, normalized argv, and attestation receipt | -| [`git-dag-report.png`](docs/assets/git-dag-report.png) | Actual Chromium rendering of the report at 1440×1800 | +| [`git-dag-report.png`](docs/assets/git-dag-report.png) | Actual Chromium rendering of the DAG report at 1440×1800 | +| [`evidence/git-pack-index-v1.json`](evidence/git-pack-index-v1.json) | Canonical real pack/index receipt, physical entry order, cross-bound rows, and non-claims | +| [`git-pack-cli.svg`](docs/assets/git-pack-cli.svg) | Exact production `pack-verify` stdout rendered as an accessible terminal panel | +| [`git-pack-layout.svg`](docs/assets/git-pack-layout.svg) | Actual pack offsets/sizes and index-table byte counts | +| [`git-pack-fanout.svg`](docs/assets/git-pack-fanout.svg) | Actual non-empty fanout buckets and sorted OID ranges | +| [`git-pack-integrity.svg`](docs/assets/git-pack-integrity.svg) | Receipt-derived pack/index checksum and row-binding workflow | +| [`git-pack-report.png`](docs/assets/git-pack-report.png) | Actual Chromium rendering of the pack/index report at 1440×1500 | +| [`git-pack-index-v1/manifest.json`](docs/demo/git-pack-index-v1/manifest.json) | Hash/size/source/command/capture inventory for every pack visual and output | ## Test coverage by risk The standard-library suite exercises more than happy-path graph construction: - independent blob, tree, and commit envelope hashes; +- pack v2 headers, bounded zlib streams, logical OIDs, trailer checksum, and explicit delta rejection; +- index v2 fanout, sorted OIDs, CRC32 rows, small/large offsets, pack binding, and checksum mutations; - exact object/ref inventories, parent ordering, reachability, and ancestry; - Git's special `directory/` tree ordering, truncated binary objects, and malformed headers; - hostile inherited Git environment and fake global identity/config; diff --git a/SECURITY.md b/SECURITY.md index e4cc6f4..37c677e 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,6 +1,6 @@ # Security model -Git DAG Evidence Lab creates a temporary bare repository below the selected workspace and removes it after each run. It does not inspect the repository that contains this source code. +Git DAG Evidence Lab creates a temporary bare repository below the selected workspace for each DAG or pack experiment and removes it after the run. It does not inspect the repository that contains this source code. The command boundary is deliberately narrow: @@ -13,6 +13,12 @@ The command boundary is deliberately narrow: - temporary roots with symlinked path components are rejected. - stdout and stderr are captured in private temporary files and rejected before loading into memory when either exceeds 1 MiB. +## Pack/index closed subset + +The pack experiment passes only three fixed synthetic blob IDs to `git pack-objects`; it does not accept a repository path, revision, ref, or caller-provided object list. Generated `.pack` and `.idx` files must be regular, single-link files no larger than 1 MiB and must remain the same inode and size across the bounded read. + +The independent parser accepts pack v2 and index v2 only. It rejects OFS/REF deltas, more than 64 objects, objects expanding beyond 256 KiB, invalid or unterminated zlib streams, duplicate logical objects, non-canonical fanout/large-offset tables, and any mismatch among logical object IDs, CRC32 rows, offsets, pack trailer, index pack binding, or index checksum. These checks establish the fixed fixture's storage integrity; they do not establish provenance, authenticity, repository reachability, or safety of arbitrary Git data. + ## SHA-1 scope The lab uses SHA-1 because the scenario explicitly models a SHA-1 Git object database. The independent envelope calculation demonstrates deterministic content addressing and detects accidental changes in these fixtures. It is not a signature, authentication mechanism, or claim of modern collision resistance. diff --git a/git_dag_lab/pack.py b/git_dag_lab/pack.py index 0da23da..606b50b 100644 --- a/git_dag_lab/pack.py +++ b/git_dag_lab/pack.py @@ -459,6 +459,7 @@ def _build_and_verify_pack(runner: _GitRunner, private: Path) -> PackReport: "pack-objects", "--window=0", "--depth=0", + "--compression=0", "--no-reuse-delta", "--no-reuse-object", os.fspath(prefix), diff --git a/tests/test_pack_evidence.py b/tests/test_pack_evidence.py new file mode 100644 index 0000000..513aa31 --- /dev/null +++ b/tests/test_pack_evidence.py @@ -0,0 +1,228 @@ +from __future__ import annotations + +from copy import deepcopy +import hashlib +import json +from pathlib import Path +import re +import unittest + +from tools import generate_pack_evidence as evidence + +ROOT = Path(__file__).resolve().parents[1] + + +class PackEvidenceTests(unittest.TestCase): + def test_expected_generated_inventory_is_exact(self) -> None: + generated = evidence.build_artifacts(allow_missing_screenshot=False) + self.assertEqual( + set(generated), + { + evidence.EVIDENCE_PATH, + evidence.VERIFY_PATH, + evidence.INSPECT_PATH, + evidence.REPORT_PATH, + evidence.MANIFEST_PATH, + evidence.LAYOUT_PATH, + evidence.FANOUT_PATH, + evidence.INTEGRITY_PATH, + evidence.CLI_PATH, + }, + ) + + def test_checked_in_generated_files_are_current(self) -> None: + generated = evidence.build_artifacts(allow_missing_screenshot=False) + for path, expected in generated.items(): + with self.subTest(path=path.as_posix()): + self.assertEqual((ROOT / path).read_bytes(), expected) + + def test_compact_pretty_and_verify_outputs_share_one_receipt(self) -> None: + compact = json.loads((ROOT / evidence.EVIDENCE_PATH).read_text()) + pretty = json.loads((ROOT / evidence.INSPECT_PATH).read_text()) + verify = (ROOT / evidence.VERIFY_PATH).read_text() + self.assertEqual(compact, pretty) + self.assertIn( + f"receipt_sha256={compact['receipt']['sha256']}", + verify, + ) + canonical = json.dumps( + compact, + ensure_ascii=True, + separators=(",", ":"), + sort_keys=True, + ).encode("utf-8") + b"\n" + self.assertEqual((ROOT / evidence.EVIDENCE_PATH).read_bytes(), canonical) + + def test_two_fresh_evidence_builds_are_byte_identical(self) -> None: + first = evidence.build_artifacts(allow_missing_screenshot=False) + second = evidence.build_artifacts(allow_missing_screenshot=False) + self.assertEqual(first, second) + + def test_manifest_binds_artifacts_capture_and_sources(self) -> None: + manifest = json.loads((ROOT / evidence.MANIFEST_PATH).read_text()) + rows = {row["path"]: row for row in manifest["artifacts"]} + expected = { + evidence.EVIDENCE_PATH, + evidence.VERIFY_PATH, + evidence.INSPECT_PATH, + evidence.REPORT_PATH, + evidence.LAYOUT_PATH, + evidence.FANOUT_PATH, + evidence.INTEGRITY_PATH, + evidence.CLI_PATH, + evidence.SCREENSHOT_PATH, + evidence.RENDERED_DOM_PATH, + evidence.ATTESTATION_PATH, + } + self.assertEqual(set(rows), {path.as_posix() for path in expected}) + for path in expected: + content = (ROOT / path).read_bytes() + row = rows[path.as_posix()] + self.assertEqual(row["size"], len(content)) + self.assertEqual(row["sha256"], hashlib.sha256(content).hexdigest()) + self.assertEqual(manifest["capture"]["status"], "attested") + sources = {row["path"]: row for row in manifest["sources"]} + self.assertEqual( + set(sources), + { + "git_dag_lab/pack.py", + "git_dag_lab/cli.py", + "tools/generate_pack_evidence.py", + "tools/capture_pack_report.sh", + }, + ) + for relative, row in sources.items(): + content = (ROOT / relative).read_bytes() + self.assertEqual(row["size"], len(content)) + self.assertEqual(row["sha256"], hashlib.sha256(content).hexdigest()) + + def test_svg_visuals_are_accessible_and_receipt_bound(self) -> None: + document = json.loads((ROOT / evidence.EVIDENCE_PATH).read_text()) + receipt = document["receipt"]["sha256"] + for path in ( + evidence.LAYOUT_PATH, + evidence.FANOUT_PATH, + evidence.INTEGRITY_PATH, + evidence.CLI_PATH, + ): + text = (ROOT / path).read_text() + with self.subTest(path=path.as_posix()): + self.assertIn(" None: + report = (ROOT / evidence.REPORT_PATH).read_text() + self.assertNotIn(" None: + screenshot = (ROOT / evidence.SCREENSHOT_PATH).read_bytes() + self.assertEqual(evidence._parse_png(screenshot), evidence.PNG_DIMENSIONS) + attestation = json.loads((ROOT / evidence.ATTESTATION_PATH).read_text()) + payload = attestation["attestation"] + canonical = json.dumps( + payload, + ensure_ascii=True, + separators=(",", ":"), + sort_keys=True, + ).encode("utf-8") + self.assertEqual( + attestation["receipt"]["sha256"], + hashlib.sha256(canonical).hexdigest(), + ) + self.assertEqual(payload["isolation"]["network"], "none") + self.assertEqual( + payload["input"]["report"]["report_receipt_sha256"], + json.loads((ROOT / evidence.EVIDENCE_PATH).read_text())["receipt"][ + "sha256" + ], + ) + + def test_public_pack_evidence_has_no_host_or_secret_markers(self) -> None: + paths = ( + evidence.EVIDENCE_PATH, + evidence.VERIFY_PATH, + evidence.INSPECT_PATH, + evidence.REPORT_PATH, + evidence.MANIFEST_PATH, + evidence.RENDERED_DOM_PATH, + evidence.ATTESTATION_PATH, + evidence.LAYOUT_PATH, + evidence.FANOUT_PATH, + evidence.INTEGRITY_PATH, + evidence.CLI_PATH, + ) + forbidden = ( + "/home/", + "@gmail.com", + "AKIA", + "ghp_", + "github_pat_", + "OPENAI_API_KEY", + ) + for path in paths: + text = (ROOT / path).read_text(errors="strict") + with self.subTest(path=path.as_posix()): + for marker in forbidden: + self.assertNotIn(marker.lower(), text.lower()) + + def test_document_validator_rejects_claim_and_integrity_drift(self) -> None: + document = json.loads((ROOT / evidence.EVIDENCE_PATH).read_text()) + verify = (ROOT / evidence.VERIFY_PATH).read_bytes() + mutations = [] + + missing_check = deepcopy(document) + del missing_check["report"]["checks"]["pack_trailer_verified"] + mutations.append(missing_check) + + delta_claim = deepcopy(document) + delta_claim["report"]["scope"]["delta_entries_supported"] = True + mutations.append(delta_claim) + + authentication_claim = deepcopy(document) + authentication_claim["report"]["scope"]["authentication_claim"] = True + mutations.append(authentication_claim) + + changed_crc = deepcopy(document) + changed_crc["report"]["objects_in_pack_order"][0]["index_crc32"] = "00000000" + mutations.append(changed_crc) + + for mutation in mutations: + with self.assertRaises(evidence.EvidenceError): + evidence._validate_document(mutation, verify) + + def test_readme_exposes_real_pack_workflow_and_visuals(self) -> None: + readme = (ROOT / "README.md").read_text() + for path in ( + evidence.SCREENSHOT_PATH, + evidence.LAYOUT_PATH, + evidence.FANOUT_PATH, + evidence.INTEGRITY_PATH, + evidence.CLI_PATH, + ): + self.assertIn(path.as_posix(), readme) + self.assertIn("python3 -m git_dag_lab pack-verify", readme) + self.assertIn("python3 -m git_dag_lab pack-inspect", readme) + self.assertIn("Delta", readme) + self.assertRegex(readme, r"\*\*[0-9]+ tests\*\*") + + def test_capture_toolchain_is_digest_pinned_and_network_disabled(self) -> None: + script = (ROOT / "tools/capture_pack_report.sh").read_text() + self.assertRegex(script, r"mcr\.microsoft\.com/playwright@sha256:[0-9a-f]{64}") + self.assertIn("--network none", script) + self.assertIn("--pull=never", script) + self.assertIn("--read-only", script) + self.assertNotRegex(script, re.compile(r"(?m)^\s*curl\b|\bwget\b")) + + +if __name__ == "__main__": + unittest.main() diff --git a/tools/capture_pack_report.sh b/tools/capture_pack_report.sh new file mode 100755 index 0000000..b920854 --- /dev/null +++ b/tools/capture_pack_report.sh @@ -0,0 +1,325 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if [[ $# -ne 0 ]]; then + echo "usage: $0" >&2 + exit 2 +fi + +readonly image='mcr.microsoft.com/playwright@sha256:2f29369043d81d6d69a815ceb80760f55e85f5020371ad06a4d996f18503ad1c' +readonly browser='/ms-playwright/chromium_headless_shell-1193/chrome-linux/headless_shell' +readonly browser_version='Chromium 140.0.7339.186' +readonly browser_sha256='003728e0b77eb9d52e4d258594bd55ce22ecd245eb6d3b6858fbd844c901ad7d' + +repo_root=$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd -P) +demo_root="$repo_root/docs/demo/git-pack-index-v1" +report_path="$demo_root/report.html" +output_path="$repo_root/docs/assets/git-pack-report.png" +rendered_dom_path="$demo_root/rendered-dom.html" +attestation_path="$demo_root/capture-attestation.json" + +if ! command -v docker >/dev/null 2>&1; then + echo "capture error: Docker is required" >&2 + exit 1 +fi +if [[ $(id -u) -eq 0 || $(id -g) -eq 0 ]]; then + echo "capture error: refusing to run Chromium as root" >&2 + exit 1 +fi + +python3 -B "$repo_root/tools/generate_pack_evidence.py" --write --allow-missing-screenshot >/dev/null +python3 -B "$repo_root/tools/generate_pack_evidence.py" --check --allow-missing-screenshot >/dev/null + +for managed_path in \ + "$repo_root/docs" \ + "$repo_root/docs/demo" \ + "$demo_root" \ + "$report_path" \ + "$repo_root/docs/assets"; do + if [[ ! -e "$managed_path" || $(realpath -e -- "$managed_path") != "$managed_path" ]]; then + echo "capture error: managed evidence path is missing or contains a symlink" >&2 + exit 1 + fi +done +if [[ ! -f "$report_path" || -L "$report_path" ]]; then + echo "capture error: offline report is unsafe" >&2 + exit 1 +fi +for destination in "$output_path" "$rendered_dom_path" "$attestation_path"; do + if [[ -L "$destination" || ( -e "$destination" && ! -f "$destination" ) ]]; then + echo "capture error: managed capture destination is unsafe" >&2 + exit 1 + fi + if [[ -e "$destination" && $(stat -c '%h' -- "$destination") -ne 1 ]]; then + echo "capture error: managed capture destination has multiple hard links" >&2 + exit 1 + fi +done + +report_sha_before=$(sha256sum "$report_path" | awk '{print $1}') +script_sha_before=$(sha256sum "$repo_root/tools/capture_pack_report.sh" | awk '{print $1}') + +observed_digest=$(docker image inspect --format '{{index .RepoDigests 0}}' "$image") +if [[ "$observed_digest" != "$image" ]]; then + echo "capture error: cached container digest is not exact" >&2 + exit 1 +fi +observed_architecture=$(docker image inspect --format '{{.Architecture}}' "$image") +if [[ "$observed_architecture" != "amd64" ]]; then + echo "capture error: cached container architecture is not amd64" >&2 + exit 1 +fi + +uid=$(id -u) +gid=$(id -g) +readonly uid +readonly gid +common=( + --rm + --pull=never + --platform linux/amd64 + --network none + --user "$uid:$gid" + --read-only + --cap-drop ALL + --security-opt no-new-privileges + --pids-limit 256 + --memory 768m + --memory-swap 768m + --cpus 1 + --ulimit nofile=1024:1024 + --ulimit core=0:0 + --tmpfs '/tmp:rw,nosuid,nodev,noexec,size=256m,mode=1777' + --tmpfs '/dev/shm:rw,nosuid,nodev,noexec,size=256m,mode=1777' + --env HOME=/tmp + --env XDG_CACHE_HOME=/tmp/cache + --env XDG_CONFIG_HOME=/tmp/config + --env LANG=C.UTF-8 + --env LC_ALL=C.UTF-8 + --env TZ=UTC +) + +observed_hash=$(docker run "${common[@]}" --entrypoint /usr/bin/sha256sum \ + "$image" "$browser" | awk '{print $1}') +if [[ "$observed_hash" != "$browser_sha256" ]]; then + echo "capture error: Chromium binary hash is not exact" >&2 + exit 1 +fi +observed_version=$(docker run "${common[@]}" --entrypoint "$browser" \ + "$image" --version) +if [[ "$observed_version" != "$browser_version" ]]; then + echo "capture error: Chromium version is not exact" >&2 + exit 1 +fi + +temporary_root=$(mktemp -d "$repo_root/.git-pack-report-capture.XXXXXX") +cidfile="$temporary_root/container.cid" +cleanup() { + if [[ -f "$cidfile" && ! -L "$cidfile" ]]; then + container_id=$(<"$cidfile") + if [[ "$container_id" =~ ^[0-9a-f]{64}$ ]]; then + docker rm -f "$container_id" >/dev/null 2>&1 || true + fi + fi + if [[ -d "$temporary_root" ]]; then + find "$temporary_root" -depth -delete + fi +} +trap cleanup EXIT INT TERM +mkdir "$temporary_root/output" +dom_path="$temporary_root/rendered-dom.html" +capture_log="$temporary_root/capture.stderr" + +capture=( + docker run + "${common[@]}" + --cidfile "$cidfile" + --mount "type=bind,src=$demo_root,dst=/demo,readonly" + --mount "type=bind,src=$temporary_root/output,dst=/output" + --workdir /demo + --entrypoint "$browser" + "$image" + --headless + --no-sandbox + --disable-background-networking + --disable-breakpad + --disable-component-update + --disable-default-apps + --disable-extensions + '--disable-features=OptimizationHints,Translate' + --disable-sync + --force-color-profile=srgb + --force-device-scale-factor=1 + --hide-scrollbars + '--host-resolver-rules=MAP * ~NOTFOUND' + --lang=en-US + --metrics-recording-only + --no-first-run + --no-pings + --password-store=basic + --run-all-compositor-stages-before-draw + --safebrowsing-disable-auto-update + --virtual-time-budget=1000 + '--window-size=1440,1500' + --dump-dom + --screenshot=/output/git-pack-report.png + file:///demo/report.html +) + +if ! timeout --signal=TERM --kill-after=5s 45s \ + "${capture[@]}" >"$dom_path" 2>"$capture_log"; then + echo "capture error: isolated Chromium capture failed" >&2 + sed -n '1,12p' "$capture_log" >&2 + exit 1 +fi + +python3 - "$repo_root" "$repo_root/evidence/git-pack-index-v1.json" "$dom_path" "$temporary_root/output" <<'PY' +from pathlib import Path +import json +import sys + +repo_root = Path(sys.argv[1]) +evidence_path = Path(sys.argv[2]) +dom_path = Path(sys.argv[3]) +output = Path(sys.argv[4]) +sys.path.insert(0, str(repo_root)) +from tools.generate_evidence import _parse_png + +document = json.loads(evidence_path.read_text(encoding="utf-8")) +receipt = document["receipt"]["sha256"] +dom = dom_path.read_text(encoding="utf-8") +required = ( + '
/dev/null +if [[ $(sha256sum "$report_path" | awk '{print $1}') != "$report_sha_before" ]]; then + echo "capture error: offline report changed during capture" >&2 + exit 1 +fi +if [[ $(sha256sum "$repo_root/tools/capture_pack_report.sh" | awk '{print $1}') != "$script_sha_before" ]]; then + echo "capture error: capture script changed during execution" >&2 + exit 1 +fi + +chmod 0644 "$temporary_root/output/git-pack-report.png" +chmod 0644 "$dom_path" +mv -f -- "$temporary_root/output/git-pack-report.png" "$output_path" +mv -f -- "$dom_path" "$rendered_dom_path" + +python3 - "$repo_root" "$report_path" "$rendered_dom_path" "$output_path" "$attestation_path" <<'PY' +from pathlib import Path +import hashlib +import json +import os +import sys +import tempfile + +root = Path(sys.argv[1]) +report_path = Path(sys.argv[2]) +dom_path = Path(sys.argv[3]) +screenshot_path = Path(sys.argv[4]) +attestation_path = Path(sys.argv[5]) + +def sha256(content: bytes) -> str: + return hashlib.sha256(content).hexdigest() + +def row(path: Path, relative: str) -> dict[str, object]: + content = path.read_bytes() + return {"path": relative, "sha256": sha256(content), "size": len(content)} + +report = report_path.read_bytes() +dom = dom_path.read_bytes() +screenshot = screenshot_path.read_bytes() +script_path = root / "tools/capture_pack_report.sh" +script = script_path.read_bytes() +evidence = json.loads((root / "evidence/git-pack-index-v1.json").read_text(encoding="utf-8")) + +payload = { + "browser": { + "binary_path": "/ms-playwright/chromium_headless_shell-1193/chrome-linux/headless_shell", + "sha256": "003728e0b77eb9d52e4d258594bd55ce22ecd245eb6d3b6858fbd844c901ad7d", + "version": "Chromium 140.0.7339.186", + }, + "container": { + "architecture": "amd64", + "image": "mcr.microsoft.com/playwright@sha256:2f29369043d81d6d69a815ceb80760f55e85f5020371ad06a4d996f18503ad1c", + }, + "input": { + "report": { + **row(report_path, "docs/demo/git-pack-index-v1/report.html"), + "report_receipt_sha256": evidence["receipt"]["sha256"], + } + }, + "isolation": { + "capabilities": "all-dropped", + "demo_mount": "read-only", + "network": "none", + "no_new_privileges": True, + "pull": "never", + "root_filesystem": "read-only", + "user": "caller-nonroot", + }, + "outputs": { + "rendered_dom": row(dom_path, "docs/demo/git-pack-index-v1/rendered-dom.html"), + "screenshot": { + **row(screenshot_path, "docs/assets/git-pack-report.png"), + "height": 1500, + "width": 1440, + }, + }, + "schema_version": "git-pack-browser-capture-attestation/v1", + "script": row(script_path, "tools/capture_pack_report.sh"), + "viewport": {"device_scale_factor": 1, "height": 1500, "width": 1440}, +} +canonical = json.dumps( + payload, ensure_ascii=True, separators=(",", ":"), sort_keys=True +).encode("utf-8") +document = { + "attestation": payload, + "receipt": { + "algorithm": "sha256", + "canonicalization": "UTF-8 JSON; sorted keys; compact separators", + "sha256": sha256(canonical), + }, +} +content = (json.dumps(document, ensure_ascii=True, indent=2, sort_keys=True) + "\n").encode("utf-8") +temporary_path: Path | None = None +try: + with tempfile.NamedTemporaryFile( + mode="wb", prefix=".capture-attestation-", dir=attestation_path.parent, delete=False + ) as temporary: + temporary.write(content) + temporary.flush() + os.fsync(temporary.fileno()) + temporary_path = Path(temporary.name) + os.chmod(temporary_path, 0o644) + os.replace(temporary_path, attestation_path) + temporary_path = None +finally: + if temporary_path is not None: + temporary_path.unlink(missing_ok=True) +PY + +python3 -B "$repo_root/tools/generate_pack_evidence.py" --write >/dev/null +python3 -B "$repo_root/tools/generate_pack_evidence.py" --check >/dev/null +sha256sum "$output_path" diff --git a/tools/generate_pack_evidence.py b/tools/generate_pack_evidence.py new file mode 100755 index 0000000..ba50342 --- /dev/null +++ b/tools/generate_pack_evidence.py @@ -0,0 +1,775 @@ +#!/usr/bin/env python3 +"""Generate and verify source-bound Git pack/index evidence.""" + +from __future__ import annotations + +import argparse +from collections.abc import Mapping, Sequence +from dataclasses import dataclass +import hashlib +import html +import json +import os +from pathlib import Path +import re +import subprocess +import sys +from typing import Any + +ROOT = Path(__file__).resolve().parents[1] +if os.fspath(ROOT) not in sys.path: + sys.path.insert(0, os.fspath(ROOT)) + +from tools.generate_evidence import ( + BROWSER_PATH, + BROWSER_SHA256, + BROWSER_VERSION, + CONTAINER_IMAGE, + EvidenceError, + _artifact_row, + _check_artifacts, + _json_bytes, + _parse_png, + _safe_capture_bytes, + _sha256, + _source_row, + _svg_header, + _write_artifacts, + _xml_text, +) + +EVIDENCE_PATH = Path("evidence/git-pack-index-v1.json") +DEMO_ROOT = Path("docs/demo/git-pack-index-v1") +VERIFY_PATH = DEMO_ROOT / "verify.txt" +INSPECT_PATH = DEMO_ROOT / "inspect.json" +REPORT_PATH = DEMO_ROOT / "report.html" +MANIFEST_PATH = DEMO_ROOT / "manifest.json" +RENDERED_DOM_PATH = DEMO_ROOT / "rendered-dom.html" +ATTESTATION_PATH = DEMO_ROOT / "capture-attestation.json" +LAYOUT_PATH = Path("docs/assets/git-pack-layout.svg") +FANOUT_PATH = Path("docs/assets/git-pack-fanout.svg") +INTEGRITY_PATH = Path("docs/assets/git-pack-integrity.svg") +CLI_PATH = Path("docs/assets/git-pack-cli.svg") +SCREENSHOT_PATH = Path("docs/assets/git-pack-report.png") +PNG_DIMENSIONS = (1440, 1500) +SHA1_RE = re.compile(r"^[0-9a-f]{40}$") +SHA256_RE = re.compile(r"^[0-9a-f]{64}$") + + +@dataclass(frozen=True, slots=True) +class PackCapture: + screenshot: bytes + rendered_dom: bytes + attestation: bytes + document: Mapping[str, Any] + + +def _run_cli(arguments: Sequence[str]) -> bytes: + environment = { + "LANG": "C.UTF-8", + "LC_ALL": "C.UTF-8", + "PATH": os.environ.get("PATH", ""), + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONHASHSEED": "0", + "TZ": "UTC", + } + completed = subprocess.run( + [sys.executable, "-B", "-m", "git_dag_lab", *arguments], + cwd=ROOT, + env=environment, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + check=False, + shell=False, + timeout=30, + ) + if completed.returncode != 0: + raise EvidenceError(f"CLI {' '.join(arguments)} failed") + if completed.stderr: + raise EvidenceError(f"CLI {' '.join(arguments)} wrote to stderr") + return completed.stdout + + +def _collect_cli() -> tuple[bytes, bytes, bytes, dict[str, Any]]: + first = ( + _run_cli(("pack-verify",)), + _run_cli(("pack-inspect", "--compact")), + _run_cli(("pack-inspect",)), + ) + second = ( + _run_cli(("pack-verify",)), + _run_cli(("pack-inspect", "--compact")), + _run_cli(("pack-inspect",)), + ) + if first != second: + raise EvidenceError("two fresh pack CLI runs produced different evidence") + verify_output, compact_output, pretty_output = first + try: + compact_document = json.loads(compact_output) + pretty_document = json.loads(pretty_output) + except json.JSONDecodeError as exc: + raise EvidenceError("pack inspection output is not JSON") from exc + if compact_document != pretty_document: + raise EvidenceError("compact and pretty pack documents differ") + if compact_output != _json_bytes(compact_document, pretty=False): + raise EvidenceError("compact pack inspection output is not canonical JSON") + if pretty_output != _json_bytes(pretty_document, pretty=True): + raise EvidenceError("pretty pack inspection output is not canonical JSON") + _validate_document(compact_document, verify_output) + return verify_output, compact_output, pretty_output, compact_document + + +def _validate_document(document: Mapping[str, Any], verify_output: bytes) -> None: + if set(document) != {"receipt", "report"}: + raise EvidenceError("pack evidence has unexpected top-level fields") + report = document.get("report") + receipt = document.get("receipt") + if not isinstance(report, dict) or not isinstance(receipt, dict): + raise EvidenceError("pack evidence sections are malformed") + if report.get("schema_version") != "git-pack-index-lab/v1": + raise EvidenceError("unexpected pack evidence schema") + receipt_sha = receipt.get("sha256") + if not isinstance(receipt_sha, str) or not SHA256_RE.fullmatch(receipt_sha): + raise EvidenceError("pack receipt is malformed") + canonical = json.dumps( + report, + ensure_ascii=True, + separators=(",", ":"), + sort_keys=True, + ).encode("utf-8") + if _sha256(canonical) != receipt_sha: + raise EvidenceError("pack receipt does not bind the canonical report") + if f"receipt_sha256={receipt_sha}\n".encode("ascii") not in verify_output: + raise EvidenceError("pack transcript and receipt differ") + + pack = report.get("pack", {}) + index = report.get("index", {}) + checks = report.get("checks", {}) + scope = report.get("scope", {}) + objects = report.get("objects_in_pack_order", []) + fixture = report.get("fixture", {}) + if ( + pack.get("version") != 2 + or pack.get("object_count") != 3 + or pack.get("delta_count") != 0 + or not isinstance(pack.get("bytes"), int) + or pack["bytes"] <= 32 + or not SHA1_RE.fullmatch(pack.get("trailer_sha1", "")) + or not SHA256_RE.fullmatch(pack.get("sha256", "")) + ): + raise EvidenceError("pack summary is outside the reviewed fixture") + if ( + index.get("version") != 2 + or index.get("pack_sha1") != pack["trailer_sha1"] + or not isinstance(index.get("bytes"), int) + or index["bytes"] <= 1_064 + or not SHA1_RE.fullmatch(index.get("index_sha1", "")) + or not SHA256_RE.fullmatch(index.get("sha256", "")) + ): + raise EvidenceError("index summary is outside the reviewed fixture") + expected_checks = { + "all_fixture_objects_present", + "delta_entries_absent", + "index_checksum_verified", + "index_crc32_matches_pack", + "index_fanout_matches_sorted_oids", + "index_offsets_match_pack", + "pack_trailer_verified", + } + if set(checks) != expected_checks or not all(value is True for value in checks.values()): + raise EvidenceError("not every pack/index check passed") + if ( + fixture.get("object_count") != 3 + or len(fixture.get("objects", [])) != 3 + or len(objects) != 3 + ): + raise EvidenceError("pack fixture inventory is incomplete") + for row in objects: + if ( + row.get("object_type") != "blob" + or not SHA1_RE.fullmatch(row.get("oid", "")) + or not SHA256_RE.fullmatch(row.get("payload_sha256", "")) + or row.get("offset") != row.get("index_offset") + or row.get("crc32") != row.get("index_crc32") + ): + raise EvidenceError("pack object row is not cross-bound") + if ( + scope.get("delta_entries_supported") is not False + or scope.get("authentication_claim") is not False + or scope.get("git_pack_objects_executed") is not True + or scope.get("network_required") is not False + ): + raise EvidenceError("pack scope and non-claims are incomplete") + rendered = json.dumps(document, ensure_ascii=True, sort_keys=True) + forbidden = ("/home/", "github.com/", "@gmail.com", "AKIA", "ghp_", "github_pat_") + if any(marker.lower() in rendered.lower() for marker in forbidden): + raise EvidenceError("pack evidence contains host, remote, or credential material") + + +def _layout_svg(document: Mapping[str, Any]) -> bytes: + report = document["report"] + receipt = document["receipt"]["sha256"] + pack = report["pack"] + index = report["index"] + objects = report["objects_in_pack_order"] + total = pack["bytes"] + x0 = 55 + width = 1_330 + colors = ("#59e3c2", "#bd7cff", "#55a8ff") + parts = [ + _svg_header( + "Actual Git pack v2 and index v2 byte layout", + "Byte offsets and section sizes are derived from the real production pack receipt.", + width=1440, + height=700, + receipt=receipt, + metadata_extra={ + "index_sha256": index["sha256"], + "pack_sha256": pack["sha256"], + }, + ), + ' REAL PACK V2 · ACTUAL OFFSETS · THREE NON-DELTA BLOBS', + f' {total} pack bytes, independently decoded', + ' ', + ] + header_width = max(58, round(12 / total * width)) + parts.append( + f' ' + ) + parts.append( + f' PACK' + ) + for number, (row, color) in enumerate(zip(objects, colors, strict=True), 1): + x = x0 + round(row["offset"] / total * width) + segment_width = max(105, round(row["packed_size"] / total * width)) + parts.extend( + ( + f' ', + f' 0{number} · {row["label"]}', + f' offset {row["offset"]}', + f' {row["packed_size"]} bytes', + ) + ) + trailer_x = x0 + round((total - 20) / total * width) + trailer_width = max(82, round(20 / total * width)) + parts.extend( + ( + f' ', + f' SHA-1', + f' 20 B', + ' INDEX V2 FIXED TABLES', + ) + ) + # Widths are legibility-scaled; every label retains the actual byte size. + sections = ( + ("header", 8, 90, "#243d62"), + ("fanout[256]", 1_024, 650, "#55a8ff"), + ("sorted OIDs", 60, 180, "#59e3c2"), + ("CRC32", 12, 130, "#bd7cff"), + ("offsets", 12, 130, "#ff8fa3"), + ("checksums", 40, 150, "#ffcf66"), + ) + index_x = 55 + for name, size, section_width, color in sections: + parts.extend( + ( + f' ', + f' {name}', + f' {size} B', + ) + ) + index_x += section_width + parts.extend( + ( + f' ', + f' Pack trailer SHA-1 · {_xml_text(pack["trailer_sha1"])}', + f' Index SHA-1 · {_xml_text(index["index_sha1"])} · binds the same pack checksum', + f' Receipt SHA-256 · {receipt}', + "\n", + ) + ) + return "\n".join(parts).encode("utf-8") + + +def _fanout_svg(document: Mapping[str, Any]) -> bytes: + report = document["report"] + receipt = document["receipt"]["sha256"] + objects = sorted(report["objects_in_pack_order"], key=lambda row: row["oid"]) + buckets = { + row["prefix"]: row for row in report["index"]["nonzero_fanout_buckets"] + } + parts = [ + _svg_header( + "Actual index v2 fanout lookup", + "The three populated prefix buckets, sorted object IDs, and exact index ranges come from the verified index receipt.", + width=1440, + height=690, + receipt=receipt, + ), + ' 256-BUCKET CUMULATIVE FANOUT · THREE ACTUAL OBJECT IDS', + ' Prefix lookup narrows the sorted OID table.', + ] + for position, row in enumerate(objects): + y = 160 + (position * 145) + bucket = buckets[row["oid"][:2]] + parts.extend( + ( + f' ', + f' PREFIX {row["oid"][:2]}', + f' [{bucket["range_start"]}, {bucket["cumulative"]})', + f' ', + f' ', + f' {_xml_text(row["label"])} · blob · {row["size"]} bytes', + f' {row["oid"]}', + ) + ) + parts.extend( + ( + ' ', + f' Every displayed bucket and range is decoded from index bytes · receipt {receipt}', + "\n", + ) + ) + return "\n".join(parts).encode("utf-8") + + +def _integrity_svg(document: Mapping[str, Any]) -> bytes: + report = document["report"] + receipt = document["receipt"]["sha256"] + pack = report["pack"] + index = report["index"] + stages = ( + ("PACK HEADER", f"v{pack['version']} · {pack['object_count']} objects"), + ("ENTRY STREAMS", "bounded zlib · logical OIDs"), + ("INDEX ROWS", "CRC32 · exact offsets"), + ("PACK BINDING", index["pack_sha1"]), + ("INDEX CHECKSUM", index["index_sha1"]), + ) + parts = [ + _svg_header( + "Independent pack/index integrity chain", + "The production verifier reconstructs each logical object, checks entry CRCs and offsets, then binds both file checksums.", + width=1440, + height=580, + receipt=receipt, + ), + ' GIT WRITES · PYTHON INDEPENDENTLY READS · NO MODELLED SUCCESS', + ' Five checks connect raw bytes to one receipt.', + ] + x_values = (35, 315, 595, 875, 1155) + for number, ((title, detail), x) in enumerate(zip(stages, x_values, strict=True), 1): + visible = detail if len(detail) <= 24 else detail[:20] + "…" + parts.extend( + ( + f' ', + f' 0{number}', + f' {title}', + f' {_xml_text(visible)}', + f' PASS', + ) + ) + if number < len(stages): + parts.append(f' ') + parts.extend( + ( + ' ', + f' 3/3 CRC32 and offsets cross-match · 0 deltas accepted · pack SHA-1 {pack["trailer_sha1"]}', + f' SHA-1 models Git object storage; authentication claim = false · receipt {receipt}', + "\n", + ) + ) + return "\n".join(parts).encode("utf-8") + + +def _cli_svg(document: Mapping[str, Any], verify_output: bytes) -> bytes: + receipt = document["receipt"]["sha256"] + transcript = verify_output.decode("utf-8").rstrip("\n") + before_receipt, receipt_digest = transcript.rsplit(" receipt_sha256=", 1) + before_pack, pack_digest = before_receipt.rsplit("pack_sha1=", 1) + parts = [ + _svg_header( + "Real Git pack/index CLI receipt", + "Exact stdout from pack-verify; the command executed real git pack-objects and independently checked both files.", + width=1440, + height=500, + receipt=receipt, + ), + ' REAL CLI STDOUT · STDERR 0 BYTES · EXIT 0', + ' ', + ' ', + ' $ python3 -B -m git_dag_lab pack-verify', + f' {_xml_text(before_pack)}', + f' pack_sha1={pack_digest}', + f' receipt_sha256={receipt_digest}', + f' verify.txt SHA-256 · {_sha256(verify_output)}', + f' Report receipt SHA-256 · {receipt}', + "\n", + ] + return "\n".join(parts).encode("utf-8") + + +def _report_html(document: Mapping[str, Any], verify_output: bytes) -> bytes: + report = document["report"] + receipt = document["receipt"]["sha256"] + pack = report["pack"] + index = report["index"] + checks = report["checks"] + objects = report["objects_in_pack_order"] + transcript = html.escape(verify_output.decode("utf-8").rstrip("\n")) + object_rows = "".join( + f'''{html.escape(row["label"])}{row["oid"]}{row["size"]}{row["offset"]}{row["crc32"]}''' + for row in objects + ) + check_rows = "".join( + f"
  • {html.escape(name.replace('_', ' '))}
  • " + for name, passed in checks.items() + if passed + ) + text = f''' + + + + + + Git pack/index evidence — verified offline report + + + +
    +

    Git pack/index lab · actual offline report

    +

    Pack v2.
    Index v2.

    +

    Real git pack-objects output is decoded independently: bounded zlib entries, logical object IDs, fanout ranges, CRC32 rows, offsets, and both file checksums.

    +
    PASS · report receipt {receipt}
    +
    +
    3packed objects
    +
    {pack["bytes"]}actual pack bytes
    +
    {index["bytes"]}actual index bytes
    +
    7/7checks passed
    +
    +
    +

    Objects in physical pack order

    {object_rows}
    fixtureOIDsizeoffsetCRC32
    +

    Independent gate

      {check_rows}
    +
    +

    Real CLI receipt

    $ python3 -B -m git_dag_lab pack-verify\n{transcript}
    Pack trailer
    {pack["trailer_sha1"]}

    Index checksum
    {index["index_sha1"]}

    Delta support: false · authentication claim: false · network required: false

    +
    Generated offline · no JavaScript · no external assetsevidence/git-pack-index-v1.json
    +
    + + +''' + return text.encode("utf-8") + + +def _capture_path_is_safe_if_present(path: Path) -> None: + target = ROOT / path + if target.exists() and (not target.is_file() or target.is_symlink()): + raise EvidenceError(f"unsafe pack capture path: {path.as_posix()}") + + +def _load_capture( + report_content: bytes, + receipt: str, + *, + allow_missing: bool, +) -> PackCapture | None: + for path in (SCREENSHOT_PATH, RENDERED_DOM_PATH, ATTESTATION_PATH): + _capture_path_is_safe_if_present(path) + if allow_missing: + return None + present = [ + (ROOT / path).is_file() + for path in (SCREENSHOT_PATH, RENDERED_DOM_PATH, ATTESTATION_PATH) + ] + if not all(present): + raise EvidenceError("pack browser capture is missing") + + screenshot = _safe_capture_bytes(SCREENSHOT_PATH, "pack screenshot") + rendered_dom = _safe_capture_bytes(RENDERED_DOM_PATH, "pack rendered DOM") + attestation = _safe_capture_bytes(ATTESTATION_PATH, "pack capture attestation") + if _parse_png(screenshot) != PNG_DIMENSIONS: + raise EvidenceError("pack screenshot dimensions differ from the contract") + try: + dom_text = rendered_dom.decode("utf-8") + document = json.loads(attestation) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise EvidenceError("pack browser capture metadata is malformed") from exc + required = ( + f'data-pack-receipt="{receipt}"', + 'data-object-count="3"', + 'data-check-count="7"', + "Pack v2.", + "Index v2.", + "packed objects", + ) + if not all(marker in dom_text for marker in required): + raise EvidenceError("pack rendered DOM sentinels are incomplete") + if any(marker in dom_text for marker in ("/home/", "ERR_FILE", "github.com/")): + raise EvidenceError("pack rendered DOM contains a forbidden marker") + if set(document) != {"attestation", "receipt"}: + raise EvidenceError("pack capture attestation shape is invalid") + payload = document["attestation"] + attestation_receipt = document["receipt"].get("sha256") + canonical = json.dumps( + payload, + ensure_ascii=True, + separators=(",", ":"), + sort_keys=True, + ).encode("utf-8") + if attestation_receipt != _sha256(canonical): + raise EvidenceError("pack capture attestation receipt is invalid") + try: + report_row = payload["input"]["report"] + dom_row = payload["outputs"]["rendered_dom"] + screenshot_row = payload["outputs"]["screenshot"] + script_row = payload["script"] + except (KeyError, TypeError) as exc: + raise EvidenceError("pack capture attestation rows are incomplete") from exc + script_path = Path("tools/capture_pack_report.sh") + script_content = _safe_capture_bytes(script_path, "pack capture script") + if ( + payload.get("schema_version") != "git-pack-browser-capture-attestation/v1" + or payload.get("browser", {}).get("binary_path") != BROWSER_PATH + or payload.get("browser", {}).get("sha256") != BROWSER_SHA256 + or payload.get("browser", {}).get("version") != BROWSER_VERSION + or payload.get("container", {}).get("image") != CONTAINER_IMAGE + or payload.get("container", {}).get("architecture") != "amd64" + or payload.get("isolation", {}).get("network") != "none" + or payload.get("isolation", {}).get("root_filesystem") != "read-only" + or payload.get("isolation", {}).get("demo_mount") != "read-only" + or payload.get("isolation", {}).get("capabilities") != "all-dropped" + or payload.get("isolation", {}).get("no_new_privileges") is not True + or payload.get("viewport") != { + "device_scale_factor": 1, + "height": PNG_DIMENSIONS[1], + "width": PNG_DIMENSIONS[0], + } + or report_row.get("path") != REPORT_PATH.as_posix() + or report_row.get("sha256") != _sha256(report_content) + or report_row.get("size") != len(report_content) + or report_row.get("report_receipt_sha256") != receipt + or dom_row.get("path") != RENDERED_DOM_PATH.as_posix() + or dom_row.get("sha256") != _sha256(rendered_dom) + or dom_row.get("size") != len(rendered_dom) + or screenshot_row.get("path") != SCREENSHOT_PATH.as_posix() + or screenshot_row.get("sha256") != _sha256(screenshot) + or screenshot_row.get("size") != len(screenshot) + or screenshot_row.get("width") != PNG_DIMENSIONS[0] + or screenshot_row.get("height") != PNG_DIMENSIONS[1] + or script_row.get("path") != script_path.as_posix() + or script_row.get("sha256") != _sha256(script_content) + or script_row.get("size") != len(script_content) + ): + raise EvidenceError("pack capture attestation does not bind current inputs") + return PackCapture( + screenshot=screenshot, + rendered_dom=rendered_dom, + attestation=attestation, + document=document, + ) + + +def build_artifacts(*, allow_missing_screenshot: bool) -> dict[Path, bytes]: + verify_output, compact_output, pretty_output, document = _collect_cli() + report_content = _report_html(document, verify_output) + receipt = document["receipt"]["sha256"] + capture = _load_capture( + report_content, + receipt, + allow_missing=allow_missing_screenshot, + ) + generated = { + EVIDENCE_PATH: compact_output, + VERIFY_PATH: verify_output, + INSPECT_PATH: pretty_output, + REPORT_PATH: report_content, + LAYOUT_PATH: _layout_svg(document), + FANOUT_PATH: _fanout_svg(document), + INTEGRITY_PATH: _integrity_svg(document), + CLI_PATH: _cli_svg(document, verify_output), + } + roles = { + EVIDENCE_PATH: "canonical compact pack/index CLI evidence", + VERIFY_PATH: "exact pack-verify stdout", + INSPECT_PATH: "exact pretty pack-inspect stdout", + REPORT_PATH: "dependency-free pack/index offline report", + LAYOUT_PATH: "actual pack and index byte layout", + FANOUT_PATH: "actual index fanout ranges and sorted object IDs", + INTEGRITY_PATH: "pack/index integrity chain derived from the receipt", + CLI_PATH: "visualized exact pack-verify transcript", + } + artifact_rows = [ + _artifact_row(path, generated[path], roles[path]) for path in sorted(generated) + ] + capture_manifest: dict[str, Any] = { + "attestation": ATTESTATION_PATH.as_posix(), + "browser_binary": BROWSER_PATH, + "browser_sha256": BROWSER_SHA256, + "browser_version": BROWSER_VERSION, + "container_image": CONTAINER_IMAGE, + "network": "none", + "status": "not-attested", + "viewport": {"height": PNG_DIMENSIONS[1], "width": PNG_DIMENSIONS[0]}, + } + if capture is not None: + artifact_rows.extend( + ( + _artifact_row( + SCREENSHOT_PATH, + capture.screenshot, + "attested pack/index offline report browser capture", + ), + _artifact_row( + RENDERED_DOM_PATH, + capture.rendered_dom, + "actual DOM emitted during the pack report capture", + ), + _artifact_row( + ATTESTATION_PATH, + capture.attestation, + "pack capture provenance and isolation attestation", + ), + ) + ) + capture_manifest.update( + { + "attestation_receipt_sha256": capture.document["receipt"]["sha256"], + "rendered_dom_sha256": _sha256(capture.rendered_dom), + "screenshot_sha256": _sha256(capture.screenshot), + "status": "attested", + } + ) + artifact_rows.sort(key=lambda row: row["path"]) + manifest = { + "artifacts": artifact_rows, + "capture": capture_manifest, + "commands": [ + { + "argv": ["python3", "-B", "-m", "git_dag_lab", "pack-verify"], + "exit_code": 0, + "fresh_runs": 2, + "stderr_bytes": 0, + "stdout": VERIFY_PATH.as_posix(), + }, + { + "argv": [ + "python3", + "-B", + "-m", + "git_dag_lab", + "pack-inspect", + "--compact", + ], + "exit_code": 0, + "fresh_runs": 2, + "stderr_bytes": 0, + "stdout": EVIDENCE_PATH.as_posix(), + }, + { + "argv": ["python3", "-B", "-m", "git_dag_lab", "pack-inspect"], + "exit_code": 0, + "fresh_runs": 2, + "stderr_bytes": 0, + "stdout": INSPECT_PATH.as_posix(), + }, + ], + "report_receipt_sha256": receipt, + "schema_version": "git-pack-index-evidence-manifest/v1", + "sources": [ + _source_row(Path("git_dag_lab/pack.py")), + _source_row(Path("git_dag_lab/cli.py")), + _source_row(Path("tools/generate_pack_evidence.py")), + _source_row(Path("tools/capture_pack_report.sh")), + ], + } + generated[MANIFEST_PATH] = _json_bytes(manifest, pretty=True) + _validate_generated(generated, capture, allow_missing_screenshot) + return generated + + +def _validate_generated( + generated: Mapping[Path, bytes], + capture: PackCapture | None, + allow_missing_screenshot: bool, +) -> None: + manifest = json.loads(generated[MANIFEST_PATH]) + rows = {row["path"]: row for row in manifest["artifacts"]} + for path, content in generated.items(): + if path == MANIFEST_PATH: + continue + row = rows.get(path.as_posix()) + if row is None or row["sha256"] != _sha256(content) or row["size"] != len(content): + raise EvidenceError(f"pack manifest does not bind {path.as_posix()}") + if capture is not None: + external = { + SCREENSHOT_PATH: capture.screenshot, + RENDERED_DOM_PATH: capture.rendered_dom, + ATTESTATION_PATH: capture.attestation, + } + for path, content in external.items(): + row = rows.get(path.as_posix()) + if row is None or row["sha256"] != _sha256(content) or row["size"] != len(content): + raise EvidenceError(f"pack manifest does not bind {path.as_posix()}") + if manifest["capture"].get("status") != "attested": + raise EvidenceError("pack manifest omits its attested capture") + elif not allow_missing_screenshot: + raise EvidenceError("pack manifest has no required browser capture") + + receipt = manifest["report_receipt_sha256"] + for path in (LAYOUT_PATH, FANOUT_PATH, INTEGRITY_PATH, CLI_PATH, REPORT_PATH): + text = generated[path].decode("utf-8") + if receipt not in text: + raise EvidenceError(f"{path.as_posix()} is not receipt-bound") + without_namespace = text.replace("http://www.w3.org/2000/svg", "") + if ( + "https://" in without_namespace + or "http://" in without_namespace + or "/home/" in without_namespace + ): + raise EvidenceError(f"{path.as_posix()} contains an external reference") + for path in (LAYOUT_PATH, FANOUT_PATH, INTEGRITY_PATH, CLI_PATH): + text = generated[path].decode("utf-8") + if " argparse.ArgumentParser: + parser = argparse.ArgumentParser(description=__doc__) + action = parser.add_mutually_exclusive_group(required=True) + action.add_argument("--write", action="store_true", help="write generated evidence") + action.add_argument("--check", action="store_true", help="verify checked-in evidence") + parser.add_argument( + "--allow-missing-screenshot", + action="store_true", + help="permit the pre-capture package used by capture_pack_report.sh", + ) + return parser + + +def main(argv: Sequence[str] | None = None) -> int: + args = build_parser().parse_args(argv) + try: + generated = build_artifacts( + allow_missing_screenshot=args.allow_missing_screenshot + ) + if args.write: + _write_artifacts(generated) + else: + _check_artifacts(generated) + except EvidenceError as exc: + print(f"pack evidence error: {exc}", file=sys.stderr) + return 1 + action = "wrote" if args.write else "verified" + screenshot = "optional" if args.allow_missing_screenshot else "required" + print( + f"PASS pack-evidence {action} artifacts={len(generated)} " + f"screenshot={screenshot}" + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) From 413569e0cf03d0d139a051f2c88253c824f085f2 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 12:09:41 +0000 Subject: [PATCH 03/12] Stage pack evidence from a read-only runner --- .github/workflows/stage-pack-evidence.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/stage-pack-evidence.yml b/.github/workflows/stage-pack-evidence.yml index 71e4088..b8b9fa2 100644 --- a/.github/workflows/stage-pack-evidence.yml +++ b/.github/workflows/stage-pack-evidence.yml @@ -1,6 +1,9 @@ name: Stage pack evidence (temporary) on: + push: + branches: + - agent/pack-index-inspector workflow_dispatch: permissions: @@ -39,7 +42,10 @@ jobs: run: | set -euo pipefail test "$GITHUB_REPOSITORY" = "omar07ibrahim/hello-git" - test "$GITHUB_EVENT_NAME" = "workflow_dispatch" + case "$GITHUB_EVENT_NAME" in + push|workflow_dispatch) ;; + *) exit 1 ;; + esac test "$GITHUB_REF" = "refs/heads/agent/pack-index-inspector" test "$(git rev-parse HEAD)" = "$GITHUB_SHA" test "$(python -c 'import platform; print(platform.python_version())')" = "3.12.12" From f341ca3e95aa2ed8f58a47b6f006e701d4b6a35c Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 12:15:40 +0000 Subject: [PATCH 04/12] Bind pack capture to its PNG profile --- tests/test_pack_evidence.py | 2 +- tools/capture_pack_report.sh | 4 +- tools/generate_pack_evidence.py | 112 +++++++++++++++++++++++++++++++- 3 files changed, 113 insertions(+), 5 deletions(-) diff --git a/tests/test_pack_evidence.py b/tests/test_pack_evidence.py index 513aa31..7cf3a80 100644 --- a/tests/test_pack_evidence.py +++ b/tests/test_pack_evidence.py @@ -126,7 +126,7 @@ def test_offline_report_has_no_executable_or_external_content(self) -> None: def test_browser_capture_and_attestation_are_current(self) -> None: screenshot = (ROOT / evidence.SCREENSHOT_PATH).read_bytes() - self.assertEqual(evidence._parse_png(screenshot), evidence.PNG_DIMENSIONS) + self.assertEqual(evidence._parse_pack_png(screenshot), evidence.PNG_DIMENSIONS) attestation = json.loads((ROOT / evidence.ATTESTATION_PATH).read_text()) payload = attestation["attestation"] canonical = json.dumps( diff --git a/tools/capture_pack_report.sh b/tools/capture_pack_report.sh index b920854..9b09f7c 100755 --- a/tools/capture_pack_report.sh +++ b/tools/capture_pack_report.sh @@ -184,7 +184,7 @@ evidence_path = Path(sys.argv[2]) dom_path = Path(sys.argv[3]) output = Path(sys.argv[4]) sys.path.insert(0, str(repo_root)) -from tools.generate_evidence import _parse_png +from tools.generate_pack_evidence import _parse_pack_png document = json.loads(evidence_path.read_text(encoding="utf-8")) receipt = document["receipt"]["sha256"] @@ -207,7 +207,7 @@ expected = output / "git-pack-report.png" if entries != [expected] or not expected.is_file() or expected.is_symlink(): raise SystemExit("capture error: browser output inventory is invalid") content = expected.read_bytes() -if _parse_png(content) != (1440, 1500): +if _parse_pack_png(content) != (1440, 1500): raise SystemExit("capture error: pack screenshot dimensions are invalid") PY diff --git a/tools/generate_pack_evidence.py b/tools/generate_pack_evidence.py index ba50342..0655659 100755 --- a/tools/generate_pack_evidence.py +++ b/tools/generate_pack_evidence.py @@ -12,9 +12,11 @@ import os from pathlib import Path import re +import struct import subprocess import sys from typing import Any +import zlib ROOT = Path(__file__).resolve().parents[1] if os.fspath(ROOT) not in sys.path: @@ -26,10 +28,10 @@ BROWSER_VERSION, CONTAINER_IMAGE, EvidenceError, + MAX_PNG_BYTES, _artifact_row, _check_artifacts, _json_bytes, - _parse_png, _safe_capture_bytes, _sha256, _source_row, @@ -64,6 +66,112 @@ class PackCapture: document: Mapping[str, Any] +def _parse_pack_png(content: bytes) -> tuple[int, int]: + """Validate the complete pack-report PNG before trusting image metadata.""" + + if len(content) > MAX_PNG_BYTES: + raise EvidenceError("pack browser capture exceeds the PNG size limit") + if len(content) < 57 or not content.startswith(b"\x89PNG\r\n\x1a\n"): + raise EvidenceError("pack browser capture is not a complete PNG") + + offset = 8 + chunk_index = 0 + width = height = 0 + idat_payloads: list[bytes] = [] + saw_iend = False + while offset < len(content): + if len(content) - offset < 12: + raise EvidenceError("pack PNG chunk header is truncated") + length = struct.unpack(">I", content[offset : offset + 4])[0] + chunk_type = content[offset + 4 : offset + 8] + chunk_end = offset + 12 + length + if chunk_end > len(content): + raise EvidenceError("pack PNG chunk payload is truncated") + if len(chunk_type) != 4 or not all( + 65 <= byte <= 90 or 97 <= byte <= 122 for byte in chunk_type + ): + raise EvidenceError("pack PNG chunk type is malformed") + payload = content[offset + 8 : offset + 8 + length] + expected_crc = struct.unpack(">I", content[offset + 8 + length : chunk_end])[0] + actual_crc = zlib.crc32(chunk_type + payload) & 0xFFFFFFFF + if expected_crc != actual_crc: + raise EvidenceError("pack PNG chunk CRC does not match") + + if chunk_index == 0: + if chunk_type != b"IHDR" or length != 13: + raise EvidenceError("pack PNG does not start with one 13-byte IHDR") + width, height, bit_depth, color_type, compression, filtering, interlace = ( + struct.unpack(">IIBBBBB", payload) + ) + if ( + (width, height) != PNG_DIMENSIONS + or bit_depth != 8 + or color_type != 2 + or compression != 0 + or filtering != 0 + or interlace != 0 + ): + raise EvidenceError( + "pack PNG IHDR differs from the pinned Chromium profile" + ) + elif chunk_type == b"IDAT": + idat_payloads.append(payload) + elif chunk_type != b"IEND": + raise EvidenceError( + "pack PNG contains a chunk outside the pinned Chromium profile" + ) + + offset = chunk_end + chunk_index += 1 + if chunk_type == b"IEND": + if length != 0: + raise EvidenceError("pack PNG IEND chunk is not empty") + saw_iend = True + break + + if not idat_payloads or not saw_iend: + raise EvidenceError("pack PNG lacks IDAT or terminal IEND") + if offset != len(content): + raise EvidenceError("pack PNG has trailing bytes after IEND") + + scanline_size = 1 + width * 3 + expected_decoded_size = height * scanline_size + decoder = zlib.decompressobj() + decoded = bytearray() + try: + for index, payload in enumerate(idat_payloads): + if decoder.eof: + raise EvidenceError( + "pack PNG contains IDAT data after the zlib stream ended" + ) + remaining = expected_decoded_size + 1 - len(decoded) + if remaining <= 0: + raise EvidenceError("pack PNG scanline stream exceeds the expected size") + decoded.extend(decoder.decompress(payload, remaining)) + if decoder.unconsumed_tail or decoder.unused_data: + raise EvidenceError("pack PNG zlib stream has excess compressed data") + if decoder.eof and index != len(idat_payloads) - 1: + raise EvidenceError( + "pack PNG zlib stream ended before the final IDAT" + ) + remaining = expected_decoded_size + 1 - len(decoded) + if remaining <= 0: + raise EvidenceError("pack PNG scanline stream exceeds the expected size") + decoded.extend(decoder.flush(remaining)) + except zlib.error as exc: + raise EvidenceError("pack PNG IDAT payload is not a valid zlib stream") from exc + if ( + not decoder.eof + or decoder.unused_data + or decoder.unconsumed_tail + or len(decoded) != expected_decoded_size + ): + raise EvidenceError("pack PNG scanline stream is incomplete or has the wrong size") + if any(decoded[row * scanline_size] > 4 for row in range(height)): + raise EvidenceError("pack PNG contains an invalid scanline filter byte") + return width, height + + def _run_cli(arguments: Sequence[str]) -> bytes: environment = { "LANG": "C.UTF-8", @@ -487,7 +595,7 @@ def _load_capture( screenshot = _safe_capture_bytes(SCREENSHOT_PATH, "pack screenshot") rendered_dom = _safe_capture_bytes(RENDERED_DOM_PATH, "pack rendered DOM") attestation = _safe_capture_bytes(ATTESTATION_PATH, "pack capture attestation") - if _parse_png(screenshot) != PNG_DIMENSIONS: + if _parse_pack_png(screenshot) != PNG_DIMENSIONS: raise EvidenceError("pack screenshot dimensions differ from the contract") try: dom_text = rendered_dom.decode("utf-8") From 6dab930e36adb1277acbf2c43e0a2d0039b4f363 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 12:17:51 +0000 Subject: [PATCH 05/12] Clarify verified pack evidence boundaries --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e7ecd8a..96291cd 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ The verifier does not trust the pack filename or Git's index. It parses the vari ![Receipt-derived integrity chain from pack header through index checksum](docs/assets/git-pack-integrity.svg) -This is deliberately a closed subset: pack v2 and index v2, at most 64 objects, 1 MiB files, 256 KiB expanded objects, and non-delta entries only. OFS/REF deltas, other object formats, arbitrary repositories, reachability, and pack optimization are not claimed. SHA-1 and CRC32 model Git storage integrity here; neither is presented as authentication, a signature, or collision-resistant security. +This is deliberately a closed subset: pack v2 and index v2, at most 64 objects, 1 MiB files, 256 KiB expanded objects, and non-delta entries only. Delta entries (OFS/REF), other object formats, arbitrary repositories, reachability, and pack optimization are not claimed. SHA-1 and CRC32 model Git storage integrity here; neither is presented as authentication, a signature, or collision-resistant security. ## The hard part: verify Git without trusting Git @@ -103,7 +103,7 @@ tools/capture_pack_report.sh python3 -W error -m unittest discover -s tests -v ``` -Current verified baseline: **89 tests**, **9/9 graph invariants**, **7/7 pack/index checks**, 57 isolated Git invocations in the DAG evidence run, two independently replayed evidence packages, and two attested offline browser captures. +Current verified baseline: **89 tests**, **9/9 graph invariants**, **7/7 pack/index checks**, **57 isolated Git invocations** in the DAG evidence run, two independently replayed evidence packages, and two attested offline browser captures. | Artifact | What it proves | |---|---| From fea0ae1750c547a8c79cca2c3d4b916d20a2156c Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 12:20:29 +0000 Subject: [PATCH 06/12] Bind README metrics to current evidence --- README.md | 2 +- tests/test_evidence.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 96291cd..1abe18f 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ The experiment demonstrates a subtle but important property: a merge commit and ![Real offline Git DAG evidence report showing the verified graph, checks, CLI receipt, and object envelope](docs/assets/git-dag-report.png) -

    Attested 1440×1800 Chromium capture of the checked-in offline report. No external assets, JavaScript, network, secrets, or host-repository data.

    +

    Attested 1440×1800 Chromium capture of the checked-in offline report. Report receipt `2da1ccd8…69c84`; screenshot SHA-256 `e539db11…e17e`. No external assets, JavaScript, network, secrets, or host-repository data.

    ## Quick start diff --git a/tests/test_evidence.py b/tests/test_evidence.py index aed73dc..7b1c48e 100644 --- a/tests/test_evidence.py +++ b/tests/test_evidence.py @@ -244,7 +244,7 @@ def test_readme_baseline_matches_current_evidence(self) -> None: self.assertIn("**57 isolated Git invocations**", readme) self.assertIn(f"report receipt `{receipt_label}`", readme) self.assertIn(f"screenshot SHA-256 `{screenshot_label}`", readme) - self.assertIn("10 local subcommands are allow-listed", readme) + self.assertIn("11 local subcommands are allow-listed", readme) if __name__ == "__main__": From 5d8d55aee46ebb8c838b9160a7350cdcd2e9199f Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 12:22:33 +0000 Subject: [PATCH 07/12] Clarify evidence provenance caption --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1abe18f..b6dedc3 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ The experiment demonstrates a subtle but important property: a merge commit and ![Real offline Git DAG evidence report showing the verified graph, checks, CLI receipt, and object envelope](docs/assets/git-dag-report.png) -

    Attested 1440×1800 Chromium capture of the checked-in offline report. Report receipt `2da1ccd8…69c84`; screenshot SHA-256 `e539db11…e17e`. No external assets, JavaScript, network, secrets, or host-repository data.

    +

    Attested 1440×1800 Chromium capture of the checked-in offline report. Provenance: report receipt `2da1ccd8…69c84`; screenshot SHA-256 `e539db11…e17e`. No external assets, JavaScript, network, secrets, or host-repository data.

    ## Quick start From 6f370b49c779343748fb965a00a5d8cce865ba5d Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 12:27:45 +0000 Subject: [PATCH 08/12] Bind pack visuals to the correct evidence source --- tests/test_pack_evidence.py | 4 ++++ tools/generate_pack_evidence.py | 33 ++++++++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/tests/test_pack_evidence.py b/tests/test_pack_evidence.py index 7cf3a80..7555e2f 100644 --- a/tests/test_pack_evidence.py +++ b/tests/test_pack_evidence.py @@ -111,6 +111,10 @@ def test_svg_visuals_are_accessible_and_receipt_bound(self) -> None: self.assertIn(" str: + """Build an SVG header whose provenance names the pack evidence source.""" + + metadata = dict(metadata_extra or {}) + metadata["source"] = EVIDENCE_PATH.as_posix() + return _base_svg_header( + title, + description, + width=width, + height=height, + receipt=receipt, + metadata_extra=metadata, + ) + + def _parse_pack_png(content: bytes) -> tuple[int, int]: """Validate the complete pack-report PNG before trusting image metadata.""" @@ -325,7 +348,7 @@ def _layout_svg(document: Mapping[str, Any]) -> bytes: width = 1_330 colors = ("#59e3c2", "#bd7cff", "#55a8ff") parts = [ - _svg_header( + _pack_svg_header( "Actual Git pack v2 and index v2 byte layout", "Byte offsets and section sizes are derived from the real production pack receipt.", width=1440, @@ -407,7 +430,7 @@ def _fanout_svg(document: Mapping[str, Any]) -> bytes: row["prefix"]: row for row in report["index"]["nonzero_fanout_buckets"] } parts = [ - _svg_header( + _pack_svg_header( "Actual index v2 fanout lookup", "The three populated prefix buckets, sorted object IDs, and exact index ranges come from the verified index receipt.", width=1440, @@ -454,7 +477,7 @@ def _integrity_svg(document: Mapping[str, Any]) -> bytes: ("INDEX CHECKSUM", index["index_sha1"]), ) parts = [ - _svg_header( + _pack_svg_header( "Independent pack/index integrity chain", "The production verifier reconstructs each logical object, checks entry CRCs and offsets, then binds both file checksums.", width=1440, @@ -495,7 +518,7 @@ def _cli_svg(document: Mapping[str, Any], verify_output: bytes) -> bytes: before_receipt, receipt_digest = transcript.rsplit(" receipt_sha256=", 1) before_pack, pack_digest = before_receipt.rsplit("pack_sha1=", 1) parts = [ - _svg_header( + _pack_svg_header( "Real Git pack/index CLI receipt", "Exact stdout from pack-verify; the command executed real git pack-objects and independently checked both files.", width=1440, From 054e6c013024bbbe7acd633469f6e713f40e98f8 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 12:30:04 +0000 Subject: [PATCH 09/12] Parse SVG provenance metadata in evidence tests --- tests/test_pack_evidence.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/test_pack_evidence.py b/tests/test_pack_evidence.py index 7555e2f..ccb03e7 100644 --- a/tests/test_pack_evidence.py +++ b/tests/test_pack_evidence.py @@ -111,10 +111,14 @@ def test_svg_visuals_are_accessible_and_receipt_bound(self) -> None: self.assertIn("", 1)[1].split("", 1)[0] ) + self.assertEqual( + metadata["source"], + evidence.EVIDENCE_PATH.as_posix(), + ) + self.assertEqual(metadata["report_receipt_sha256"], receipt) self.assertNotIn("/home/", text) self.assertNotIn("github.com/", text) From d92dc14d9b6300975254a2237409026d5ecc5fd6 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 12:33:17 +0000 Subject: [PATCH 10/12] Generate reproducible Git pack evidence --- README.md | 2 + docs/assets/git-pack-cli.svg | 29 ++++ docs/assets/git-pack-fanout.svg | 45 ++++++ docs/assets/git-pack-integrity.svg | 54 +++++++ docs/assets/git-pack-layout.svg | 63 ++++++++ docs/assets/git-pack-report.png | Bin 0 -> 590359 bytes docs/demo/git-dag-v1/manifest.json | 8 +- .../capture-attestation.json | 60 +++++++ docs/demo/git-pack-index-v1/inspect.json | 127 +++++++++++++++ docs/demo/git-pack-index-v1/manifest.json | 152 ++++++++++++++++++ docs/demo/git-pack-index-v1/rendered-dom.html | 33 ++++ docs/demo/git-pack-index-v1/report.html | 33 ++++ docs/demo/git-pack-index-v1/verify.txt | 1 + evidence/git-pack-index-v1.json | 1 + 14 files changed, 604 insertions(+), 4 deletions(-) create mode 100644 docs/assets/git-pack-cli.svg create mode 100644 docs/assets/git-pack-fanout.svg create mode 100644 docs/assets/git-pack-integrity.svg create mode 100644 docs/assets/git-pack-layout.svg create mode 100644 docs/assets/git-pack-report.png create mode 100644 docs/demo/git-pack-index-v1/capture-attestation.json create mode 100644 docs/demo/git-pack-index-v1/inspect.json create mode 100644 docs/demo/git-pack-index-v1/manifest.json create mode 100644 docs/demo/git-pack-index-v1/rendered-dom.html create mode 100644 docs/demo/git-pack-index-v1/report.html create mode 100644 docs/demo/git-pack-index-v1/verify.txt create mode 100644 evidence/git-pack-index-v1.json diff --git a/README.md b/README.md index b6dedc3..f130758 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,8 @@ The offline report is rendered from the same canonical receipt and captured by d ![Actual pinned-Chromium screenshot of the verified pack v2 and index v2 report](docs/assets/git-pack-report.png) +

    Attested 1440×1500 Chromium capture. Provenance: pack report receipt `a884aed4…a81b0`; screenshot SHA-256 `ad1f615d…4d63`. Three deterministic synthetic blobs; no delta support, arbitrary-repository compatibility, authentication, network, or host data.

    + The verifier does not trust the pack filename or Git's index. It parses the variable-length pack entry headers, bounds each zlib stream, reconstructs logical blob IDs, verifies the pack trailer, then parses the 256-entry cumulative fanout table, sorted OIDs, CRC32 rows, 32/64-bit offsets, pack binding, and index checksum. ![Actual byte offsets and sizes decoded from the generated pack and index](docs/assets/git-pack-layout.svg) diff --git a/docs/assets/git-pack-cli.svg b/docs/assets/git-pack-cli.svg new file mode 100644 index 0000000..31d1063 --- /dev/null +++ b/docs/assets/git-pack-cli.svg @@ -0,0 +1,29 @@ + + Real Git pack/index CLI receipt + Exact stdout from pack-verify; the command executed real git pack-objects and independently checked both files. + {"report_receipt_sha256":"a884aed43dbb027559f6df78ff727863b9b52b145ffb719756b2302a490a81b0","source":"evidence/git-pack-index-v1.json"} + + + + + + + + REAL CLI STDOUT · STDERR 0 BYTES · EXIT 0 + + + $ python3 -B -m git_dag_lab pack-verify + PASS git-pack-index-lab/v1 objects=3 pack_version=2 index_version=2 deltas=0 + pack_sha1=146ea7519b9beee2ef83e6c0d5cb80c8cf0593b5 + receipt_sha256=a884aed43dbb027559f6df78ff727863b9b52b145ffb719756b2302a490a81b0 + verify.txt SHA-256 · ccab273b6f07dc72a28ad3e1065545e6bd535f766d96ad6c3dad273eea432f31 + Report receipt SHA-256 · a884aed43dbb027559f6df78ff727863b9b52b145ffb719756b2302a490a81b0 + diff --git a/docs/assets/git-pack-fanout.svg b/docs/assets/git-pack-fanout.svg new file mode 100644 index 0000000..9c76cf8 --- /dev/null +++ b/docs/assets/git-pack-fanout.svg @@ -0,0 +1,45 @@ + + Actual index v2 fanout lookup + The three populated prefix buckets, sorted object IDs, and exact index ranges come from the verified index receipt. + {"report_receipt_sha256":"a884aed43dbb027559f6df78ff727863b9b52b145ffb719756b2302a490a81b0","source":"evidence/git-pack-index-v1.json"} + + + + + + + + 256-BUCKET CUMULATIVE FANOUT · THREE ACTUAL OBJECT IDS + Prefix lookup narrows the sorted OID table. + + PREFIX ac + [0, 1) + + + content-addressing · blob · 26 bytes + ac0913a01c3a10dbcdf22143ad8f53d015774ff7 + + PREFIX fd + [1, 2) + + + index-fanout · blob · 60 bytes + fda2e7ba229f29298234d2568c24b04c04e603df + + PREFIX fe + [2, 3) + + + binary-header · blob · 32 bytes + fefa1cc823e0ec463b7923972b03901b52808fc1 + + Every displayed bucket and range is decoded from index bytes · receipt a884aed43dbb027559f6df78ff727863b9b52b145ffb719756b2302a490a81b0 + diff --git a/docs/assets/git-pack-integrity.svg b/docs/assets/git-pack-integrity.svg new file mode 100644 index 0000000..e51e47b --- /dev/null +++ b/docs/assets/git-pack-integrity.svg @@ -0,0 +1,54 @@ + + Independent pack/index integrity chain + The production verifier reconstructs each logical object, checks entry CRCs and offsets, then binds both file checksums. + {"report_receipt_sha256":"a884aed43dbb027559f6df78ff727863b9b52b145ffb719756b2302a490a81b0","source":"evidence/git-pack-index-v1.json"} + + + + + + + + GIT WRITES · PYTHON INDEPENDENTLY READS · NO MODELLED SUCCESS + Five checks connect raw bytes to one receipt. + + 01 + PACK HEADER + v2 · 3 objects + PASS + + + 02 + ENTRY STREAMS + bounded zlib · logic… + PASS + + + 03 + INDEX ROWS + CRC32 · exact offsets + PASS + + + 04 + PACK BINDING + 146ea7519b9beee2ef83… + PASS + + + 05 + INDEX CHECKSUM + 3cb00d5dd06610c624be… + PASS + + 3/3 CRC32 and offsets cross-match · 0 deltas accepted · pack SHA-1 146ea7519b9beee2ef83e6c0d5cb80c8cf0593b5 + SHA-1 models Git object storage; authentication claim = false · receipt a884aed43dbb027559f6df78ff727863b9b52b145ffb719756b2302a490a81b0 + diff --git a/docs/assets/git-pack-layout.svg b/docs/assets/git-pack-layout.svg new file mode 100644 index 0000000..df605e5 --- /dev/null +++ b/docs/assets/git-pack-layout.svg @@ -0,0 +1,63 @@ + + Actual Git pack v2 and index v2 byte layout + Byte offsets and section sizes are derived from the real production pack receipt. + {"index_sha256":"c4f82d0cb1685f3d3b268575152993408c0ee4f00de346a3482b06c6fe59eebc","pack_sha256":"d8c8d5db126731f265cdcfe17212022001a117d6e7c2300b7939a25b93cb4052","report_receipt_sha256":"a884aed43dbb027559f6df78ff727863b9b52b145ffb719756b2302a490a81b0","source":"evidence/git-pack-index-v1.json"} + + + + + + + + REAL PACK V2 · ACTUAL OFFSETS · THREE NON-DELTA BLOBS + 189 pack bytes, independently decoded + + + PACK + + 01 · content-addressing + offset 12 + 39 bytes + + 02 · index-fanout + offset 51 + 73 bytes + + 03 · binary-header + offset 124 + 45 bytes + + SHA-1 + 20 B + INDEX V2 FIXED TABLES + + header + 8 B + + fanout[256] + 1024 B + + sorted OIDs + 60 B + + CRC32 + 12 B + + offsets + 12 B + + checksums + 40 B + + Pack trailer SHA-1 · 146ea7519b9beee2ef83e6c0d5cb80c8cf0593b5 + Index SHA-1 · 3cb00d5dd06610c624befb4e9e1b40f9cdbf9dfa · binds the same pack checksum + Receipt SHA-256 · a884aed43dbb027559f6df78ff727863b9b52b145ffb719756b2302a490a81b0 + diff --git a/docs/assets/git-pack-report.png b/docs/assets/git-pack-report.png new file mode 100644 index 0000000000000000000000000000000000000000..cd58caeb89b1fe7d393eb80308e3aeca004f560e GIT binary patch literal 590359 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

    G+k-NM@cz*cBB|K!`@fckEh-o=)udXu- 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

    70}i-55MJ0K_iB-!Mg>NCrh{F?{AWnp!^KdO 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

    31QfOLB!CW8}_6GlJ`)vku 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