code wiki / _hdl_build / nx_site_lock_gate.nx

nx_site_lock_gate.nx source

↩ module page · 98 lines · 6459 B

1import "nx_gate_gn.nx" 2// nx_site_lock_gate.nx -- hermetic gate for the data-driven multi-level lock resolver. Builds fixture 3// registries in memory (no file I/O) and proves the load-bearing access-control properties: 4// T1 AREA lock: nishifamily /wiki/board.html -> LOCKED realm=WikiAdmin level=3 5// T2 AREA prefix: /wiki/board/sub.html -> LOCKED level=3 (segment-boundary '/') 6// T3 (NEG) PUBLIC-by-default: /wiki/charter.html -> PUBLIC (no rule => public; charter stays open) 7// T4 (NEG) boundary safety: /wiki/boardroom.html -> PUBLIC ("board" must NOT lock "boardroom") 8// T5 SITE lock: andelinwest /index.html -> LOCKED realm=AWAdmin level=2 (whole site) 9// T6 (NEG) per-site isolation: a nishifamily area rule must NOT lock a different site 10// T7 most-specific-wins: with a MULTI rule present, /wiki/board.html still resolves to the AREA (3) 11// T8 MULTI breadth: with MULTI present, /wiki/charter.html resolves to the multi lock (level 1) 12// Sovereign: imports nx_syscalls + the lib only. license_tier: ORIGINAL 13import "nx_syscalls.nx" 14import "nx_site_lock_lib.nx" 15 16func gp(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 17func g_app(buf: *u8, off: i64, s: *u8) -> i64 { var i: i64 = 0; while s[i] != (0 as u8) { buf[off + i] = s[i]; i = i + 1 } return off + i } 18func g_row(buf: *u8, off: i64, scope: *u8, pat: *u8, realm: *u8, lvl: *u8) -> i64 { 19 var o: i64 = g_app(buf, off, scope); buf[o] = 9 as u8; o = o + 1 20 o = g_app(buf, o, pat); buf[o] = 9 as u8; o = o + 1 21 o = g_app(buf, o, realm); buf[o] = 9 as u8; o = o + 1 22 o = g_app(buf, o, lvl); buf[o] = 10 as u8; o = o + 1 23 return o 24} 25 26func main(argc: i64, argv: *i64) -> i64 { 27 gp("=== nx_site_lock_gate (data-driven multi/site/area access-control lock) ===\n" as *u8) 28 let realm: *u8 = sys_mmap(128) 29 let lvl: *i64 = sys_mmap(8) as *i64 30 var pass: i64 = 0 31 var fail: i64 = 0 32 33 let site_nf: *u8 = "nishifamily" as *u8 34 let site_aw: *u8 = "andelinwest" as *u8 35 let site_other: *u8 = "othersite" as *u8 36 37 // ---- fixture A: area + site locks, NO multi (so unnamed paths are PUBLIC) ---- 38 let regA: *u8 = sys_mmap(4096); var an: i64 = 0 39 an = g_row(regA, an, "area" as *u8, "nishifamily/wiki/board" as *u8, "WikiAdmin" as *u8, "3" as *u8) 40 an = g_row(regA, an, "area" as *u8, "nishifamily/wiki/admin" as *u8, "WikiAdmin" as *u8, "3" as *u8) 41 an = g_row(regA, an, "site" as *u8, "andelinwest" as *u8, "AWAdmin" as *u8, "2" as *u8) 42 43 // T1: AREA lock hit 44 let p_board: *u8 = "/wiki/board.html" as *u8 45 var lk: i64 = slk_resolve(regA, an, site_nf, slk_slen(site_nf), p_board, slk_slen(p_board), realm, 128, lvl) 46 var t1: i64 = 0 47 if lk == 1 { if lvl[0] == 3 { if slk_eq(realm, slk_slen(realm), "WikiAdmin" as *u8, 9) == 1 { t1 = 1 } } } 48 if t1 == 1 { pass = pass + 1; gp(" T1 area-lock board->LOCKED L3 WikiAdmin PASS\n" as *u8) } else { fail = fail + 1; gp(" T1 FAIL lk=" as *u8); gn(lk); gp(" lvl=" as *u8); gn(lvl[0]); gp("\n" as *u8) } 49 50 // T2: AREA prefix with '/' boundary 51 let p_sub: *u8 = "/wiki/board/sub.html" as *u8 52 lk = slk_resolve(regA, an, site_nf, slk_slen(site_nf), p_sub, slk_slen(p_sub), realm, 128, lvl) 53 var t2: i64 = 0 54 if lk == 1 { if lvl[0] == 3 { t2 = 1 } } 55 if t2 == 1 { pass = pass + 1; gp(" T2 area-prefix sub->LOCKED L3 PASS\n" as *u8) } else { fail = fail + 1; gp(" T2 FAIL\n" as *u8) } 56 57 // T3 (NEG): public-by-default 58 let p_charter: *u8 = "/wiki/charter.html" as *u8 59 lk = slk_resolve(regA, an, site_nf, slk_slen(site_nf), p_charter, slk_slen(p_charter), realm, 128, lvl) 60 if lk == 0 { pass = pass + 1; gp(" T3 charter->PUBLIC (default) PASS\n" as *u8) } else { fail = fail + 1; gp(" T3 FAIL charter locked\n" as *u8) } 61 62 // T4 (NEG): boundary safety -- boardroom != board 63 let p_room: *u8 = "/wiki/boardroom.html" as *u8 64 lk = slk_resolve(regA, an, site_nf, slk_slen(site_nf), p_room, slk_slen(p_room), realm, 128, lvl) 65 if lk == 0 { pass = pass + 1; gp(" T4 boardroom->PUBLIC (boundary) PASS\n" as *u8) } else { fail = fail + 1; gp(" T4 FAIL boardroom matched board\n" as *u8) } 66 67 // T5: SITE lock covers any path 68 let p_idx: *u8 = "/index.html" as *u8 69 lk = slk_resolve(regA, an, site_aw, slk_slen(site_aw), p_idx, slk_slen(p_idx), realm, 128, lvl) 70 var t5: i64 = 0 71 if lk == 1 { if lvl[0] == 2 { if slk_eq(realm, slk_slen(realm), "AWAdmin" as *u8, 7) == 1 { t5 = 1 } } } 72 if t5 == 1 { pass = pass + 1; gp(" T5 site-lock andelinwest->LOCKED L2 AWAdmin PASS\n" as *u8) } else { fail = fail + 1; gp(" T5 FAIL\n" as *u8) } 73 74 // T6 (NEG): per-site isolation -- nishifamily's area rule must NOT lock othersite's same path 75 lk = slk_resolve(regA, an, site_other, slk_slen(site_other), p_board, slk_slen(p_board), realm, 128, lvl) 76 if lk == 0 { pass = pass + 1; gp(" T6 cross-site isolation othersite->PUBLIC PASS\n" as *u8) } else { fail = fail + 1; gp(" T6 FAIL nishifamily rule bled to othersite\n" as *u8) } 77 78 // ---- fixture B: area board + a MULTI base lock (everything >= L1) ---- 79 let regB: *u8 = sys_mmap(4096); var bn: i64 = 0 80 bn = g_row(regB, bn, "area" as *u8, "nishifamily/wiki/board" as *u8, "WikiAdmin" as *u8, "3" as *u8) 81 bn = g_row(regB, bn, "multi" as *u8, "*" as *u8, "BaseGate" as *u8, "1" as *u8) 82 83 // T7: most-specific-wins (area 3 beats multi 1) 84 lk = slk_resolve(regB, bn, site_nf, slk_slen(site_nf), p_board, slk_slen(p_board), realm, 128, lvl) 85 var t7: i64 = 0 86 if lk == 1 { if lvl[0] == 3 { if slk_eq(realm, slk_slen(realm), "WikiAdmin" as *u8, 9) == 1 { t7 = 1 } } } 87 if t7 == 1 { pass = pass + 1; gp(" T7 most-specific board->L3 (beats multi) PASS\n" as *u8) } else { fail = fail + 1; gp(" T7 FAIL lvl=" as *u8); gn(lvl[0]); gp("\n" as *u8) } 88 89 // T8: multi breadth (charter now caught by multi at L1) 90 lk = slk_resolve(regB, bn, site_nf, slk_slen(site_nf), p_charter, slk_slen(p_charter), realm, 128, lvl) 91 var t8: i64 = 0 92 if lk == 1 { if lvl[0] == 1 { if slk_eq(realm, slk_slen(realm), "BaseGate" as *u8, 8) == 1 { t8 = 1 } } } 93 if t8 == 1 { pass = pass + 1; gp(" T8 multi-breadth charter->L1 BaseGate PASS\n" as *u8) } else { fail = fail + 1; gp(" T8 FAIL\n" as *u8) } 94 95 gp("RESULT pass=" as *u8); gn(pass); gp(" fail=" as *u8); gn(fail) 96 if fail == 0 { gp(" verdict=GREEN\n" as *u8); sys_exit(0); return 0 } 97 gp(" verdict=RED\n" as *u8); sys_exit(1); return 1 98}