From 7cc6dbc605a8e4321a0b3418710e868567a5cdf7 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 14:37:07 +0000 Subject: [PATCH 01/11] Decode bounded OFS delta entries --- git_dag_lab/pack.py | 297 +++++++++++++++++++++++++++++++++++++---- tests/test_pack_lab.py | 226 +++++++++++++++++++++++++++++++ 2 files changed, 494 insertions(+), 29 deletions(-) diff --git a/git_dag_lab/pack.py b/git_dag_lab/pack.py index 606b50b..79d5b09 100644 --- a/git_dag_lab/pack.py +++ b/git_dag_lab/pack.py @@ -1,8 +1,8 @@ """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. +The baseline fixture uses real ``git pack-objects`` output and validates pack +v2/index v2 bytes with Python's standard library. The parser additionally +supports a bounded OFS_DELTA subset; REF_DELTA remains explicitly rejected. """ from __future__ import annotations @@ -41,6 +41,11 @@ MAX_PACK_BYTES = 1_048_576 MAX_PACK_OBJECTS = 64 MAX_OBJECT_BYTES = 262_144 +MAX_DELTA_DEPTH = 4 +MAX_DELTA_INSTRUCTIONS = 4_096 +MAX_DELTA_SIZE_BYTES = 5 +MAX_OFS_OFFSET_BYTES = 8 +MAX_TOTAL_EXPANDED_BYTES = 4_194_304 PACK_BLOBS = ( ("binary-header", bytes(range(32))), @@ -51,11 +56,12 @@ ), ) _TYPE_BY_CODE = {1: "commit", 2: "tree", 3: "blob", 4: "tag"} +_ENTRY_KIND_BY_CODE = {**_TYPE_BY_CODE, 6: "ofs-delta"} @dataclass(frozen=True, slots=True) class PackEntry: - """One independently decoded non-delta pack entry.""" + """One independently decoded full or OFS-delta pack entry.""" crc32: int object_type: str @@ -64,9 +70,14 @@ class PackEntry: packed_size: int payload_sha256: str size: int + base_offset: int | None = None + base_oid: str | None = None + delta_depth: int = 0 + representation: str = "full" + stored_size: int = 0 def as_dict(self) -> dict[str, object]: - return { + payload: dict[str, object] = { "crc32": f"{self.crc32:08x}", "object_type": self.object_type, "offset": self.offset, @@ -75,6 +86,17 @@ def as_dict(self) -> dict[str, object]: "payload_sha256": self.payload_sha256, "size": self.size, } + if self.representation != "full": + payload.update( + { + "base_offset": self.base_offset, + "base_oid": self.base_oid, + "delta_depth": self.delta_depth, + "representation": self.representation, + "stored_size": self.stored_size, + } + ) + return payload @dataclass(frozen=True, slots=True) @@ -86,6 +108,16 @@ class ParsedPack: version: int +@dataclass(frozen=True, slots=True) +class _ResolvedObject: + """One bounded canonical object available as a delta base.""" + + depth: int + object_type: str + oid: str + payload: bytes + + @dataclass(frozen=True, slots=True) class IndexEntry: """One verified index v2 row.""" @@ -228,9 +260,9 @@ def _decode_entry_header( 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") + if type_code == 7: + raise VerificationError("REF_DELTA pack entries are outside the reviewed subset") + if type_code not in _ENTRY_KIND_BY_CODE: raise VerificationError("pack entry type is invalid") size = first & 0x0F @@ -244,8 +276,180 @@ def _decode_entry_header( 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 + raise VerificationError("pack entry data exceeds the reviewed bound") + return _ENTRY_KIND_BY_CODE[type_code], size, offset + + +def _inflate_entry( + content: bytes, + offset: int, + *, + declared_size: int, + end: int, +) -> tuple[bytes, int]: + source = content[offset:end] + inflater = zlib.decompressobj() + try: + payload = inflater.decompress(source, declared_size + 1) + except zlib.error as exc: + raise VerificationError("pack entry zlib stream is invalid") from exc + if len(payload) > declared_size: + raise VerificationError("pack entry expands beyond its declared size") + if not inflater.eof or inflater.unconsumed_tail: + raise VerificationError("pack entry zlib stream is incomplete or oversized") + consumed = len(source) - len(inflater.unused_data) + if consumed < 1: + raise VerificationError("pack entry has an empty zlib stream") + next_offset = offset + consumed + if next_offset > end or len(payload) != declared_size: + raise VerificationError("pack entry size does not match its payload") + return payload, next_offset + + +def _encode_ofs_distance(distance: int) -> bytes: + if distance < 1: + raise ValueError("OFS_DELTA distance must be positive") + encoded = bytearray((distance & 0x7F,)) + remaining = distance + while remaining >> 7: + remaining = (remaining >> 7) - 1 + encoded.append(0x80 | (remaining & 0x7F)) + encoded.reverse() + return bytes(encoded) + + +def _decode_ofs_base_offset( + content: bytes, + offset: int, + *, + end: int, + entry_offset: int, +) -> tuple[int, int]: + start = offset + if offset >= end: + raise VerificationError("OFS_DELTA base offset is truncated") + current = content[offset] + offset += 1 + distance = current & 0x7F + while current & 0x80: + if offset >= end or offset - start >= MAX_OFS_OFFSET_BYTES: + raise VerificationError("OFS_DELTA base offset is malformed") + current = content[offset] + offset += 1 + distance = ((distance + 1) << 7) | (current & 0x7F) + if distance > MAX_PACK_BYTES: + raise VerificationError("OFS_DELTA base offset exceeds the pack bound") + encoded = content[start:offset] + if distance < 1 or encoded != _encode_ofs_distance(distance): + raise VerificationError("OFS_DELTA base offset is non-canonical") + base_offset = entry_offset - distance + if base_offset < 12 or base_offset >= entry_offset: + raise VerificationError("OFS_DELTA base offset is out of bounds") + return base_offset, offset + + +def _encode_delta_size(value: int) -> bytes: + if value < 0: + raise ValueError("delta size must be non-negative") + encoded = bytearray() + remaining = value + while True: + current = remaining & 0x7F + remaining >>= 7 + if remaining: + current |= 0x80 + encoded.append(current) + if not remaining: + return bytes(encoded) + + +def _decode_delta_size( + program: bytes, + offset: int, + *, + label: str, +) -> tuple[int, int]: + start = offset + value = 0 + shift = 0 + while True: + if offset >= len(program) or offset - start >= MAX_DELTA_SIZE_BYTES: + raise VerificationError(f"{label} is truncated or oversized") + current = program[offset] + offset += 1 + value |= (current & 0x7F) << shift + if value > MAX_OBJECT_BYTES: + raise VerificationError(f"{label} exceeds the reviewed bound") + if not current & 0x80: + break + shift += 7 + if program[start:offset] != _encode_delta_size(value): + raise VerificationError(f"{label} is non-canonical") + return value, offset + + +def _apply_delta(base: bytes, program: bytes) -> bytes: + if type(base) is not bytes or type(program) is not bytes: + raise VerificationError("delta inputs must be exact bytes") + base_size, offset = _decode_delta_size( + program, + 0, + label="delta base size", + ) + result_size, offset = _decode_delta_size( + program, + offset, + label="delta result size", + ) + if base_size != len(base): + raise VerificationError("delta base size does not match its object") + if result_size > MAX_OBJECT_BYTES: + raise VerificationError("delta result exceeds the reviewed bound") + + output = bytearray() + instructions = 0 + while offset < len(program): + instructions += 1 + if instructions > MAX_DELTA_INSTRUCTIONS: + raise VerificationError("delta instruction count exceeds the reviewed bound") + opcode = program[offset] + offset += 1 + if opcode & 0x80: + copy_offset = 0 + copy_size = 0 + for bit, shift in ((0x01, 0), (0x02, 8), (0x04, 16), (0x08, 24)): + if opcode & bit: + if offset >= len(program): + raise VerificationError("delta copy offset is truncated") + copy_offset |= program[offset] << shift + offset += 1 + for bit, shift in ((0x10, 0), (0x20, 8), (0x40, 16)): + if opcode & bit: + if offset >= len(program): + raise VerificationError("delta copy size is truncated") + copy_size |= program[offset] << shift + offset += 1 + if copy_size == 0: + copy_size = 0x10000 + if copy_offset > len(base) or copy_size > len(base) - copy_offset: + raise VerificationError("delta copy range exceeds its base object") + if copy_size > result_size - len(output): + raise VerificationError("delta copy exceeds its declared result") + output.extend(base[copy_offset : copy_offset + copy_size]) + elif opcode: + literal_size = opcode & 0x7F + literal_end = offset + literal_size + if literal_end > len(program): + raise VerificationError("delta literal is truncated") + if literal_size > result_size - len(output): + raise VerificationError("delta literal exceeds its declared result") + output.extend(program[offset:literal_end]) + offset = literal_end + else: + raise VerificationError("delta opcode zero is reserved") + if len(output) != result_size: + raise VerificationError("delta result size does not match its instructions") + return bytes(output) def parse_pack(content: bytes) -> ParsedPack: @@ -274,37 +478,65 @@ def parse_pack(content: bytes) -> ParsedPack: entries: list[PackEntry] = [] offset = 12 seen: set[str] = set() + resolved_by_offset: dict[int, _ResolvedObject] = {} + expanded_bytes = 0 for _ in range(count): entry_start = offset - object_type, declared_size, payload_start = _decode_entry_header( + entry_kind, 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, + base_offset: int | None = None + base_oid: str | None = None + depth = 0 + representation = "full" + if entry_kind == "ofs-delta": + base_offset, payload_start = _decode_ofs_base_offset( + content, + payload_start, + end=pack_end, + entry_offset=entry_start, ) - 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") + stored_payload, offset = _inflate_entry( + content, + payload_start, + declared_size=declared_size, + end=pack_end, + ) + + if entry_kind == "ofs-delta": + assert base_offset is not None + base = resolved_by_offset.get(base_offset) + if base is None: + raise VerificationError( + "OFS_DELTA base is not an earlier pack-entry boundary" + ) + depth = base.depth + 1 + if depth > MAX_DELTA_DEPTH: + raise VerificationError("OFS_DELTA chain exceeds the reviewed depth") + payload = _apply_delta(base.payload, stored_payload) + object_type = base.object_type + base_oid = base.oid + representation = entry_kind + else: + payload = stored_payload + object_type = entry_kind + expanded_bytes += len(payload) + if expanded_bytes > MAX_TOTAL_EXPANDED_BYTES: + raise VerificationError("pack expands beyond the aggregate reviewed bound") 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] + resolved_by_offset[entry_start] = _ResolvedObject( + depth=depth, + object_type=object_type, + oid=oid, + payload=payload, + ) entries.append( PackEntry( crc32=binascii.crc32(packed) & 0xFFFFFFFF, @@ -314,6 +546,11 @@ def parse_pack(content: bytes) -> ParsedPack: packed_size=len(packed), payload_sha256=hashlib.sha256(payload).hexdigest(), size=len(payload), + base_offset=base_offset, + base_oid=base_oid, + delta_depth=depth, + representation=representation, + stored_size=declared_size, ) ) if offset != pack_end: @@ -324,7 +561,6 @@ def parse_pack(content: bytes) -> ParsedPack: version=version, ) - def _expected_fanout(oids: tuple[str, ...]) -> tuple[int, ...]: counts = [0] * 256 for oid in oids: @@ -597,7 +833,10 @@ def run_pack_lab(root: Path | str = ".") -> PackReport: __all__ = [ "INDEX_VERSION", + "MAX_DELTA_DEPTH", + "MAX_DELTA_INSTRUCTIONS", "MAX_OBJECT_BYTES", + "MAX_TOTAL_EXPANDED_BYTES", "MAX_PACK_BYTES", "MAX_PACK_OBJECTS", "PACK_SCHEMA_VERSION", diff --git a/tests/test_pack_lab.py b/tests/test_pack_lab.py index 8a4c843..efa87dd 100644 --- a/tests/test_pack_lab.py +++ b/tests/test_pack_lab.py @@ -17,7 +17,11 @@ from git_dag_lab.pack import ( INDEX_MAGIC, INDEX_VERSION, + MAX_DELTA_DEPTH, + MAX_DELTA_INSTRUCTIONS, + MAX_OBJECT_BYTES, MAX_PACK_BYTES, + MAX_TOTAL_EXPANDED_BYTES, PACK_MAGIC, PACK_SCHEMA_VERSION, PACK_VERSION, @@ -69,6 +73,68 @@ def _resign_index(prefix: bytes) -> bytes: return prefix + hashlib.sha1(prefix, usedforsecurity=False).digest() +def _delta_size(value: int) -> bytes: + output = bytearray() + while True: + current = value & 0x7F + value >>= 7 + if value: + current |= 0x80 + output.append(current) + if not value: + return bytes(output) + + +def _ofs_distance(distance: int) -> bytes: + output = bytearray((distance & 0x7F,)) + while distance >> 7: + distance = (distance >> 7) - 1 + output.append(0x80 | (distance & 0x7F)) + output.reverse() + return bytes(output) + + +def _copy_instruction(*, offset: int = 0, size: int) -> bytes: + command = 0x80 + parameters = bytearray() + for bit, shift in ((0x01, 0), (0x02, 8), (0x04, 16), (0x08, 24)): + value = (offset >> shift) & 0xFF + if value: + command |= bit + parameters.append(value) + if size != 0x10000: + for bit, shift in ((0x10, 0), (0x20, 8), (0x40, 16)): + value = (size >> shift) & 0xFF + if value: + command |= bit + parameters.append(value) + return bytes((command,)) + bytes(parameters) + + +def _program(base_size: int, result_size: int, instructions: bytes) -> bytes: + return _delta_size(base_size) + _delta_size(result_size) + instructions + + +def _build_ofs_pack( + base_payload: bytes, + deltas: tuple[tuple[int, bytes], ...], +) -> tuple[bytes, tuple[int, ...]]: + body = bytearray(PACK_MAGIC) + body.extend(PACK_VERSION.to_bytes(4, "big")) + body.extend((1 + len(deltas)).to_bytes(4, "big")) + offsets = [len(body)] + body.extend(_entry_header(3, len(base_payload))) + body.extend(zlib.compress(base_payload, level=9)) + for base_index, program in deltas: + entry_offset = len(body) + distance = entry_offset - offsets[base_index] + body.extend(_entry_header(6, len(program))) + body.extend(_ofs_distance(distance)) + body.extend(zlib.compress(program, level=9)) + offsets.append(entry_offset) + return _resign_pack(bytes(body)), tuple(offsets) + + def _build_index( rows: list[dict[str, int | str]], pack_sha1: str, @@ -120,6 +186,166 @@ def test_decodes_real_envelopes_and_verifies_trailer(self) -> None: self.assertEqual(entry.payload_sha256, hashlib.sha256(payload).hexdigest()) self.assertGreater(entry.packed_size, 1) + def test_decodes_bounded_ofs_delta_copy_and_insert(self) -> None: + base = b"bounded base\n" + target = base + b"delta\n" + program = _program( + len(base), + len(target), + _copy_instruction(size=len(base)) + bytes((6,)) + b"delta\n", + ) + content, offsets = _build_ofs_pack(base, ((0, program),)) + + parsed = parse_pack(content) + + self.assertEqual(len(parsed.entries), 2) + delta = parsed.entries[1] + self.assertEqual(delta.representation, "ofs-delta") + self.assertEqual(delta.base_offset, offsets[0]) + self.assertEqual(delta.base_oid, parsed.entries[0].oid) + self.assertEqual(delta.delta_depth, 1) + self.assertEqual(delta.object_type, "blob") + self.assertEqual(delta.size, len(target)) + self.assertEqual(delta.stored_size, len(program)) + self.assertEqual(delta.oid, git_object_oid("blob", target)) + self.assertEqual(delta.payload_sha256, hashlib.sha256(target).hexdigest()) + + def test_decodes_the_default_64k_copy_size(self) -> None: + base = b"a" * 0x10000 + target = base + b"!" + program = _program( + len(base), + len(target), + _copy_instruction(size=0x10000) + b"\x01!", + ) + content, _ = _build_ofs_pack(base, ((0, program),)) + + parsed = parse_pack(content) + + self.assertEqual(parsed.entries[1].size, len(target)) + self.assertEqual(parsed.entries[1].oid, git_object_oid("blob", target)) + + def test_rejects_ref_delta_even_when_its_base_is_present(self) -> None: + base = b"base\n" + target = base + b"ref\n" + program = _program( + len(base), + len(target), + _copy_instruction(size=len(base)) + b"\x04ref\n", + ) + body = bytearray(PACK_MAGIC) + body.extend(PACK_VERSION.to_bytes(4, "big")) + body.extend((2).to_bytes(4, "big")) + body.extend(_entry_header(3, len(base))) + body.extend(zlib.compress(base, level=9)) + body.extend(_entry_header(7, len(program))) + body.extend(bytes.fromhex(git_object_oid("blob", base))) + body.extend(zlib.compress(program, level=9)) + + with self.assertRaisesRegex(VerificationError, "REF_DELTA"): + parse_pack(_resign_pack(bytes(body))) + + def test_rejects_zero_middle_and_underflow_ofs_offsets(self) -> None: + base = b"base\n" + target = base + b"x" + program = _program( + len(base), + len(target), + _copy_instruction(size=len(base)) + b"\x01x", + ) + valid, offsets = _build_ofs_pack(base, ((0, program),)) + header_size = len(_entry_header(6, len(program))) + offset_position = offsets[1] + header_size + distances = ( + b"\x00", + _ofs_distance(offsets[1] - (offsets[0] + 1)), + _ofs_distance(offsets[1] - 11), + ) + for distance in distances: + self.assertEqual(len(distance), 1) + changed = bytearray(valid[:-20]) + changed[offset_position] = distance[0] + with self.subTest(distance=distance.hex()), self.assertRaises( + VerificationError + ): + parse_pack(_resign_pack(bytes(changed))) + + def test_rejects_malformed_delta_programs(self) -> None: + base = b"base" + cases = ( + _program(len(base) + 1, 0, b""), + _program(len(base), MAX_OBJECT_BYTES + 1, b""), + _program(len(base), 1, b"\x00"), + _program(len(base), 2, b"\x02x"), + _program( + len(base), + 1, + _copy_instruction(offset=len(base), size=1), + ), + _program(len(base), 2, b"\x01x"), + _program(len(base), 1, b"\x02xy"), + b"\x80" * 6, + ) + for program in cases: + with self.subTest(program=program.hex()), self.assertRaises( + VerificationError + ): + pack_module._apply_delta(base, program) + + def test_enforces_depth_instruction_and_aggregate_budgets(self) -> None: + base = b"a" + previous = base + deltas: list[tuple[int, bytes]] = [] + for depth in range(MAX_DELTA_DEPTH + 1): + target = previous + b"x" + deltas.append( + ( + depth, + _program( + len(previous), + len(target), + _copy_instruction(size=len(previous)) + b"\x01x", + ), + ) + ) + previous = target + too_deep, _ = _build_ofs_pack(base, tuple(deltas)) + with self.assertRaisesRegex(VerificationError, "depth"): + parse_pack(too_deep) + + two_inserts = _program(len(base), 2, b"\x01x\x01y") + with ( + mock.patch.object(pack_module, "MAX_DELTA_INSTRUCTIONS", 1), + self.assertRaisesRegex(VerificationError, "instruction"), + ): + pack_module._apply_delta(base, two_inserts) + self.assertEqual(MAX_DELTA_INSTRUCTIONS, 4_096) + + target = base + b"x" + bounded, _ = _build_ofs_pack( + base, + ( + ( + 0, + _program( + len(base), + len(target), + _copy_instruction(size=len(base)) + b"\x01x", + ), + ), + ), + ) + with ( + mock.patch.object( + pack_module, + "MAX_TOTAL_EXPANDED_BYTES", + len(base) + len(target) - 1, + ), + self.assertRaisesRegex(VerificationError, "aggregate"), + ): + parse_pack(bounded) + self.assertEqual(MAX_TOTAL_EXPANDED_BYTES, 4_194_304) + def test_rejects_non_bytes_and_outer_boundary_drift(self) -> None: cases = ( bytearray(self.pack_bytes), From 287eeeed28b0d282363740f2d8f5cff58c3c1fb0 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 14:39:45 +0000 Subject: [PATCH 02/11] Refresh parser boundary metadata --- README.md | 6 +++--- docs/demo/git-pack-index-v1/manifest.json | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9696591..ba5885a 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,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. 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 checked-in production pack evidence remains a deliberately closed non-delta baseline: pack v2 and index v2, at most 64 objects, 1 MiB files, and 256 KiB expanded objects. The parser now separately accepts bounded OFS_DELTA test vectors with exact earlier-entry bases, depth 4, 4,096 instructions, and a 4 MiB aggregate expansion budget. REF_DELTA, thin packs, other object formats, arbitrary repositories, reachability, and pack optimization remain explicitly unsupported. 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 @@ -107,7 +107,7 @@ tools/capture_pack_report.sh python3 -W error -m unittest discover -s tests -v ``` -Current verified baseline: **90 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: **96 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 | |---|---| @@ -132,7 +132,7 @@ Current verified baseline: **90 tests**, **9/9 graph invariants**, **7/7 pack/in 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; +- pack v2 headers, bounded zlib streams, logical OIDs, trailer checksum, bounded OFS_DELTA replay, and explicit REF_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; diff --git a/docs/demo/git-pack-index-v1/manifest.json b/docs/demo/git-pack-index-v1/manifest.json index 60ec3f1..234e4dd 100644 --- a/docs/demo/git-pack-index-v1/manifest.json +++ b/docs/demo/git-pack-index-v1/manifest.json @@ -130,8 +130,8 @@ "sources": [ { "path": "git_dag_lab/pack.py", - "sha256": "d3882af57ad9b3d85580032b7e5ceccd2c8b443fbee7be30c7452a31aee3f8a8", - "size": 20802 + "sha256": "eedc0456eee72f1770b94d3272a60436382ac057d5d5ad2bab3cf5c91909b687", + "size": 29231 }, { "path": "git_dag_lab/cli.py", From a9dc5077c0f89c734587ae8e02a18f9a016daea5 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 14:41:35 +0000 Subject: [PATCH 03/11] Align the documented OFS security boundary --- README.md | 2 ++ SECURITY.md | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ba5885a..b840464 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,8 @@ The verifier does not trust the pack filename or Git's index. It parses the vari The checked-in production pack evidence remains a deliberately closed non-delta baseline: pack v2 and index v2, at most 64 objects, 1 MiB files, and 256 KiB expanded objects. The parser now separately accepts bounded OFS_DELTA test vectors with exact earlier-entry bases, depth 4, 4,096 instructions, and a 4 MiB aggregate expansion budget. REF_DELTA, thin packs, other object formats, arbitrary repositories, reachability, and pack optimization remain explicitly unsupported. SHA-1 and CRC32 model Git storage integrity here; neither is presented as authentication, a signature, or collision-resistant security. +Delta decoding is parser-only at this layer; the next source-bound fixture must prove real Git-generated OFS bytes before the README visuals claim that production path. + ## 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: diff --git a/SECURITY.md b/SECURITY.md index c7474f8..f0118a7 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -21,7 +21,7 @@ Evidence refreshes reject symlinked targets and multi-link files, stage each gen 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. +The independent parser accepts pack v2 and index v2 only. Its bounded OFS_DELTA subset requires an exact earlier pack-entry base, canonical biased offsets and size headers, no more than depth 4 or 4,096 instructions, at most 256 KiB per object or delta program, and at most 4 MiB of aggregate expanded output. It rejects REF_DELTA and thin packs, more than 64 objects, 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. The checked-in production fixture remains non-delta until a separate source-bound real Git OFS capture is reviewed. These checks establish bounded fixture storage integrity; they do not establish provenance, authenticity, repository reachability, collision resistance, or safety of arbitrary Git data. ## SHA-1 scope From aaad5cc636a1ef4a569e68287986eab41641f14b Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 14:45:30 +0000 Subject: [PATCH 04/11] Tighten delta codec invariants --- README.md | 4 +- SECURITY.md | 2 +- docs/demo/git-pack-index-v1/manifest.json | 4 +- git_dag_lab/pack.py | 11 ++- tests/test_pack_lab.py | 101 +++++++++++++++++++++- 5 files changed, 112 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index b840464..41f4d83 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,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) -The checked-in production pack evidence remains a deliberately closed non-delta baseline: pack v2 and index v2, at most 64 objects, 1 MiB files, and 256 KiB expanded objects. The parser now separately accepts bounded OFS_DELTA test vectors with exact earlier-entry bases, depth 4, 4,096 instructions, and a 4 MiB aggregate expansion budget. REF_DELTA, thin packs, other object formats, arbitrary repositories, reachability, and pack optimization remain explicitly unsupported. SHA-1 and CRC32 model Git storage integrity here; neither is presented as authentication, a signature, or collision-resistant security. +The checked-in production pack evidence remains a deliberately closed non-delta baseline: pack v2 and index v2, at most 64 objects, 1 MiB files, and 256 KiB expanded objects. The parser now separately accepts bounded OFS_DELTA test vectors with exact earlier-entry bases, depth 4, 4,096 instructions, three-byte offset/size ceilings, and a 16 MiB aggregate expansion budget. REF_DELTA, thin packs, other object formats, arbitrary repositories, reachability, and pack optimization remain explicitly unsupported. SHA-1 and CRC32 model Git storage integrity here; neither is presented as authentication, a signature, or collision-resistant security. Delta decoding is parser-only at this layer; the next source-bound fixture must prove real Git-generated OFS bytes before the README visuals claim that production path. @@ -109,7 +109,7 @@ tools/capture_pack_report.sh python3 -W error -m unittest discover -s tests -v ``` -Current verified baseline: **96 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: **99 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 | |---|---| diff --git a/SECURITY.md b/SECURITY.md index f0118a7..ab44229 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -21,7 +21,7 @@ Evidence refreshes reject symlinked targets and multi-link files, stage each gen 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. Its bounded OFS_DELTA subset requires an exact earlier pack-entry base, canonical biased offsets and size headers, no more than depth 4 or 4,096 instructions, at most 256 KiB per object or delta program, and at most 4 MiB of aggregate expanded output. It rejects REF_DELTA and thin packs, more than 64 objects, 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. The checked-in production fixture remains non-delta until a separate source-bound real Git OFS capture is reviewed. These checks establish bounded fixture storage integrity; they do not establish provenance, authenticity, repository reachability, collision resistance, or safety of arbitrary Git data. +The independent parser accepts pack v2 and index v2 with logical commit, tree, and blob entries only; tag entries are outside this closed subset. Its bounded OFS_DELTA subset requires an exact earlier pack-entry base, canonical biased offsets and size headers, no more than depth 4 or 4,096 instructions, at most three bytes for bounded offsets and sizes, at most 256 KiB per object or delta program, and at most 16 MiB of aggregate expanded output. It rejects REF_DELTA and thin packs, more than 64 objects, 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. The checked-in production fixture remains non-delta until a separate source-bound real Git OFS capture is reviewed. These checks establish bounded fixture storage integrity; they do not establish provenance, authenticity, repository reachability, collision resistance, or safety of arbitrary Git data. ## SHA-1 scope diff --git a/docs/demo/git-pack-index-v1/manifest.json b/docs/demo/git-pack-index-v1/manifest.json index 234e4dd..6c73402 100644 --- a/docs/demo/git-pack-index-v1/manifest.json +++ b/docs/demo/git-pack-index-v1/manifest.json @@ -130,8 +130,8 @@ "sources": [ { "path": "git_dag_lab/pack.py", - "sha256": "eedc0456eee72f1770b94d3272a60436382ac057d5d5ad2bab3cf5c91909b687", - "size": 29231 + "sha256": "3279df49efc6d5ae4f9d49e66b2bc851f97c79d1950b49b6bfee8d6507a43044", + "size": 29327 }, { "path": "git_dag_lab/cli.py", diff --git a/git_dag_lab/pack.py b/git_dag_lab/pack.py index 79d5b09..f8244c0 100644 --- a/git_dag_lab/pack.py +++ b/git_dag_lab/pack.py @@ -43,9 +43,9 @@ MAX_OBJECT_BYTES = 262_144 MAX_DELTA_DEPTH = 4 MAX_DELTA_INSTRUCTIONS = 4_096 -MAX_DELTA_SIZE_BYTES = 5 -MAX_OFS_OFFSET_BYTES = 8 -MAX_TOTAL_EXPANDED_BYTES = 4_194_304 +MAX_DELTA_SIZE_BYTES = 3 +MAX_OFS_OFFSET_BYTES = 3 +MAX_TOTAL_EXPANDED_BYTES = 16_777_216 PACK_BLOBS = ( ("binary-header", bytes(range(32))), @@ -55,7 +55,7 @@ b"fanout tables map object-id prefixes to sorted index ranges\n", ), ) -_TYPE_BY_CODE = {1: "commit", 2: "tree", 3: "blob", 4: "tag"} +_TYPE_BY_CODE = {1: "commit", 2: "tree", 3: "blob"} _ENTRY_KIND_BY_CODE = {**_TYPE_BY_CODE, 6: "ofs-delta"} @@ -391,6 +391,8 @@ def _decode_delta_size( def _apply_delta(base: bytes, program: bytes) -> bytes: if type(base) is not bytes or type(program) is not bytes: raise VerificationError("delta inputs must be exact bytes") + if len(program) < 4: + raise VerificationError("delta program is shorter than Git's minimum") base_size, offset = _decode_delta_size( program, 0, @@ -561,6 +563,7 @@ def parse_pack(content: bytes) -> ParsedPack: version=version, ) + def _expected_fanout(oids: tuple[str, ...]) -> tuple[int, ...]: counts = [0] * 256 for oid in oids: diff --git a/tests/test_pack_lab.py b/tests/test_pack_lab.py index efa87dd..5405920 100644 --- a/tests/test_pack_lab.py +++ b/tests/test_pack_lab.py @@ -186,6 +186,71 @@ def test_decodes_real_envelopes_and_verifies_trailer(self) -> None: self.assertEqual(entry.payload_sha256, hashlib.sha256(payload).hexdigest()) self.assertGreater(entry.packed_size, 1) + def test_ofs_codec_matches_independent_git_vectors(self) -> None: + vectors = ( + (1, "01"), + (127, "7f"), + (128, "8000"), + (129, "8001"), + (255, "807f"), + (256, "8100"), + (16_511, "ff7f"), + (16_512, "808000"), + (1_048_576, "beff00"), + ) + for distance, expected_hex in vectors: + encoded = bytes.fromhex(expected_hex) + self.assertEqual(pack_module._encode_ofs_distance(distance), encoded) + decoded, consumed = pack_module._decode_ofs_base_offset( + encoded, + 0, + end=len(encoded), + entry_offset=distance + 12, + ) + self.assertEqual(decoded, 12) + self.assertEqual(consumed, len(encoded)) + + for malformed in (b"\x00", b"\x80", b"\x80\x80\x80\x00"): + with self.subTest(encoded=malformed.hex()), self.assertRaises( + VerificationError + ): + pack_module._decode_ofs_base_offset( + malformed, + 0, + end=len(malformed), + entry_offset=128, + ) + + def test_delta_size_codec_matches_independent_git_vectors(self) -> None: + vectors = ( + (0, "00"), + (127, "7f"), + (128, "8001"), + (16_383, "ff7f"), + (16_384, "808001"), + (262_144, "808010"), + ) + for value, expected_hex in vectors: + encoded = bytes.fromhex(expected_hex) + self.assertEqual(pack_module._encode_delta_size(value), encoded) + decoded, consumed = pack_module._decode_delta_size( + encoded, + 0, + label="fixture size", + ) + self.assertEqual(decoded, value) + self.assertEqual(consumed, len(encoded)) + + for malformed in (b"\x80", b"\x80\x00", b"\x80\x80\x80\x00"): + with self.subTest(encoded=malformed.hex()), self.assertRaises( + VerificationError + ): + pack_module._decode_delta_size( + malformed, + 0, + label="fixture size", + ) + def test_decodes_bounded_ofs_delta_copy_and_insert(self) -> None: base = b"bounded base\n" target = base + b"delta\n" @@ -210,6 +275,35 @@ def test_decodes_bounded_ofs_delta_copy_and_insert(self) -> None: self.assertEqual(delta.oid, git_object_oid("blob", target)) self.assertEqual(delta.payload_sha256, hashlib.sha256(target).hexdigest()) + def test_resolves_two_deltas_that_share_one_base(self) -> None: + base = b"shared base\n" + first_target = base + b"one\n" + second_target = base + b"two\n" + first_program = _program( + len(base), + len(first_target), + _copy_instruction(size=len(base)) + b"\x04one\n", + ) + second_program = _program( + len(base), + len(second_target), + _copy_instruction(size=len(base)) + b"\x04two\n", + ) + content, offsets = _build_ofs_pack( + base, + ((0, first_program), (0, second_program)), + ) + + parsed = parse_pack(content) + + self.assertEqual(len(parsed.entries), 3) + self.assertEqual(parsed.entries[1].base_offset, offsets[0]) + self.assertEqual(parsed.entries[2].base_offset, offsets[0]) + self.assertEqual(parsed.entries[1].delta_depth, 1) + self.assertEqual(parsed.entries[2].delta_depth, 1) + self.assertEqual(parsed.entries[1].oid, git_object_oid("blob", first_target)) + self.assertEqual(parsed.entries[2].oid, git_object_oid("blob", second_target)) + def test_decodes_the_default_64k_copy_size(self) -> None: base = b"a" * 0x10000 target = base + b"!" @@ -284,6 +378,7 @@ def test_rejects_malformed_delta_programs(self) -> None: ), _program(len(base), 2, b"\x01x"), _program(len(base), 1, b"\x02xy"), + b"\x00\x00\x00", b"\x80" * 6, ) for program in cases: @@ -344,7 +439,7 @@ def test_enforces_depth_instruction_and_aggregate_budgets(self) -> None: self.assertRaisesRegex(VerificationError, "aggregate"), ): parse_pack(bounded) - self.assertEqual(MAX_TOTAL_EXPANDED_BYTES, 4_194_304) + self.assertEqual(MAX_TOTAL_EXPANDED_BYTES, 16_777_216) def test_rejects_non_bytes_and_outer_boundary_drift(self) -> None: cases = ( @@ -375,6 +470,9 @@ def test_rejects_delta_type_size_zlib_and_trailer_mutations(self) -> None: delta = bytearray(self.pack_bytes[:-20]) delta[12] = (delta[12] & 0x8F) | 0x60 + unsupported_tag = bytearray(self.pack_bytes[:-20]) + unsupported_tag[12] = (unsupported_tag[12] & 0x8F) | 0x40 + wrong_size = bytearray(self.pack_bytes[:-20]) wrong_size[12] = (wrong_size[12] & 0xF0) | ((len(self.payloads[0]) + 1) & 0x0F) @@ -386,6 +484,7 @@ def test_rejects_delta_type_size_zlib_and_trailer_mutations(self) -> None: for content in ( _resign_pack(bytes(delta)), + _resign_pack(bytes(unsupported_tag)), _resign_pack(bytes(wrong_size)), _resign_pack(bytes(corrupt_zlib)), bytes(bad_trailer), From 5a944d748a41ce2e725feed8e5f46726411dd894 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 14:56:30 +0000 Subject: [PATCH 05/11] Prove real Git OFS delta output Build a fixed two-blob fixture through git pack-objects with OFS offsets, independently require the exact physical representation, and bind its reconstructed objects to index v2. Expose receipt and inspection commands with deterministic runtime and CLI coverage while preserving the original non-delta evidence. --- README.md | 8 +- SECURITY.md | 4 +- docs/demo/git-pack-index-v1/manifest.json | 8 +- git_dag_lab/__init__.py | 3 +- git_dag_lab/cli.py | 22 +- git_dag_lab/pack.py | 268 +++++++++++++++++++++- tests/test_pack_lab.py | 95 ++++++++ 7 files changed, 393 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 41f4d83..3a1f3e8 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,8 @@ 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 git_dag_lab pack-ofs-verify +python3 -m git_dag_lab pack-ofs-inspect python3 -m unittest discover -s tests -v ``` @@ -59,9 +61,9 @@ 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) -The checked-in production pack evidence remains a deliberately closed non-delta baseline: pack v2 and index v2, at most 64 objects, 1 MiB files, and 256 KiB expanded objects. The parser now separately accepts bounded OFS_DELTA test vectors with exact earlier-entry bases, depth 4, 4,096 instructions, three-byte offset/size ceilings, and a 16 MiB aggregate expansion budget. REF_DELTA, thin packs, other object formats, arbitrary repositories, reachability, and pack optimization remain explicitly unsupported. SHA-1 and CRC32 model Git storage integrity here; neither is presented as authentication, a signature, or collision-resistant security. +The checked-in production pack evidence remains a deliberately closed non-delta baseline: pack v2 and index v2, at most 64 objects, 1 MiB files, and 256 KiB expanded objects. The parser accepts bounded OFS_DELTA entries with exact earlier-entry bases, depth 4, 4,096 instructions, three-byte offset/size ceilings, and a 16 MiB aggregate expansion budget. REF_DELTA, thin packs, other object formats, arbitrary repositories, reachability, and caller-selected pack optimization remain explicitly unsupported. SHA-1 and CRC32 model Git storage integrity here; neither is presented as authentication, a signature, or collision-resistant security. -Delta decoding is parser-only at this layer; the next source-bound fixture must prove real Git-generated OFS bytes before the README visuals claim that production path. +The separate `pack-ofs-*` path now stores two fixed 77,824-byte synthetic blobs, changes exactly one numbered record, and asks real `git pack-objects --delta-base-offset` for a depth-one pack. It fails closed unless Git emits exactly one full blob plus one OFS_DELTA, then independently reconstructs both logical objects and cross-checks their physical offsets and CRC32 rows against index v2. Its normalized argv and exact stdin digest are receipt-bound; byte identity is claimed only for repeated runs with the same Git build. Source-bound OFS visuals are intentionally deferred to the next evidence-only commit. ## The hard part: verify Git without trusting Git @@ -109,7 +111,7 @@ tools/capture_pack_report.sh python3 -W error -m unittest discover -s tests -v ``` -Current verified baseline: **99 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: **101 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 | |---|---| diff --git a/SECURITY.md b/SECURITY.md index ab44229..0beebbb 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -19,9 +19,9 @@ Evidence refreshes reject symlinked targets and multi-link files, stage each gen ## 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 baseline pack experiment passes only three fixed synthetic blob IDs to `git pack-objects`. The separate OFS experiment passes two fixed 77,824-byte synthetic blob IDs and fixed single-threaded delta options. Neither accepts a repository path, revision, ref, caller-provided object list, or caller-selected optimizer settings. 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 with logical commit, tree, and blob entries only; tag entries are outside this closed subset. Its bounded OFS_DELTA subset requires an exact earlier pack-entry base, canonical biased offsets and size headers, no more than depth 4 or 4,096 instructions, at most three bytes for bounded offsets and sizes, at most 256 KiB per object or delta program, and at most 16 MiB of aggregate expanded output. It rejects REF_DELTA and thin packs, more than 64 objects, 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. The checked-in production fixture remains non-delta until a separate source-bound real Git OFS capture is reviewed. These checks establish bounded fixture storage integrity; they do not establish provenance, authenticity, repository reachability, collision resistance, or safety of arbitrary Git data. +The independent parser accepts pack v2 and index v2 with logical commit, tree, and blob entries only; tag entries are outside this closed subset. Its bounded OFS_DELTA subset requires an exact earlier pack-entry base, canonical biased offsets and size headers, no more than depth 4 or 4,096 instructions, at most three bytes for bounded offsets and sizes, at most 256 KiB per object or delta program, and at most 16 MiB of aggregate expanded output. It rejects REF_DELTA and thin packs, more than 64 objects, 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. The OFS runtime additionally requires exactly one full blob, one depth-one OFS entry, an exact re-encoding of the observed biased distance, and a complete fixed logical inventory. Its report records normalized pack arguments and an exact stdin digest; output bytes are only expected to repeat under the same Git build. These checks establish bounded fixture storage integrity; they do not establish provenance, authenticity, repository reachability, collision resistance, or safety of arbitrary Git data. ## SHA-1 scope diff --git a/docs/demo/git-pack-index-v1/manifest.json b/docs/demo/git-pack-index-v1/manifest.json index 6c73402..c61735c 100644 --- a/docs/demo/git-pack-index-v1/manifest.json +++ b/docs/demo/git-pack-index-v1/manifest.json @@ -130,13 +130,13 @@ "sources": [ { "path": "git_dag_lab/pack.py", - "sha256": "3279df49efc6d5ae4f9d49e66b2bc851f97c79d1950b49b6bfee8d6507a43044", - "size": 29327 + "sha256": "b2b7061751f09997673b09a235e5257c8a2e93de82ad523703aa1bc015d4c765", + "size": 39441 }, { "path": "git_dag_lab/cli.py", - "sha256": "03648331670cdc350fd486b2939e4914e90ee7ca7c2ea2b5cabd4eced21fe766", - "size": 2335 + "sha256": "e634feb9a908e3b0f46e1011c64667000b9e43ceb6ce1233b9fda1ce166a35ac", + "size": 2972 }, { "path": "tools/generate_evidence.py", diff --git a/git_dag_lab/__init__.py b/git_dag_lab/__init__.py index 35ff0d1..8443ea4 100644 --- a/git_dag_lab/__init__.py +++ b/git_dag_lab/__init__.py @@ -1,7 +1,7 @@ """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 +from .pack import PackReport, parse_index, parse_pack, run_ofs_pack_lab, run_pack_lab __all__ = [ "LabError", @@ -13,6 +13,7 @@ "parse_commit", "parse_tree", "run_lab", + "run_ofs_pack_lab", "run_pack_lab", ] diff --git a/git_dag_lab/cli.py b/git_dag_lab/cli.py index 95185c3..0e876c6 100644 --- a/git_dag_lab/cli.py +++ b/git_dag_lab/cli.py @@ -9,7 +9,7 @@ from typing import TextIO from .lab import LabError, run_lab -from .pack import run_pack_lab +from .pack import run_ofs_pack_lab, run_pack_lab def build_parser() -> argparse.ArgumentParser: @@ -42,6 +42,20 @@ def build_parser() -> argparse.ArgumentParser: action="store_true", help="emit canonical JSON on one line instead of indented JSON", ) + + subparsers.add_parser( + "pack-ofs-verify", + help="build and independently verify a real OFS-delta pack/index pair", + ) + ofs_inspect_parser = subparsers.add_parser( + "pack-ofs-inspect", + help="print the complete machine-readable OFS-delta evidence document", + ) + ofs_inspect_parser.add_argument( + "--compact", + action="store_true", + help="emit canonical JSON on one line instead of indented JSON", + ) return parser @@ -59,7 +73,9 @@ def main( args = build_parser().parse_args(argv) try: - if args.command.startswith("pack-"): + if args.command.startswith("pack-ofs-"): + report = run_ofs_pack_lab(root if root is not None else Path.cwd()) + elif 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()) @@ -67,7 +83,7 @@ def main( errors.write(f"ERROR git-dag-lab: {exc}\n") return 1 - if args.command in {"verify", "pack-verify"}: + if args.command in {"verify", "pack-verify", "pack-ofs-verify"}: output.write(report.receipt_line + "\n") else: output.write(report.to_json(pretty=not args.compact) + "\n") diff --git a/git_dag_lab/pack.py b/git_dag_lab/pack.py index f8244c0..d943c7d 100644 --- a/git_dag_lab/pack.py +++ b/git_dag_lab/pack.py @@ -34,6 +34,7 @@ ) PACK_SCHEMA_VERSION = "git-pack-index-lab/v1" +OFS_PACK_SCHEMA_VERSION = "git-pack-ofs-delta-lab/v1" PACK_VERSION = 2 INDEX_VERSION = 2 PACK_MAGIC = b"PACK" @@ -55,6 +56,22 @@ b"fanout tables map object-id prefixes to sorted index ranges\n", ), ) +_OFS_RECORD_BEFORE = b"1024:0123456789abcdef0123456789abcdef\n" +_OFS_RECORD_AFTER = b"1024:fedcba9876543210fedcba9876543210\n" +_OFS_BASE_PAYLOAD = b"".join( + f"{line:04d}:0123456789abcdef0123456789abcdef\n".encode("ascii") + for line in range(2_048) +) +_OFS_TARGET_PAYLOAD = _OFS_BASE_PAYLOAD.replace( + _OFS_RECORD_BEFORE, + _OFS_RECORD_AFTER, + 1, +) +OFS_PACK_BLOBS = ( + ("baseline", _OFS_BASE_PAYLOAD), + ("line-1024-changed", _OFS_TARGET_PAYLOAD), +) + _TYPE_BY_CODE = {1: "commit", 2: "tree", 3: "blob"} _ENTRY_KIND_BY_CODE = {**_TYPE_BY_CODE, 6: "ofs-delta"} @@ -168,11 +185,11 @@ def receipt_line(self) -> str: pack = self.payload["pack"] index = self.payload["index"] return ( - f"PASS {PACK_SCHEMA_VERSION} " + f"PASS {self.payload['schema_version']} " f"objects={pack['object_count']} " f"pack_version={pack['version']} " f"index_version={index['version']} " - "deltas=0 " + f"deltas={pack['delta_count']} " f"pack_sha1={pack['trailer_sha1']} " f"receipt_sha256={self.receipt_sha256}" ) @@ -815,6 +832,251 @@ def _build_and_verify_pack(runner: _GitRunner, private: Path) -> PackReport: return PackReport(payload=_deep_freeze(payload), receipt_sha256=receipt) +def _build_and_verify_ofs_pack(runner: _GitRunner, private: Path) -> PackReport: + runner.initialize() + if ( + len(_OFS_BASE_PAYLOAD) != 77_824 + or len(_OFS_TARGET_PAYLOAD) != 77_824 + or _OFS_BASE_PAYLOAD.count(_OFS_RECORD_BEFORE) != 1 + or _OFS_TARGET_PAYLOAD.count(_OFS_RECORD_AFTER) != 1 + ): + raise VerificationError("fixed OFS fixture bytes are not exact") + + expected_payloads: dict[str, bytes] = {} + labels_by_oid: dict[str, str] = {} + for label, payload in OFS_PACK_BLOBS: + oid = _store_blob(runner, payload) + expected_payloads[oid] = payload + labels_by_oid[oid] = label + if len(expected_payloads) != len(OFS_PACK_BLOBS): + raise VerificationError("fixed OFS fixture contains duplicate objects") + + ordered_oids = tuple(sorted(expected_payloads)) + object_input = b"".join(f"{oid}\n".encode("ascii") for oid in ordered_oids) + prefix = private / "fixture" + pack_arguments = ( + "--delta-base-offset", + "--window=2", + "--depth=1", + "--threads=1", + "--compression=0", + "--no-reuse-delta", + "--no-reuse-object", + "--index-version=2", + os.fspath(prefix), + ) + result = runner.run( + "pack-objects", + *pack_arguments, + stdin=object_input, + ) + 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 OFS pack") + index_bytes = _read_regular_file(index_path, label="generated OFS 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 OFS pack name does not match the verified trailer") + if {entry.oid for entry in parsed_pack.entries} != set(expected_payloads): + raise VerificationError("generated OFS pack object inventory is not exact") + + full_entries = tuple( + entry for entry in parsed_pack.entries if entry.representation == "full" + ) + ofs_entries = tuple( + entry for entry in parsed_pack.entries if entry.representation == "ofs-delta" + ) + if len(full_entries) != 1 or len(ofs_entries) != 1: + raise VerificationError("Git did not produce exactly one full and one OFS entry") + base_entry = full_entries[0] + delta_entry = ofs_entries[0] + if ( + delta_entry.base_offset != base_entry.offset + or delta_entry.base_oid != base_entry.oid + or delta_entry.delta_depth != 1 + ): + raise VerificationError("generated OFS entry does not bind the exact full base") + + 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("reconstructed OFS object differs from the fixture") + + pack_end = len(pack_bytes) - 20 + entry_kind, _, ofs_start = _decode_entry_header( + pack_bytes, + delta_entry.offset, + end=pack_end, + ) + decoded_base, ofs_end = _decode_ofs_base_offset( + pack_bytes, + ofs_start, + end=pack_end, + entry_offset=delta_entry.offset, + ) + ofs_distance = delta_entry.offset - base_entry.offset + expected_ofs_bytes = _encode_ofs_distance(ofs_distance) + observed_ofs_bytes = pack_bytes[ofs_start:ofs_end] + if ( + entry_kind != "ofs-delta" + or decoded_base != base_entry.offset + or observed_ofs_bytes != expected_ofs_bytes + ): + raise VerificationError("generated OFS distance does not re-encode exactly") + + index_rows = {entry.oid: entry for entry in parsed_index.entries} + objects = [] + for entry in parsed_pack.entries: + indexed = index_rows[entry.oid] + row: dict[str, object] = { + **entry.as_dict(), + "index_crc32": f"{indexed.crc32:08x}", + "index_offset": indexed.offset, + "label": labels_by_oid[entry.oid], + "representation": entry.representation, + } + if entry.representation == "ofs-delta": + row.update( + { + "base_label": labels_by_oid[base_entry.oid], + "ofs_distance": ofs_distance, + "ofs_offset_bytes_hex": observed_ofs_bytes.hex(), + } + ) + objects.append(row) + + 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, + "exactly_one_full_entry": True, + "exactly_one_ofs_delta_entry": True, + "index_checksum_verified": True, + "index_crc32_matches_pack": True, + "index_fanout_matches_sorted_oids": True, + "index_offsets_match_pack": True, + "ofs_base_entry_bound": True, + "ofs_distance_reencoded": True, + "pack_trailer_verified": True, + "reconstructed_objects_match_fixture": True, + "ref_delta_entries_absent": True, + }, + "command_trace": list(runner.trace), + "fixture": { + "changed_record": { + "after": _OFS_RECORD_AFTER.decode("ascii").rstrip("\n"), + "before": _OFS_RECORD_BEFORE.decode("ascii").rstrip("\n"), + "line_number": 1024, + }, + "object_count": len(OFS_PACK_BLOBS), + "objects": [ + { + "label": label, + "oid": git_object_oid("blob", body), + "payload_sha256": hashlib.sha256(body).hexdigest(), + "size": len(body), + } + for label, body in OFS_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": len(ofs_entries), + "full_count": len(full_entries), + "max_delta_depth": max(entry.delta_depth for entry in parsed_pack.entries), + "object_count": len(parsed_pack.entries), + "ofs_delta_count": len(ofs_entries), + "ref_delta_count": 0, + "sha256": hashlib.sha256(pack_bytes).hexdigest(), + "trailer_sha1": parsed_pack.trailer_sha1, + "version": parsed_pack.version, + }, + "pack_objects": { + "normalized_argv": [ + "git", + "pack-objects", + *pack_arguments[:-1], + "/fixture", + ], + "stdin_bytes": len(object_input), + "stdin_oid_order": list(ordered_oids), + "stdin_sha256": hashlib.sha256(object_input).hexdigest(), + }, + "scope": { + "arbitrary_repository_supported": False, + "authentication_claim": False, + "byte_identity_requires_same_git_build": True, + "fixture_kind": "two deterministic similar synthetic blobs", + "git_pack_objects_executed": True, + "network_required": False, + "ofs_delta_supported": True, + "ref_delta_supported": False, + "thin_pack_supported": False, + }, + "schema_version": OFS_PACK_SCHEMA_VERSION, + } + receipt = hashlib.sha256(_canonical_json(payload)).hexdigest() + return PackReport(payload=_deep_freeze(payload), receipt_sha256=receipt) + + +def run_ofs_pack_lab(root: Path | str = ".") -> PackReport: + """Build and independently verify a real OFS-delta pack/index pair.""" + + try: + validated_root = _validate_root(Path(root)) + git = _find_git() + with tempfile.TemporaryDirectory( + prefix=".git-pack-ofs-delta-lab-", + dir=validated_root, + ) as private_name: + workspace = _new_workspace(validated_root, Path(private_name)) + runner = _GitRunner(git, workspace) + return _build_and_verify_ofs_pack(runner, workspace.private) + except LabError: + raise + except (OSError, TypeError, ValueError) as exc: + raise LabError("isolated OFS pack lab setup failed") from exc + + def run_pack_lab(root: Path | str = ".") -> PackReport: """Build and verify a real pack/index pair below ``root``, then remove it.""" @@ -842,6 +1104,7 @@ def run_pack_lab(root: Path | str = ".") -> PackReport: "MAX_TOTAL_EXPANDED_BYTES", "MAX_PACK_BYTES", "MAX_PACK_OBJECTS", + "OFS_PACK_SCHEMA_VERSION", "PACK_SCHEMA_VERSION", "PACK_VERSION", "IndexEntry", @@ -851,5 +1114,6 @@ def run_pack_lab(root: Path | str = ".") -> PackReport: "ParsedPack", "parse_index", "parse_pack", + "run_ofs_pack_lab", "run_pack_lab", ] diff --git a/tests/test_pack_lab.py b/tests/test_pack_lab.py index 5405920..b380b68 100644 --- a/tests/test_pack_lab.py +++ b/tests/test_pack_lab.py @@ -22,11 +22,13 @@ MAX_OBJECT_BYTES, MAX_PACK_BYTES, MAX_TOTAL_EXPANDED_BYTES, + OFS_PACK_SCHEMA_VERSION, PACK_MAGIC, PACK_SCHEMA_VERSION, PACK_VERSION, parse_index, parse_pack, + run_ofs_pack_lab, run_pack_lab, ) @@ -609,6 +611,99 @@ def test_real_pack_and_index_are_deterministic_and_leave_no_files(self) -> None: self.assertFalse(report["scope"]["delta_entries_supported"]) self.assertFalse(report["scope"]["authentication_claim"]) + + def test_real_ofs_pack_is_deterministic_exact_and_leaves_no_files(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + first = run_ofs_pack_lab(root) + self.assertEqual(list(root.iterdir()), []) + second = run_ofs_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"], OFS_PACK_SCHEMA_VERSION) + self.assertEqual(report["pack"]["version"], PACK_VERSION) + self.assertEqual(report["index"]["version"], INDEX_VERSION) + self.assertEqual(report["pack"]["object_count"], 2) + self.assertEqual(report["pack"]["full_count"], 1) + self.assertEqual(report["pack"]["delta_count"], 1) + self.assertEqual(report["pack"]["ofs_delta_count"], 1) + self.assertEqual(report["pack"]["ref_delta_count"], 0) + self.assertEqual(report["pack"]["max_delta_depth"], 1) + self.assertEqual( + report["command_trace"], + ["init", "hash-object", "hash-object", "pack-objects"], + ) + self.assertEqual( + report["pack_objects"]["normalized_argv"], + [ + "git", + "pack-objects", + "--delta-base-offset", + "--window=2", + "--depth=1", + "--threads=1", + "--compression=0", + "--no-reuse-delta", + "--no-reuse-object", + "--index-version=2", + "/fixture", + ], + ) + self.assertEqual(report["pack_objects"]["stdin_bytes"], 82) + self.assertRegex(report["pack_objects"]["stdin_sha256"], r"^[0-9a-f]{64}$") + self.assertTrue(all(report["checks"].values())) + self.assertTrue(report["scope"]["ofs_delta_supported"]) + self.assertFalse(report["scope"]["ref_delta_supported"]) + self.assertFalse(report["scope"]["thin_pack_supported"]) + representations = [ + entry["representation"] for entry in report["objects_in_pack_order"] + ] + self.assertEqual(representations, ["full", "ofs-delta"]) + delta = report["objects_in_pack_order"][1] + self.assertEqual(delta["delta_depth"], 1) + self.assertEqual(delta["base_offset"], report["objects_in_pack_order"][0]["offset"]) + self.assertRegex(delta["ofs_offset_bytes_hex"], r"^[0-9a-f]{2,6}$") + + def test_ofs_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-ofs-verify"], + root=root, + stdout=stdout, + stderr=stderr, + ), + 0, + ) + self.assertEqual(stderr.getvalue(), "") + self.assertRegex( + stdout.getvalue(), + rf"^PASS {OFS_PACK_SCHEMA_VERSION} objects=2 .* " + rf"deltas=1 .* receipt_sha256=[0-9a-f]{{64}}\n$", + ) + + inspect_output = io.StringIO() + self.assertEqual( + main( + ["pack-ofs-inspect", "--compact"], + root=root, + stdout=inspect_output, + stderr=io.StringIO(), + ), + 0, + ) + inspected = json.loads(inspect_output.getvalue()) + self.assertEqual( + inspected["report"]["schema_version"], + OFS_PACK_SCHEMA_VERSION, + ) + self.assertEqual(inspected["report"]["pack"]["ofs_delta_count"], 1) + def test_receipt_binds_the_complete_payload(self) -> None: with tempfile.TemporaryDirectory() as temporary: result = run_pack_lab(Path(temporary)) From b5b8c971baa3691998b197c55e23ceae2f9a0144 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 14:58:30 +0000 Subject: [PATCH 06/11] Synchronize OFS provenance metadata Bind the shared CLI source in the DAG manifest and expose the real Delta runtime as a clearly labeled README section. --- README.md | 2 ++ docs/demo/git-dag-v1/manifest.json | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3a1f3e8..e9409fb 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,8 @@ The verifier does not trust the pack filename or Git's index. It parses the vari The checked-in production pack evidence remains a deliberately closed non-delta baseline: pack v2 and index v2, at most 64 objects, 1 MiB files, and 256 KiB expanded objects. The parser accepts bounded OFS_DELTA entries with exact earlier-entry bases, depth 4, 4,096 instructions, three-byte offset/size ceilings, and a 16 MiB aggregate expansion budget. REF_DELTA, thin packs, other object formats, arbitrary repositories, reachability, and caller-selected pack optimization remain explicitly unsupported. SHA-1 and CRC32 model Git storage integrity here; neither is presented as authentication, a signature, or collision-resistant security. +### Delta runtime: real OFS bytes + The separate `pack-ofs-*` path now stores two fixed 77,824-byte synthetic blobs, changes exactly one numbered record, and asks real `git pack-objects --delta-base-offset` for a depth-one pack. It fails closed unless Git emits exactly one full blob plus one OFS_DELTA, then independently reconstructs both logical objects and cross-checks their physical offsets and CRC32 rows against index v2. Its normalized argv and exact stdin digest are receipt-bound; byte identity is claimed only for repeated runs with the same Git build. Source-bound OFS visuals are intentionally deferred to the next evidence-only commit. ## The hard part: verify Git without trusting Git diff --git a/docs/demo/git-dag-v1/manifest.json b/docs/demo/git-dag-v1/manifest.json index d8492cf..defb3d9 100644 --- a/docs/demo/git-dag-v1/manifest.json +++ b/docs/demo/git-dag-v1/manifest.json @@ -135,8 +135,8 @@ }, { "path": "git_dag_lab/cli.py", - "sha256": "03648331670cdc350fd486b2939e4914e90ee7ca7c2ea2b5cabd4eced21fe766", - "size": 2335 + "sha256": "e634feb9a908e3b0f46e1011c64667000b9e43ceb6ce1233b9fda1ce166a35ac", + "size": 2972 }, { "path": "tools/generate_evidence.py", From 9ed11e4a99ec0a603b54dc0456007f8febb31c80 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 15:09:15 +0000 Subject: [PATCH 07/11] Add attested OFS evidence pipeline Generate source-bound CLI, reconstruction, workflow, and offline report artifacts from two fresh real-Git runs. Capture Chromium in the existing digest-pinned, network-disabled boundary and expose a read-only temporary staging workflow for independent adoption. --- .github/workflows/ci.yml | 3 +- .github/workflows/stage-ofs-evidence.yml | 111 +++ tools/capture_ofs_report.sh | 325 ++++++++ tools/generate_ofs_evidence.py | 922 +++++++++++++++++++++++ 4 files changed, 1360 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/stage-ofs-evidence.yml create mode 100755 tools/capture_ofs_report.sh create mode 100755 tools/generate_ofs_evidence.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 29dd7ce..78994ac 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -78,8 +78,9 @@ jobs: 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 + bash -n tools/capture_ofs_report.sh test "$(shellcheck --version | awk '$1 == "version:" {print $2}')" = "0.9.0" - shellcheck tools/capture_report.sh tools/capture_pack_report.sh + shellcheck tools/capture_report.sh tools/capture_pack_report.sh tools/capture_ofs_report.sh test "$(git status --porcelain=v1 --untracked-files=normal --ignore-submodules=none)" = "" distribution: diff --git a/.github/workflows/stage-ofs-evidence.yml b/.github/workflows/stage-ofs-evidence.yml new file mode 100644 index 0000000..928432b --- /dev/null +++ b/.github/workflows/stage-ofs-evidence.yml @@ -0,0 +1,111 @@ +name: Stage OFS evidence + +on: + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: stage-ofs-evidence-${{ github.ref }} + cancel-in-progress: false + +jobs: + stage: + name: Build and attest OFS evidence + runs-on: ubuntu-24.04 + timeout-minutes: 25 + steps: + - name: Check out the requested immutable 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 staging boundary + shell: bash + run: | + set -euo pipefail + test "$GITHUB_REPOSITORY" = "omar07ibrahim/hello-git" + test "$GITHUB_EVENT_NAME" = "workflow_dispatch" + [[ "$GITHUB_REF" =~ ^refs/heads/[A-Za-z0-9._/-]+$ ]] + [[ "$GITHUB_SHA" =~ ^[0-9a-f]{40}$ ]] + test "$(git rev-parse HEAD)" = "$GITHUB_SHA" + test "$(git rev-parse --show-toplevel)" = "$GITHUB_WORKSPACE" + test "$(python -c 'import platform; print(platform.python_version())')" = "3.12.12" + test "$(git version)" = "git version 2.54.0" + test -z "${OPENAI_API_KEY:-}" + test -z "${GH_TOKEN:-}" + test -z "${GITHUB_TOKEN:-}" + test "$(git status --porcelain=v1 --untracked-files=normal --ignore-submodules=none)" = "" + + - name: Generate the pre-capture package twice + shell: bash + run: | + set -euo pipefail + env -u PYTHONHOME -u PYTHONPATH python -B tools/generate_ofs_evidence.py --write --allow-missing-screenshot + env -u PYTHONHOME -u PYTHONPATH python -B tools/generate_ofs_evidence.py --check --allow-missing-screenshot + + - name: Cache the exact Chromium container + 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" + test "$(docker image inspect --format '{{.Architecture}}' "$image")" = "amd64" + + - name: Capture and verify the isolated browser report + shell: bash + run: | + set -euo pipefail + tools/capture_ofs_report.sh + env -u PYTHONHOME -u PYTHONPATH python -B tools/generate_ofs_evidence.py --check + env -u PYTHONHOME -u PYTHONPATH python -W error -m unittest discover -s tests -v + + - name: Audit the exact output inventory + shell: bash + run: | + set -euo pipefail + expected=$'docs/assets/git-pack-ofs-cli.svg\ndocs/assets/git-pack-ofs-reconstruction.svg\ndocs/assets/git-pack-ofs-report.png\ndocs/assets/git-pack-ofs-workflow.svg\ndocs/demo/git-pack-ofs-delta-v1/capture-attestation.json\ndocs/demo/git-pack-ofs-delta-v1/inspect.json\ndocs/demo/git-pack-ofs-delta-v1/manifest.json\ndocs/demo/git-pack-ofs-delta-v1/rendered-dom.html\ndocs/demo/git-pack-ofs-delta-v1/report.html\ndocs/demo/git-pack-ofs-delta-v1/verify.txt\nevidence/git-pack-ofs-delta-v1.json' + observed=$( + { + find docs/assets -maxdepth 1 -type f -name 'git-pack-ofs-*' -printf 'docs/assets/%f\n' + find docs/demo/git-pack-ofs-delta-v1 -maxdepth 1 -type f -printf 'docs/demo/git-pack-ofs-delta-v1/%f\n' + find evidence -maxdepth 1 -type f -name 'git-pack-ofs-delta-v1.json' -printf 'evidence/%f\n' + } | sort + ) + test "$observed" = "$expected" + while IFS= read -r path; do + test -f "$path" + test ! -L "$path" + test "$(stat -c '%h' "$path")" = "1" + done <<< "$expected" + sha256sum docs/assets/git-pack-ofs-*.svg docs/assets/git-pack-ofs-report.png docs/demo/git-pack-ofs-delta-v1/* evidence/git-pack-ofs-delta-v1.json + + - name: Upload exact staged evidence + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: hello-git-ofs-evidence-${{ github.sha }} + path: | + evidence/git-pack-ofs-delta-v1.json + docs/demo/git-pack-ofs-delta-v1/verify.txt + docs/demo/git-pack-ofs-delta-v1/inspect.json + docs/demo/git-pack-ofs-delta-v1/report.html + docs/demo/git-pack-ofs-delta-v1/rendered-dom.html + docs/demo/git-pack-ofs-delta-v1/capture-attestation.json + docs/demo/git-pack-ofs-delta-v1/manifest.json + docs/assets/git-pack-ofs-cli.svg + docs/assets/git-pack-ofs-reconstruction.svg + docs/assets/git-pack-ofs-workflow.svg + docs/assets/git-pack-ofs-report.png + if-no-files-found: error + include-hidden-files: false + compression-level: 0 + retention-days: 1 diff --git a/tools/capture_ofs_report.sh b/tools/capture_ofs_report.sh new file mode 100755 index 0000000..e673d6c --- /dev/null +++ b/tools/capture_ofs_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-ofs-delta-v1" +report_path="$demo_root/report.html" +output_path="$repo_root/docs/assets/git-pack-ofs-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_ofs_evidence.py" --write --allow-missing-screenshot >/dev/null +python3 -B "$repo_root/tools/generate_ofs_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_ofs_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-ofs-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-ofs-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-ofs-delta-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_pack_evidence import _parse_pack_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_ofs_report.sh" | awk '{print $1}') != "$script_sha_before" ]]; then + echo "capture error: capture script changed during execution" >&2 + exit 1 +fi + +chmod 0600 "$temporary_root/output/git-pack-ofs-report.png" +chmod 0600 "$dom_path" +mv -f -- "$temporary_root/output/git-pack-ofs-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_ofs_report.sh" +script = script_path.read_bytes() +evidence = json.loads((root / "evidence/git-pack-ofs-delta-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-ofs-delta-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-ofs-delta-v1/rendered-dom.html"), + "screenshot": { + **row(screenshot_path, "docs/assets/git-pack-ofs-report.png"), + "height": 1500, + "width": 1440, + }, + }, + "schema_version": "git-pack-ofs-browser-capture-attestation/v1", + "script": row(script_path, "tools/capture_ofs_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, 0o600) + 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_ofs_evidence.py" --write >/dev/null +python3 -B "$repo_root/tools/generate_ofs_evidence.py" --check >/dev/null +sha256sum "$output_path" diff --git a/tools/generate_ofs_evidence.py b/tools/generate_ofs_evidence.py new file mode 100755 index 0000000..9abd42a --- /dev/null +++ b/tools/generate_ofs_evidence.py @@ -0,0 +1,922 @@ +#!/usr/bin/env python3 +"""Generate and verify source-bound evidence for the real OFS_DELTA fixture.""" + +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 shutil +import stat +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, + _safe_capture_bytes, + _sha256, + _source_row, + _svg_header as _base_svg_header, + _write_artifacts, + _xml_text, +) +from tools.generate_pack_evidence import _parse_pack_png + + +EVIDENCE_PATH = Path("evidence/git-pack-ofs-delta-v1.json") +DEMO_ROOT = Path("docs/demo/git-pack-ofs-delta-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" +RECONSTRUCTION_PATH = Path("docs/assets/git-pack-ofs-reconstruction.svg") +WORKFLOW_PATH = Path("docs/assets/git-pack-ofs-workflow.svg") +CLI_PATH = Path("docs/assets/git-pack-ofs-cli.svg") +SCREENSHOT_PATH = Path("docs/assets/git-pack-ofs-report.png") +PNG_DIMENSIONS = (1440, 1500) +SHA1_RE = re.compile(r"^[0-9a-f]{40}$") +SHA256_RE = re.compile(r"^[0-9a-f]{64}$") +HEX_BYTES_RE = re.compile(r"^(?:[0-9a-f]{2}){1,3}$") +EXPECTED_ARGV = [ + "git", + "pack-objects", + "--delta-base-offset", + "--window=2", + "--depth=1", + "--threads=1", + "--compression=0", + "--no-reuse-delta", + "--no-reuse-object", + "--index-version=2", + "/fixture", +] +EXPECTED_CHECKS = { + "all_fixture_objects_present", + "exactly_one_full_entry", + "exactly_one_ofs_delta_entry", + "index_checksum_verified", + "index_crc32_matches_pack", + "index_fanout_matches_sorted_oids", + "index_offsets_match_pack", + "ofs_base_entry_bound", + "ofs_distance_reencoded", + "pack_trailer_verified", + "reconstructed_objects_match_fixture", + "ref_delta_entries_absent", +} + + +@dataclass(frozen=True, slots=True) +class OfsCapture: + screenshot: bytes + rendered_dom: bytes + attestation: bytes + document: Mapping[str, Any] + + +def _ofs_svg_header( + title: str, + description: str, + *, + width: int, + height: int, + receipt: str, + metadata_extra: Mapping[str, Any] | None = None, +) -> str: + 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 _cli_environment() -> dict[str, str]: + return { + "LANG": "C.UTF-8", + "LC_ALL": "C.UTF-8", + "PATH": os.environ.get("PATH", ""), + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONHASHSEED": "0", + "TZ": "UTC", + } + + +def _run_cli(arguments: Sequence[str]) -> bytes: + completed = subprocess.run( + [sys.executable, "-B", "-m", "git_dag_lab", *arguments], + cwd=ROOT, + env=_cli_environment(), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + check=False, + shell=False, + timeout=30, + ) + if completed.returncode != 0: + raise EvidenceError(f"OFS CLI {' '.join(arguments)} failed") + if completed.stderr: + raise EvidenceError(f"OFS CLI {' '.join(arguments)} wrote to stderr") + return completed.stdout + + +def _collect_cli() -> tuple[bytes, bytes, bytes, dict[str, Any]]: + first = ( + _run_cli(("pack-ofs-verify",)), + _run_cli(("pack-ofs-inspect", "--compact")), + _run_cli(("pack-ofs-inspect",)), + ) + second = ( + _run_cli(("pack-ofs-verify",)), + _run_cli(("pack-ofs-inspect", "--compact")), + _run_cli(("pack-ofs-inspect",)), + ) + if first != second: + raise EvidenceError("two fresh OFS 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("OFS inspection output is not JSON") from exc + if compact_document != pretty_document: + raise EvidenceError("compact and pretty OFS documents differ") + if compact_output != _json_bytes(compact_document, pretty=False): + raise EvidenceError("compact OFS inspection output is not canonical JSON") + if pretty_output != _json_bytes(pretty_document, pretty=True): + raise EvidenceError("pretty OFS 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("OFS 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("OFS evidence sections are malformed") + if report.get("schema_version") != "git-pack-ofs-delta-lab/v1": + raise EvidenceError("unexpected OFS evidence schema") + + receipt_sha = receipt.get("sha256") + if not isinstance(receipt_sha, str) or not SHA256_RE.fullmatch(receipt_sha): + raise EvidenceError("OFS receipt is malformed") + canonical = json.dumps( + report, + ensure_ascii=True, + separators=(",", ":"), + sort_keys=True, + ).encode("utf-8") + if _sha256(canonical) != receipt_sha: + raise EvidenceError("OFS receipt does not bind the canonical report") + + pack = report.get("pack", {}) + index = report.get("index", {}) + checks = report.get("checks", {}) + scope = report.get("scope", {}) + fixture = report.get("fixture", {}) + objects = report.get("objects_in_pack_order", []) + pack_objects = report.get("pack_objects", {}) + if ( + pack.get("version") != 2 + or pack.get("object_count") != 2 + or pack.get("full_count") != 1 + or pack.get("delta_count") != 1 + or pack.get("ofs_delta_count") != 1 + or pack.get("ref_delta_count") != 0 + or pack.get("max_delta_depth") != 1 + or not isinstance(pack.get("bytes"), int) + or not 32 < pack["bytes"] <= 1_048_576 + or not SHA1_RE.fullmatch(pack.get("trailer_sha1", "")) + or not SHA256_RE.fullmatch(pack.get("sha256", "")) + ): + raise EvidenceError("OFS 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 not 1_064 < index["bytes"] <= 1_048_576 + or not SHA1_RE.fullmatch(index.get("index_sha1", "")) + or not SHA256_RE.fullmatch(index.get("sha256", "")) + ): + raise EvidenceError("OFS index summary is outside the reviewed fixture") + if set(checks) != EXPECTED_CHECKS or not all( + value is True for value in checks.values() + ): + raise EvidenceError("not every OFS pack/index check passed") + + mutation = fixture.get("changed_record", {}) + fixture_rows = fixture.get("objects", []) + if ( + fixture.get("object_count") != 2 + or len(fixture_rows) != 2 + or len(objects) != 2 + or mutation + != { + "after": "1024:fedcba9876543210fedcba9876543210", + "before": "1024:0123456789abcdef0123456789abcdef", + "line_number": 1024, + } + ): + raise EvidenceError("OFS fixture inventory or mutation is not exact") + fixture_by_oid: dict[str, Mapping[str, Any]] = {} + for row in fixture_rows: + oid = row.get("oid", "") + if ( + not SHA1_RE.fullmatch(oid) + or not SHA256_RE.fullmatch(row.get("payload_sha256", "")) + or row.get("size") != 77_824 + or row.get("label") not in {"baseline", "line-1024-changed"} + ): + raise EvidenceError("OFS fixture row is malformed") + fixture_by_oid[oid] = row + if len(fixture_by_oid) != 2: + raise EvidenceError("OFS fixture object IDs are not unique") + + full, delta = objects + for row in objects: + fixture_row = fixture_by_oid.get(row.get("oid", "")) + if ( + fixture_row is None + or row.get("object_type") != "blob" + or row.get("size") != 77_824 + or row.get("size") != fixture_row.get("size") + or row.get("payload_sha256") != fixture_row.get("payload_sha256") + or row.get("label") != fixture_row.get("label") + or row.get("offset") != row.get("index_offset") + or row.get("crc32") != row.get("index_crc32") + or not isinstance(row.get("packed_size"), int) + or row["packed_size"] < 1 + ): + raise EvidenceError("OFS object row is not fixture- and index-bound") + if ( + full.get("representation") != "full" + or delta.get("representation") != "ofs-delta" + or delta.get("base_offset") != full.get("offset") + or delta.get("base_oid") != full.get("oid") + or delta.get("delta_depth") != 1 + or not isinstance(delta.get("stored_size"), int) + or not 4 <= delta["stored_size"] <= 262_144 + or not isinstance(delta.get("ofs_distance"), int) + or delta["ofs_distance"] != delta["offset"] - full["offset"] + or delta["ofs_distance"] < 1 + or not HEX_BYTES_RE.fullmatch(delta.get("ofs_offset_bytes_hex", "")) + ): + raise EvidenceError("OFS physical base/delta relationship is incomplete") + + oid_order = pack_objects.get("stdin_oid_order", []) + if ( + pack_objects.get("normalized_argv") != EXPECTED_ARGV + or pack_objects.get("stdin_bytes") != 82 + or oid_order != sorted(fixture_by_oid) + or not SHA256_RE.fullmatch(pack_objects.get("stdin_sha256", "")) + or report.get("command_trace") + != ["init", "hash-object", "hash-object", "pack-objects"] + ): + raise EvidenceError("OFS command provenance is incomplete") + if ( + scope.get("arbitrary_repository_supported") is not False + or scope.get("authentication_claim") is not False + or scope.get("byte_identity_requires_same_git_build") is not True + or scope.get("git_pack_objects_executed") is not True + or scope.get("network_required") is not False + or scope.get("ofs_delta_supported") is not True + or scope.get("ref_delta_supported") is not False + or scope.get("thin_pack_supported") is not False + ): + raise EvidenceError("OFS scope and non-claims are incomplete") + + expected_verify = ( + f"PASS git-pack-ofs-delta-lab/v1 objects=2 pack_version=2 " + f"index_version=2 deltas=1 pack_sha1={pack['trailer_sha1']} " + f"receipt_sha256={receipt_sha}\n" + ).encode("ascii") + if verify_output != expected_verify: + raise EvidenceError("OFS verification transcript is not exact") + 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("OFS evidence contains host, remote, or credential material") + + +def _bounded_binary_hash(path: Path, *, label: str) -> str: + try: + resolved = path.resolve(strict=True) + metadata = resolved.stat() + except (OSError, RuntimeError) as exc: + raise EvidenceError(f"{label} is unavailable") from exc + if ( + not stat.S_ISREG(metadata.st_mode) + or metadata.st_size < 1 + or metadata.st_size > 100 * 1024 * 1024 + ): + raise EvidenceError(f"{label} is outside the evidence bound") + try: + return _sha256(resolved.read_bytes()) + except OSError as exc: + raise EvidenceError(f"{label} could not be read") from exc + + +def _git_environment_proof() -> dict[str, object]: + candidate = shutil.which("git", path=_cli_environment()["PATH"]) + if candidate is None: + raise EvidenceError("Git executable is unavailable for OFS provenance") + git = Path(candidate).resolve(strict=True) + version = subprocess.run( + [os.fspath(git), "version"], + cwd=ROOT, + env=_cli_environment(), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + check=False, + shell=False, + timeout=10, + ) + exec_path = subprocess.run( + [os.fspath(git), "--exec-path"], + cwd=ROOT, + env=_cli_environment(), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + check=False, + shell=False, + timeout=10, + ) + if ( + version.returncode != 0 + or version.stderr + or exec_path.returncode != 0 + or exec_path.stderr + ): + raise EvidenceError("Git build provenance commands failed") + try: + version_text = version.stdout.decode("ascii").strip() + exec_path_text = exec_path.stdout.decode("utf-8").strip() + except UnicodeDecodeError as exc: + raise EvidenceError("Git build provenance output is malformed") from exc + if not re.fullmatch(r"git version [0-9]+(?:\.[0-9]+){1,3}", version_text): + raise EvidenceError("Git version string is outside the reviewed form") + pack_objects = Path(exec_path_text) / "git-pack-objects" + return { + "byte_identity_scope": "same recorded Git build", + "frontend_sha256": _bounded_binary_hash(git, label="Git frontend"), + "pack_objects_sha256": _bounded_binary_hash( + pack_objects, + label="Git pack-objects executable", + ), + "version": version_text, + } + + +def _reconstruction_svg(document: Mapping[str, Any]) -> bytes: + report = document["report"] + receipt = document["receipt"]["sha256"] + pack = report["pack"] + full, delta = report["objects_in_pack_order"] + parts = [ + _ofs_svg_header( + "Real OFS_DELTA reconstruction", + "Physical offsets, the biased backward distance, logical object sizes, and reconstructed object IDs come from the verified Git-generated pack.", + width=1440, + height=760, + receipt=receipt, + metadata_extra={ + "base_oid": full["oid"], + "delta_oid": delta["oid"], + "pack_sha256": pack["sha256"], + }, + ), + ' REAL GIT PACK · ONE FULL BLOB · ONE OFS_DELTA · ZERO REF_DELTA', + ' A physical backward edge reconstructs a new logical blob.', + ' ', + ' BASE ENTRY · FULL', + f' offset {full["offset"]}', + f' {full["packed_size"]} packed bytes · {full["size"]} logical bytes', + f' {_xml_text(full["label"])}', + f' {full["oid"]}', + ' ', + ' DELTA ENTRY · TYPE 6', + f' offset {delta["offset"]} − distance {delta["ofs_distance"]}', + f' biased bytes 0x{delta["ofs_offset_bytes_hex"]} · program {delta["stored_size"]} bytes', + f' {_xml_text(delta["label"])} · depth {delta["delta_depth"]}', + f' {delta["oid"]}', + ' ', + f' base_offset = {delta["base_offset"]}', + ' ', + f' INDEPENDENT REPLAY · {len(report["checks"])}/{len(report["checks"])} CHECKS', + f' Base OID {full["oid"]} → apply bounded copy/insert program → target OID {delta["oid"]}', + f' Index v2 binds physical offsets {full["index_offset"]} and {delta["index_offset"]}, plus CRC32 {full["crc32"]} and {delta["crc32"]}.', + f' receipt {receipt}', + "\n", + ] + return "\n".join(parts).encode("utf-8") + + +def _workflow_svg( + document: Mapping[str, Any], + git_environment: Mapping[str, object], +) -> bytes: + report = document["report"] + receipt = document["receipt"]["sha256"] + command = report["pack_objects"]["normalized_argv"] + stages = ( + ("FIXTURE", "2 × 77,824 B"), + ("REAL GIT", git_environment["version"]), + ("PACK PARSER", "OFS replay"), + ("INDEX V2", "offset + CRC"), + ("RECEIPT", receipt[:16] + "…"), + ) + parts = [ + _ofs_svg_header( + "Reproducible OFS evidence workflow", + "The exact fixed inputs, normalized Git arguments, independent parser, index cross-check, and receipt shown here are bound into the evidence manifest.", + width=1440, + height=690, + receipt=receipt, + metadata_extra={ + "git_frontend_sha256": git_environment["frontend_sha256"], + "stdin_sha256": report["pack_objects"]["stdin_sha256"], + }, + ), + ' FIXED INPUTS · SINGLE THREAD · SAME RECORDED GIT BUILD · FRESH RUNS ×2', + ' From two synthetic blobs to one source-bound receipt.', + ] + x_values = (35, 315, 595, 875, 1155) + for number, ((title, detail), x) in enumerate(zip(stages, x_values, strict=True), 1): + visible = str(detail) if len(str(detail)) <= 24 else str(detail)[:20] + "…" + parts.extend( + ( + f' ', + f' 0{number}', + f' {title}', + f' {_xml_text(visible)}', + f' PASS', + ) + ) + if number < len(stages): + parts.append(f' ') + first_line = " ".join(command[:6]) + second_line = " ".join(command[6:]) + parts.extend( + ( + ' ', + f' $ {_xml_text(first_line)}', + f' {_xml_text(second_line)}', + f' stdin SHA-256 {report["pack_objects"]["stdin_sha256"]}', + f' Git frontend SHA-256 {git_environment["frontend_sha256"]} · byte identity scope: same recorded build', + "\n", + ) + ) + return "\n".join(parts).encode("utf-8") + + +def _cli_svg(document: Mapping[str, Any], verify_output: bytes) -> bytes: + receipt = document["receipt"]["sha256"] + tokens = verify_output.decode("ascii").strip().split() + lines = ( + " ".join(tokens[:5]), + " ".join(tokens[5:7]), + tokens[7], + ) + parts = [ + _ofs_svg_header( + "Real OFS_DELTA CLI receipt", + "Exact stdout from pack-ofs-verify after real git pack-objects output was reconstructed and cross-checked against index v2.", + width=1440, + height=560, + receipt=receipt, + ), + ' REAL CLI STDOUT · STDERR 0 BYTES · EXIT 0', + ' ', + ' ', + ' $ python3 -B -m git_dag_lab pack-ofs-verify', + f' {_xml_text(lines[0])}', + f' {_xml_text(lines[1])}', + f' {_xml_text(lines[2])}', + f' receipt-bound source · {EVIDENCE_PATH.as_posix()}', + f' receipt {receipt}', + "\n", + ] + return "\n".join(parts).encode("utf-8") + + +def _report_html( + document: Mapping[str, Any], + verify_output: bytes, + git_environment: Mapping[str, object], +) -> bytes: + report = document["report"] + receipt = document["receipt"]["sha256"] + pack = report["pack"] + index = report["index"] + checks = report["checks"] + full, delta = report["objects_in_pack_order"] + transcript = html.escape(verify_output.decode("ascii").rstrip("\n")) + object_rows = "".join( + f'''{html.escape(row["representation"])}{html.escape(row["label"])}{row["oid"]}{row["offset"]}{row["stored_size"] if row["representation"] == "ofs-delta" else row["size"]}{row["crc32"]}''' + for row in report["objects_in_pack_order"] + ) + check_rows = "".join( + f"
  • {html.escape(name.replace('_', ' '))}
  • " + for name, passed in checks.items() + if passed + ) + command = html.escape(" ".join(report["pack_objects"]["normalized_argv"])) + text = f''' + + + + + + Git OFS_DELTA evidence — verified offline report + + + +
    +

    Git pack lab · actual OFS_DELTA offline report

    +

    One backward edge.
    Two verified blobs.

    +

    Real git pack-objects --delta-base-offset output is decoded without asking Git to replay it: the bounded delta program reconstructs the target, then index v2 independently binds both physical offsets and CRC32 rows.

    +
    PASS · report receipt {receipt}
    +
    +
    2logical blobs
    +
    1physical OFS_DELTA
    +
    {pack["bytes"]}actual pack bytes
    +
    12/12checks passed
    +
    +
    +

    Objects in physical pack order

    {object_rows}
    formfixtureOIDoffsetstoredCRC32
    Base → target
    offset {full["offset"]} → {delta["offset"]}; biased distance {delta["ofs_distance"]} encoded as {delta["ofs_offset_bytes_hex"]}
    {full["oid"]}
    ↓ independent copy/insert replay
    {delta["oid"]}
    +

    Independent fail-closed gate

      {check_rows}
    +
    +

    Exact command provenance

    $ {command}
    +stdin sha256={report["pack_objects"]["stdin_sha256"]}
    +Git={html.escape(str(git_environment["version"]))}
    +frontend sha256={git_environment["frontend_sha256"]}

    Real CLI receipt

    $ python3 -B -m git_dag_lab pack-ofs-verify
    +{transcript}
    Index checksum {index["index_sha1"]} · REF_DELTA false · thin pack false · arbitrary repository false · authentication claim false · network required false · exact byte identity scoped to the recorded Git build.
    +
    Generated offline · no JavaScript · no external assets{EVIDENCE_PATH.as_posix()}
    +
    + + +''' + 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 OFS capture path: {path.as_posix()}") + + +def _load_capture( + report_content: bytes, + receipt: str, + *, + allow_missing: bool, +) -> OfsCapture | 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("OFS browser capture is missing") + + screenshot = _safe_capture_bytes(SCREENSHOT_PATH, "OFS screenshot") + rendered_dom = _safe_capture_bytes(RENDERED_DOM_PATH, "OFS rendered DOM") + attestation = _safe_capture_bytes(ATTESTATION_PATH, "OFS capture attestation") + if _parse_pack_png(screenshot) != PNG_DIMENSIONS: + raise EvidenceError("OFS 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("OFS browser capture metadata is malformed") from exc + required = ( + f'data-ofs-receipt="{receipt}"', + 'data-object-count="2"', + 'data-check-count="12"', + "actual OFS_DELTA", + "Base → target", + "Two verified blobs", + ) + if not all(marker in dom_text for marker in required): + raise EvidenceError("OFS rendered DOM sentinels are incomplete") + if any(marker in dom_text for marker in ("/home/", "ERR_FILE", "github.com/")): + raise EvidenceError("OFS rendered DOM contains a forbidden marker") + if set(document) != {"attestation", "receipt"}: + raise EvidenceError("OFS 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("OFS 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("OFS capture attestation rows are incomplete") from exc + script_path = Path("tools/capture_ofs_report.sh") + script_content = _safe_capture_bytes(script_path, "OFS capture script") + if ( + payload.get("schema_version") + != "git-pack-ofs-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("OFS capture attestation does not bind current inputs") + return OfsCapture( + 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() + git_environment = _git_environment_proof() + report_content = _report_html(document, verify_output, git_environment) + 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, + RECONSTRUCTION_PATH: _reconstruction_svg(document), + WORKFLOW_PATH: _workflow_svg(document, git_environment), + CLI_PATH: _cli_svg(document, verify_output), + } + roles = { + EVIDENCE_PATH: "canonical compact real OFS_DELTA CLI evidence", + VERIFY_PATH: "exact pack-ofs-verify stdout", + INSPECT_PATH: "exact pretty pack-ofs-inspect stdout", + REPORT_PATH: "dependency-free OFS_DELTA offline report", + RECONSTRUCTION_PATH: "actual OFS base distance and reconstructed object flow", + WORKFLOW_PATH: "source-bound Git OFS evidence workflow", + CLI_PATH: "visualized exact pack-ofs-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 OFS_DELTA offline report browser capture", + ), + _artifact_row( + RENDERED_DOM_PATH, + capture.rendered_dom, + "actual DOM emitted during the OFS report capture", + ), + _artifact_row( + ATTESTATION_PATH, + capture.attestation, + "OFS 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-ofs-verify"], + "exit_code": 0, + "fresh_runs": 2, + "stderr_bytes": 0, + "stdout": VERIFY_PATH.as_posix(), + }, + { + "argv": [ + "python3", + "-B", + "-m", + "git_dag_lab", + "pack-ofs-inspect", + "--compact", + ], + "exit_code": 0, + "fresh_runs": 2, + "stderr_bytes": 0, + "stdout": EVIDENCE_PATH.as_posix(), + }, + { + "argv": [ + "python3", + "-B", + "-m", + "git_dag_lab", + "pack-ofs-inspect", + ], + "exit_code": 0, + "fresh_runs": 2, + "stderr_bytes": 0, + "stdout": INSPECT_PATH.as_posix(), + }, + ], + "git_build": git_environment, + "report_receipt_sha256": receipt, + "schema_version": "git-pack-ofs-evidence-manifest/v1", + "sources": [ + _source_row(Path("git_dag_lab/__init__.py")), + _source_row(Path("git_dag_lab/__main__.py")), + _source_row(Path("git_dag_lab/cli.py")), + _source_row(Path("git_dag_lab/lab.py")), + _source_row(Path("git_dag_lab/pack.py")), + _source_row(Path("tools/generate_evidence.py")), + _source_row(Path("tools/generate_pack_evidence.py")), + _source_row(Path("tools/generate_ofs_evidence.py")), + _source_row(Path("tools/capture_ofs_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: OfsCapture | 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"OFS 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"OFS manifest does not bind {path.as_posix()}") + if manifest["capture"].get("status") != "attested": + raise EvidenceError("OFS manifest omits its attested capture") + elif not allow_missing_screenshot: + raise EvidenceError("OFS manifest has no required browser capture") + + receipt = manifest["report_receipt_sha256"] + for path in (RECONSTRUCTION_PATH, WORKFLOW_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 (RECONSTRUCTION_PATH, WORKFLOW_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_ofs_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"OFS 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 ofs-evidence {action} artifacts={len(generated)} " + f"screenshot={screenshot}" + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) From 3c43281f18fbf297e92bd0bf3389aac17c8b1ebe Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 15:11:25 +0000 Subject: [PATCH 08/11] Run OFS staging on the active PR Trigger the temporary read-only evidence job from same-repository pull-request updates so the candidate can be built before the workflow reaches the default branch. --- .github/workflows/stage-ofs-evidence.yml | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/.github/workflows/stage-ofs-evidence.yml b/.github/workflows/stage-ofs-evidence.yml index 928432b..a6ad11a 100644 --- a/.github/workflows/stage-ofs-evidence.yml +++ b/.github/workflows/stage-ofs-evidence.yml @@ -1,7 +1,8 @@ name: Stage OFS evidence on: - workflow_dispatch: + pull_request: + types: [synchronize] permissions: contents: read @@ -12,6 +13,7 @@ concurrency: jobs: stage: + if: github.event.pull_request.head.repo.full_name == github.repository name: Build and attest OFS evidence runs-on: ubuntu-24.04 timeout-minutes: 25 @@ -21,7 +23,7 @@ jobs: with: fetch-depth: 1 persist-credentials: false - ref: ${{ github.sha }} + ref: ${{ github.event.pull_request.head.sha }} - name: Set up exact Python uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 @@ -30,13 +32,18 @@ jobs: - name: Assert staging boundary shell: bash + env: + HEAD_REPOSITORY: ${{ github.event.pull_request.head.repo.full_name }} + HEAD_SHA: ${{ github.event.pull_request.head.sha }} run: | set -euo pipefail test "$GITHUB_REPOSITORY" = "omar07ibrahim/hello-git" - test "$GITHUB_EVENT_NAME" = "workflow_dispatch" - [[ "$GITHUB_REF" =~ ^refs/heads/[A-Za-z0-9._/-]+$ ]] + test "$GITHUB_EVENT_NAME" = "pull_request" + [[ "$GITHUB_REF" =~ ^refs/pull/[1-9][0-9]*/merge$ ]] [[ "$GITHUB_SHA" =~ ^[0-9a-f]{40}$ ]] - test "$(git rev-parse HEAD)" = "$GITHUB_SHA" + [[ "$HEAD_SHA" =~ ^[0-9a-f]{40}$ ]] + test "$HEAD_REPOSITORY" = "$GITHUB_REPOSITORY" + test "$(git rev-parse HEAD)" = "$HEAD_SHA" test "$(git rev-parse --show-toplevel)" = "$GITHUB_WORKSPACE" test "$(python -c 'import platform; print(platform.python_version())')" = "3.12.12" test "$(git version)" = "git version 2.54.0" @@ -92,7 +99,7 @@ jobs: - name: Upload exact staged evidence uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: - name: hello-git-ofs-evidence-${{ github.sha }} + name: hello-git-ofs-evidence-${{ github.event.pull_request.head.sha }} path: | evidence/git-pack-ofs-delta-v1.json docs/demo/git-pack-ofs-delta-v1/verify.txt From 51a70ab6772c667ba6eba967c6cd2afa63bc29b3 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim <31526072+omar07ibrahim@users.noreply.github.com> Date: Sun, 9 Aug 2026 15:15:25 +0000 Subject: [PATCH 09/11] Adopt attested OFS evidence Publish the exact two-run CLI documents, receipt-derived reconstruction and workflow SVGs, offline report, rendered DOM, and digest-pinned Chromium capture produced by the reviewed staging job. --- docs/assets/git-pack-ofs-cli.svg | 29 +++ docs/assets/git-pack-ofs-reconstruction.svg | 41 ++++ docs/assets/git-pack-ofs-report.png | Bin 0 -> 598564 bytes docs/assets/git-pack-ofs-workflow.svg | 56 ++++++ .../capture-attestation.json | 60 ++++++ docs/demo/git-pack-ofs-delta-v1/inspect.json | 151 +++++++++++++++ docs/demo/git-pack-ofs-delta-v1/manifest.json | 177 ++++++++++++++++++ .../git-pack-ofs-delta-v1/rendered-dom.html | 36 ++++ docs/demo/git-pack-ofs-delta-v1/report.html | 36 ++++ docs/demo/git-pack-ofs-delta-v1/verify.txt | 1 + evidence/git-pack-ofs-delta-v1.json | 1 + 11 files changed, 588 insertions(+) create mode 100644 docs/assets/git-pack-ofs-cli.svg create mode 100644 docs/assets/git-pack-ofs-reconstruction.svg create mode 100644 docs/assets/git-pack-ofs-report.png create mode 100644 docs/assets/git-pack-ofs-workflow.svg create mode 100644 docs/demo/git-pack-ofs-delta-v1/capture-attestation.json create mode 100644 docs/demo/git-pack-ofs-delta-v1/inspect.json create mode 100644 docs/demo/git-pack-ofs-delta-v1/manifest.json create mode 100644 docs/demo/git-pack-ofs-delta-v1/rendered-dom.html create mode 100644 docs/demo/git-pack-ofs-delta-v1/report.html create mode 100644 docs/demo/git-pack-ofs-delta-v1/verify.txt create mode 100644 evidence/git-pack-ofs-delta-v1.json diff --git a/docs/assets/git-pack-ofs-cli.svg b/docs/assets/git-pack-ofs-cli.svg new file mode 100644 index 0000000..a67e0cf --- /dev/null +++ b/docs/assets/git-pack-ofs-cli.svg @@ -0,0 +1,29 @@ + + Real OFS_DELTA CLI receipt + Exact stdout from pack-ofs-verify after real git pack-objects output was reconstructed and cross-checked against index v2. + {"report_receipt_sha256":"8c2b8b07e9ab48492e9de13167c86eaf8835adcceecdcff958a6080a7ae540b0","source":"evidence/git-pack-ofs-delta-v1.json"} + + + + + + + + REAL CLI STDOUT · STDERR 0 BYTES · EXIT 0 + + + $ python3 -B -m git_dag_lab pack-ofs-verify + PASS git-pack-ofs-delta-lab/v1 objects=2 pack_version=2 index_version=2 + deltas=1 pack_sha1=736fdd73b58a6a68dfefec9288533a8d0a41a9e6 + receipt_sha256=8c2b8b07e9ab48492e9de13167c86eaf8835adcceecdcff958a6080a7ae540b0 + receipt-bound source · evidence/git-pack-ofs-delta-v1.json + receipt 8c2b8b07e9ab48492e9de13167c86eaf8835adcceecdcff958a6080a7ae540b0 + diff --git a/docs/assets/git-pack-ofs-reconstruction.svg b/docs/assets/git-pack-ofs-reconstruction.svg new file mode 100644 index 0000000..1bc4177 --- /dev/null +++ b/docs/assets/git-pack-ofs-reconstruction.svg @@ -0,0 +1,41 @@ + + Real OFS_DELTA reconstruction + Physical offsets, the biased backward distance, logical object sizes, and reconstructed object IDs come from the verified Git-generated pack. + {"base_oid":"586c379527cbf256bb8dc7558e808ae5150a8959","delta_oid":"d2e8559ccc7b0bcfd193b7e9ad0b9d59982eb7c6","pack_sha256":"080b1ca0b5cdb6c5e4cac746a48b8feb218aa7ec0b5583024a493d110c319a31","report_receipt_sha256":"8c2b8b07e9ab48492e9de13167c86eaf8835adcceecdcff958a6080a7ae540b0","source":"evidence/git-pack-ofs-delta-v1.json"} + + + + + + + + REAL GIT PACK · ONE FULL BLOB · ONE OFS_DELTA · ZERO REF_DELTA + A physical backward edge reconstructs a new logical blob. + + BASE ENTRY · FULL + offset 12 + 77843 packed bytes · 77824 logical bytes + line-1024-changed + 586c379527cbf256bb8dc7558e808ae5150a8959 + + DELTA ENTRY · TYPE 6 + offset 77855 − distance 77843 + biased bytes 0x83df13 · program 26 bytes + baseline · depth 1 + d2e8559ccc7b0bcfd193b7e9ad0b9d59982eb7c6 + + base_offset = 12 + + INDEPENDENT REPLAY · 12/12 CHECKS + Base OID 586c379527cbf256bb8dc7558e808ae5150a8959 → apply bounded copy/insert program → target OID d2e8559ccc7b0bcfd193b7e9ad0b9d59982eb7c6 + Index v2 binds physical offsets 12 and 77855, plus CRC32 b6dfc85b and 84af9f53. + receipt 8c2b8b07e9ab48492e9de13167c86eaf8835adcceecdcff958a6080a7ae540b0 + diff --git a/docs/assets/git-pack-ofs-report.png b/docs/assets/git-pack-ofs-report.png new file mode 100644 index 0000000000000000000000000000000000000000..ff7fe72761d29518f7cdf10758808a1e68f3e319 GIT binary patch literal 598564 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

    _xeT|%lM{SioFa0a&}nuMX|Xw>&U!$9d4{5<2 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