code wiki / _hdl_build / nx_access_pep_gate.nx
nx_access_pep_gate.nx source
↩ module page · 144 lines · 9146 B
1// nx_access_pep_gate.nx -- gate for the enforcement-point glue (nx_access_pep). Proves the WHOLE wall composes
2// in one pep_decide call over a request's raw signals: a provisioned device from the public internet with a
3// valid ed25519 signature is ALLOWED; missing device, bad signature, unauthorized resource, rate-limit, and a
4// network-tier shortfall are each DENIED with the right layer code; and pep_audit chains the decisions into a
5// tamper-evident log that verifies. End-to-end, sovereign, NO production touch. Appends "ACCESSGATE row=
6// nx_access_pep enforcement ... verdict=PASS" to knowledge/status/access_gate.log on all-pass. license_tier: ORIGINAL
7import "nx_access_pep.nx"
8import "nx_ed25519_signature.nx"
9import "nx_syscalls.nx"
10
11func pg_w(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
12func pg_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 }
13func pg_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 }
14func pg_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 }
15func pg_row(id: i64, ok: i64, what: *u8) -> i64 { pg_w("PEPROW " as *u8); pg_num(id); pg_w(" " as *u8); if ok==1 { pg_w("PASS " as *u8) } else { pg_w("FAIL " as *u8) } pg_w(what); pg_w("\n" as *u8); return ok }
16func pg_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
17func pg_mkip(a: i64, b: i64, c: i64, d: i64) -> i64 { return (a << 24) | (b << 16) | (c << 8) | d }
18func pg_hb(c: i64) -> i64 { if c>=0x30 { if c<=0x39 { return c-0x30 } } if c>=0x61 { if c<=0x66 { return c-0x61+10 } } return 0 }
19func pg_hex2(hex: *u8, nb: i64, out: *u8) -> i64 { var i: i64=0; while i<nb { out[i]=((pg_hb(hex[i*2] as i64)<<4)|pg_hb(hex[i*2+1] as i64)) as u8; i=i+1 } return 0 }
20
21// fill a request array: peer_ip, device_id, device_sig, resource, res_len, req_cap, rate_ok
22func setreq(r: *i64, ip: i64, did: i64, sig: i64, res: i64, rlen: i64, cap: i64, rate: i64) -> i64 {
23 r[0]=ip; r[1]=did; r[2]=sig; r[3]=res; r[4]=rlen; r[5]=cap; r[6]=rate; return 0
24}
25func pg_contains(buf: *u8, len: i64, ndl: *u8) -> i64 { let nl: i64=pg_slen(ndl); if nl==0 { return 1 } var i: i64=0; while i+nl<=len { var j: i64=0; var m: i64=1; while j<nl { if buf[i+j]!=ndl[j] { m=0; j=nl } else { j=j+1 } } if m==1 { return 1 } i=i+1 } return 0 }
26
27func main() -> i64 {
28 // provisioned device: RFC-8032 test key
29 let priv: *u8 = sys_mmap(32)
30 pg_hex2("9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" as *u8, 32, priv)
31 let pub: *u8 = sys_mmap(32)
32 ed25519_pub_from_priv(priv, pub)
33 let dev_ids: *i64 = sys_mmap(8*4) as *i64
34 let dev_pubs: *i64 = sys_mmap(8*4) as *i64
35 dev_ids[0]="laptop-1" as *u8 as i64; dev_pubs[0]=pub as i64
36
37 let chal: *u8 = "pep-challenge-0001" as *u8
38 let clen: i64 = pg_slen(chal)
39 let sig: *u8 = sys_mmap(64)
40 ed25519_sign_full(priv, chal, clen, sig)
41 let sigBad: *u8 = sys_mmap(64); var cb: i64=0; while cb<64 { sigBad[cb]=sig[cb]; cb=cb+1 }
42 if (sig[0] as i64)==0 { sigBad[0]=1 as u8 } else { sigBad[0]=0 as u8 }
43
44 // network-tier rules
45 let nets: *i64 = sys_mmap(8*8) as *i64
46 let pfx: *i64 = sys_mmap(8*8) as *i64
47 let trs: *i64 = sys_mmap(8*8) as *i64
48 nets[0]=pg_mkip(10,8,0,0); pfx[0]=24; trs[0]=NT_VPN
49 nets[1]=pg_mkip(192,168,0,0); pfx[1]=16; trs[1]=NT_LAN
50 nets[2]=pg_mkip(127,0,0,0); pfx[2]=8; trs[2]=NT_LAN
51 let ip_pub: i64 = pg_mkip(203,0,113,5)
52 let ip_lan: i64 = pg_mkip(192,168,1,5)
53
54 // acl policy: grant /area READ
55 let paths: *i64 = sys_mmap(8*4) as *i64
56 let lens: *i64 = sys_mmap(8*4) as *i64
57 let deny: *i64 = sys_mmap(8*4) as *i64
58 let caps: *i64 = sys_mmap(8*4) as *i64
59 paths[0]="/area" as *u8 as i64; lens[0]=5; deny[0]=0; caps[0]=CAP_READ
60
61 // the area config array (required_tier/require_device set per scenario)
62 let area: *i64 = sys_mmap(8*20) as *i64
63 area[0]=nets as i64; area[1]=pfx as i64; area[2]=trs as i64; area[3]=3
64 area[4]=dev_ids as i64; area[5]=dev_pubs as i64; area[6]=1
65 area[7]=paths as i64; area[8]=lens as i64; area[9]=deny as i64; area[10]=caps as i64; area[11]=1
66 area[14]=chal as i64; area[15]=clen
67 let req: *i64 = sys_mmap(8*8) as *i64
68
69 let lid: i64 = "laptop-1" as *u8 as i64
70 let r_area: i64 = "/area" as *u8 as i64
71 let r_secret: i64 = "/secret" as *u8 as i64
72
73 var pass: i64 = 0
74 var rows: i64 = 0
75 var ok: i64 = 0
76
77 // PE0: public internet + provisioned device (valid sig) + authorized -> ALLOW
78 area[12]=NT_PUBLIC; area[13]=1
79 setreq(req, ip_pub, lid, sig as i64, r_area, 5, CAP_READ, 1)
80 ok = 0; if pep_decide(req, area)==AW_ALLOW { ok=1 }
81 rows=rows+1; pass=pass+pg_row(0, ok, "remote provisioned device (valid sig) -> ALLOW (provisioned over the internet)" as *u8)
82
83 // PE1: no device presented but area requires one -> DENY_DEVICE
84 area[12]=NT_PUBLIC; area[13]=1
85 setreq(req, ip_pub, 0, sig as i64, r_area, 5, CAP_READ, 1)
86 ok = 0; if pep_decide(req, area)==AW_DENY_DEVICE { ok=1 }
87 rows=rows+1; pass=pass+pg_row(1, ok, "no device presented -> DENY_DEVICE (neg control)" as *u8)
88
89 // PE2: tampered device signature -> DENY_DEVICE
90 area[12]=NT_PUBLIC; area[13]=1
91 setreq(req, ip_pub, lid, sigBad as i64, r_area, 5, CAP_READ, 1)
92 ok = 0; if pep_decide(req, area)==AW_DENY_DEVICE { ok=1 }
93 rows=rows+1; pass=pass+pg_row(2, ok, "tampered device signature -> DENY_DEVICE (neg control)" as *u8)
94
95 // PE3: on-LAN, no device required, UNAUTHORIZED resource -> DENY_POLICY (zero-trust: LAN != grant)
96 area[12]=NT_PUBLIC; area[13]=0
97 setreq(req, ip_lan, 0, sig as i64, r_secret, 7, CAP_READ, 1)
98 ok = 0; if pep_decide(req, area)==AW_DENY_POLICY { ok=1 }
99 rows=rows+1; pass=pass+pg_row(3, ok, "on-LAN but unauthorized resource -> DENY_POLICY (neg control)" as *u8)
100
101 // PE4: rate-limited -> DENY_RATE
102 area[12]=NT_PUBLIC; area[13]=0
103 setreq(req, ip_lan, 0, sig as i64, r_area, 5, CAP_READ, 0)
104 ok = 0; if pep_decide(req, area)==AW_DENY_RATE { ok=1 }
105 rows=rows+1; pass=pass+pg_row(4, ok, "rate-limited -> DENY_RATE (neg control)" as *u8)
106
107 // PE5: area requires on-network (NT_LAN), peer is PUBLIC -> DENY_TIER (even with a valid device)
108 area[12]=NT_LAN; area[13]=1
109 setreq(req, ip_pub, lid, sig as i64, r_area, 5, CAP_READ, 1)
110 ok = 0; if pep_decide(req, area)==AW_DENY_TIER { ok=1 }
111 rows=rows+1; pass=pass+pg_row(5, ok, "area requires LAN, peer public -> DENY_TIER (neg control)" as *u8)
112
113 // PE6: pep_audit chains the decisions into a tamper-evident log that verifies
114 let genesis: *u8 = sys_mmap(32)
115 let e0: *u8 = sys_mmap(256); let h0: *u8 = sys_mmap(32)
116 let l0: i64 = pep_audit(genesis, ip_pub, "/area" as *u8, 5, AW_ALLOW, e0, h0)
117 let e1: *u8 = sys_mmap(256); let h1: *u8 = sys_mmap(32)
118 let l1: i64 = pep_audit(h0, ip_pub, "/area" as *u8, 5, AW_DENY_DEVICE, e1, h1)
119 let ents: *i64 = sys_mmap(8*4) as *i64; ents[0]=e0 as i64; ents[1]=e1 as i64
120 let lns: *i64 = sys_mmap(8*4) as *i64; lns[0]=l0; lns[1]=l1
121 let hsh: *i64 = sys_mmap(8*4) as *i64; hsh[0]=h0 as i64; hsh[1]=h1 as i64
122 ok = aa_verify(ents, lns, hsh, 2, genesis)
123 // CONTENT liar-killer (mutation probe 2026-07-14, survivors in pep_audit's resource-copy loop): a
124 // hash-chain that verifies is NOT enough -- the entry must actually CONTAIN the audited facts, else a
125 // corrupted formatter silently drops the resource from the tamper-evident log while the gate stays GREEN.
126 if pg_contains(e0, l0, "res=/area" as *u8) != 1 { ok = 0 }
127 if pg_contains(e1, l1, "res=/area" as *u8) != 1 { ok = 0 }
128 if pg_contains(e0, l0, "verdict=" as *u8) != 1 { ok = 0 }
129 rows=rows+1; pass=pass+pg_row(6, ok, "audit log verifies AND entries carry the real resource+verdict (content, not just chain)" as *u8)
130
131 pg_w("NX-ACCESS-PEP-GATE rows=" as *u8); pg_num(rows); pg_w(" pass=" as *u8); pg_num(pass); pg_w("\n" as *u8)
132 if pass == rows {
133 let line: *u8 = sys_mmap(256)
134 var off: i64 = pg_cat(line, 0, "ACCESSGATE row=nx_access_pep enforcement rows=" as *u8)
135 off = pg_catnum(line, off, rows); off = pg_cat(line, off, " pass=" as *u8); off = pg_catnum(line, off, pass)
136 off = pg_cat(line, off, " verdict=PASS\n" as *u8)
137 let gf: i64 = sys_openat_append("knowledge/status/access_gate.log" as *u8, 0x1a4)
138 if gf >= 0 { sys_write(gf, line, off); sys_close(gf) }
139 pg_w("NX-ACCESS-PEP-GATE verdict=PASS -- enforcement-point glue (ready to wire into the daemons) recorded\n" as *u8)
140 sys_exit(0); return 0
141 }
142 pg_w("NX-ACCESS-PEP-GATE verdict=FAIL -- NOT recorded (no fake-green)\n" as *u8)
143 sys_exit(1); return 1
144}