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}