Skip to content

Commit d6d4ccb

Browse files
committed
[docs] bind C3 post-OI NVS evidence
Signed-off-by: Viwat Vchirawongkwin <viwat.v@chula.ac.th>
1 parent 18553d0 commit d6d4ccb

2 files changed

Lines changed: 32 additions & 2 deletions

File tree

‎docs/specifications/firmware/browser-flashing.md‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2349,6 +2349,22 @@ The operation does not run a gate, infer a pass from a build, create a
23492349
threshold, or turn pending evidence into a result. This section freezes an
23502350
evidence-writing workflow and records no passed result.
23512351

2352+
For `esp32-c3-4mb`, `create-result` additionally requires one explicit
2353+
post-OI NVS inventory receipt path; Pico rejects that input. The receipt MUST
2354+
be canonical strict JSON in one stable, exclusive mode-`0600` regular file. It
2355+
contains no NVS values or device identity: only namespace/key/type inventory
2356+
and an exact summary with schema/profile, candidate `release.json` and merged
2357+
firmware SHA-256, the verify-mode OI raw-log SHA-256, exactly 10 reset samples,
2358+
NVS partition offset `0x9000` and size `0x6000`, integrity `passed`, and the
2359+
complete sorted written-namespace list. The writer derives the receipt's byte
2360+
length and SHA-256, requires its summary to match the inventory, rejects any
2361+
written `phy` namespace/key, and copies only the summary plus receipt binding
2362+
into the private result. Completion and finalization cross-check the retained
2363+
OI raw-log digest against the completed C3 observation. The public C3 summary
2364+
does not expose this private object; `qualification_result_sha256` binds it.
2365+
The already-required `provisioning_install: passed` remains the separate
2366+
full-chip-erase/install proof and is neither duplicated nor weakened.
2367+
23522368
The four ESP records use `resource_kind: "esp-idf"` and
23532369
`provisioning_kind: "esp-web-serial"`. Each additionally has exact
23542370
`manifest_sha256`; the V4 ESP `oi1_build`, heap observations, and

‎docs/specifications/firmware/ports/esp32-c3-4mb.md‎

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,22 @@ existing 10 controlled C3-G4 reset samples MUST still pass the 3,000 ms ceiling
8989
and every frozen heap floor. A read-only NVS namespace/key/type inventory taken
9090
after those repeated resets MUST pass partition integrity checks and contain no
9191
written `phy` namespace or key; values are neither required nor retained as
92-
public evidence. The application and VFS regions remain subject to their
93-
existing exact-byte and functional checks.
92+
public evidence. The C3 private-result writer MUST require that inventory as a
93+
stable, exclusive mode-`0600` canonical receipt. It derives and stores the
94+
receipt's exact SHA-256 and byte length plus a candidate-bound summary; the
95+
summary binds the candidate release and firmware digests, the exact OI raw-log
96+
digest, 10 reset samples, NVS offset `0x9000`, size `0x6000`, integrity pass,
97+
and the complete written namespace list. The writer rejects a missing,
98+
changed, malformed, non-exclusive, wrong-candidate, wrong-offset,
99+
wrong-size, integrity-failed, or `phy`-containing receipt. Finalization MUST
100+
cross-check its OI raw-log binding against the completed C3 observation. The
101+
public summary omits the private receipt body; its private-result digest binds
102+
the validated receipt transitively. The application and VFS regions remain
103+
subject to their existing exact-byte and functional checks.
104+
105+
The existing V5 `provisioning_install: passed` check remains the mechanical
106+
full-chip-erase/install attestation and MUST still be present. The NVS receipt
107+
does not duplicate or replace that check.
94108

95109
## C3-G0 — Identity, build, and install (FROZEN)
96110

0 commit comments

Comments
 (0)