Protected OpenSBI wrapper matches the inspected host payload
A deterministic legacy U-Boot header around the inspected 270744-byte OpenSBI
1.4 fw_jump.bin produces 270808 bytes with SHA-256 9627edbe…f42c99, exactly
the protected wrapper hash recorded by the normal report and freshly checked
before the nohz-off trial. Payload SHA
74d08f87…938f9 identifies the actual inspected host binary.
This closes the file-identity gap in the timer/SBI audit:
the wrapper store output was absent, but its deterministic packaging is fully
reproducible without that output. nix/stage1.nix sets epoch 1700000000 and
wraps the existing payload as a RISC-V/Linux/uncompressed kernel with zero
load/entry and name linux. The verifier constructs that 64-byte header,
computes both CRCs and compares the resulting full-file SHA against the
protected normal file and actual physical preflight receipt.
Executed verifier and safe result preserve inputs/hashes and proof limits. Exact command (return 0):
python3 docs/evidence/mainline-uart-progress-memory-printk/firmware-identity-host/verify-wrapper.py \
--payload /nix/store/7fmfx6dan9c2dsa55cs3jba3b5wx6w6p-opensbi-k230-riscv64-unknown-linux-gnu-1.4/fw_jump.bin \
--normal-report PRIVATE_NORMAL --trial-result PRIVATE_NOHZ_RESULT \
--output FRESH_PRIVATE_RESULT
No firmware/kernel build, flash, UART access or new board readback was performed. This is host file reconstruction tied to the earlier physical protected-file check. It supports identifying the inspected OpenSBI payload in that file; it does not independently observe firmware execution, runtime SSTC/backend choice, CSR interrupt state or the cause of missing worker/observer progress. The read source’s full-width timer stop/rearm support is therefore tied to the protected payload, while runtime behavior remains UNVERIFIED.