code wiki / _hdl_build / nx_quic_pkt_test.nx

nx_quic_pkt_test.nx source

↩ module page · 49 lines · 2671 B

1// nx_quic_pkt_gate.nx -- RUNG 2 gate: QUIC packet number encode/decode vs RFC 9000 Appendix A.2/A.3 2// (the exact sample vectors) + both wraparound-window branches + in-order round-trips. Native, sovereign. 3// license_tier: ORIGINAL 4import "nx_quic_pkt.nx" 5import "nx_g_check_lib.nx" 6import "nx_g_pn_lib.nx" 7import "nx_g_puts_lib.nx" 8 9func main() -> i64 { 10 g_puts("nx_quic_pkt gate -- packet number vs RFC 9000 A.2/A.3\n" as *u8) 11 var pass: i64=0; var total: i64=0 12 13 // RFC 9000 A.3 sample DECODE: largest=0xa82f30ea, truncated=0x9b32, 16 bits -> 0xa82f9b32 14 var c: i64=0; if quic_pn_decode(0xa82f30ea, 0x9b32, 16) == 0xa82f9b32 { c=1 } 15 pass = pass + g_check("RFC A.3 decode(0xa82f30ea,0x9b32,16) == 0xa82f9b32" as *u8, c); total=total+1 16 17 // RFC 9000 A.2 sample ENCODE: full=0xac5c02 largest_acked=0xabe8b3 -> 2 bytes, truncated 0x5c02 18 c=0; if quic_pn_enc_len(0xac5c02, 0xabe8b3) == 2 { c=1 } 19 pass = pass + g_check("RFC A.2 enc_len(0xac5c02,0xabe8b3) == 2 bytes" as *u8, c); total=total+1 20 c=0; if quic_pn_truncate(0xac5c02, 2) == 0x5c02 { c=1 } 21 pass = pass + g_check("RFC A.2 truncate(0xac5c02,2) == 0x5c02" as *u8, c); total=total+1 22 23 // -pn_win branch: decode(0x200, 0xfe, 8) -> 0x1fe (nearer than 0x2fe to expected 0x201) 24 c=0; if quic_pn_decode(0x200, 0xfe, 8) == 0x1fe { c=1 } 25 pass = pass + g_check("wraparound -pn_win: decode(0x200,0xfe,8) == 0x1fe" as *u8, c); total=total+1 26 // +pn_win branch: decode(0x2fe, 0x01, 8) -> 0x301 (nearer than 0x201 to expected 0x2ff) 27 c=0; if quic_pn_decode(0x2fe, 0x01, 8) == 0x301 { c=1 } 28 pass = pass + g_check("wraparound +pn_win: decode(0x2fe,0x01,8) == 0x301" as *u8, c); total=total+1 29 30 // in-order round-trip: encode full_pn vs largest_acked=full_pn-1, then decode with largest=full_pn-1 31 let pns: *i64 = sys_mmap(8*6) as *i64 32 pns[0]=1; pns[1]=255; pns[2]=256; pns[3]=1000000; pns[4]=0xa82f9b32; pns[5]=4611686018427387000 33 var rt_ok: i64=1; var k: i64=0 34 while k<6 { 35 let fp: i64 = pns[k] 36 let la: i64 = fp - 1 37 let nb: i64 = quic_pn_enc_len(fp, la) 38 let tr: i64 = quic_pn_truncate(fp, nb) 39 let dec: i64 = quic_pn_decode(la, tr, 8*nb) 40 if dec != fp { rt_ok=0 } 41 k=k+1 42 } 43 pass = pass + g_check("in-order encode->truncate->decode recovers full PN (6 values incl near-2^62)" as *u8, rt_ok); total=total+1 44 45 g_puts("---- quic_pkt gate: passed " as *u8); g_pn(pass); g_puts(" / " as *u8); g_pn(total); g_puts(" ----\n" as *u8) 46 if pass == total { g_puts("VERDICT: GREEN (QUIC packet numbers, RFC 9000 A.2/A.3, sovereign)\n" as *u8); return 0 } 47 g_puts("VERDICT: RED\n" as *u8) 48 return 1 49}