code wiki / _hdl_build / nx_build_bypass_gate.nx

nx_build_bypass_gate.nx source

↩ module page · 134 lines · 6509 B

1// nx_build_bypass_gate.nx -- R2 of BACKEND-BUILD GOVERNANCE: the NO-BYPASS LAW + audit (PM control-plane), 2// the build-time twin of the publisher's nx_pub_bypass_gate. It disk-WALKS a directory of organs 3// (getdents64, the nx_ws_index_lib idiom) and cross-checks each against the build-registry (br_registered 4// from nx_build_registry_lib): any organ on disk NOT in the registry = a BYPASS (built without registering), 5// unless it is on the ALLOWLIST (exempt infra, the registrar's own analog of allowlisting the publisher). 6// 7// HERMETIC GATE w/ NEGATIVE CONTROL (GREEN means the audit actually discriminates, and the allowlist works): 8// T1 reg=[A,B], C unregistered, no allowlist -> flagged == 1 (only C, the bypass) 9// T2 then register C too -> flagged == 0 (no bypass remains -> responds to state) 10// T3 fresh reg=[A,B], C unregistered, allowlist=[C] -> flagged == 0 (C exempt -> allowlist works) 11// Sovereign: imports nx_build_registry_lib (+ nx_syscalls). license_tier: ORIGINAL expect_exit: 0 12import "nx_build_registry_lib.nx" 13import "nx_syscalls.nx" 14 15func bp(s: *u8) -> i64 { let n: i64 = br_len(s); sys_write(1, s, n); return 0 } 16func bpn(v: i64) -> i64 { 17 let bb: *u8 = sys_mmap(28); var m: i64 = v 18 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m } 19 let t: *u8 = sys_mmap(28); var k: i64 = 0 20 if m == 0 { t[0] = 48 as u8; k = 1 } 21 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 22 var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 23 sys_write(1, bb, k); return 0 24} 25 26func bga_getdents(fd: i64, buf: *u8, count: i64) -> i64 { return __syscall(217, fd, buf, count, 0, 0, 0) } 27func bga_touch(path: *u8) -> i64 { let fd: i64 = sys_openat_wr(path, 420); if fd >= 0 { sys_close(fd) } return 0 } 28func bga_trunc(path: *u8) -> i64 { let fd: i64 = sys_openat_wr(path, 420); if fd >= 0 { sys_close(fd) } return 0 } 29 30// name starts with `prefix` AND ends with ".nx" 31func bga_isorgan(name: *u8, prefix: *u8) -> i64 { 32 var i: i64 = 0 33 while prefix[i] != (0 as u8) { if name[i] != prefix[i] { return 0 } i = i + 1 } 34 let n: i64 = br_len(name) 35 if n < 3 { return 0 } 36 if name[n - 3] != (46 as u8) { return 0 } // '.' 37 if name[n - 2] != (110 as u8) { return 0 } // 'n' 38 if name[n - 1] != (120 as u8) { return 0 } // 'x' 39 return 1 40} 41func bga_in_allow(name: *u8, allow: *i64, allow_n: i64) -> i64 { 42 var k: i64 = 0 43 while k < allow_n { if br_streq(name, allow[k] as *u8) == 1 { return 1 } k = k + 1 } 44 return 0 45} 46 47// THE AUDIT: walk `dir`, for each `prefix`*.nx organ not registered and not allowlisted -> flag (bypass). 48// Records flagged name ptrs into flagged_out (copied). Returns the flagged count. 49func bga_audit(dir: *u8, prefix: *u8, registry: *u8, allow: *i64, allow_n: i64, flagged_out: *i64, fcap: i64) -> i64 { 50 let fd: i64 = sys_openat_rd(dir) 51 if fd < 0 { return 0 - 1 } 52 let gbuf: *u8 = sys_mmap(65536) 53 var cnt: i64 = 0 54 var nread: i64 = bga_getdents(fd, gbuf, 65536) 55 while nread > 0 { 56 var off: i64 = 0 57 while off < nread { 58 let reclen: i64 = (gbuf[off + 16] as i64) | ((gbuf[off + 17] as i64) << 8) 59 if reclen <= 0 { off = nread } else { 60 let name: *u8 = ((gbuf as i64) + off + 19) as *u8 61 if bga_isorgan(name, prefix) == 1 { 62 if br_registered(registry, name) == 0 { 63 if bga_in_allow(name, allow, allow_n) == 0 { 64 if cnt < fcap { 65 let nb: *u8 = sys_mmap(128) 66 var c: i64 = 0 67 while name[c] != (0 as u8) { nb[c] = name[c]; c = c + 1 } 68 nb[c] = 0 as u8 69 flagged_out[cnt] = nb as i64 70 } 71 cnt = cnt + 1 72 } 73 } 74 } 75 off = off + reclen 76 } 77 } 78 nread = bga_getdents(fd, gbuf, 65536) 79 } 80 sys_close(fd) 81 return cnt 82} 83 84func main() -> i64 { 85 bp("=== nx_build_bypass_gate: R2 NO-BYPASS LAW + audit (PM control-plane) ===\n" as *u8) 86 let dir: *u8 = "/tmp" as *u8 87 let prefix: *u8 = "__bgaud_organ_" as *u8 88 let reg1: *u8 = "/tmp/__bgaud_reg.log" as *u8 89 let reg2: *u8 = "/tmp/__bgaud_reg2.log" as *u8 90 91 // fixtures: 3 synthetic organs on disk 92 bga_touch("/tmp/__bgaud_organ_A.nx" as *u8) 93 bga_touch("/tmp/__bgaud_organ_B.nx" as *u8) 94 bga_touch("/tmp/__bgaud_organ_C.nx" as *u8) 95 96 // reg1 = A,B registered (C built but NOT registered = a bypass) 97 bga_trunc(reg1) 98 br_submit(reg1, "__bgaud_organ_A.nx" as *u8, "LIB" as *u8, "BUILT" as *u8) 99 br_submit(reg1, "__bgaud_organ_B.nx" as *u8, "LIB" as *u8, "BUILT" as *u8) 100 101 let flagged: *i64 = sys_mmap(8 * 64) as *i64 102 let f1: i64 = bga_audit(dir, prefix, reg1, 0 as *i64, 0, flagged, 64) 103 bp(" T1 (reg=[A,B], no allowlist): flagged=" as *u8); bpn(f1); bp(" (expect 1 = C the bypass)" as *u8) 104 if f1 >= 1 { bp(" first=" as *u8); bp(flagged[0] as *u8) } 105 bp("\n" as *u8) 106 107 // T2: register C -> no bypass remains 108 br_submit(reg1, "__bgaud_organ_C.nx" as *u8, "LIB" as *u8, "BUILT" as *u8) 109 let f2: i64 = bga_audit(dir, prefix, reg1, 0 as *i64, 0, flagged, 64) 110 bp(" T2 (then register C): flagged=" as *u8); bpn(f2); bp(" (expect 0 = audit responds to state)\n" as *u8) 111 112 // T3: fresh reg=[A,B], C unregistered but ALLOWLISTED -> exempt 113 bga_trunc(reg2) 114 br_submit(reg2, "__bgaud_organ_A.nx" as *u8, "LIB" as *u8, "BUILT" as *u8) 115 br_submit(reg2, "__bgaud_organ_B.nx" as *u8, "LIB" as *u8, "BUILT" as *u8) 116 let allow: *i64 = sys_mmap(8 * 4) as *i64 117 allow[0] = "__bgaud_organ_C.nx" as *u8 as i64 118 let f3: i64 = bga_audit(dir, prefix, reg2, allow, 1, flagged, 64) 119 bp(" T3 (reg=[A,B], allowlist=[C]): flagged=" as *u8); bpn(f3); bp(" (expect 0 = allowlist exempts C)\n" as *u8) 120 121 var pass: i64 = 0 122 var ok: i64 = 1 123 if f1 == 1 { pass = pass + 1 } else { ok = 0 } 124 if f2 == 0 { pass = pass + 1 } else { ok = 0 } 125 if f3 == 0 { pass = pass + 1 } else { ok = 0 } 126 127 bp(" RESULT pass=" as *u8); bpn(pass); bp("/3 verdict=" as *u8) 128 if ok == 1 { 129 bp("GREEN (NO-BYPASS audit flags the unregistered build, clears on register, honors the allowlist)\n" as *u8) 130 sys_exit(0); return 0 131 } 132 bp("RED\n" as *u8) 133 sys_exit(1); return 1 134}