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}