1.8 KiB
1.8 KiB
Portable Audit Pack Determinism Profile
Status: Draft frozen for implementation handoff (2026-02-10).
Scope
Deterministic requirements for portable pack generation (manifest.json, BOM, DSSE envelope, Rekor material, optional VEX/Parquet artifacts).
Normative rules
- Canonical JSON MUST use RFC 8785/JCS-compatible serialization.
- File inventory in
manifest.filesMUST be lexicographically sorted by canonical path. - Archive entries MUST have fixed metadata:
mtime:2026-01-01T00:00:00Zuid/gid:0/0- file mode
0644, directory mode0755
- Digests MUST be lowercase SHA-256 hex.
- Optional artifacts (
merged_vex.json,components.parquet) MUST not change ordering of required files. - Compression toolchain versions MUST be pinned in release manifests.
Canonicalization conformance tests (required)
- Nested object key ordering stability.
- Unicode normalization and escaping stability.
- Non-finite number rejection (
NaN,Infinity). - DSSE payload preimage digest stability across repeated runs.
Byte stability gate
- CI must generate the same pack twice from identical frozen input fixtures.
- Outputs must be byte-identical (
sha256sum pack1 == pack2). - On mismatch, pipeline fails with
ERR_PACK_NON_DETERMINISTIC.
Deterministic fixture layout
testvectors/portable-audit-pack/minimal/testvectors/portable-audit-pack/with-vex/testvectors/portable-audit-pack/with-parquet/
Each fixture set should include:
- inputs (
sbom.json, optionalvex.json) - expected canonical files
- expected per-file SHA-256 digests
- expected package archive digest
Toolchain pin set (to be implemented)
- JCS canonicalizer version
- DSSE signer library version
- tar implementation/version
- compression implementation/version
- Parquet writer version (if profile enabled)