code wiki / _hdl_build / nx_model_get_gate.nx
nx_model_get_gate.nx source
↩ module page · 108 lines · 5423 B
1// nx_model_get_gate.nx -- GATE for the offline decision half of G9 mg_fetch (nx_model_get_lib). The network half
2// (nx_https_fetch_range windows + streaming sha256 + wp_ verify) is composed from already-gated incumbents
3// (nx_weights_pull_gate proves the fail-closed verify; the fetch stack carries its own gates); what THIS gate
4// proves is every decision nx_model_get makes around them: hash admission, dest-name admission (path escape),
5// Content-Range/Content-Length parsing, and conf parsing. In-process over the lib. Planted-bad + neg-controls
6// per tooth. license_tier: ORIGINAL expect_exit: 0
7import "nx_syscalls.nx"
8import "nx_gate_verdict.nx"
9import "nx_model_get_lib.nx"
10
11func main() -> i64 {
12 gv_head("=== nx_model_get_gate: G9 decision logic -- hash admission, dest escape refusal, range/length/conf parsing ===" as *u8)
13 let ctr: *i64 = gv_ctr()
14
15 // ---- mg_hex_norm ----
16 let hx: *u8 = sys_mmap(80)
17 let okhex: i64 = mg_hex_norm("BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD" as *u8, hx)
18 var t1: i64=0
19 if okhex==1 { if hx[0]==(98 as u8) { t1=1 } } // normalized lowercase, first char 'b'
20 gv_check("hex-norm-accepts-64-hex-and-lowercases" as *u8, t1, ctr)
21 let hx2: *u8 = sys_mmap(80)
22 var b_short: i64=0
23 if mg_hex_norm("ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015a" as *u8, hx2)==0 { b_short=1 }
24 var g_fired: i64=0
25 if okhex==0 { g_fired=1 }
26 gv_bite("neg-control-63-hex-refused" as *u8, b_short, g_fired, ctr)
27 var b_nonhex: i64=0
28 if mg_hex_norm("ga7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" as *u8, hx2)==0 { b_nonhex=1 }
29 gv_bite("neg-control-nonhex-refused" as *u8, b_nonhex, g_fired, ctr)
30
31 // ---- mg_dest_ok: path-escape admission ----
32 var t_good: i64=0
33 if mg_dest_ok("diffusion/z_image_turbo-Q8_0.gguf" as *u8)==1 { t_good=1 }
34 gv_check("dest-accepts-relative-subdir-name" as *u8, t_good, ctr)
35 var good_refused: i64=0
36 if t_good==0 { good_refused=1 }
37 var b_dotdot: i64=0
38 if mg_dest_ok("../etc/passwd" as *u8)==0 { b_dotdot=1 }
39 gv_bite("neg-control-dotdot-escape-refused" as *u8, b_dotdot, good_refused, ctr)
40 var b_abs: i64=0
41 if mg_dest_ok("/volume1/anything" as *u8)==0 { b_abs=1 }
42 gv_bite("neg-control-absolute-name-refused" as *u8, b_abs, good_refused, ctr)
43 let bsname: *u8 = sys_mmap(8)
44 bsname[0]=97 as u8
45 bsname[1]=92 as u8
46 bsname[2]=98 as u8
47 bsname[3]=0 as u8
48 var b_bs: i64=0
49 if mg_dest_ok(bsname)==0 { b_bs=1 }
50 gv_bite("neg-control-backslash-refused" as *u8, b_bs, good_refused, ctr)
51 var b_empty: i64=0
52 if mg_dest_ok("" as *u8)==0 { b_empty=1 }
53 gv_bite("neg-control-empty-name-refused" as *u8, b_empty, good_refused, ctr)
54
55 // ---- mg_join ----
56 let jout: *u8 = sys_mmap(4096)
57 mg_join("/volume1/ai/models" as *u8, "loras/x.safetensors" as *u8, jout)
58 var t_join: i64=0
59 if mg_find_ci(jout, mg_slen(jout), "/volume1/ai/models/loras/x.safetensors" as *u8)==0 { t_join=1 }
60 gv_check("join-inserts-exactly-one-slash" as *u8, t_join, ctr)
61
62 // ---- Content-Range total ----
63 let h206: *u8 = "HTTP/1.1 206 Partial Content\r\nServer: x\r\nContent-Range: bytes 0-0/7123456789\r\nContent-Length: 1\r\n\r\n" as *u8
64 let tot: i64 = mg_content_range_total(h206, mg_slen(h206))
65 gv_puts(" parsed content-range total=" as *u8)
66 gv_num(tot)
67 gv_puts("\n" as *u8)
68 var t_cr: i64=0
69 if tot==7123456789 { t_cr=1 }
70 gv_check("content-range-total-parsed-exactly" as *u8, t_cr, ctr)
71 let h200: *u8 = "HTTP/1.1 200 OK\r\nContent-Length: 12345\r\n\r\n" as *u8
72 var b_nocr: i64=0
73 if mg_content_range_total(h200, mg_slen(h200))==(0-1) { b_nocr=1 }
74 var cr_on_206_missed: i64=0
75 if t_cr==0 { cr_on_206_missed=1 }
76 gv_bite("neg-control-absent-content-range-is-minus-1" as *u8, b_nocr, cr_on_206_missed, ctr)
77
78 // ---- Content-Length ----
79 let cl: i64 = mg_content_length(h200, mg_slen(h200))
80 var t_cl: i64=0
81 if cl==12345 { t_cl=1 }
82 gv_check("content-length-parsed-exactly" as *u8, t_cl, ctr)
83 let hnone: *u8 = "HTTP/1.1 200 OK\r\nX-Content-Length: 99\r\n\r\n" as *u8
84 var t_noline: i64=0
85 if mg_content_length(hnone, mg_slen(hnone))==(0-1) { t_noline=1 }
86 gv_check("neg-control-x-content-length-not-matched-off-line-start" as *u8, t_noline, ctr)
87
88 // ---- conf parsing ----
89 let conf: *u8 = "key=other\nroot=/volume1/ai/models\nwindow_bytes=8388608\n" as *u8
90 let vout: *u8 = sys_mmap(256)
91 let rl: i64 = mg_conf_val(conf, mg_slen(conf), "root" as *u8, vout, 256)
92 var t_root: i64=0
93 if rl>0 { if mg_find_ci(vout, rl, "/volume1/ai/models" as *u8)==0 { t_root=1 } }
94 gv_check("conf-root-parsed" as *u8, t_root, ctr)
95 let wout: *u8 = sys_mmap(256)
96 let wl: i64 = mg_conf_val(conf, mg_slen(conf), "window_bytes" as *u8, wout, 256)
97 var t_w: i64=0
98 if wl>0 { if mg_parse_uint(wout, wl, 0)==8388608 { t_w=1 } }
99 gv_check("conf-window-parsed-to-8388608" as *u8, t_w, ctr)
100 let mout: *u8 = sys_mmap(256)
101 var t_missing: i64=0
102 if mg_conf_val(conf, mg_slen(conf), "absent_key" as *u8, mout, 256)==0 { t_missing=1 }
103 gv_check("conf-missing-key-returns-0-not-a-guess" as *u8, t_missing, ctr)
104
105 let rc: i64 = gv_verdict("nx_model_get_gate" as *u8, ctr, "decision half proven offline; the network half composes gated incumbents" as *u8)
106 sys_exit(rc)
107 return rc
108}