code wiki / _hdl_build / nx_fw_capstone_gate.nx

nx_fw_capstone_gate.nx source

↩ module page · 170 lines · 8364 B

1// nx_fw_capstone_gate.nx -- the WHOLE-STACK never-brick capstone, on a REAL artifact, EXECUTED. 2// 3// Ties the entire arc together: the real _offc/nx_boot_uefi.efi is wrapped as SIGNED UEFI capsules 4// (real EFI_CAPSULE_HEADER + ed25519, rung 11) into A/B banks + an immutable factory; selection is 5// SIGNATURE-gated (uc_verify); a forged image planted in the active bank is rejected and the system 6// falls back to a signed survivor, which is UNWRAPPED and ACTUALLY BOOTED in nx_emu_uefi (-> NISHI). 7// 8// C1 forged-active-survivor-boots : forged active -> signed survivor selected -> emu rc==0 (boots NISHI) 9// C2 double-fault-signed-factory : forged A + garbage B -> the signed immutable factory is selected 10// C3 all-forged-not-selectable : banks + factory all forged/garbage -> select null (never boot a forgery) 11// 12// GREEN only if all three hold. ONE emu fork (bounded reads keep fork cheap). The emu must be 13// pre-built: ./_offc/nx_sov_build_run.elf nx_emu_uefi. Evidence -> knowledge/status/fw_capstone_gate.log. 14// Sovereign: nx_fw_uefi_capsule (-> nx_fw_capsule -> nx_ed25519) + nx_framed_append + nx_syscalls. license_tier: ORIGINAL 15import "nx_fw_uefi_capsule.nx" 16import "nx_framed_append.nx" 17import "nx_syscalls.nx" 18 19const CAP_LOG: *u8 = "knowledge/status/fw_capstone_gate.log" 20const REAL_EFI: *u8 = "_offc/nx_boot_uefi.efi" 21const EMU_ELF: *u8 = "/tmp/nx_emu_uefi.sov.elf" 22const CAP_A: i64 = 65 23const CAP_B: i64 = 66 24 25func cap_copy(src: *u8, dst: *u8) -> i64 { 26 let lb: *i64 = sys_mmap(16) as *i64; lb[0] = 0 27 let b: *u8 = cp_read(src, lb) 28 if (b as i64) == 0 { return 0 - 1 } 29 cp_write(dst, b, lb[0]) 30 return 0 31} 32func cap_garbage(path: *u8) -> i64 { 33 let g: *u8 = sys_mmap(64); var i: i64 = 0; while i < 32 { g[i] = 0xff as u8; i = i + 1 } 34 cp_write(path, g, 32) 35 return 0 36} 37func cap_write_sel(sel: *u8, c: i64) -> i64 { let b: *u8 = sys_mmap(2); b[0] = c as u8; b[1] = 0 as u8; cp_write(sel, b, 1); return 0 } 38func cap_read_sel(sel: *u8) -> i64 { 39 let lb: *i64 = sys_mmap(16) as *i64; lb[0] = 0 40 let b: *u8 = cp_read(sel, lb) 41 if (b as i64) == 0 { return 0 } 42 if lb[0] < 1 { return 0 } 43 let c: i64 = b[0] as i64 44 if c == CAP_A { return CAP_A } 45 if c == CAP_B { return CAP_B } 46 return 0 47} 48// signature-gated select: preferred bank -> other -> signed factory; null if none verifies. 49func cap_select(sel: *u8, ba: *u8, bb: *u8, fac: *u8) -> *u8 { 50 let pref: i64 = cap_read_sel(sel) 51 if pref == CAP_B { if uc_verify(bb) == 1 { return bb } } else { if uc_verify(ba) == 1 { return ba } } 52 if pref == CAP_B { if uc_verify(ba) == 1 { return ba } } else { if uc_verify(bb) == 1 { return bb } } 53 if uc_verify(fac) == 1 { return fac } 54 return 0 as *u8 55} 56// extract the payload (the raw .efi) from a verified UEFI capsule into rawout. 57func cap_unwrap(capf: *u8, rawout: *u8) -> i64 { 58 let lb: *i64 = sys_mmap(16) as *i64; lb[0] = 0 59 let buf: *u8 = cp_read(capf, lb) 60 if (buf as i64) == 0 { return 0 - 1 } 61 let total: i64 = lb[0] 62 let plen: i64 = cp_rd_u32(buf, 24) - UC_HDR - UC_SIG 63 if plen < 0 { return 0 - 1 } 64 if (UC_HDR + plen) > total { return 0 - 1 } 65 cp_write(rawout, ((buf as i64) + UC_HDR) as *u8, plen) 66 return 0 67} 68// fork+exec the emu on the raw .efi, blocking wait; rc==0 => booted + printed NISHI. 69func cap_emu_boot(efi: *u8) -> i64 { 70 let pid: i64 = sys_fork() 71 if pid < 0 { return 125 } 72 if pid == 0 { 73 let argv: *i64 = sys_mmap(32) as *i64 74 argv[0] = EMU_ELF as i64; argv[1] = efi as i64; argv[2] = 0 75 let envp: *i64 = sys_mmap(16) as *i64; envp[0] = 0 76 let dn: i64 = sys_openat_wr("/dev/null" as *u8, 0x1a4) 77 if dn >= 0 { sys_dup3(dn, 1, 0); sys_dup3(dn, 2, 0) } 78 sys_execve(EMU_ELF, argv, envp) 79 sys_exit(127) 80 } 81 let st: *i64 = sys_mmap(16) as *i64 82 let w: i64 = sys_wait4(pid, st, 0) 83 if w < 0 { return 125 } 84 let sig: i64 = st[0] & 0x7f 85 if sig != 0 { return 128 + sig } 86 return (st[0] >> 8) & 0xff 87} 88func cap_row(name: *u8, pass: i64) -> i64 { 89 let buf: *u8 = sys_mmap(528) 90 var o: i64 = 0 91 o = cp_cat(buf, o, "CAPSTONE row=\x00" as *u8) 92 o = cp_cat(buf, o, name) 93 if pass == 1 { o = cp_cat(buf, o, " verdict=PASS\x00" as *u8) } else { o = cp_cat(buf, o, " verdict=FAIL\x00" as *u8) } 94 buf[o] = 0 as u8 95 fa_appendz(CAP_LOG, buf, 512) 96 cp_puts(" "); cp_puts(name) 97 if pass == 1 { cp_puts(" PASS\n") } else { cp_puts(" FAIL\n") } 98 return 0 99} 100 101func main() -> i64 { 102 cp_puts("fw-capstone gate (signed A/B survivor BOOTS in nx_emu_uefi on the REAL .efi)\n") 103 let e: i64 = sys_now_realtime_sec() 104 let p: i64 = __syscall(39, 0, 0, 0, 0, 0, 0) 105 let plat: *u8 = sys_mmap(32); cap_plat_seed(plat) 106 let forged: *u8 = sys_mmap(32); var i: i64 = 0; while i < 32 { forged[i] = ((i * 3 + 99) & 0xff) as u8; i = i + 1 } 107 108 // load the REAL boot stub 109 let lb: *i64 = sys_mmap(16) as *i64; lb[0] = 0 110 let efi: *u8 = cp_read(REAL_EFI, lb) 111 let efi_len: i64 = lb[0] 112 var loaded: i64 = 0 113 if (efi as i64) != 0 { if efi_len > 100 { loaded = 1 } } 114 cp_puts(" real .efi bytes="); cp_putn(efi_len); cp_puts("\n") 115 116 // sign ONCE: a signed UEFI capsule + a forged one; copy into slots per scenario 117 let srcS: *u8 = sys_mmap(256); cap_path(srcS, "/tmp/cap_s." as *u8, e, p) 118 let srcF: *u8 = sys_mmap(256); cap_path(srcF, "/tmp/cap_f." as *u8, e, p) 119 let srcG: *u8 = sys_mmap(256); cap_path(srcG, "/tmp/cap_g." as *u8, e, p) 120 var c1: i64 = 0; var c2: i64 = 0; var c3: i64 = 0; var rc: i64 = 0 - 1 121 if loaded == 1 { 122 uc_make(srcS, efi, efi_len, plat) 123 uc_make(srcF, efi, efi_len, forged) 124 cap_garbage(srcG) 125 126 let a: *u8 = sys_mmap(256); let b: *u8 = sys_mmap(256); let fac: *u8 = sys_mmap(256); let sel: *u8 = sys_mmap(256); let raw: *u8 = sys_mmap(256) 127 128 // C1: forged active -> signed survivor -> BOOT in emu 129 cap_path(a, "/tmp/cap_c1a." as *u8, e, p); cap_path(b, "/tmp/cap_c1b." as *u8, e, p); cap_path(fac, "/tmp/cap_c1f." as *u8, e, p); cap_path(sel, "/tmp/cap_c1s." as *u8, e, p); cap_path(raw, "/tmp/cap_c1raw." as *u8, e, p) 130 cap_copy(srcF, a); cap_copy(srcS, b); cap_copy(srcS, fac); cap_write_sel(sel, CAP_A) 131 let surv: *u8 = cap_select(sel, a, b, fac) 132 if (surv as i64) != 0 { if uc_verify(surv) == 1 { cap_unwrap(surv, raw); rc = cap_emu_boot(raw); if rc == 0 { c1 = 1 } } } 133 cp_puts(" C1: forged active -> survivor signed="); cp_putn(uc_verify(surv)); cp_puts(" emu rc="); cp_putn(rc); cp_puts(" (0=boots NISHI)\n") 134 135 // C2: double fault (forged A + garbage B) -> signed factory selected 136 cap_path(a, "/tmp/cap_c2a." as *u8, e, p); cap_path(b, "/tmp/cap_c2b." as *u8, e, p); cap_path(fac, "/tmp/cap_c2f." as *u8, e, p); cap_path(sel, "/tmp/cap_c2s." as *u8, e, p) 137 cap_copy(srcF, a); cap_garbage(b); cap_copy(srcS, fac); cap_write_sel(sel, CAP_A) 138 let surv2: *u8 = cap_select(sel, a, b, fac) 139 if (surv2 as i64) != 0 { if uc_verify(surv2) == 1 { c2 = 1 } } 140 141 // C3 teeth: all forged/garbage incl factory -> select null (never boot a forgery) 142 cap_path(a, "/tmp/cap_c3a." as *u8, e, p); cap_path(b, "/tmp/cap_c3b." as *u8, e, p); cap_path(fac, "/tmp/cap_c3f." as *u8, e, p); cap_path(sel, "/tmp/cap_c3s." as *u8, e, p) 143 cap_copy(srcF, a); cap_garbage(b); cap_copy(srcF, fac); cap_write_sel(sel, CAP_A) 144 let surv3: *u8 = cap_select(sel, a, b, fac) 145 if (surv3 as i64) == 0 { c3 = 1 } 146 } 147 148 var passes: i64 = 0 149 if c1 == 1 { passes = passes + 1 } 150 if c2 == 1 { passes = passes + 1 } 151 if c3 == 1 { passes = passes + 1 } 152 var green: i64 = 0 153 if passes == 3 { green = 1 } 154 155 cap_row("C1-forged-active-survivor-boots\x00" as *u8, c1) 156 cap_row("C2-double-fault-signed-factory \x00" as *u8, c2) 157 cap_row("C3-all-forged-not-selectable \x00" as *u8, c3) 158 159 let vb: *u8 = sys_mmap(528) 160 var o: i64 = 0 161 o = cp_cat(vb, o, "FW-CAPSTONE verdict=\x00" as *u8) 162 if green == 1 { o = cp_cat(vb, o, "GREEN\x00" as *u8) } else { o = cp_cat(vb, o, "RED\x00" as *u8) } 163 o = cp_cat(vb, o, " passes=\x00" as *u8); o = cp_catn(vb, o, passes); o = cp_cat(vb, o, "/3 END\x00" as *u8) 164 vb[o] = 0 as u8 165 fa_appendz(CAP_LOG, vb, 512) 166 cp_puts(vb); cp_puts("\n") 167 168 if green == 1 { return 0 } 169 return 1 170}