code wiki / _hdl_build / nx_germinate_test.nx

nx_germinate_test.nx source

↩ module page · 109 lines · 5152 B

1// nx_germinate_test.nx -- the SEED's per-piece GERMINATION trust layer. The seed 2// torrent-streams capability pieces onto the hardware; each piece must clear three 3// gates before it joins the growing system: 4// 1. INTEGRITY -- the received bytes hash to the manifest hash (FNV-1a), exactly 5// like a torrent piece hash. A corrupted/tampered piece is 6// REJECTED HERE and NEVER RUN (you don't execute untrusted bytes). 7// 2. CORRECTNESS-- its proof gate passes 1:1 (the Engineer leg). 8// 3. GOVERNANCE -- the 3->2->1 crew clears it (verified + safe + recorded). 9// Only an integrity-clean, proven, governed piece is ADMITTED. This is the same 10// trust the research-ingestion uses, pointed at the streamed capability instead. 11// 12// Known answer: 3 received pieces -> 1 ADMITTED, 2 REJECTED (1 corrupted-hash, 13// 1 unproven). exit 0. 14 15import "nx_crew_council.nx" 16 17const GM_FNV_OFFSET: i64 = 0 - 3750763034362895579 // 0xcbf29ce484222325 18const GM_FNV_PRIME: i64 = 1099511628211 // 0x100000001b3 19 20func gm_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 21 22// FNV-1a over len bytes -- the manifest/piece hash. 23func gm_hash(s: *u8, len: i64) -> i64 { 24 var h: i64 = GM_FNV_OFFSET 25 var i: i64 = 0 26 while i < len { 27 h = h ^ (s[i] as i64) 28 h = h * GM_FNV_PRIME 29 i = i + 1 30 } 31 return h 32} 33 34// simulate a corrupted transfer: copy src, flip one byte. (different hash -> caught) 35func gm_corrupt(src: *u8, len: i64) -> *u8 { 36 let buf: *u8 = sys_mmap(len + 1) 37 var i: i64 = 0 38 while i < len { buf[i] = src[i]; i = i + 1 } 39 buf[0] = (buf[0] ^ 1) as u8 40 return buf 41} 42 43// germinate ONE received piece. Returns: 0 ADMIT, 1 REJECT-integrity, 2 REJECT-gov. 44func gm_germinate(name: *u8, recv: *u8, len: i64, manifest_hash: i64, proof_ok: i64, 45 a: *CrewAction, why: *i64) -> i64 { 46 cc_puts(" piece: " as *u8); cc_puts(name); cc_puts("\n" as *u8) 47 let hh: i64 = gm_hash(recv, len) 48 if hh != manifest_hash { 49 cc_puts(" INTEGRITY: hash MISMATCH -> REJECT (corrupt/tampered, never run)\n" as *u8) 50 return 1 51 } 52 cc_puts(" integrity: hash ok" as *u8) 53 cc_set(a, name, proof_ok, 1, 1, 1, 1) // verifies = proof passes 54 let vd: i64 = cc_council(a, why) 55 if vd == CC_ACT { 56 cc_puts(" proof ok council ACT -> ADMITTED\n" as *u8) 57 return 0 58 } 59 cc_puts(" -> REJECT (" as *u8); cc_puts(why[0] as *u8); cc_puts(")\n" as *u8) 60 return 2 61} 62 63func main() -> i64 { 64 let a: *CrewAction = sys_mmap(64) as *CrewAction 65 let why: *i64 = sys_mmap(8) as *i64 66 67 cc_puts("================================================================\n" as *u8) 68 cc_puts(" SEED GERMINATION -- a streamed capability piece must clear\n" as *u8) 69 cc_puts(" INTEGRITY (hash) + CORRECTNESS (proof) + GOVERNANCE to be admitted\n" as *u8) 70 cc_puts("================================================================\n" as *u8) 71 72 // canonical capability pieces (manifest = hash of the true bytes). 73 let c1: *u8 = "alu-28x28-gatenet-verified" as *u8 74 let c2: *u8 = "goldschmidt-64bit-divider" as *u8 75 let c3: *u8 = "speculative-optimizer-unproven" as *u8 76 let m1: i64 = gm_hash(c1, gm_slen(c1)) 77 let m2: i64 = gm_hash(c2, gm_slen(c2)) 78 let m3: i64 = gm_hash(c3, gm_slen(c3)) 79 80 var admitted: i64 = 0 81 var rej_int: i64 = 0 82 var rej_gov: i64 = 0 83 84 // 1) received intact, proof passes -> ADMIT 85 let r1: i64 = gm_germinate(c1, c1, gm_slen(c1), m1, 1, a, why) 86 if r1 == 0 { admitted = admitted + 1 } else { if r1 == 1 { rej_int = rej_int + 1 } else { rej_gov = rej_gov + 1 } } 87 88 // 2) received CORRUPTED in transit -> INTEGRITY reject (never run) 89 let cor: *u8 = gm_corrupt(c2, gm_slen(c2)) 90 let r2: i64 = gm_germinate(c2, cor, gm_slen(c2), m2, 1, a, why) 91 if r2 == 0 { admitted = admitted + 1 } else { if r2 == 1 { rej_int = rej_int + 1 } else { rej_gov = rej_gov + 1 } } 92 93 // 3) received intact but its proof FAILS -> governance reject (Engineer) 94 let r3: i64 = gm_germinate(c3, c3, gm_slen(c3), m3, 0, a, why) 95 if r3 == 0 { admitted = admitted + 1 } else { if r3 == 1 { rej_int = rej_int + 1 } else { rej_gov = rej_gov + 1 } } 96 97 cc_puts("----------------------------------------------------------------\n" as *u8) 98 cc_puts(" germinated: ADMITTED " as *u8); let ab: *u8 = sys_mmap(2); ab[0] = 48 + admitted; sys_write(1, ab, 1) 99 cc_puts(" | REJECT-corrupt " as *u8); let ri: *u8 = sys_mmap(2); ri[0] = 48 + rej_int; sys_write(1, ri, 1) 100 cc_puts(" | REJECT-unproven " as *u8); let rg: *u8 = sys_mmap(2); rg[0] = 48 + rej_gov; sys_write(1, rg, 1) 101 cc_puts("\n the seed grows only with pieces that arrive INTACT, PROVE out, and\n" as *u8) 102 cc_puts(" pass the crew -- corrupt bytes never run; unproven code never enters.\n" as *u8) 103 cc_puts("----------------------------------------------------------------\n" as *u8) 104 105 if admitted != 1 { sys_exit(1); return 1 } 106 if rej_int != 1 { sys_exit(2); return 2 } 107 if rej_gov != 1 { sys_exit(3); return 3 } 108 sys_exit(0); return 0 109}