code wiki / (root) / nx_game_pair_layout_gate.nx

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}