code wiki / _hdl_build / nx_weights_pull_gate.nx

nx_weights_pull_gate.nx source

↩ module page · 51 lines · 3761 B

1// nx_weights_pull_gate.nx -- GATE for the capstone verified-pull logic (composes M2b tree-parse + M3 stream-store). 2// Uses "abc" as a stand-in shard (sha256 = the FIPS vector ba7816bf...f20015ad): 3// T1 VERIFIED wp_pull_shard("abc", expected=abc-digest) == 1 (streamed, hashed, digest matches -> stored) 4// T2 TAMPER wp_pull_shard("abd", expected=abc-digest) == 0 (one byte flipped -> fail-closed, rejected) 5// T3 TRUNCATION wp_pull_shard("ab", expected=abc-digest) == 0 (short read -> fail-closed, rejected) 6// T4 COMPOSE hft_lfs_oid(fixture tree) -> the expected digest; that digest drives wp_pull_shard -> 1 7// (proves the HF-published per-file digest is exactly what the fail-closed verify checks against) 8// GREEN iff T1-T4 pass. Sovereign nx_cc->nxasm. expect_exit: 0 license_tier: ORIGINAL 9import "nx_weights_pull.nx" 10import "nx_hf_tree_parse.nx" 11import "nx_syscalls.nx" 12 13func 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 wn(v: i64) -> i64 { var m: i64=v; if m<0{w("-" as *u8);m=0-m} let t:*u8=sys_mmap(24); var k:i64=0; 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} var i:i64=0; let o:*u8=sys_mmap(24); while i<k{o[i]=t[k-1-i];i=i+1} sys_write(1,o,k); return 0 } 15 16func main() -> i64 { 17 w("=== nx_weights_pull_gate: capstone verified-pull (tree-digest -> stream -> hash -> fail-closed) ===\n" as *u8) 18 var pass: i64=0; var total: i64=0 19 let abc_sha: *u8 = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" as *u8 20 21 // ---- T1: VERIFIED ---- 22 let v1: i64 = wp_pull_shard("abc" as *u8, 3, abc_sha, "/tmp/wp_ok.bin" as *u8, 2) 23 var t1: i64=1; if v1 != 1 { t1=0 } 24 total=total+1; if t1==1 { pass=pass+1; w(" [PASS] " as *u8) } else { w(" [FAIL] " as *u8) } 25 w("T1 verified shard -> verdict=" as *u8); wn(v1); w(" (expect 1 = stored)\n" as *u8) 26 27 // ---- T2: TAMPER (byte flipped) ---- 28 let v2: i64 = wp_pull_shard("abd" as *u8, 3, abc_sha, "/tmp/wp_tamper.bin" as *u8, 2) 29 var t2: i64=1; if v2 != 0 { t2=0 } 30 total=total+1; if t2==1 { pass=pass+1; w(" [PASS] " as *u8) } else { w(" [FAIL] " as *u8) } 31 w("T2 tampered shard -> verdict=" as *u8); wn(v2); w(" (expect 0 = fail-closed)\n" as *u8) 32 33 // ---- T3: TRUNCATION (short) ---- 34 let v3: i64 = wp_pull_shard("ab" as *u8, 2, abc_sha, "/tmp/wp_trunc.bin" as *u8, 2) 35 var t3: i64=1; if v3 != 0 { t3=0 } 36 total=total+1; if t3==1 { pass=pass+1; w(" [PASS] " as *u8) } else { w(" [FAIL] " as *u8) } 37 w("T3 truncated shard -> verdict=" as *u8); wn(v3); w(" (expect 0 = fail-closed)\n" as *u8) 38 39 // ---- T4: COMPOSE -- the tree's lfs.oid drives the verify ---- 40 let tree: *u8 = "[{\"type\":\"file\",\"size\":9,\"path\":\"model-00001-of-00001.safetensors\",\"lfs\":{\"oid\":\"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad\",\"size\":3}}]" as *u8 41 var tn: i64=0; while tree[tn]!=(0 as u8){tn=tn+1} 42 let exp: *u8 = sys_mmap(80); let os: i64 = hft_lfs_oid(tree, tn, 0, exp) 43 let v4: i64 = wp_pull_shard("abc" as *u8, 3, exp, "/tmp/wp_compose.bin" as *u8, 1) 44 var t4: i64=1; if os < 0 { t4=0 } if v4 != 1 { t4=0 } 45 total=total+1; if t4==1 { pass=pass+1; w(" [PASS] " as *u8) } else { w(" [FAIL] " as *u8) } 46 w("T4 compose: tree lfs.oid=" as *u8); w(exp); w(" -> verdict=" as *u8); wn(v4); w(" (expect 1)\n" as *u8) 47 48 w("\n=== nx_weights_pull_gate " as *u8); wn(pass); w("/" as *u8); wn(total) 49 if pass==total { w(" GREEN (verified-pull brain proven offline: HF digest -> stream -> hash -> fail-closed on tamper/truncation; live fetch is the only network piece left)\n" as *u8); sys_exit(0); return 0 } 50 w(" RED\n" as *u8); sys_exit(1); return 1 51}