nx_game_pair_layout_gate.nx source
↩ module page · 55 lines · 2817 B
1import "nx_wasm_layout_read_lib.nx"
2import "nx_game_pair_layout_lib.nx"
3import "nx_gate_verdict.nx"
4
5func main(argc: i64,argv: *i64) -> i64 {
6 if argc!=5 { fsx_puts("usage: nx_game_pair_layout_gate <plain.wat> <shared.wat> <plain.wasm> <shared.wasm>\n");return GPA_RC_USAGE }
7 let files: *i64=sys_mmap(4*8) as *i64
8 let sizes: *i64=sys_mmap(4*8) as *i64
9 var i: i64=0
10 while i<4 {
11 if fsx_denied(argv[i+1] as *u8)==1 { return FSX_RC_DENIED }
12 files[i]=sys_mmap(FSX_READ_CAP+1) as i64
13 sizes[i]=vw_read(argv[i+1] as *u8,files[i] as *u8,FSX_READ_CAP)
14 if sizes[i]<=0 || sizes[i]>=FSX_READ_CAP { fsx_puts("LAYOUT-JOIN REFUSED input missing or at read capacity\n");return GPA_RC_INPUT }
15 i=i+1
16 }
17 let pr: *u8=sys_mmap(sizes[0]/2)
18 let sr: *u8=sys_mmap(sizes[1]/2)
19 let rn: i64=wlv_wat(files[0] as *u8,sizes[0],pr,sizes[0]/2,0)
20 let sn: i64=wlv_wat(files[1] as *u8,sizes[1],sr,sizes[1]/2,1)
21 let c: *i64=gv_ctr()
22 gv_check_eq("plain compiler record extracted",rn>0,1,c)
23 gv_check_eq("shared compiler record extracted",sn>0,1,c)
24 let plain: *u8=files[2] as *u8
25 let twin: *u8=files[3] as *u8
26 let pn: i64=sizes[2]
27 let tn: i64=sizes[3]
28 if rn>0 && sn>0 {
29 gv_check_eq("plain/shared reservation agreement",gpl_records(pr,rn,sr,sn),1,c)
30 gv_check_eq("plain memory declaration",gpl_memory(plain,pn,pr,0),1,c)
31 gv_check_eq("shared memory declaration",gpl_memory(twin,tn,sr,1),1,c)
32 gv_check_eq("initialized payload destinations and extents",gpl_payloads(plain,pn,pr),1,c)
33 gv_check_eq("initializer state matches full reservation",gpl_state(plain,pn,twin,tn,sr),1,c)
34 gv_check_eq("complete layout and executable join",gpl_pair(plain,pn,twin,tn,pr,rn,sr,sn),1,c)
35 gv_check_eq("swapped binary roles refused",gpl_pair(twin,tn,plain,pn,pr,rn,sr,sn),0,c)
36 gv_check_eq("truncated binary refused",gpl_pair(plain,pn,twin,tn-1,pr,rn,sr,sn),0,c)
37 sr[0]=0
38 gv_check_eq("corrupt record refused",gpl_pair(plain,pn,twin,tn,pr,rn,sr,sn),0,c)
39 sr[0]=78
40 gv_check_eq("restored join accepted",gpl_pair(plain,pn,twin,tn,pr,rn,sr,sn),1,c)
41 let hash: *u8=sys_mmap(GPA_SHA_HEX+1)
42 i=0
43 while i<4 {
44 gpa_sha(files[i] as *u8,sizes[i],hash)
45 fsx_puts("input ");fsx_putn(i);fsx_puts(" sha256=");fsx_puts(hash);fsx_puts("\n")
46 i=i+1
47 }
48 sys_munmap(hash,GPA_SHA_HEX+1)
49 }
50 i=0
51 while i<4 { sys_munmap(files[i] as *u8,FSX_READ_CAP+1);i=i+1 }
52 sys_munmap(pr,sizes[0]/2);sys_munmap(sr,sizes[1]/2)
53 sys_munmap(files as *u8,4*8);sys_munmap(sizes as *u8,4*8)
54 return gv_verdict("GAME-PAIR-LAYOUT",c,"agreement only; trusted provenance, BSS binding and shared-runtime qualification remain mandatory")
55}