code wiki / (root) / nx_tls13_read_record_from_fd_test.nx

nx_tls13_read_record_from_fd_test.nx source

↩ module page · 49 lines · 2219 B

1// nx_tls13_read_record_from_fd_test.nx -- KAT for the TLS record 2// reader from fd. 3// 4// Note on test scope: sys_pipe2 in qemu-riscv64-static is 5// unreliable for round-trip IO (the existing nx_objdump primitive's 6// preamble documents this with a graceful-fallback comment). This 7// KAT therefore exercises: 8// - bounds-check paths (out_cap too small for header / payload) 9// - read-failure path (bad fd -> sys_read negative -> READ_ERR 10// or EOF depending on platform) 11// - verdict gate 12// 13// The full byte-exact round-trip is exercised live by Arc A's 14// end-to-end demo against a real TLS server (queued). 15// 16// expect_exit: 0 17// license_tier: ORIGINAL 18 19import "nx_syscalls.nx" 20import "nx_tls13_read_record_from_fd.nx" 21 22func main() -> i64 { 23 let buf: *u8 = sys_mmap(64) 24 25 // ---- Test A: out_cap too small for header -> BUF_OVERFLOW ---- 26 if nx_tls13_read_record_from_fd(0, buf, 3) != (0 - NX_TLS13_READ_REC_BUF_OVERFLOW) { return 1 } 27 if nx_tls13_read_record_from_fd(0, buf, 4) != (0 - NX_TLS13_READ_REC_BUF_OVERFLOW) { return 2 } 28 29 // ---- Test B: invalid fd -> READ_ERR or EOF ---- 30 // sys_read on -1 returns -EBADF on Linux/qemu; or some platforms 31 // return 0 (EOF). Accept either. 32 let v_b: i64 = nx_tls13_read_record_from_fd(0 - 1, buf, 64) 33 if v_b != (0 - NX_TLS13_READ_REC_READ_ERR) { 34 if v_b != (0 - NX_TLS13_READ_REC_EOF) { return 10 } 35 } 36 37 // ---- Test C: sealed verdict gate ---- 38 if nx_tls13_read_rec_verdict_is_valid(NX_TLS13_READ_REC_OK) != 1 { return 20 } 39 if nx_tls13_read_rec_verdict_is_valid(NX_TLS13_READ_REC_EOF) != 1 { return 21 } 40 if nx_tls13_read_rec_verdict_is_valid(NX_TLS13_READ_REC_PAYLOAD_EOF) != 1 { return 22 } 41 if nx_tls13_read_rec_verdict_is_valid(NX_TLS13_READ_REC_BUF_OVERFLOW) != 1 { return 23 } 42 if nx_tls13_read_rec_verdict_is_valid(NX_TLS13_READ_REC_TOO_LONG) != 1 { return 24 } 43 if nx_tls13_read_rec_verdict_is_valid(NX_TLS13_READ_REC_READ_ERR) != 1 { return 25 } 44 if nx_tls13_read_rec_verdict_is_valid(NX_TLS13_READ_REC_VERDICT_N) != 0 { return 26 } 45 if nx_tls13_read_rec_verdict_is_valid(0) != 0 { return 27 } 46 if nx_tls13_read_rec_verdict_is_valid(0 - 1) != 0 { return 28 } 47 48 return 0 49}