code wiki / (root) / nx_https_get_live_google_test.nx

nx_https_get_live_google_test.nx source

↩ module page · 138 lines · 5375 B

1// nx_https_get_live_google_test.nx -- live HTTPS fetch against 2// www.google.com via the bits-up self-host substrate. Google's edge 3// strongly prefers AES-128-GCM-SHA256 (0x1301) over ChaCha20. With 4// the cipher_suite dispatch wired (2026-05-20), this should finally 5// complete TLS 1.3 handshake against Google. 6// 7// expect_exit: 0 8// license_tier: ORIGINAL 9 10import "nx_syscalls.nx" 11import "nx_x509_trust_store.nx" 12import "nx_trust_store_load_from_certdata.nx" 13import "nx_tls13_client_validate_certificate.nx" 14import "nx_tls13_client_session_run.nx" 15import "nx_https_url_for_fetch.nx" 16import "nx_https_url_connect.nx" 17import "nx_https_get.nx" 18import "nx_https_get_complete.nx" 19import "nx_http_response_parse.nx" 20 21func dump_dec(label0: i64, label1: i64, v: i64) -> i64 { 22 let lab: *u8 = sys_mmap(8) 23 lab[0] = label0 as u8; lab[1] = label1 as u8; lab[2] = 0x3D 24 sys_write(2, lab, 3) 25 var av: i64 = v 26 if av < 0 { let neg: *u8 = sys_mmap(8); neg[0]=0x2D; sys_write(2, neg, 1); av = 0 - av } 27 if av == 0 { let z: *u8 = sys_mmap(8); z[0]=0x30; sys_write(2, z, 1) } 28 else { 29 let buf: *u8 = sys_mmap(16) 30 var pos: i64 = 0 31 var x: i64 = av 32 while x > 0 { buf[pos] = (0x30 + (x % 10)) as u8; x = x / 10; pos = pos + 1 } 33 let out: *u8 = sys_mmap(16) 34 var oi: i64 = 0 35 while oi < pos { out[oi] = buf[pos - 1 - oi]; oi = oi + 1 } 36 sys_write(2, out, pos) 37 } 38 let nl: *u8 = sys_mmap(8); nl[0]=0x0A; sys_write(2, nl, 1) 39 return 0 40} 41 42func main() -> i64 { 43 let path: *u8 = sys_mmap(64) 44 path[0]=0x2F; path[1]=0x74; path[2]=0x6D; path[3]=0x70 // /tmp 45 path[4]=0x2F // / 46 path[5]=0x6D; path[6]=0x6F; path[7]=0x7A; path[8]=0x69 // mozi 47 path[9]=0x6C; path[10]=0x6C; path[11]=0x61 // lla 48 path[12]=0x5F // _ 49 path[13]=0x63; path[14]=0x65; path[15]=0x72; path[16]=0x74 50 path[17]=0x64; path[18]=0x61; path[19]=0x74; path[20]=0x61 // certdata 51 path[21]=0x2E; path[22]=0x74; path[23]=0x78; path[24]=0x74 // .txt 52 path[25]=0 53 54 let r: i64 = nx_trust_store_load_from_certdata(path, 512, 4194304) 55 dump_dec(0x4C, 0x4F, r) 56 if r <= 0 { return 1 } 57 let store: *TrustStore = r as *TrustStore 58 let n: i64 = trust_store_count(store) 59 dump_dec(0x43, 0x41, n) 60 if n < 50 { return 3 } 61 62 // URL: https://www.google.com/ 63 let url: *u8 = sys_mmap(64) 64 url[0]=0x68; url[1]=0x74; url[2]=0x74; url[3]=0x70; url[4]=0x73 // https 65 url[5]=0x3A; url[6]=0x2F; url[7]=0x2F // :// 66 url[8]=0x77; url[9]=0x77; url[10]=0x77; url[11]=0x2E // www. 67 url[12]=0x67; url[13]=0x6F; url[14]=0x6F; url[15]=0x67 // goog 68 url[16]=0x6C; url[17]=0x65; url[18]=0x2E // le. 69 url[19]=0x63; url[20]=0x6F; url[21]=0x6D // com 70 url[22]=0x2F // / 71 url[23]=0 72 73 let cr: *u8 = sys_mmap(32) 74 var i: i64 = 0 75 while i < 32 { cr[i] = (0xC0 + i) as u8; i = i + 1 } 76 let priv: *u8 = sys_mmap(32) 77 i = 0 78 while i < 32 { priv[i] = (0xA0 + i) as u8; i = i + 1 } 79 80 let url_p: *NxUrl = nx_url_new() 81 let target_raw: *u8 = sys_mmap(32) 82 let target: *NxHttpsTarget = target_raw as *NxHttpsTarget 83 target.url = url_p 84 target.port = 0 85 if nx_https_url_for_fetch(url, target) != NX_HTTPS_URL_OK { return 41 } 86 87 let fd_p: *i64 = sys_mmap(16) as *i64 88 if nx_https_url_connect(target, url, 1779284141, fd_p) != NX_HTTPS_CONNECT_OK { return 42 } 89 let fd: i64 = *fd_p 90 91 let val_ctx_raw: *u8 = sys_mmap(64) 92 let val_ctx: *TlsValidationContext = val_ctx_raw as *TlsValidationContext 93 val_ctx.store = store 94 val_ctx.sni_host = url + target.url.host_off 95 val_ctx.sni_host_len = target.url.host_len 96 val_ctx.now_epoch = sys_now_realtime_sec() // REAL clock: hardcoded epochs rot when live sites renew certs (B1 root cause) 97 98 let sr: i64 = nx_tls13_client_session_run( 99 fd, url + target.url.host_off, target.url.host_len, 100 cr, priv, val_ctx 101 ) 102 dump_dec(0x53, 0x52, sr) 103 if sr <= 0 { sys_close(fd); return 200 + (0 - sr) } 104 105 let session: *Tls13ClientSession = sr as *Tls13ClientSession 106 let buf: *u8 = sys_mmap(262144) // 256KB -- Google homepage is large 107 let gp: *u8 = sys_mmap(4) 108 gp[0]=0x2F 109 let gc: i64 = nx_https_get_complete( 110 session, fd, gp, 1, 111 url + target.url.host_off, target.url.host_len, 112 buf, 262144 113 ) 114 sys_close(fd) 115 dump_dec(0x47, 0x43, gc) 116 if gc < 0 { return 100 + (0 - gc) } 117 118 let rs: *i64 = sys_mmap(128) as *i64 119 let pv: i64 = nx_http_response_parse(buf, gc, rs) 120 dump_dec(0x50, 0x56, pv) 121 if pv != 0 { return 50 } 122 let status: i64 = rs[1] 123 dump_dec(0x53, 0x54, status) 124 if status < 200 { return 51 } 125 if status >= 400 { return 52 } 126 127 let outpath: *u8 = "/tmp/google_com.html" 128 let ofd: i64 = sys_openat_wr(outpath, 0x1A4) 129 if ofd <= 0 { return 70 } 130 sys_write(ofd, buf, gc) 131 sys_close(ofd) 132 133 let banner: *u8 = sys_mmap(16) 134 banner[0]=0x47; banner[1]=0x4F; banner[2]=0x4F; banner[3]=0x47 // GOOG 135 banner[4]=0x4C; banner[5]=0x45; banner[6]=0x21; banner[7]=0x0A // LE!\n 136 sys_write(1, banner, 8) 137 return 0 138}