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}