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}