code wiki / (root) / nx_tls13_recv_hs_diff_test.nx

nx_tls13_recv_hs_diff_test.nx source

↩ module page · 137 lines · 5745 B

1// nx_tls13_recv_hs_diff_test.nx -- B1 differential: identical setup to 2// nx_tls13_recv_hs_probe_test (which walks the record with MIRRORED logic 3// and reaches WAIT_CLIENT_FIN green vs example.com), but calls the REAL 4// shipped nx_tls13_client_session_recv_hs per record. If this fails where 5// the mirror passes, the defect is inside recv_hs's COMPILED code (suspect: 6// the 5-deep nested else-if state chain -- a filed compiler landmine class), 7// not its logic. RH= verdict + ST= state per record. 8// expect_exit: 0 when recv_hs is healthy against example.com 9// license_tier: ORIGINAL 10 11import "nx_syscalls.nx" 12import "nx_https_url_for_fetch.nx" 13import "nx_https_url_connect.nx" 14import "nx_x509_trust_store.nx" 15import "nx_trust_store_load_from_certdata.nx" 16import "nx_tls13_client_session_recv_sh.nx" 17import "nx_tls13_client_session_recv_hs.nx" 18import "nx_tls13_read_record_from_fd.nx" 19 20func rd_dec(label0: i64, label1: i64, v: i64) -> i64 { 21 let lab: *u8 = sys_mmap(8) 22 lab[0] = label0 as u8; lab[1] = label1 as u8; lab[2] = 0x3D 23 sys_write(1, lab, 3) 24 var av: i64 = v 25 if av < 0 { 26 let neg: *u8 = sys_mmap(8); neg[0] = 0x2D; sys_write(1, neg, 1) 27 av = 0 - av 28 } 29 if av == 0 { 30 let z: *u8 = sys_mmap(8); z[0] = 0x30; sys_write(1, z, 1) 31 } 32 if av > 0 { 33 let buf: *u8 = sys_mmap(32) 34 var pos: i64 = 0 35 var x: i64 = av 36 while x > 0 { buf[pos] = (0x30 + (x % 10)) as u8; x = x / 10; pos = pos + 1 } 37 let out: *u8 = sys_mmap(32) 38 var oi: i64 = 0 39 while oi < pos { out[oi] = buf[pos - 1 - oi]; oi = oi + 1 } 40 sys_write(1, out, pos) 41 } 42 let nl: *u8 = sys_mmap(8); nl[0] = 0x0A; sys_write(1, nl, 1) 43 return 0 44} 45 46func main() -> i64 { 47 let host_len: i64 = 11 48 let url: *u8 = "https://example.com/\x00" 49 let epoch: i64 = 1781100000 50 51 let r: i64 = nx_trust_store_load_from_certdata("/tmp/mozilla_certdata.txt\x00" as *u8, 300, 4194304) 52 if r <= 0 { rd_dec(0x4C, 0x4F, r); return 11 } 53 let store: *TrustStore = r as *TrustStore 54 55 let url_p: *NxUrl = nx_url_new() 56 let target_raw: *u8 = sys_mmap(32) 57 let target: *NxHttpsTarget = target_raw as *NxHttpsTarget 58 target.url = url_p 59 target.port = 0 60 if nx_https_url_for_fetch(url, target) != NX_HTTPS_URL_OK { return 12 } 61 let fd_p: *i64 = sys_mmap(16) as *i64 62 if nx_https_url_connect(target, url, 1781100002, fd_p) != NX_HTTPS_CONNECT_OK { return 13 } 63 let fd: i64 = *fd_p 64 sys_set_socket_timeout(fd, 10) 65 let host: *u8 = url + target.url.host_off 66 67 let val_ctx_raw: *u8 = sys_mmap(64) 68 let val_ctx: *TlsValidationContext = val_ctx_raw as *TlsValidationContext 69 val_ctx.store = store 70 val_ctx.sni_host = host 71 val_ctx.sni_host_len = host_len 72 val_ctx.now_epoch = epoch 73 74 let cr: *u8 = sys_mmap(32) 75 let priv: *u8 = sys_mmap(32) 76 var i: i64 = 0 77 while i < 32 { cr[i] = (0xC0 + i) as u8; priv[i] = (0xA0 + i) as u8; i = i + 1 } 78 let s: *Tls13ClientSession = nx_tls13_client_session_new(cr, priv) 79 let ch_buf: *u8 = sys_mmap(1024) 80 let ch_n: i64 = nx_tls13_client_session_emit_ch(s, host, host_len, ch_buf, 1024) 81 if ch_n < 0 { sys_close(fd); return 14 } 82 83 let rec: *u8 = sys_mmap(1024 + NX_TLS13_RECORD_HEADER_LEN) 84 rec[0] = (NX_TLS13_CT_HANDSHAKE & 0xff) as u8 85 rec[1] = 0x03 as u8; rec[2] = 0x01 as u8 86 rec[3] = ((ch_n >> 8) & 0xff) as u8 87 rec[4] = (ch_n & 0xff) as u8 88 var ci: i64 = 0 89 while ci < ch_n { rec[NX_TLS13_RECORD_HEADER_LEN + ci] = ch_buf[ci]; ci = ci + 1 } 90 var sent: i64 = 0 91 let want: i64 = NX_TLS13_RECORD_HEADER_LEN + ch_n 92 while sent < want { 93 let w: i64 = sys_write(fd, rec + sent, want - sent) 94 if w <= 0 { sys_close(fd); return 15 } 95 sent = sent + w 96 } 97 98 let sh_record: *u8 = sys_mmap(16700) 99 let sh_total: i64 = nx_tls13_read_record_from_fd(fd, sh_record, 16700) 100 if sh_total < 0 { sys_close(fd); rd_dec(0x52, 0x44, sh_total); return 16 } 101 let rv: i64 = nx_tls13_client_session_recv_sh(s, sh_record + NX_TLS13_RECORD_HEADER_LEN, sh_total - NX_TLS13_RECORD_HEADER_LEN) 102 rd_dec(0x52, 0x56, rv) 103 if rv != NX_TLS13_RECV_SH_OK { sys_close(fd); return 17 } 104 105 var recno: i64 = 0 106 var fail: i64 = 0 107 var running: i64 = 1 108 while running == 1 { 109 if s.state == NX_TLS13_CSESSION_STATE_WAIT_CLIENT_FIN { running = 0 } 110 if recno >= 16 { running = 0; if fail == 0 { fail = 90 } } 111 if running == 1 { 112 let hs_record: *u8 = sys_mmap(17000) 113 let hs_total: i64 = nx_tls13_read_record_from_fd(fd, hs_record, 17000) 114 rd_dec(0x52, 0x43, recno) // RC= 115 rd_dec(0x54, 0x4C, hs_total) // TL= 116 if hs_total < 0 { fail = 20; running = 0 } 117 if running == 1 { 118 let oct: i64 = hs_record[0] & 0xff 119 rd_dec(0x43, 0x54, oct) // CT= 120 if oct == 20 { 121 rd_dec(0x43, 0x43, 1) // CC= 122 } else { 123 let rh: i64 = nx_tls13_client_session_recv_hs(s, hs_record, hs_total, val_ctx) 124 rd_dec(0x52, 0x48, rh) // RH= 125 rd_dec(0x53, 0x54, s.state) // ST= 126 if rh != NX_TLS13_RECV_HS_OK { fail = 40 + rh; running = 0 } 127 } 128 } 129 recno = recno + 1 130 } 131 } 132 sys_close(fd) 133 rd_dec(0x46, 0x58, fail) // FX= 134 if fail == 0 { if s.state == NX_TLS13_CSESSION_STATE_WAIT_CLIENT_FIN { return 0 } } 135 if fail == 0 { return 91 } 136 return fail 137}