code wiki / _hdl_build / nx_cmos_signed.nx
nx_cmos_signed.nx source
↩ module page · 64 lines · 3600 B
1// nx_cmos_signed.nx -- AUTHENTICATED CMOS config recovery (rung 7 CMOS x rung 8 capsule).
2//
3// module: nishi-core.genealogy.cmos_signed
4// capability: CORE_COMPUTE (recover CMOS only from a platform-SIGNED golden snapshot)
5//
6// nx_cmos kept a golden snapshot for restore -- but a checksum-valid golden could still be a TAMPERED
7// or FORGED config. Here the golden snapshot is a platform-SIGNED capsule (the 128-byte CMOS image is
8// the ed25519-signed payload). cmos_restore_signed restores ONLY IF: the golden's signature verifies
9// against the trusted platform key AND the payload is a CMOS image AND its AT checksum is valid.
10// So config recovery is AUTHENTIC -- a forged/tampered golden cannot brick you with a bad config.
11// Sandboxed/in-memory. Sovereign: nx_cmos + nx_fw_capsule (-> nx_ed25519) + nx_syscalls. license_tier: ORIGINAL
12import "nx_cmos.nx"
13import "nx_fw_capsule.nx"
14import "nx_syscalls.nx"
15
16const CS_REFUSED: i64 = 0 - 1
17
18// wrap a 128-byte CMOS image as a platform-SIGNED golden capsule.
19func cmos_golden_capsule(path: *u8, img: *u8, seed: *u8) -> i64 {
20 cap_make(path, img, CMOS_SIZE, seed)
21 return 0
22}
23
24// restore `working` from a golden capsule ONLY IF: signature verifies (authentic) AND payload is a
25// CMOS_SIZE image AND its AT checksum is valid. Else REFUSE -- never recover from an untrusted golden.
26func cmos_restore_signed(working: *u8, golden_cap: *u8) -> i64 {
27 if cap_verify(golden_cap) == 0 { return CS_REFUSED } // not platform-signed -> refuse
28 let lb: *i64 = sys_mmap(16) as *i64; lb[0] = 0
29 let buf: *u8 = cp_read(golden_cap, lb)
30 if (buf as i64) == 0 { return CS_REFUSED }
31 let plen: i64 = cp_rd_u32(buf, 4)
32 if plen != CMOS_SIZE { return CS_REFUSED }
33 let pay: *u8 = ((buf as i64) + 8) as *u8
34 if cmos_valid(pay) == 0 { return CS_REFUSED } // signed but not a valid CMOS -> refuse
35 var i: i64 = 0
36 while i < CMOS_SIZE { working[i] = pay[i]; i = i + 1 }
37 return 0
38}
39
40func main() -> i64 {
41 c_puts("=== NISHI SIGNED CMOS GOLDEN (authenticated config recovery) ===\n")
42 let epoch: i64 = sys_now_realtime_sec()
43 let pid: i64 = __syscall(39, 0, 0, 0, 0, 0, 0)
44 let plat: *u8 = sys_mmap(32); cap_plat_seed(plat)
45 let forged: *u8 = sys_mmap(32); var i: i64 = 0; while i < 32 { forged[i] = ((i * 3 + 99) & 0xff) as u8; i = i + 1 }
46 let img: *u8 = sys_mmap(CMOS_SIZE + 16); cmos_golden(img)
47 let work: *u8 = sys_mmap(CMOS_SIZE + 16); cmos_golden(work)
48 let gcap: *u8 = sys_mmap(256); cap_path(gcap, "/tmp/cmoss_g." as *u8, epoch, pid)
49 cmos_golden_capsule(gcap, img, plat)
50 c_puts(" signed golden capsule verify="); c_putn(cap_verify(gcap)); c_puts("\n")
51 cmos_corrupt_raw(work, 20)
52 c_puts(" working CMOS corrupted -> valid="); c_putn(cmos_valid(work)); c_puts("\n")
53 let r1: i64 = cmos_restore_signed(work, gcap)
54 c_puts(" restore from SIGNED golden -> rc="); c_putn(r1); c_puts(" working valid="); c_putn(cmos_valid(work)); c_puts("\n")
55 cap_corrupt(gcap)
56 let r2: i64 = cmos_restore_signed(work, gcap)
57 c_puts(" restore from TAMPERED golden -> rc="); c_putn(r2); c_puts(" (-1=REFUSED: authenticity protects recovery)\n")
58 let fcap: *u8 = sys_mmap(256); cap_path(fcap, "/tmp/cmoss_f." as *u8, epoch, pid)
59 cmos_golden_capsule(fcap, img, forged)
60 let r3: i64 = cmos_restore_signed(work, fcap)
61 c_puts(" restore from FORGED golden -> rc="); c_putn(r3); c_puts(" (-1=REFUSED)\n")
62 c_puts(" INVARIANT: CMOS recovery restores ONLY a platform-signed + checksum-valid config -> authenticated never-brick\n")
63 sys_exit(0); return 0
64}