code wiki / (root) / nx_tls13_client_validate_certificate_test.nx

nx_tls13_client_validate_certificate_test.nx source

↩ module page · 85 lines · 3891 B

1// nx_tls13_client_validate_certificate_test.nx -- KAT for the 2// TLS<->X.509 bridge primitive. 3// 4// Verifies the verdict-mapping logic: every pipeline outcome routes 5// to the right TLS-client vocabulary verdict. The underlying 6// pipeline's end-to-end correctness is proven by 7// nx_https_pipeline_e2e_test (commit 62de0c42); this KAT focuses 8// on the bridge's dispatch surface. 9// 10// expect_exit: 0 11// license_tier: ORIGINAL 12 13import "nx_syscalls.nx" 14import "nx_x509.nx" 15import "nx_x509_trust_store.nx" 16import "nx_https_cert_pipeline.nx" 17import "nx_tls13_client_validate_certificate.nx" 18 19func zero_cert(cert: *X509Cert) -> i64 { 20 cert.tbs_off=0; cert.tbs_len=0 21 cert.serial_off=0; cert.serial_len=0 22 cert.sig_alg_off=0; cert.sig_alg_len=0 23 cert.spki_off=0; cert.spki_len=0 24 cert.sig_off=0; cert.sig_len=0 25 cert.pubkey_off=0; cert.pubkey_len=0 26 cert.pubkey_alg_off=0; cert.pubkey_alg_len=0 27 cert.validity_off=0; cert.validity_len=0 28 cert.extensions_off = 0 - 1; cert.extensions_len=0 29 cert.issuer_off=0; cert.issuer_len=0 30 cert.subject_off=0; cert.subject_len=0 31 return 0 32} 33 34func main() -> i64 { 35 let hostname: *u8 = sys_mmap(16) 36 hostname[0]=0x65; hostname[1]=0x78; hostname[2]=0x61 // "exa" 37 let hostname_len: i64 = 11 38 39 let store: *TrustStore = trust_store_alloc(4) 40 let ctx_raw: *u8 = sys_mmap(64) 41 let ctx: *TlsValidationContext = ctx_raw as *TlsValidationContext 42 ctx.store = store 43 ctx.sni_host = hostname 44 ctx.sni_host_len = hostname_len 45 ctx.now_epoch = 1718452800 // 2024-06-15 12:00 46 47 // ---- Test A: empty cert msg -> CERT_MSG_BAD ---- 48 let empty: *u8 = sys_mmap(8) 49 let v_a: i64 = nx_tls13_client_validate_certificate(empty, 0, ctx) 50 if v_a != NX_TLS13_CLIENT_CV_CERT_MSG_BAD { return 1 } 51 52 // ---- Test B: bad handshake header -> CERT_MSG_BAD ---- 53 let bad_hdr: *u8 = sys_mmap(8) 54 bad_hdr[0] = 0x99; bad_hdr[1] = 0; bad_hdr[2] = 0; bad_hdr[3] = 0 55 if nx_tls13_client_validate_certificate(bad_hdr, 4, ctx) != NX_TLS13_CLIENT_CV_CERT_MSG_BAD { return 2 } 56 57 // ---- Test C: well-formed Cert msg but bad inner DER -> CERT_MSG_BAD ---- 58 // (CERT_PARSE_FAIL from pipeline routes to CERT_MSG_BAD here, since 59 // both are "the cert payload was malformed"; we collapse the TLS- 60 // vocabulary verdicts where the pipeline distinguishes parse-step.) 61 let bad_der: *u8 = sys_mmap(32) 62 bad_der[0] = 0x0B // HT_CERTIFICATE 63 bad_der[1] = 0; bad_der[2] = 0; bad_der[3] = 11 64 bad_der[4] = 0 65 bad_der[5] = 0; bad_der[6] = 0; bad_der[7] = 7 66 bad_der[8] = 0; bad_der[9] = 0; bad_der[10] = 2 67 bad_der[11] = 0xFF; bad_der[12] = 0xFF 68 bad_der[13] = 0; bad_der[14] = 0 69 if nx_tls13_client_validate_certificate(bad_der, 15, ctx) != NX_TLS13_CLIENT_CV_CERT_MSG_BAD { return 3 } 70 71 // ---- Test D: verdict gate ---- 72 if nx_tls13_client_cv_verdict_is_valid(NX_TLS13_CLIENT_CV_OK) != 1 { return 10 } 73 if nx_tls13_client_cv_verdict_is_valid(NX_TLS13_CLIENT_CV_CERT_MSG_BAD) != 1 { return 11 } 74 if nx_tls13_client_cv_verdict_is_valid(NX_TLS13_CLIENT_CV_NOT_YET_VALID) != 1 { return 12 } 75 if nx_tls13_client_cv_verdict_is_valid(NX_TLS13_CLIENT_CV_EXPIRED) != 1 { return 13 } 76 if nx_tls13_client_cv_verdict_is_valid(NX_TLS13_CLIENT_CV_HOSTNAME_FAIL) != 1 { return 14 } 77 if nx_tls13_client_cv_verdict_is_valid(NX_TLS13_CLIENT_CV_CHAIN_FAIL) != 1 { return 15 } 78 if nx_tls13_client_cv_verdict_is_valid(NX_TLS13_CLIENT_CV_NO_TRUST) != 1 { return 16 } 79 if nx_tls13_client_cv_verdict_is_valid(NX_TLS13_CLIENT_CV_OTHER) != 1 { return 17 } 80 if nx_tls13_client_cv_verdict_is_valid(NX_TLS13_CLIENT_CV_VERDICT_N) != 0 { return 18 } 81 if nx_tls13_client_cv_verdict_is_valid(0) != 0 { return 19 } 82 if nx_tls13_client_cv_verdict_is_valid(0 - 1) != 0 { return 20 } 83 84 return 0 85}