code wiki / (root) / nx_beach_pair_layout_gate_t46.nx

nx_beach_pair_layout_gate_t46.nx source

↩ module page · 61 lines · 3082 B

1// nx_beach_pair_layout_gate_t46.nx -- Validates and enforces agreement between plain and shared memory layouts in a game pair using cryptographic checks and runtime verification. 2import "nx_wasm_layout_read_lib.nx" 3import "nx_game_pair_layout_lib.nx" 4import "nx_gate_verdict.nx" 5 6func main() -> i64 { 7 let argv: *i64=sys_mmap(5*8) as *i64 8 argv[1]="/tmp/beach-residency-layout-t46.wat" as i64 9 argv[2]="/tmp/beach-residency-shared-layout-t46.wat" as i64 10 argv[3]="/tmp/beach-residency-t44.wasm" as i64 11 argv[4]="/tmp/beach-residency-shared-t44.wasm" as i64 12 let files: *i64=sys_mmap(4*8) as *i64 13 let sizes: *i64=sys_mmap(4*8) as *i64 14 var i: i64=0 15 while i<4 { 16 if fsx_denied(argv[i+1] as *u8)==1 { return FSX_RC_DENIED } 17 let box: *i64=sys_mmap(8) as *i64 18 files[i]=sys_read_file(argv[i+1] as *u8,box) as i64 19 sizes[i]=box[0] 20 if files[i]<=0 || sizes[i]<=0 { fsx_puts("LAYOUT-JOIN REFUSED unreadable input\n");return GPA_RC_INPUT } 21 i=i+1 22 } 23 let pr: *u8=sys_mmap(sizes[0]/2) 24 let sr: *u8=sys_mmap(sizes[1]/2) 25 let rn: i64=wlv_wat(files[0] as *u8,sizes[0],pr,sizes[0]/2,0) 26 let sn: i64=wlv_wat(files[1] as *u8,sizes[1],sr,sizes[1]/2,1) 27 let c: *i64=gv_ctr() 28 gv_check_eq("plain compiler record extracted",rn>0,1,c) 29 gv_check_eq("shared compiler record extracted",sn>0,1,c) 30 let plain: *u8=files[2] as *u8 31 let twin: *u8=files[3] as *u8 32 let pn: i64=sizes[2] 33 let tn: i64=sizes[3] 34 if rn>0 && sn>0 { 35 gv_check_eq("plain/shared reservation agreement",gpl_records(pr,rn,sr,sn),1,c) 36 gv_check_eq("plain memory declaration",gpl_memory(plain,pn,pr,0),1,c) 37 gv_check_eq("shared memory declaration",gpl_memory(twin,tn,sr,1),1,c) 38 gv_check_eq("initialized payload destinations and extents",gpl_payloads(plain,pn,pr),1,c) 39 gv_check_eq("initializer state matches full reservation",gpl_state(plain,pn,twin,tn,sr),1,c) 40 gv_check_eq("complete layout and executable join",gpl_pair(plain,pn,twin,tn,pr,rn,sr,sn),1,c) 41 gv_check_eq("swapped binary roles refused",gpl_pair(twin,tn,plain,pn,pr,rn,sr,sn),0,c) 42 gv_check_eq("truncated binary refused",gpl_pair(plain,pn,twin,tn-1,pr,rn,sr,sn),0,c) 43 sr[0]=0 44 gv_check_eq("corrupt record refused",gpl_pair(plain,pn,twin,tn,pr,rn,sr,sn),0,c) 45 sr[0]=78 46 gv_check_eq("restored join accepted",gpl_pair(plain,pn,twin,tn,pr,rn,sr,sn),1,c) 47 let hash: *u8=sys_mmap(GPA_SHA_HEX+1) 48 i=0 49 while i<4 { 50 gpa_sha(files[i] as *u8,sizes[i],hash) 51 fsx_puts("input ");fsx_putn(i);fsx_puts(" sha256=");fsx_puts(hash);fsx_puts("\n") 52 i=i+1 53 } 54 sys_munmap(hash,GPA_SHA_HEX+1) 55 } 56 i=0 57 while i<4 { sys_munmap(files[i] as *u8,sizes[i]);i=i+1 } 58 sys_munmap(pr,sizes[0]/2);sys_munmap(sr,sizes[1]/2) 59 sys_munmap(files as *u8,4*8);sys_munmap(sizes as *u8,4*8) 60 return gv_verdict("GAME-PAIR-LAYOUT",c,"agreement only; trusted provenance, BSS binding and shared-runtime qualification remain mandatory") 61}