code wiki / _hdl_build / nx_quic_hdr_test.nx

nx_quic_hdr_test.nx source

↩ module page · 65 lines · 3920 B

1// nx_quic_hdr_gate.nx -- RUNG 3 gate: QUIC long/short headers vs RFC 9000 17.2/17.3, anchored on the 2// RFC 9001 Appendix A.2 sample Client Initial header (c3 00000001 08 8394c8f03e515708 00). Native, sovereign. 3// license_tier: ORIGINAL 4import "nx_quic_hdr.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_hdr gate -- long/short headers vs RFC 9000/9001 A.2\n" as *u8) 11 var pass: i64=0; var total: i64=0 12 let info: *i64 = sys_mmap(8*8) as *i64 13 14 // ---- RFC 9001 A.2 sample Client Initial header ---- 15 let dcid: *u8 = sys_mmap(8) 16 dcid[0]=0x83 as u8; dcid[1]=0x94 as u8; dcid[2]=0xc8 as u8; dcid[3]=0xf0 as u8 17 dcid[4]=0x3e as u8; dcid[5]=0x51 as u8; dcid[6]=0x57 as u8; dcid[7]=0x08 as u8 18 let buf: *u8 = sys_mmap(64) 19 buf[0]=0xc3 as u8 20 buf[1]=0x00 as u8; buf[2]=0x00 as u8; buf[3]=0x00 as u8; buf[4]=0x01 as u8 // version 1 21 buf[5]=0x08 as u8 // DCID len 8 22 var i: i64=0; while i<8 { buf[6+i]=dcid[i]; i=i+1 } // DCID 23 buf[14]=0x00 as u8 // SCID len 0 24 25 let rc: i64 = quic_lhdr_parse(buf, 15, info) 26 var p_ok: i64=0 27 if rc==0 { if info[0]==0 { if info[1]==1 { if info[3]==8 { if info[5]==0 { if info[7]==4 { p_ok=1 } } } } } } 28 // verify DCID bytes at info[2] 29 if p_ok==1 { var k: i64=0; while k<8 { if buf[info[2]+k]!=dcid[k] { p_ok=0; k=8 } else { k=k+1 } } } 30 pass = pass + g_check("parse RFC 9001 Initial hdr: type=Initial,ver=1,DCID=8B match,SCID=0,pn_len=4" as *u8, p_ok); total=total+1 31 32 // ---- encode the same header -> byte-exact ---- 33 let out: *u8 = sys_mmap(64) 34 let elen: i64 = quic_lhdr_encode(out, 0, 1, dcid, 8, dcid, 0, 4) // scil=0 (scid ptr unused) 35 var e_ok: i64=0 36 if elen==15 { e_ok=1; var j: i64=0; while j<15 { if out[j]!=buf[j] { e_ok=0; j=15 } else { j=j+1 } } } 37 pass = pass + g_check("encode -> byte-exact c30000000108 8394c8f03e515708 00 (15B)" as *u8, e_ok); total=total+1 38 39 // ---- short header (1-RTT) round-trip ---- 40 let scid4: *u8 = sys_mmap(8) 41 scid4[0]=0xde as u8; scid4[1]=0xad as u8; scid4[2]=0xbe as u8; scid4[3]=0xef as u8 42 let sout: *u8 = sys_mmap(32) 43 let slen: i64 = quic_shdr_encode(sout, 1, 1, 2, scid4, 4) // spin=1,kp=1,pn_len=2 44 var s_ok: i64=0 45 // first byte = 0x40|0x20(spin)|0x04(kp)|0x01(pnlen-1) = 0x65 ; total = 1 + 4 dcid = 5 46 if slen==5 { if sout[0]==(0x65 as u8) { s_ok=1; var m: i64=0; while m<4 { if sout[1+m]!=scid4[m] { s_ok=0; m=4 } else { m=m+1 } } } } 47 pass = pass + g_check("short hdr encode: first byte 0x65 (fixed+spin+kp+pnlen2) + DCID" as *u8, s_ok); total=total+1 48 let sinfo: *i64 = sys_mmap(8*4) as *i64 49 var sp_ok: i64=0 50 if quic_shdr_parse(sout, slen, 4, sinfo)==0 { if sinfo[0]==1 { if sinfo[1]==2 { if sinfo[2]==5 { sp_ok=1 } } } } 51 pass = pass + g_check("short hdr parse(dcil=4): keyphase=1, pn_len=2, pn_off=5" as *u8, sp_ok); total=total+1 52 53 // ---- form-bit + fixed-bit discrimination ---- 54 var disc: i64=1 55 if quic_lhdr_parse(sout, slen, info) != 0 - 1 { disc=0 } // short bytes rejected by long parse 56 if quic_shdr_parse(buf, 15, 8, sinfo) != 0 - 1 { disc=0 } // long bytes rejected by short parse 57 buf[0]=0x80 as u8 // long form, fixed bit CLEARED 58 if quic_lhdr_parse(buf, 15, info) != 0 - 1 { disc=0 } 59 pass = pass + g_check("form-bit + fixed-bit discrimination (3 malformed cases rejected)" as *u8, disc); total=total+1 60 61 g_puts("---- quic_hdr gate: passed " as *u8); g_pn(pass); g_puts(" / " as *u8); g_pn(total); g_puts(" ----\n" as *u8) 62 if pass == total { g_puts("VERDICT: GREEN (QUIC long/short headers, RFC 9000/9001 A.2, sovereign)\n" as *u8); return 0 } 63 g_puts("VERDICT: RED\n" as *u8) 64 return 1 65}