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}