@@ -33,7 +33,6 @@ QUICParser::QUICParser()
3333{
3434 quic_h1 = nullptr ;
3535 quic_h2 = nullptr ;
36- header = nullptr ;
3736 payload = nullptr ;
3837
3938 header_len = 0 ;
@@ -66,15 +65,15 @@ void QUICParser::quic_get_user_agent(char *in)
6665 return ;
6766}
6867
69- bool QUICParser::quic_check_pointer_pos (uint8_t *current, uint8_t *end)
68+ bool QUICParser::quic_check_pointer_pos (const uint8_t *current, const uint8_t *end)
7069{
7170 if (current < end)
7271 return true ;
7372
7473 return false ;
7574}
7675
77- uint64_t QUICParser::quic_get_variable_length (uint8_t *start, uint64_t &offset)
76+ uint64_t QUICParser::quic_get_variable_length (const uint8_t *start, uint64_t &offset)
7877{
7978 // find out length of parameter field (and load parameter, then move offset) , defined in:
8079 // https://www.rfc-editor.org/rfc/rfc9000.html#name-summary-of-integer-encoding
@@ -84,28 +83,24 @@ uint64_t QUICParser::quic_get_variable_length(uint8_t *start, uint64_t &offset)
8483 uint8_t two_bits = *(start + offset) & 0xC0 ;
8584
8685 switch (two_bits) {
87- case 0 :
88- tmp = *(start + offset) & 0x3F ;
89- offset += sizeof (uint8_t );
90- return tmp;
91-
92- case 64 :
93- tmp = be16toh (*(uint16_t *) (start + offset)) & 0x3FFF ;
94- offset += sizeof (uint16_t );
95- return tmp;
96-
97- case 128 :
98- tmp = be32toh (*(uint32_t *) (start + offset)) & 0x3FFFFFFF ;
99- offset += sizeof (uint32_t );
100- return tmp;
101-
102- case 192 :
103- tmp = be64toh (*(uint64_t *) (start + offset)) & 0x3FFFFFFFFFFFFFFF ;
104- offset += sizeof (uint64_t );
105- return tmp;
106-
107- default :
108- return 0 ;
86+ case 0 :
87+ tmp = *(start + offset) & 0x3F ;
88+ offset += sizeof (uint8_t );
89+ return tmp;
90+ case 64 :
91+ tmp = be16toh (*(uint16_t *) (start + offset)) & 0x3FFF ;
92+ offset += sizeof (uint16_t );
93+ return tmp;
94+ case 128 :
95+ tmp = be32toh (*(uint32_t *) (start + offset)) & 0x3FFFFFFF ;
96+ offset += sizeof (uint32_t );
97+ return tmp;
98+ case 192 :
99+ tmp = be64toh (*(uint64_t *) (start + offset)) & 0x3FFFFFFFFFFFFFFF ;
100+ offset += sizeof (uint64_t );
101+ return tmp;
102+ default :
103+ return 0 ;
109104 }
110105} // QUICParser::quic_get_variable_length
111106
@@ -124,10 +119,10 @@ bool QUICParser::quic_obtain_tls_data(TLSData &payload)
124119
125120 if (type == TLS_EXT_SERVER_NAME && length != 0 ) {
126121 tls_parser.tls_get_server_name (payload, sni, BUFF_SIZE);
127- } else if ((type == TLS_EXT_QUIC_TRANSPORT_PARAMETERS_V1 ||
128- type == TLS_EXT_QUIC_TRANSPORT_PARAMETERS ||
129- type == TLS_EXT_QUIC_TRANSPORT_PARAMETERS_V2) &&
130- length != 0 ) {
122+ } else if ((type == TLS_EXT_QUIC_TRANSPORT_PARAMETERS_V1
123+ || type == TLS_EXT_QUIC_TRANSPORT_PARAMETERS
124+ || type == TLS_EXT_QUIC_TRANSPORT_PARAMETERS_V2)
125+ && length != 0 ) {
131126 tls_parser.tls_get_quic_user_agent (payload, user_agent, BUFF_SIZE);
132127 }
133128 payload.start += length;
@@ -174,26 +169,24 @@ uint8_t QUICParser::quic_draft_version(uint32_t version)
174169 return (uint8_t ) version;
175170 }
176171 switch (version) {
177- // older mvfst version, but still used, based on draft 22, but salt 21 used
178- case (faceebook1):
179- return 22 ;
180-
181- // more used atm, salt 23 used
182- case faceebook2:
183- case facebook_experimental:
184- return 27 ;
185-
186- case (force_ver_neg_pattern & 0x0F0F0F0F ):
187- return 29 ;
188-
189- // version 2 draft 00
190- case q_version2_draft00:
191- // newest
192- case q_version2_newest:
193- return 100 ;
194-
195- default :
196- return 255 ;
172+ // older mvfst version, but still used, based on draft 22, but salt 21 used
173+ case (faceebook1):
174+ return 22 ;
175+ // more used atm, salt 23 used
176+ case faceebook2:
177+ case facebook_experimental:
178+ return 27 ;
179+ case (force_ver_neg_pattern & 0x0F0F0F0F ):
180+ return 29 ;
181+
182+ // version 2 draft 00
183+ case q_version2_draft00:
184+ // newest
185+ case q_version2_newest:
186+ return 100 ;
187+
188+ default :
189+ return 255 ;
197190 }
198191}
199192
@@ -526,7 +519,7 @@ bool QUICParser::quic_encrypt_sample(uint8_t *plaintext)
526519 return true ;
527520}
528521
529- bool QUICParser::quic_decrypt_header ()
522+ bool QUICParser::quic_decrypt_header (const Packet & pkt )
530523{
531524 uint8_t plaintext[SAMPLE_LENGTH];
532525 uint8_t mask[5 ] = { 0 };
@@ -562,13 +555,13 @@ bool QUICParser::quic_decrypt_header()
562555 // after de-obfuscating pkn, we know exactly pkn length so we can correctly adjust start of payload
563556 payload = payload + pkn_len;
564557 payload_len = payload_len - pkn_len;
565- header_len = payload - header ;
558+ header_len = payload - pkt. payload ;
566559 if (header_len > MAX_HEADER_LEN) {
567560 DEBUG_MSG (" Header length too long\n " );
568561 return false ;
569562 }
570563
571- memcpy (tmp_header_mem, header , header_len);
564+ memcpy (tmp_header_mem, pkt. payload , header_len);
572565 header = tmp_header_mem;
573566
574567 header[0 ] = first_byte;
@@ -809,12 +802,10 @@ bool QUICParser::quic_initial_checks(const Packet&pkt)
809802
810803bool QUICParser::quic_parse_header (const Packet & pkt)
811804{
812- uint8_t *payload_pointer = ( uint8_t *) pkt.payload ;
805+ const uint8_t *payload_pointer = pkt.payload ;
813806 uint64_t offset = 0 ;
814807
815- uint8_t *payload_end = payload_pointer + pkt.payload_len ;
816-
817- header = payload_pointer;
808+ const uint8_t *payload_end = payload_pointer + pkt.payload_len ;
818809
819810 quic_h1 = (quic_first_ver_dcidlen *) (payload_pointer + offset);
820811
@@ -907,7 +898,7 @@ bool QUICParser::quic_start(const Packet& pkt)
907898 DEBUG_MSG (" Error, creation of initial secrets failed (client side)\n " );
908899 return false ;
909900 }
910- if (!quic_decrypt_header ()) {
901+ if (!quic_decrypt_header (pkt )) {
911902 DEBUG_MSG (" Error, header decryption failed (client side)\n " );
912903 return false ;
913904 }
0 commit comments