code wiki / _hdl_build / nx_hostop_serve_gate.nx
nx_hostop_serve_gate.nx source
↩ module page · 55 lines · 4458 B
1// nx_hostop_serve_gate.nx -- R10b PROOF: host served-smoke + host canary, over REAL loopback HTTP against a host-root
2// served by the publisher's own psv_listen. Proves hostop_host_smoke (served body hashes to approved sha) and
3// hostop_canary (cohort served-smoke gate: good promotes, corrupt ABORTS with 0% main blast). Forking; run foreground.
4// license_tier: ORIGINAL expect_exit: 0
5import "nx_syscalls.nx"
6import "nx_hostop.nx"
7import "nx_pub_serve.nx"
8import "nx_runpath.nx"
9
10func g_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 g_n(v: i64) -> i64 { var m: i64=v; if m<0{g_w("-" as *u8);m=0-m} let t:*u8=sys_mmap(24); 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; let o:*u8=sys_mmap(24); while i<k{o[i]=t[k-1-i];i=i+1} sys_write(1,o,k); return 0 }
12func g_row(id: *u8, ok: i64, pass: *i64) -> i64 { g_w(" " as *u8); g_w(id); g_w(": " as *u8); if ok==1 { g_w("OK\n" as *u8); pass[0]=pass[0]+1 } else { g_w("FAIL\n" as *u8) } return 0 }
13func sv_write(path: *u8, content: *u8) -> i64 { let fd: i64 = sys_openat_wr(path, 0x1a4); if fd<0 { return 0 } var n: i64=0; while content[n]!=(0 as u8){n=n+1} sys_write(fd, content, n); sys_close(fd); return 1 }
14
15func main() -> i64 {
16 let pass: *i64 = sys_mmap(8) as *i64; pass[0]=0
17 g_w("=== NX-HOSTOP-SERVE GATE (host served-smoke + host canary over real loopback HTTP) ===\n" as *u8)
18 let wsid: *u8 = sys_mmap(64); rp_wsid(wsid); rp_ensure(wsid)
19 let D: *u8 = sys_mmap(512); rp_path(wsid, "hsv" as *u8, D); __syscall(83, D as i64, 493, 0, 0, 0, 0)
20 var psum: i64 = 0; var pj: i64 = 0; while wsid[pj]!=(0 as u8){ psum = psum + (wsid[pj] as i64); pj = pj + 1 }
21 let port: i64 = 19520 + (psum % 300)
22
23 let smf: *u8 = sys_mmap(700); pub_join(D, "sm.html" as *u8, smf); sv_write(smf, "SMOKE-OK\n" as *u8)
24 let smsha: *u8 = sys_mmap(72); pub_sha_file(smf, smsha)
25 let src_good: *u8 = sys_mmap(700); pub_join(D, "good.src" as *u8, src_good); sv_write(src_good, "HCAN-GOOD\n" as *u8)
26 let src_bad: *u8 = sys_mmap(700); pub_join(D, "bad.src" as *u8, src_bad); sv_write(src_bad, "HCAN-BAD\n" as *u8)
27 let sha_good: *u8 = sys_mmap(72); pub_sha_file(src_good, sha_good)
28 let pg: *u8 = sys_mmap(700); pub_join(D, "page.html" as *u8, pg); sv_write(pg, "LASTGOOD\n" as *u8)
29
30 let pid: i64 = sys_fork()
31 if pid == 0 { psv_listen(D, port); sys_exit(0) }
32 let resp: *u8 = sys_mmap(262144)
33
34 let sm_ok: i64 = hostop_host_smoke(port, "sm.html" as *u8, smsha) // served body hashes to approved sha
35 let sm_bad: i64 = hostop_host_smoke(port, "sm.html" as *u8, "WRONGSHA" as *u8) // wrong sha -> 0
36 let cgood: i64 = hostop_canary(sha_good, src_good, D, "page.html" as *u8, "page.html" as *u8, port, 3)
37 let ng: i64 = pub_http_get(port, "page.html" as *u8, resp, 262144)
38 let serves_good: i64 = pub_substr(resp, ng, "HCAN-GOOD" as *u8)
39 sv_write(pg, "LASTGOOD\n" as *u8) // reset main for the bad scenario
40 let cbad: i64 = hostop_canary(sha_good, src_bad, D, "page.html" as *u8, "page.html" as *u8, port, 3)
41 let nb: i64 = pub_http_get(port, "page.html" as *u8, resp, 262144)
42 let still_lastgood: i64 = pub_substr(resp, nb, "LASTGOOD" as *u8)
43
44 __syscall(129, pid, 9, 0, 0, 0, 0) // rv64 kill=129; raw x86 62 is an RV64 KEY translated to lseek(8) -- the kill never happened (debt idx 2277)
45 let st: *i64 = sys_mmap(8) as *i64; var rr: i64 = 0; while rr < 20 { sys_wait4(0 - 1, st, 1); rr = rr + 1 }
46
47 g_w(" smoke ok=" as *u8); g_n(sm_ok); g_w(" badsha=" as *u8); g_n(sm_bad); g_w(" canary good=" as *u8); g_n(cgood); g_w(" serves_good=" as *u8); g_n(serves_good); g_w(" canary bad=" as *u8); g_n(cbad); g_w(" still_lastgood=" as *u8); g_n(still_lastgood); g_w("\n" as *u8)
48 g_row("hostop_host_smoke: served body matches approved sha (1); wrong sha -> 0" as *u8, ((sm_ok==1) as i64) & ((sm_bad==0) as i64), pass)
49 g_row("hostop_canary GOOD: cohort healthy -> promoted, host serves the new version" as *u8, ((cgood==1) as i64) & serves_good, pass)
50 g_row("hostop_canary BAD: corrupt -> ABORT (0), host stays last-good (0% blast)" as *u8, ((cbad==0) as i64) & still_lastgood, pass)
51
52 g_w("NX-HOSTOP-SERVE rows=3 pass=" as *u8); g_n(pass[0])
53 if pass[0]==3 { g_w(" verdict=GREEN\n" as *u8); sys_exit(0); return 0 }
54 g_w(" verdict=RED\n" as *u8); sys_exit(1); return 1
55}