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}