code wiki / (root) / nx_contentdiff_structured_gate_t294.nx

nx_contentdiff_structured_gate_t294.nx source

↩ module page · 70 lines · 4741 B

1// nx_contentdiff_structured_gate_t294.nx -- Compares and mutates ELF files to detect structural differences and verify content integrity. 2import "nx_contentdiff_structured_candidate_t294.nx" 3import "nx_gate_verdict.nx" 4func cg_copy(b:*u8,n:i64)->*u8{let p:*u8=sys_mmap(n);var i:i64=0;while i<n{p[i]=b[i];i=i+1};return p} 5func cg_compare(a:*u8,an:i64,b:*u8,bn:i64,r:*NxCdResult)->i64{ 6 let x:*NxCdStructured=sys_mmap_try(__size_of(NxCdStructured)) as *NxCdStructured 7 let y:*NxCdStructured=sys_mmap_try(__size_of(NxCdStructured)) as *NxCdStructured 8 let p:*i64=sys_mmap_try(CDL_P_SLOTS*8) as *i64 9 if (x as i64)<=0||(y as i64)<=0||(p as i64)<=0{return CDS_RESOURCE} 10 p[CDL_P_MINLEN]=6 11 let xi:i64=cds_init(x,a,an);let yi:i64=cds_init(y,b,bn) 12 var rc:i64=xi;if rc==0{rc=yi};if rc==0{rc=cds_measure(x,y,p,r)} 13 cds_close(x);cds_close(y);sys_munmap_direct(x as *u8,__size_of(NxCdStructured));sys_munmap_direct(y as *u8,__size_of(NxCdStructured));sys_munmap_direct(p as *u8,CDL_P_SLOTS*8);return rc 14} 15func cg_mutate_all(b:*u8,n:i64,s:*u8,z:i64)->i64{ 16 var i:i64=0;var hits:i64=0 17 while i<=n-z{ 18 if cdl_bytes_eq(b+i,z,s,z)==1{b[i]=63 as u8;hits=hits+1} 19 i=i+1 20 };return hits 21} 22func main()->i64{ 23 let ctr:*i64=gv_ctr();var an:i64=0;var bn:i64=0 24 let a:*u8=sys_read_file("../nx_gltf_render_prepare_candidate_t230.elf",&an) 25 let b:*u8=sys_read_file("../nx_gltf_render_prepare_candidate_t230.sov.elf.new",&bn) 26 if (a as i64)<=0||(b as i64)<=0{return 2} 27 let p:*i64=sys_mmap(CDL_P_SLOTS*8) as *i64;p[CDL_P_MINLEN]=6 28 let old:*i64=sys_mmap(CDL_O_SLOTS*8) as *i64 29 cdl_lost(a,an,b,bn,p,old) 30 gv_kv("live_bytes",an);gv_kv("candidate_bytes",bn);gv_kv("raw_lost",old[CDL_O_LOST]) 31 gv_check("actual raw ruler reproduces one false joined run",old[CDL_O_LOST]==1,ctr) 32 let r:*NxCdResult=sys_mmap(__size_of(NxCdResult)) as *NxCdResult 33 let rc:i64=cg_compare(a,an,b,bn,r) 34 gv_kv("structured_state",rc);gv_kv("structured_lost",r.lost);gv_kv("source_removed",r.source_removed);gv_kv("source_added",r.source_added) 35 gv_check("actual structured paths retained with one addition",rc==0&&r.lost==0&&r.source_removed==0&&r.source_added==1,ctr) 36 gv_check("same artifact identity has no content loss",cg_compare(a,an,a,an,r)==0&&r.lost==0&&r.source_removed==0&&r.source_added==0,ctr) 37 let removed:*u8=cg_copy(b,bn) 38 let hits:i64=cg_mutate_all(removed,bn,"DESCRIPTOR_WITH_RIG_VERIFIED",28) 39 gv_check("actual operational message removed control constructed",hits>0,ctr) 40 gv_check("genuine operational string deletion remains loss",cg_compare(a,an,removed,bn,r)==0&&r.lost>0,ctr) 41 let paths:*u8=cg_copy(b,bn) 42 let source:*u8="runtime/nx_gltf_render_prepare_candidate_t230.nx" 43 let phits:i64=cg_mutate_all(paths,bn,source,48) 44 gv_check("actual source-path removal constructed",phits==3,ctr) 45 gv_check("source-path removal retained as structured provenance loss",cg_compare(a,an,paths,bn,r)==0&&r.source_removed==2&&r.lost>0,ctr) 46 let truncated:*u8=cg_copy(b,bn) 47 gv_check("truncated ELF section table refused",cg_compare(a,an,truncated,bn-1,r)<0,ctr) 48 truncated[4]=1 as u8 49 gv_check("unsupported ELF class refused",cg_compare(a,an,truncated,bn,r)==CDS_UNKNOWN,ctr) 50 let x:*NxCdStructured=sys_mmap(__size_of(NxCdStructured)) as *NxCdStructured 51 cds_init(x,a,an);let parsed:i64=cds_elf(x) 52 var first:i64=0;var i:i64=0;while i<an{if x.marks[i]==CDS_FILE as u8{first=i;break};i=i+1} 53 gv_check("native file table has known first path",parsed==0&&x.files==36&&first>0,ctr) 54 let countbad:*u8=cg_copy(a,an);if first>0{countbad[first-1]=37 as u8} 55 gv_check("file-count without added entry is malformed refusal",cg_compare(a,an,countbad,an,r)<0,ctr) 56 let badform:*u8=cg_copy(a,an);if first>5{badform[first-2]=127 as u8} 57 gv_check("unknown file field form refused",cg_compare(a,an,badform,an,r)==CDS_UNKNOWN,ctr) 58 var short:i64=0;var safe:i64=1 59 while short<64{if cg_compare(a,an,a,short,r)>=0{safe=0};short=short+1} 60 gv_check("all truncated ELF header lengths refuse",safe==1,ctr) 61 let highoff:*u8=cg_copy(a,an);i=40;while i<48{highoff[i]=255 as u8;i=i+1} 62 gv_check("unrepresentable section table offset refused",cg_compare(a,an,highoff,an,r)==CDS_INVALID,ctr) 63 let unicode:*u8=cg_copy(a,an);if first>0{unicode[first]=195 as u8} 64 gv_check("unsupported non-ASCII path does not disappear",cg_compare(a,an,unicode,an,r)==CDS_UNKNOWN,ctr) 65 var pathend:i64=first;while pathend<an{if a[pathend]==0 as u8{break};pathend=pathend+1} 66 let dirbad:*u8=cg_copy(a,an);if pathend+1<an{dirbad[pathend+1]=127 as u8} 67 gv_check("out-of-range file directory index refused",cg_compare(a,an,dirbad,an,r)==CDS_INVALID,ctr) 68 cds_close(x) 69 return gv_verdict("contentdiff-structured",ctr,"Candidate only; bounded ELF64LE/DWARF5 inline ASCII tables, all non-table runs retained; unsupported format refuses") 70}