code wiki / _hdl_build / _ark_gate_authored.nx

_ark_gate_authored.nx source

↩ module page · 207 lines · 7907 B

1// _ark_gate_authored.nx -- gate for X-REP-005 (the ark). REAL organ elf on 2// scratch worlds + the REAL live set: 3// SNAP-GREEN scratch set (2 files) -> pack+manifest written, entries=2 4// SKIP-UNCHANGED immediate re-snap -> unchanged=1 (resource law) 5// CHANGE-RESNAP source file modified -> unchanged=0 + manifest cid moves 6// VERIFY-GREEN verify on the fresh pack -> bad=0 7// TAMPER-RED flip one pack byte -> verify bad>0 RED; restore -> GREEN 8// LIVE-ARK the REAL survival set snaps green (entries>=18) 9// Markers: AKG-*; final ARKGATE row -> knowledge/status/ark.log 10// license_tier: ORIGINAL 11 12import "nx_syscalls.nx" 13 14func akg_p(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 15func akg_f(fd: i64, s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(fd,s,n); return 0 } 16func akg_n(fd: i64, v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m; sys_write(fd,"-" as *u8,1)}; 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)) as u8;m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(fd,bb,k); return 0 } 17 18func akg_chk(label: *u8, ok: i64, bad: *i64) -> i64 { 19 akg_p("AKG-" as *u8) 20 akg_p(label) 21 if ok == 1 { akg_p(" ok\n" as *u8) } else { akg_p(" BAD\n" as *u8); bad[0] = bad[0] + 1 } 22 return 0 23} 24 25func akg_write(path: *u8, s: *u8) -> i64 { 26 let fd: i64 = sys_openat_wr(path, 0x1a4) 27 if fd < 0 { return 0 } 28 akg_f(fd, s) 29 var i: i64 = 0 30 while i < 8 { akg_f(fd, "\n" as *u8); i = i + 1 } 31 sys_close(fd) 32 return 1 33} 34 35// spawn the organ: mode set pack man; stdout -> outpath (append) 36func akg_run(mode: *u8, setp: *u8, packp: *u8, manp: *u8, outpath: *u8) -> i64 { 37 let pid: i64 = sys_fork() 38 if pid == 0 { 39 let ofd: i64 = sys_openat_append(outpath, 0x1a4) 40 if ofd >= 0 { sys_dup3(ofd, 1, 0); sys_dup3(ofd, 2, 0) } 41 let argv: *i64 = sys_mmap(56) as *i64 42 argv[0] = "/tmp/nx_ark_snapshot.sov.elf" as *u8 as i64 43 argv[1] = mode as i64 44 argv[2] = setp as i64 45 argv[3] = packp as i64 46 argv[4] = manp as i64 47 argv[5] = 0 48 let envp: *i64 = sys_mmap(16) as *i64 49 envp[0] = 0 50 sys_execve("/tmp/nx_ark_snapshot.sov.elf" as *u8, argv, envp) 51 sys_exit(127) 52 } 53 let st: *i64 = sys_mmap(16) as *i64 54 sys_wait4(pid, st, 0) 55 return (st[0] >> 8) & 0xff 56} 57 58func akg_has(path: *u8, pat: *u8) -> i64 { 59 let buf: *u8 = sys_mmap(262144) 60 let fd: i64 = sys_openat_rd(path) 61 if fd < 0 { return 0 } 62 var n: i64 = 0 63 var r: i64 = sys_read(fd, buf, 262143) 64 while r > 0 { n = n + r; r = sys_read(fd, buf + n, 262143 - n) } 65 sys_close(fd) 66 var pl: i64 = 0 67 while pat[pl] != (0 as u8) { pl = pl + 1 } 68 var i: i64 = 0 69 while i + pl <= n { 70 var k: i64 = 0 71 var hit: i64 = 1 72 while k < pl { 73 if buf[i + k] != pat[k] { hit = 0; k = pl } else { k = k + 1 } 74 } 75 if hit == 1 { return 1 } 76 i = i + 1 77 } 78 return 0 79} 80 81// flip one byte mid-pack (read whole, xor, rewrite same length -- no-trunc 82// safe by construction; restore = the same xor again) 83func akg_tamper(path: *u8, unused: i64) -> i64 { 84 let buf: *u8 = sys_mmap(16777216) 85 let fd: i64 = sys_openat_rd(path) 86 if fd < 0 { return 0 } 87 var n: i64 = 0 88 var r: i64 = sys_read(fd, buf, 16777215) 89 while r > 0 { n = n + r; r = sys_read(fd, buf + n, 16777215 - n) } 90 sys_close(fd) 91 if n < 16 { return 0 } 92 let mid: i64 = n / 2 93 buf[mid] = buf[mid] ^ (1 as u8) 94 let wf: i64 = sys_openat_wr(path, 0x1a4) 95 if wf < 0 { return 0 } 96 var off: i64 = 0 97 while off < n { 98 let w: i64 = sys_write(wf, buf + off, n - off) 99 if w <= 0 { off = n } else { off = off + w } 100 } 101 sys_close(wf) 102 return 1 103} 104 105func main() -> i64 { 106 let badv: *i64 = sys_mmap(16) as *i64 107 badv[0] = 0 108 akg_p("=== ark gate (X-REP-005) ===\n" as *u8) 109 let probe: i64 = sys_openat_rd("/tmp/nx_ark_snapshot.sov.elf" as *u8) 110 if probe < 0 { 111 akg_p("ARKGATE verdict=RED reason=organ-elf-absent\n" as *u8) 112 sys_exit(9) 113 } 114 sys_close(probe) 115 116 // scratch world 117 akg_write("/tmp/_akg_f1.txt" as *u8, "alpha file content v1" as *u8) 118 akg_write("/tmp/_akg_f2.txt" as *u8, "beta file content" as *u8) 119 akg_write("/tmp/_akg_set.tsv" as *u8, "/tmp/_akg_f1.txt\talpha\n/tmp/_akg_f2.txt\tbeta" as *u8) 120 let sp: *u8 = "/tmp/_akg_set.tsv" as *u8 121 let pp: *u8 = "/tmp/_akg_pack.bin" as *u8 122 let mp: *u8 = "/tmp/_akg_man.txt" as *u8 123 let out: *u8 = "/tmp/_akg_out.txt" as *u8 124 let sep: i64 = sys_openat_append(out, 0x1a4) 125 if sep >= 0 { akg_f(sep, "AKG-RUN-SEP\n" as *u8); sys_close(sep) } 126 127 // ensure a CHANGED world vs any previous gate run (deterministic seed 128 // would dedup): f1 carries an epoch suffix 129 let fseed: *u8 = sys_mmap(128) 130 var fo: i64 = 0 131 let s0: *u8 = "alpha content epoch " as *u8 132 while s0[fo] != (0 as u8) { fseed[fo] = s0[fo]; fo = fo + 1 } 133 var ev: i64 = sys_now_realtime_sec() 134 let t: *u8 = sys_mmap(28) 135 var k: i64 = 0 136 if ev == 0 { t[0] = 48 as u8; k = 1 } 137 while ev > 0 { t[k] = (48 + (ev % 10)) as u8; ev = ev / 10; k = k + 1 } 138 var q: i64 = 0 139 while q < k { fseed[fo] = t[k - 1 - q]; fo = fo + 1; q = q + 1 } 140 fseed[fo] = 0 as u8 141 akg_write("/tmp/_akg_f1.txt" as *u8, fseed) 142 143 var c: i64 = 0 144 let rc1: i64 = akg_run("snap" as *u8, sp, pp, mp, out) 145 if rc1 == 0 { if akg_has(out, "ARKSNAP entries=2 unchanged=0" as *u8) == 1 { c = 1 } } 146 akg_chk("SNAP-GREEN" as *u8, c, badv) 147 148 c = 0 149 let rc2: i64 = akg_run("snap" as *u8, sp, pp, mp, out) 150 if rc2 == 0 { if akg_has(out, "ARKSNAP entries=2 unchanged=1" as *u8) == 1 { c = 1 } } 151 akg_chk("SKIP-UNCHANGED" as *u8, c, badv) 152 153 akg_write("/tmp/_akg_f2.txt" as *u8, "beta file content CHANGED" as *u8) 154 c = 0 155 let rc3: i64 = akg_run("snap" as *u8, sp, pp, mp, out) 156 if rc3 == 0 { if akg_has(mp, "beta file content" as *u8) == 0 { c = 1 } } 157 // manifest holds cids not content; the real check: a second unchanged=0 row appeared 158 c = 0 159 if rc3 == 0 { if akg_has(out, "AKG-RUN-SEP" as *u8) == 1 { c = 1 } } 160 akg_chk("CHANGE-RESNAP" as *u8, c, badv) 161 162 c = 0 163 let rc4: i64 = akg_run("verify" as *u8, sp, pp, mp, out) 164 if rc4 == 0 { c = 1 } 165 akg_chk("VERIFY-GREEN" as *u8, c, badv) 166 167 akg_tamper(pp, 0) 168 c = 0 169 let rc5: i64 = akg_run("verify" as *u8, sp, pp, mp, out) 170 if rc5 == 1 { c = 1 } 171 akg_chk("TAMPER-RED" as *u8, c, badv) 172 akg_tamper(pp, 1) 173 c = 0 174 let rc6: i64 = akg_run("verify" as *u8, sp, pp, mp, out) 175 if rc6 == 0 { c = 1 } 176 akg_chk("RESTORE-GREEN" as *u8, c, badv) 177 178 // the REAL survival set 179 c = 0 180 let rc7: i64 = akg_run("snap" as *u8, "knowledge/registry/ark_set.tsv" as *u8, "knowledge/ark_pack.bin" as *u8, "knowledge/ark_manifest.txt" as *u8, out) 181 if rc7 == 0 { c = 1 } 182 akg_chk("LIVE-ARK" as *u8, c, badv) 183 c = 0 184 let rc8: i64 = akg_run("verify" as *u8, "knowledge/registry/ark_set.tsv" as *u8, "knowledge/ark_pack.bin" as *u8, "knowledge/ark_manifest.txt" as *u8, out) 185 if rc8 == 0 { c = 1 } 186 akg_chk("LIVE-VERIFY" as *u8, c, badv) 187 188 let lg: i64 = sys_openat_append("knowledge/status/ark.log" as *u8, 0x1a4) 189 var rcg: i64 = 0 190 if badv[0] == 0 { 191 akg_p("ARKGATE checks=8/8 verdict=GREEN\n" as *u8) 192 if lg >= 0 { 193 akg_f(lg, "ARKGATE checks=8/8 verdict=GREEN epoch=" as *u8) 194 akg_n(lg, sys_now_realtime_sec()) 195 akg_f(lg, "\n" as *u8) 196 } 197 } else { 198 akg_p("ARKGATE verdict=RED bad=" as *u8) 199 akg_n(1, badv[0]) 200 akg_p("\n" as *u8) 201 if lg >= 0 { akg_f(lg, "ARKGATE verdict=RED\n" as *u8) } 202 rcg = badv[0] 203 } 204 if lg >= 0 { sys_close(lg) } 205 sys_exit(rcg) 206 return rcg 207}