code wiki / _hdl_build / nx_js_ytsig_gate.nx
nx_js_ytsig_gate.nx source
↩ module page · 50 lines · 3589 B
1import "nx_gate_gn.nx"
2import "nx_gate_base.nx"
3// nx_js_ytsig_gate.nx -- proves our JS engine can run a real YouTube-style SIGNATURE DECIPHER end-to-end:
4// split("") -> [swap via index-assign / reverse / splice] transforms -> join(""). This is the class of
5// function yt-dlp needs its own JS interpreter for; running it is what makes YouTube tractable (vs a wall).
6// Tree-walker oracle (js_run_source). license_tier: ORIGINAL expect_exit: 0
7import "nx_syscalls.nx"
8import "nx_js_eval.nx"
9
10func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw("
11" as *u8); return ok }
12func gsl(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
13func rjs(src: *u8, etag: i64, epay: i64) -> i64 { let out: *i64 = sys_mmap(16) as *i64; if js_run_source(src, gsl(src), out) != 0 { return 0 } if out[0] != etag { return 0 } if out[1] != epay { return 0 } return 1 }
14func rjs_str(src: *u8, exp: *u8) -> i64 {
15 let out: *i64 = sys_mmap(16) as *i64
16 if js_run_source(src, gsl(src), out) != 0 { return 0 }
17 if out[0] != VAL_STR { return 0 }
18 let srec: *i64 = (out[1]) as *i64
19 let sb: *u8 = ev_str_bytes(srec); let sl: i64 = ev_str_len(srec)
20 if sl != gsl(exp) { return 0 }
21 var i: i64 = 0; while i < sl { if sb[i] != exp[i] { return 0 } i = i + 1 }
22 return 1
23}
24
25func main() -> i64 {
26 gw("js-ytsig SOVEREIGN gate (Array.reverse/splice + split(\"\")/join -> real signature decipher)\n" as *u8)
27 var pass: i64 = 0
28 var ttl: i64 = 0
29
30 // Y1: Array.reverse (in place, returns the array)
31 ttl=ttl+1; pass=pass+grow("Y1 [1,2,3,4].reverse().join = 4,3,2,1\x00" as *u8, rjs_str("var a=[1,2,3,4];a.reverse();a.join(',')" as *u8, "4,3,2,1\x00" as *u8))
32 // Y2: Array.splice mutates (remove 2 at index 1)
33 ttl=ttl+1; pass=pass+grow("Y2 splice(1,2) mutates -> 1,4,5\x00" as *u8, rjs_str("var a=[1,2,3,4,5];a.splice(1,2);a.join(',')" as *u8, "1,4,5\x00" as *u8))
34 // Y3: Array.splice returns the removed elements
35 ttl=ttl+1; pass=pass+grow("Y3 splice returns removed -> 2,3\x00" as *u8, rjs_str("var a=[1,2,3,4,5];var r=a.splice(1,2);r.join(',')" as *u8, "2,3\x00" as *u8))
36 // Y4: splice(0,b) -- the YouTube "drop first b" form
37 ttl=ttl+1; pass=pass+grow("Y4 splice(0,2) drops first 2 -> c,d,e\x00" as *u8, rjs_str("var a=['a','b','c','d','e'];a.splice(0,2);a.join(',')" as *u8, "c,d,e\x00" as *u8))
38 // Y5: split("") -> per-char array (core to sig)
39 ttl=ttl+1; pass=pass+grow("Y5 'abcd'.split('').length = 4\x00" as *u8, rjs("'abcd'.split('').length" as *u8, VAL_NUM, 4))
40 // Y6: swap via index assignment (the 3rd sig transform)
41 ttl=ttl+1; pass=pass+grow("Y6 swap a[0]<->a[2] -> 3,2,1,4\x00" as *u8, rjs_str("var a=[1,2,3,4];var c=a[0];a[0]=a[2];a[2]=c;a.join(',')" as *u8, "3,2,1,4\x00" as *u8))
42 // Y7: THE REAL THING -- a full YouTube-shape decipher (split -> swap/reverse/splice -> join) = 'efacbd'
43 ttl=ttl+1; pass=pass+grow("Y7 full decipher('abcdefgh') = efacbd\x00" as *u8,
44 rjs_str("function rev(a){a.reverse();} function swp(a,b){var c=a[0];a[0]=a[b%a.length];a[b%a.length]=c;} function spl(a,b){a.splice(0,b);} function dec(s){var a=s.split('');swp(a,3);rev(a);spl(a,2);swp(a,1);return a.join('');} dec('abcdefgh')" as *u8,
45 "efacbd\x00" as *u8))
46
47 gw("pass=" as *u8); gn(pass); gw("/" as *u8); gn(ttl); gw("\n" as *u8)
48 if pass == ttl { gw("verdict=GREEN (engine runs a real YouTube-style signature decipher -- layer 5 reachable)\n" as *u8); sys_exit(0); return 0 }
49 gw("verdict=RED\n" as *u8); sys_exit(1); return 1
50}