@@ -1231,34 +1231,33 @@ from binascii import unhexlify
12311231from scapy.layers.tls.quic import *
12321232from scapy.layers.tls.all import TLS13ClientHello, TLS_Ext_QuicTransportParameters
12331233
1234- ch_data = unhexlify("010000f40303e4de73a1d4479044cf059e910eaefaa983f4f8bf19c1655e13e375c2022ea986000006130113021303010000c500000013001100000e717569632e6e67696e782e6f7267000a00080006001d00170018001000050003026833000d00140012040308040401050308050501080606010201003300260024001d00208d29460c9281267d97af86a7bcc70031c482f64ef2bde21ceb89e5702e89ba71002d00020101002b00030203040039004601025388030245460404809896800504800f42400604800f42400704800f424008024064090240640a01030b01190c000f142173071905d778f98e367b8ad8eeb526484e8f5d ")
1234+ ch_data = unhexlify("010001e403034f417babafc5dc240c744225bb09b0c5067618b7501ef4bf7ea73c64249e5d0c000006130213011303010001b50033010c010a00170041048497f2dd89fb1d341b02894edd154ebd5ee5e55594d7935d99d2c05733991cccc9af02200e53bcc80208fa1498c5c88ccf643d598cb05c5fde37a1e468cd593200180061045bff37b0fde67fcfc50b7ab6eb139f51998bdb859632138b30caf96882ef871b27aaf534cce0dcfa157be21343fd6b0db5cc306564f19c46d3c9e175e3dbbb594fe7c393e35de695fc84f64ec4a59ee3cea26a0599a61d6dfc18568fb5c0cb85001d00205af975b0ec59288a578c94890d3264f9ac025ab86f7cd718112da6b923b2e54d001e0038f989efd52e4e8ab64491bfd8b8d30481d854b9394f517148dc8d5a50a43ebbdcca6e4b27229acd2f20b6633632d32e9be6999a40d30561e2002b0003020304000d00140012040308040401050308050501020108070808000a000a000800170018001d001e002d000201010000000e000c00000968332d7365727665720010000500030268330039005301048000ea600404801000000508c0000001000000000608c0000001000000000708c00000010000000008024080090240800a01030b01190e01080f087f317d3033e6423e110c00000001000000016b3343cf ")
12351235
12361236ch = TLS13ClientHello(ch_data)
12371237tp = ch.ext[-1]
12381238assert isinstance(tp, TLS_Ext_QuicTransportParameters)
12391239assert isinstance(tp.params[0], Quic_Tp_MaxIdleTimeout)
1240- assert tp.params[0].value == 5000
1241- assert isinstance(tp.params[1], Quic_Tp_MaxUdpPayloadSize)
1242- assert tp.params[1].value == 1350
1243- assert isinstance(tp.params[2], Quic_Tp_InitialMaxData)
1244- assert tp.params[2].value == 10000000
1245- assert isinstance(tp.params[3], Quic_Tp_InitialMaxStreamDataBidiLocal)
1246- assert tp.params[3].value == 1000000
1247- assert isinstance(tp.params[4], Quic_Tp_InitialMaxStreamDataBidiRemote)
1248- assert tp.params[4].value == 1000000
1249- assert isinstance(tp.params[5], Quic_Tp_InitialMaxStreamDataUni)
1250- assert tp.params[5].value == 1000000
1251- assert isinstance(tp.params[6], Quic_Tp_InitialMaxStreamsBidi)
1252- assert tp.params[6].value == 100
1253- assert isinstance(tp.params[7], Quic_Tp_InitialMaxStreamsUni)
1254- assert tp.params[7].value == 100
1255- assert isinstance(tp.params[8], Quic_Tp_AckDelayExponent)
1256- assert tp.params[8].value == 3
1257- assert isinstance(tp.params[9], Quic_Tp_MaxAckDelay)
1258- assert tp.params[9].value == 25
1259- assert isinstance(tp.params[10], Quic_Tp_DisableActiveMigration)
1260- assert isinstance(tp.params[11], Quic_Tp_InitialSourceConnectionId)
1261- assert tp.params[11].value == unhexlify("2173071905d778f98e367b8ad8eeb526484e8f5d")
1240+ assert tp.params[0].value == 60000
1241+ assert isinstance(tp.params[1], Quic_Tp_InitialMaxData)
1242+ assert tp.params[1].value == 1048576
1243+ assert isinstance(tp.params[2], Quic_Tp_InitialMaxStreamDataBidiLocal)
1244+ assert tp.params[2].value == 4294967296
1245+ assert isinstance(tp.params[3], Quic_Tp_InitialMaxStreamDataBidiRemote)
1246+ assert tp.params[3].value == 4294967296
1247+ assert isinstance(tp.params[4], Quic_Tp_InitialMaxStreamDataUni)
1248+ assert tp.params[4].value == 4294967296
1249+ assert isinstance(tp.params[5], Quic_Tp_InitialMaxStreamsBidi)
1250+ assert tp.params[5].value == 128
1251+ assert isinstance(tp.params[6], Quic_Tp_InitialMaxStreamsUni)
1252+ assert tp.params[6].value == 128
1253+ assert isinstance(tp.params[7], Quic_Tp_AckDelayExponent)
1254+ assert tp.params[7].value == 3
1255+ assert isinstance(tp.params[8], Quic_Tp_MaxAckDelay)
1256+ assert tp.params[8].value == 25
1257+ assert isinstance(tp.params[9], Quic_Tp_ActiveConnectionIdLimit)
1258+ assert tp.params[9].value == 8
1259+ assert isinstance(tp.params[10], Quic_Tp_InitialSourceConnectionId)
1260+ assert tp.params[10].value == unhexlify("7f317d3033e6423e")
12621261
12631262= QUIC Transport Parameters - Build packet
12641263~ quic
@@ -1287,3 +1286,31 @@ actual = tp.build()
12871286expect = unhexlify("0039004601025388030245460404809896800504800f42400604800f42400704800f424008024064090240640a01030b01190c000f142173071905d778f98e367b8ad8eeb526484e8f5d")
12881287
12891288assert actual == expect
1289+
1290+ = QUIC Transport Parameters - Build empty packet
1291+ ~ quic
1292+
1293+ from scapy.layers.tls.all import TLS_Ext_QuicTransportParameters
1294+
1295+ p = TLS_Ext_QuicTransportParameters(params=[None])
1296+ actual = p.build()
1297+
1298+ assert actual == b'\x009\x00\x00'
1299+
1300+ p = TLS_Ext_QuicTransportParameters(params=[])
1301+ actual = p.build()
1302+
1303+ assert actual == b'\x009\x00\x00'
1304+
1305+ = QUIC Transport Parameters - Throw error if value is a big integer
1306+ ~ quic
1307+
1308+ from scapy.layers.tls.quic import Quic_Tp_InitialMaxData
1309+
1310+ # A 62-bit left shift results in an integer of 63 bits
1311+ p = Quic_Tp_InitialMaxData(value=1<<62)
1312+ try:
1313+ p.build()
1314+ assert False, "QUIC cannot decode integers with more than 62 bits"
1315+ except ValueError:
1316+ pass
0 commit comments