code wiki / _hdl_build / nx_cms_migrate_exceed_gate.nx

nx_cms_migrate_exceed_gate.nx source

↩ module page · 141 lines · 7678 B

1// nx_cms_migrate_exceed_gate.nx -- W-RE-004 head-to-head EXCEED (import-export-migrate, INTEGRITY axis). 2// Runs BOTH importers on the SAME corpus of bundles (pristine + byte-tampered): 3// OURS = cms_migrate_import (sha256-verifies the body before accepting) 4// INCUMBENT = a no-integrity importer (strip header, copy body, never verify) -- the CWE-494 failure 5// mode of migration tools that import without an integrity check (silent corruption). 6// Ground truth: a pristine bundle SHOULD import; a tampered bundle SHOULD be refused. Verdict COMPUTED by 7// nx_cms_exceed. Writes CMSEXCEED feature=import-export-migrate axis=integrity to cms_exceed.log on a 8// measured AHEAD + referee-clean + anti-false-green self-tests. license_tier: ORIGINAL 9import "nx_cms_exceed.nx" 10import "nx_cms_migrate.nx" 11import "nx_syscalls.nx" 12 13func em_w(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 14func em_num(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48;k=1}; while m>0{t[k]=48+(m%10);m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(1,bb,k); return 0 } 15func em_cat(dst: *u8, off: i64, s: *u8) -> i64 { var o: i64=off; var k: i64=0; while s[k]!=(0 as u8){dst[o]=s[k];o=o+1;k=k+1} return o } 16func em_catnum(dst: *u8, off: i64, v: i64) -> i64 { 17 var o: i64=off; let t: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m}; var k: i64=0 18 if m==0 {t[0]=48 as u8;k=1}; while m>0 {t[k]=(48+(m%10)) as u8; m=m/10; k=k+1} 19 var i: i64=0; while i<k {dst[o]=t[k-1-i]; o=o+1; i=i+1} return o 20} 21func em_cpy(dst: *u8, src: *u8) -> i64 { var k: i64=0; while src[k]!=(0 as u8){dst[k]=src[k];k=k+1} return k } 22func em_row(id: i64, ok: i64, what: *u8) -> i64 { 23 em_w("EMROW " as *u8); em_num(id); em_w(" " as *u8) 24 if ok==1 { em_w("PASS " as *u8) } else { em_w("FAIL " as *u8) } 25 em_w(what); em_w("\n" as *u8) 26 return ok 27} 28 29// incumbent: import WITHOUT integrity verification -- accept any well-formed-looking bundle (1), else 0. 30func em_incumbent_import(bundle: *u8, bn: i64) -> i64 { 31 var he: i64 = 0 - 1 32 var i: i64 = 0 33 while i < bn { if (bundle[i] as i64) == 10 { he = i; i = bn } else { i = i + 1 } } 34 if he < 0 { return 0 } 35 if bn - (he + 1) <= 0 { return 0 } 36 return 1 37} 38 39func main() -> i64 { 40 var pass: i64 = 0 41 var rows: i64 = 0 42 43 let src: *u8 = sys_mmap(4096) 44 let srclen: i64 = em_cpy(src, "@title\nAutumn Sale\n@status\nscheduled\n@body\nBig autumn news.\n" as *u8) 45 let bundle: *u8 = sys_mmap(4096) 46 let blen: i64 = cms_migrate_export(src, srclen, bundle, 4096) 47 let out: *u8 = sys_mmap(4096) 48 49 // header end (first newline) -> body region begins at he+1 50 var he: i64 = 0 - 1 51 var hi: i64 = 0 52 while hi < blen { if (bundle[hi] as i64) == 10 { he = hi; hi = blen } else { hi = hi + 1 } } 53 let body0: i64 = he + 1 54 55 // corpus: parallel arrays of (bundle ptr, len, truth=should-accept) 56 let bp: *i64 = sys_mmap(8 * 16) as *i64 57 let bl: *i64 = sys_mmap(8 * 16) as *i64 58 let tr: *i64 = sys_mmap(8 * 16) as *i64 59 var nc: i64 = 0 60 61 // 2 pristine (truth=accept) 62 bp[nc]=bundle as i64; bl[nc]=blen; tr[nc]=1; nc=nc+1 63 let pris2: *u8 = sys_mmap(4096) 64 var c2: i64=0; while c2<blen { pris2[c2]=bundle[c2]; c2=c2+1 } 65 bp[nc]=pris2 as i64; bl[nc]=blen; tr[nc]=1; nc=nc+1 66 67 // 3 tampered copies (flip a BODY byte; header sha unchanged -> should be REJECTED) 68 let t0: *u8 = sys_mmap(4096); var x0: i64=0; while x0<blen { t0[x0]=bundle[x0]; x0=x0+1 } 69 t0[body0 + 1] = (t0[body0 + 1] as i64 + 1) as u8 70 bp[nc]=t0 as i64; bl[nc]=blen; tr[nc]=0; nc=nc+1 71 let t1: *u8 = sys_mmap(4096); var x1: i64=0; while x1<blen { t1[x1]=bundle[x1]; x1=x1+1 } 72 t1[body0 + 4] = 88 as u8 73 bp[nc]=t1 as i64; bl[nc]=blen; tr[nc]=0; nc=nc+1 74 let t2: *u8 = sys_mmap(4096); var x2: i64=0; while x2<blen { t2[x2]=bundle[x2]; x2=x2+1 } 75 t2[blen - 1] = (t2[blen - 1] as i64 + 1) as u8 76 bp[nc]=t2 as i64; bl[nc]=blen; tr[nc]=0; nc=nc+1 77 78 // run BOTH sides; measure 79 var our_correct: i64 = 0 80 var inc_correct: i64 = 0 81 var n_tamp: i64 = 0 82 var tamp_our: i64 = 0 83 var tamp_inc: i64 = 0 84 var i: i64 = 0 85 while i < nc { 86 let b: *u8 = (bp[i]) as *u8 87 let ln: i64 = bl[i] 88 let truth: i64 = tr[i] 89 var our_v: i64 = 0; if cms_migrate_import(b, ln, out, 4096) >= 0 { our_v = 1 } 90 let inc_v: i64 = em_incumbent_import(b, ln) 91 if our_v == truth { our_correct = our_correct + 1 } 92 if inc_v == truth { inc_correct = inc_correct + 1 } 93 if truth == 0 { 94 n_tamp = n_tamp + 1 95 if our_v == 0 { tamp_our = tamp_our + 1 } 96 if inc_v == 0 { tamp_inc = tamp_inc + 1 } 97 } 98 i = i + 1 99 } 100 101 let verdict: i64 = xcd_verdict(our_correct, inc_correct) 102 em_w("HEAD-TO-HEAD import-export-migrate integrity: ours=" as *u8); em_num(our_correct); em_w("/" as *u8); em_num(nc) 103 em_w(" incumbent=" as *u8); em_num(inc_correct); em_w("/" as *u8); em_num(nc) 104 em_w(" tamper-caught ours=" as *u8); em_num(tamp_our); em_w("/" as *u8); em_num(n_tamp) 105 em_w(" incumbent=" as *u8); em_num(tamp_inc); em_w("/" as *u8); em_num(n_tamp) 106 em_w(" verdict=" as *u8); em_w(xcd_vname(verdict)); em_w("\n" as *u8) 107 108 var ok: i64 = 0; if our_correct == nc { ok = 1 } 109 rows=rows+1; pass=pass+em_row(0, ok, "ours fully correct (imports pristine, refuses every tamper)" as *u8) 110 ok = 0; if inc_correct < nc { ok = 1 } 111 rows=rows+1; pass=pass+em_row(1, ok, "incumbent no-verify fails (imports tampered = CWE-494)" as *u8) 112 ok = 0; if verdict == XCD_AHEAD { ok = 1 } 113 rows=rows+1; pass=pass+em_row(2, ok, "measured verdict = AHEAD" as *u8) 114 ok = 0; if tamp_our == n_tamp { if tamp_inc == 0 { if n_tamp > 0 { ok = 1 } } } 115 rows=rows+1; pass=pass+em_row(3, ok, "integrity axis: ours catches all tampers, incumbent catches 0" as *u8) 116 ok = 0; if xcd_referee_ok(XCD_AHEAD, our_correct, nc) == 1 { ok = 1 } 117 rows=rows+1; pass=pass+em_row(4, ok, "referee accepts honest AHEAD claim" as *u8) 118 ok = 0; if xcd_referee_ok(XCD_AHEAD, nc - 1, nc) == 0 { ok = 1 } 119 rows=rows+1; pass=pass+em_row(5, ok, "referee rejects overclaim (anti-false-green)" as *u8) 120 121 em_w("CMS-MIGRATE-EXCEED-GATE rows=" as *u8); em_num(rows); em_w(" pass=" as *u8); em_num(pass); em_w("\n" as *u8) 122 123 if pass == rows { 124 if verdict == XCD_AHEAD { 125 if xcd_referee_ok(XCD_AHEAD, our_correct, nc) == 1 { 126 let line: *u8 = sys_mmap(256) 127 var lo: i64 = em_cat(line, 0, "CMSEXCEED feature=import-export-migrate axis=integrity cwe=CWE-494 ours=" as *u8) 128 lo = em_catnum(line, lo, our_correct); lo = em_cat(line, lo, "/" as *u8); lo = em_catnum(line, lo, nc) 129 lo = em_cat(line, lo, " incumbent=" as *u8); lo = em_catnum(line, lo, inc_correct); lo = em_cat(line, lo, "/" as *u8); lo = em_catnum(line, lo, nc) 130 lo = em_cat(line, lo, " tamper-caught=" as *u8); lo = em_catnum(line, lo, tamp_our); lo = em_cat(line, lo, "/" as *u8); lo = em_catnum(line, lo, n_tamp) 131 lo = em_cat(line, lo, " verdict=AHEAD\n" as *u8) 132 let gf: i64 = sys_openat_append("knowledge/status/cms_exceed.log" as *u8, 0x1a4) 133 if gf >= 0 { sys_write(gf, line, lo); sys_close(gf) } 134 em_w("CMS-MIGRATE-EXCEED-GATE verdict=AHEAD -- measured EXCEED recorded\n" as *u8) 135 sys_exit(0); return 0 136 } 137 } 138 } 139 em_w("CMS-MIGRATE-EXCEED-GATE verdict=NOT-RECORDED (no fake-green)\n" as *u8) 140 sys_exit(1); return 1 141}