code wiki / _hdl_build / nx_quic_wire_test.nx

nx_quic_wire_test.nx source

↩ module page · 97 lines · 5538 B

1// nx_quic_wire_gate.nx -- RUNG 1 gate: proves the sovereign QUIC varint + DATAGRAM frame codec is 2// RFC-CONFORMANT against the actual RFC 9000 Appendix A.1 test vectors + RFC 9221 DATAGRAM round-trip. 3// Native (same source the transport ships), no browser. GREEN = byte-exact vs the RFCs. license_tier: ORIGINAL 4import "nx_quic_wire.nx" 5import "nx_g_pn_lib.nx" 6import "nx_g_puts_lib.nx" 7 8func g_check(name: *u8, cond: i64) -> i64 { 9 if cond==1 { g_puts(" PASS " as *u8) } else { g_puts(" FAIL " as *u8) } 10 g_puts(name); g_puts("\n" as *u8); return cond 11} 12// decode b[0..8) and require value==ev AND consumed==el 13func dec_ok(b: *u8, ev: i64, el: i64, ov: *i64) -> i64 { 14 let c: i64 = quic_varint_decode(b, 8, ov) 15 if c != el { return 0 } 16 if ov[0] != ev { return 0 } 17 return 1 18} 19// encode val and require bytes==exp[0..el) AND length==el 20func enc_ok(val: i64, exp: *u8, el: i64, scratch: *u8) -> i64 { 21 let c: i64 = quic_varint_encode(scratch, val) 22 if c != el { return 0 } 23 var i: i64=0; while i<el { if scratch[i]!=exp[i] { return 0 } i=i+1 } 24 return 1 25} 26 27func main() -> i64 { 28 g_puts("nx_quic_wire gate -- sovereign QUIC varint + DATAGRAM vs RFC 9000/9221\n" as *u8) 29 var pass: i64=0; var total: i64=0 30 let b: *u8 = sys_mmap(64) 31 let s: *u8 = sys_mmap(64) 32 let ov: *i64 = sys_mmap(8) as *i64 33 34 // ---- RFC 9000 A.1 DECODE vectors ---- 35 b[0]=0x25 as u8 36 pass = pass + g_check("decode 0x25 -> 37 (1B)" as *u8, dec_ok(b,37,1,ov)); total=total+1 37 b[0]=0x7b as u8; b[1]=0xbd as u8 38 pass = pass + g_check("decode 0x7bbd -> 15293 (2B)" as *u8, dec_ok(b,15293,2,ov)); total=total+1 39 b[0]=0x9d as u8; b[1]=0x7f as u8; b[2]=0x3e as u8; b[3]=0x7d as u8 40 pass = pass + g_check("decode 0x9d7f3e7d -> 494878333 (4B)" as *u8, dec_ok(b,494878333,4,ov)); total=total+1 41 b[0]=0xc2 as u8; b[1]=0x19 as u8; b[2]=0x7c as u8; b[3]=0x5e as u8; b[4]=0xff as u8; b[5]=0x14 as u8; b[6]=0xe8 as u8; b[7]=0x8c as u8 42 pass = pass + g_check("decode 0xc2197c5eff14e88c -> 151288809941952652 (8B)" as *u8, dec_ok(b,151288809941952652,8,ov)); total=total+1 43 // non-minimal 2-byte form of 37 still decodes to 37 (RFC allows it) 44 b[0]=0x40 as u8; b[1]=0x25 as u8 45 pass = pass + g_check("decode non-minimal 0x4025 -> 37 (2B)" as *u8, dec_ok(b,37,2,ov)); total=total+1 46 47 // ---- ENCODE produces the minimal RFC forms ---- 48 s[0]=0x25 as u8 49 pass = pass + g_check("encode 37 -> 0x25 (1B minimal)" as *u8, enc_ok(37, s, 1, b)); total=total+1 50 s[0]=0x7b as u8; s[1]=0xbd as u8 51 pass = pass + g_check("encode 15293 -> 0x7bbd (2B)" as *u8, enc_ok(15293, s, 2, b)); total=total+1 52 s[0]=0x9d as u8; s[1]=0x7f as u8; s[2]=0x3e as u8; s[3]=0x7d as u8 53 pass = pass + g_check("encode 494878333 -> 0x9d7f3e7d (4B)" as *u8, enc_ok(494878333, s, 4, b)); total=total+1 54 s[0]=0xc2 as u8; s[1]=0x19 as u8; s[2]=0x7c as u8; s[3]=0x5e as u8; s[4]=0xff as u8; s[5]=0x14 as u8; s[6]=0xe8 as u8; s[7]=0x8c as u8 55 pass = pass + g_check("encode 151288809941952652 -> 0xc2..88c (8B)" as *u8, enc_ok(151288809941952652, s, 8, b)); total=total+1 56 57 // ---- encode->decode round-trip across the boundary values ---- 58 let vals: *i64 = sys_mmap(8*9) as *i64 59 vals[0]=0; vals[1]=63; vals[2]=64; vals[3]=16383; vals[4]=16384; vals[5]=1073741823; vals[6]=1073741824; vals[7]=4611686018427387903; vals[8]=12345678 60 let lens: *i64 = sys_mmap(8*9) as *i64 61 lens[0]=1; lens[1]=1; lens[2]=2; lens[3]=2; lens[4]=4; lens[5]=4; lens[6]=8; lens[7]=8; lens[8]=4 62 var rt_ok: i64=1; var k: i64=0 63 while k<9 { 64 let el: i64 = quic_varint_encode(b, vals[k]) 65 if el != lens[k] { rt_ok=0 } 66 let dl: i64 = quic_varint_decode(b, 8, ov) 67 if dl != el { rt_ok=0 } 68 if ov[0] != vals[k] { rt_ok=0 } 69 k=k+1 70 } 71 pass = pass + g_check("encode->decode round-trip + minimal length on all 9 boundary values" as *u8, rt_ok); total=total+1 72 // out-of-range rejected 73 pass = pass + g_check("varint rejects >= 2^62 (returns 0)" as *u8, quic_varint_encode(b, 4611686018427387904) == 0); total=total+1 74 75 // ---- RFC 9221 DATAGRAM frame round-trip (byte-exact payload) ---- 76 let pl: *u8 = sys_mmap(512) 77 var i: i64=0; while i<300 { pl[i]=((i*7+11)&255) as u8; i=i+1 } 78 let fr: *u8 = sys_mmap(512) 79 let flen: i64 = quic_datagram_encode(fr, pl, 300) 80 // 300 -> 2-byte length varint (0x41,0x2c); frame = 1 + 2 + 300 = 303 81 var fr_ok: i64=0 82 if flen == 303 { if fr[0]==(0x31 as u8) { if fr[1]==(0x41 as u8) { if fr[2]==(0x2c as u8) { fr_ok=1 } } } } 83 pass = pass + g_check("DATAGRAM encode: type 0x31 + Length varint(300)=0x412c, total 303B" as *u8, fr_ok); total=total+1 84 let poff: *i64 = sys_mmap(8) as *i64 85 let pp: i64 = quic_datagram_parse(fr, flen, poff) 86 var dg_ok: i64=0 87 if pp == 300 { dg_ok=1; var j: i64=0; while j<300 { if fr[poff[0]+j] != pl[j] { dg_ok=0; j=300 } else { j=j+1 } } } 88 pass = pass + g_check("DATAGRAM parse: payload len 300, byte-exact round-trip" as *u8, dg_ok); total=total+1 89 // non-DATAGRAM first byte rejected 90 fr[0]=0x06 as u8 91 pass = pass + g_check("DATAGRAM parse rejects non-0x31 frame (-1)" as *u8, quic_datagram_parse(fr, flen, poff) == 0 - 1); total=total+1 92 93 g_puts("---- quic_wire gate: passed " as *u8); g_pn(pass); g_puts(" / " as *u8); g_pn(total); g_puts(" ----\n" as *u8) 94 if pass == total { g_puts("VERDICT: GREEN (RFC 9000 varints + RFC 9221 DATAGRAM frame, sovereign, byte-exact)\n" as *u8); return 0 } 95 g_puts("VERDICT: RED\n" as *u8) 96 return 1 97}