diff --git a/nfq/protocol.c b/nfq/protocol.c index 7708de27..6137d1a9 100644 --- a/nfq/protocol.c +++ b/nfq/protocol.c @@ -615,24 +615,18 @@ bool IsQUICCryptoHello(const uint8_t *data, size_t len, size_t *hello_offset, si uint8_t QUICDraftVersion(uint32_t version) { /* IETF Draft versions */ - if ((version >> 8) == 0xff0000) { + if ((version >> 8) == 0xff0000) return (uint8_t)version; - } /* Facebook mvfst, based on draft -22. */ - if (version == 0xfaceb001) { + if (version == 0xfaceb001) return 22; - } /* Facebook mvfst, based on draft -27. */ - if (version == 0xfaceb002 || version == 0xfaceb00e) { + if (version == 0xfaceb002 || version == 0xfaceb00e) return 27; - } /* GQUIC Q050, T050 and T051: they are not really based on any drafts, * but we must return a sensible value */ - if (version == 0x51303530 || - version == 0x54303530 || - version == 0x54303531) { + if (version == 0x51303530 || version == 0x54303530 || version == 0x54303531) return 27; - } /* https://tools.ietf.org/html/draft-ietf-quic-transport-32#section-15 "Versions that follow the pattern 0x?a?a?a?a are reserved for use in forcing version negotiation to be exercised" @@ -640,19 +634,17 @@ uint8_t QUICDraftVersion(uint32_t version) used to select a proper salt (which depends on the version itself), but we don't have a real version here! Let's hope that we need to handle only latest drafts... */ - if ((version & 0x0F0F0F0F) == 0x0a0a0a0a) { + if ((version & 0x0F0F0F0F) == 0x0a0a0a0a) return 29; - } /* QUIC (final?) constants for v1 are defined in draft-33, but draft-34 is the final draft version */ - if (version == 0x00000001) { + if (version == 0x00000001) return 34; - } /* QUIC Version 2 */ /* TODO: for the time being use 100 as a number for V2 and let see how v2 drafts evolve */ - if (version == 0x709A50C4) { + if ((version == 0x709A50C4) || (version == 0x6b3343cf)) return 100; - } + return 0; } @@ -662,7 +654,7 @@ static bool is_quic_draft_max(uint32_t draft_version, uint8_t max_version) } static bool is_quic_v2(uint32_t version) { - return version == 0x6b3343cf; + return (version == 0x709A50C4) || (version == 0x6b3343cf); } static bool quic_hkdf_expand_label(const uint8_t *secret, uint8_t secret_len, const char *label, uint8_t *out, size_t out_len)