code wiki / (root) / nx_page_final_seal_gate_t364.nx

nx_page_final_seal_gate_t364.nx source

↩ module page · 43 lines · 2183 B

1import "nx_game_page_artifact_lib.nx" 2import "nx_gate_verdict.nx" 3func sg_final_matches(page:*u8,n:i64)->i64{ 4 let slot:i64=gpa_release_slot(page,n) 5 if slot<=0{return 0} 6 let copy:*u8=sys_mmap_try(n) 7 let digest:*u8=sys_mmap_try(GPA_SHA_HEX+1) 8 if (copy as i64)<=0||(digest as i64)<=0{ 9 if (copy as i64)>0{sys_munmap_direct(copy,n)} 10 if (digest as i64)>0{sys_munmap_direct(digest,GPA_SHA_HEX+1)} 11 return -1 12 } 13 var i:i64=0;while i<n{copy[i]=page[i];i=i+1} 14 i=0;while i<GPA_SHA_HEX{copy[slot+i]=48 as u8;i=i+1} 15 gpa_sha(copy,n,digest) 16 var rc:i64=gpa_same((page as i64+slot) as *u8,GPA_SHA_HEX,digest,GPA_SHA_HEX) 17 if sys_munmap_direct(copy,n)!=0{rc=-1} 18 if sys_munmap_direct(digest,GPA_SHA_HEX+1)!=0{rc=-1} 19 return rc 20} 21func main(argc:i64,argv:*i64)->i64{ 22 if argc!=2{return 2} 23 let ctr:*i64=gv_ctr();var n:i64=0 24 let page:*u8=sys_read_file(argv[1] as *u8,&n) 25 if (page as i64)<=0||n<=0{return 3} 26 gv_check("actual served final page has stale pre-declaration seal",sg_final_matches(page,n)==0,ctr) 27 let mark:*u8="<meta name=\"nishi-wasm\" data-nishi-role=\"shared-runtime\" content=\"" 28 let ml:i64=vw_slen(mark);var at:i64=-1;var i:i64=0 29 while i+ml<n{if gpa_same((page as i64+i) as *u8,ml,mark,ml)==1{at=i+ml;break};i=i+1} 30 gv_check("actual shared metadata is inside final page",at>0&&at<n,ctr) 31 if at<=0{sys_free_file(page,n);return 4} 32 gv_check("existing sealer accepts final composed page",gpa_seal(page,n)==1,ctr) 33 gv_check("declared selfhash equals all final bytes with field zeroed",sg_final_matches(page,n)==1,ctr) 34 let saved:u8=page[at];page[at]=88 as u8 35 gv_check("shared metadata mutation invalidates declared selfhash",sg_final_matches(page,n)==0,ctr) 36 page[at]=saved 37 gv_check("restored shared metadata restores exact identity",sg_final_matches(page,n)==1,ctr) 38 var again_n:i64=0;let again:*u8=sys_read_file(argv[1] as *u8,&again_n) 39 gv_check("qualification leaves source file unchanged",(again as i64)>0&&again_n==n&&sg_final_matches(again,again_n)==0,ctr) 40 if (again as i64)>0{sys_free_file(again,again_n)} 41 sys_free_file(page,n) 42 return gv_verdict("FINAL-PAGE-SEAL",ctr,"Actual shared-runtime declaration covered by existing final sealer; no page publication") 43}