code wiki / _hdl_build / nx_access_wall_gate.nx

nx_access_wall_gate.nx source

↩ module page · 97 lines · 6809 B

1// nx_access_wall_gate.nx -- gate for the unified PDP (nx_access_wall). Proves ZERO-TRUST / DENY-BY-DEFAULT / 2// FAIL-CLOSED over composed signals: ALLOW only when network-tier AND identity-policy AND device AND rate all 3// permit; each layer denies INDEPENDENTLY (with its own code); deny-by-default on an ungranted resource; and 4// the reused nx_vault_acl explicit-deny-wins. Positive AND negative controls. Appends "ACCESSGATE row= 5// nx_access_wall pdp ... verdict=PASS" to knowledge/status/access_gate.log on all-pass. Exit 0 iff all pass. 6// license_tier: ORIGINAL 7import "nx_access_wall.nx" 8import "nx_syscalls.nx" 9 10func aw_w(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 11func aw_num(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1}; while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(1,bb,k); return 0 } 12func aw_cat(dst: *u8, off: i64, s: *u8) -> i64 { var o: i64=off; var k: i64=0; while s[k]!=(0 as u8){dst[o]=s[k];o=o+1;k=k+1} return o } 13func aw_catnum(dst: *u8, off: i64, v: i64) -> i64 { var o: i64=off; let t: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m}; var k: i64=0; if m==0{t[0]=48 as u8;k=1}; while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}; var i: i64=0; while i<k{dst[o]=t[k-1-i];o=o+1;i=i+1} return o } 14func aw_row(id: i64, ok: i64, what: *u8) -> i64 { aw_w("AWROW " as *u8); aw_num(id); aw_w(" " as *u8); if ok==1 { aw_w("PASS " as *u8) } else { aw_w("FAIL " as *u8) } aw_w(what); aw_w("\n" as *u8); return ok } 15func aw_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 16 17func main() -> i64 { 18 // ---- admin role policy: grant /admin (R+W), grant /studio (R), explicit-DENY /admin/danger ---- 19 let paths: *i64 = sys_mmap(8*8) as *i64 20 let lens: *i64 = sys_mmap(8*8) as *i64 21 let deny: *i64 = sys_mmap(8*8) as *i64 22 let caps: *i64 = sys_mmap(8*8) as *i64 23 paths[0]="/admin" as *u8 as i64; lens[0]=6; deny[0]=0; caps[0]=CAP_READ|CAP_WRITE 24 paths[1]="/studio" as *u8 as i64; lens[1]=7; deny[1]=0; caps[1]=CAP_READ 25 paths[2]="/admin/danger" as *u8 as i64; lens[2]=13; deny[2]=1; caps[2]=0 26 let nr: i64 = 3 27 28 // ---- public role policy: grant /studio (R) only ---- 29 let ppaths: *i64 = sys_mmap(8*8) as *i64 30 let plens: *i64 = sys_mmap(8*8) as *i64 31 let pdeny: *i64 = sys_mmap(8*8) as *i64 32 let pcaps: *i64 = sys_mmap(8*8) as *i64 33 ppaths[0]="/studio" as *u8 as i64; plens[0]=7; pdeny[0]=0; pcaps[0]=CAP_READ 34 let pnr: i64 = 1 35 36 let r_save: *u8 = "/admin/save" as *u8 37 let r_secret: *u8 = "/secret" as *u8 38 let r_studio: *u8 = "/studio" as *u8 39 let r_danger: *u8 = "/admin/danger" as *u8 40 41 var pass: i64 = 0 42 var rows: i64 = 0 43 var ok: i64 = 0 44 45 // R0: ALL layers permit -> ALLOW (admin writing /admin/save from LAN with a provisioned device, not rate-limited) 46 ok = 0; if aw_decide(paths,lens,deny,caps,nr, r_save, aw_slen(r_save), CAP_WRITE, NT_LAN, NT_LAN, 1, 1, 1)==AW_ALLOW { ok=1 } 47 rows=rows+1; pass=pass+aw_row(0, ok, "ALL layers permit -> ALLOW (identity+tier+device+rate)" as *u8) 48 49 // R1: rate-limited -> DENY_RATE (abuse layer) 50 ok = 0; if aw_decide(paths,lens,deny,caps,nr, r_save, aw_slen(r_save), CAP_WRITE, NT_LAN, NT_LAN, 1, 1, 0)==AW_DENY_RATE { ok=1 } 51 rows=rows+1; pass=pass+aw_row(1, ok, "rate-limited -> DENY_RATE (neg control)" as *u8) 52 53 // R2: network tier too low -> DENY_TIER (PUBLIC peer, area requires LAN) 54 ok = 0; if aw_decide(paths,lens,deny,caps,nr, r_save, aw_slen(r_save), CAP_WRITE, NT_PUBLIC, NT_LAN, 1, 1, 1)==AW_DENY_TIER { ok=1 } 55 rows=rows+1; pass=pass+aw_row(2, ok, "tier below required -> DENY_TIER (neg control)" as *u8) 56 57 // R3: device required but not provisioned -> DENY_DEVICE 58 ok = 0; if aw_decide(paths,lens,deny,caps,nr, r_save, aw_slen(r_save), CAP_WRITE, NT_LAN, NT_LAN, 0, 1, 1)==AW_DENY_DEVICE { ok=1 } 59 rows=rows+1; pass=pass+aw_row(3, ok, "device required but absent -> DENY_DEVICE (neg control)" as *u8) 60 61 // R4: deny-by-default -> an ungranted resource is DENIED even for admin with all other layers ok 62 ok = 0; if aw_decide(paths,lens,deny,caps,nr, r_secret, aw_slen(r_secret), CAP_READ, NT_LAN, NT_LAN, 1, 1, 1)==AW_DENY_POLICY { ok=1 } 63 rows=rows+1; pass=pass+aw_row(4, ok, "ungranted resource -> DENY_POLICY (deny-by-default)" as *u8) 64 65 // R5: explicit-deny-wins (reused from nx_vault_acl) -> /admin/danger denied despite the /admin grant 66 ok = 0; if aw_decide(paths,lens,deny,caps,nr, r_danger, aw_slen(r_danger), CAP_READ, NT_LAN, NT_LAN, 1, 1, 1)==AW_DENY_POLICY { ok=1 } 67 rows=rows+1; pass=pass+aw_row(5, ok, "explicit-deny-wins -> /admin/danger DENIED (reused acl)" as *u8) 68 69 // R6: PUBLIC area -> public role reads /studio from the open internet, no device -> ALLOW 70 ok = 0; if aw_decide(ppaths,plens,pdeny,pcaps,pnr, r_studio, aw_slen(r_studio), CAP_READ, NT_PUBLIC, NT_PUBLIC, 0, 0, 1)==AW_ALLOW { ok=1 } 71 rows=rows+1; pass=pass+aw_row(6, ok, "public area: PUBLIC read /studio, no device -> ALLOW" as *u8) 72 73 // R7: public role lacks WRITE on /studio -> DENY_POLICY (capability check, reused acl) 74 ok = 0; if aw_decide(ppaths,plens,pdeny,pcaps,pnr, r_studio, aw_slen(r_studio), CAP_WRITE, NT_PUBLIC, NT_PUBLIC, 0, 0, 1)==AW_DENY_POLICY { ok=1 } 75 rows=rows+1; pass=pass+aw_row(7, ok, "public lacks WRITE cap -> DENY_POLICY (neg control)" as *u8) 76 77 // R8: aw_allowed boolean maps ALLOW->1 and any deny->0 78 ok = 0 79 let va: i64 = aw_decide(paths,lens,deny,caps,nr, r_save, aw_slen(r_save), CAP_WRITE, NT_LAN, NT_LAN, 1, 1, 1) 80 let vd: i64 = aw_decide(paths,lens,deny,caps,nr, r_save, aw_slen(r_save), CAP_WRITE, NT_LAN, NT_LAN, 1, 1, 0) 81 if aw_allowed(va)==1 { if aw_allowed(vd)==0 { ok=1 } } 82 rows=rows+1; pass=pass+aw_row(8, ok, "aw_allowed: ALLOW->1, deny->0 (the PEP boolean)" as *u8) 83 84 aw_w("NX-ACCESS-WALL-GATE rows=" as *u8); aw_num(rows); aw_w(" pass=" as *u8); aw_num(pass); aw_w("\n" as *u8) 85 if pass == rows { 86 let line: *u8 = sys_mmap(256) 87 var off: i64 = aw_cat(line, 0, "ACCESSGATE row=nx_access_wall pdp rows=" as *u8) 88 off = aw_catnum(line, off, rows); off = aw_cat(line, off, " pass=" as *u8); off = aw_catnum(line, off, pass) 89 off = aw_cat(line, off, " verdict=PASS\n" as *u8) 90 let gf: i64 = sys_openat_append("knowledge/status/access_gate.log" as *u8, 0x1a4) 91 if gf >= 0 { sys_write(gf, line, off); sys_close(gf) } 92 aw_w("NX-ACCESS-WALL-GATE verdict=PASS -- zero-trust PDP recorded in access_gate.log\n" as *u8) 93 sys_exit(0); return 0 94 } 95 aw_w("NX-ACCESS-WALL-GATE verdict=FAIL -- NOT recorded (no fake-green)\n" as *u8) 96 sys_exit(1); return 1 97}