@@ -167,10 +167,7 @@ createInitialSecrets(std::span<const std::byte> destConnectionId,
167167
168168 // HKDF-Extract
169169 // std::unique_ptr<EVP_PKEY_CTX> publicKeyContext
170- auto publicKeyContext
171- = std::unique_ptr<EVP_PKEY_CTX, std::function<void (EVP_PKEY_CTX*)>>{
172- EVP_PKEY_CTX_new_id (EVP_PKEY_HKDF, nullptr ), EVP_PKEY_CTX_free
173- };
170+ auto publicKeyContext = createKeyContext ();
174171
175172 const ExpandedLabel expandedLabel
176173 = expandLabel<QUICInitialHeaderView::SHA2_256_LENGTH>(
@@ -356,7 +353,7 @@ bool decryptInitialHeader(const QUICInitialSecrets& initialSecrets,
356353 return true ;
357354}
358355
359- constexpr static std::optional<std::array<std::byte, QUICInitialHeaderView::MAX_BUFFER_SIZE >>
356+ constexpr static std::optional<std::array<std::byte, ReassembledFrame::capacity() >>
360357decryptPayload (std::span<const std::byte> encryptedPayload) noexcept
361358{
362359 const std::array<std::byte, 16 > authTag;
@@ -365,15 +362,14 @@ decryptPayload(std::span<const std::byte> encryptedPayload) noexcept
365362 return std::nullopt ;
366363 }
367364 /* Input is --> "header || ciphertext (buffer) || auth tag (16 bytes)" */
368- if (encryptedPayload.size () > QUICInitialHeaderView::MAX_BUFFER_SIZE ) {
365+ if (encryptedPayload.size () > ReassembledFrame::capacity () ) {
369366 return std::nullopt ;
370367 }
371368
372369 std::size_t decryptedLength;
373370
374- auto decryptedPayload
375- = std::make_optional<std::array<std::byte,
376- QUICInitialHeaderView::MAX_BUFFER_SIZE>>();
371+ auto decryptedPayload = std::make_optional<std::array<std::byte,
372+ ReassembledFrame::capacity ()>>();
377373
378374 // https://datatracker.ietf.org/doc/html/draft-ietf-quic-tls-34#section-5.3
379375 // "These cipher suites have a 16-byte authentication tag and produce an output 16 bytes larger
@@ -384,7 +380,6 @@ decryptPayload(std::span<const std::byte> encryptedPayload) noexcept
384380 std::copy (encryptedPayload.data () + encryptedPayload.size () - 16 ,
385381 encryptedPayload.data () + encryptedPayload.size (), authTag.begin ());
386382
387- // creating context
388383 auto cipherContext = createCipherContext ();
389384
390385 if (!cipherContext ||
@@ -620,6 +615,7 @@ reassembleCryptoFrames(std::span<const std::byte> decryptedPayload) noexcept
620615 cryptoData->size (), reassembledFrame->capacity () - reassembledFrame->size ());
621616 reassembledFrame->insert (
622617 cryptoData->begin (), cryptoData->begin () + sizeToCopy);
618+
623619 frameLength = cryptoData->data () -
624620 decryptedPayload.data () + cryptoData->size ();
625621 case FrameType::ACK1:
@@ -651,6 +647,7 @@ reassembleCryptoFrames(std::span<const std::byte> decryptedPayload) noexcept
651647 return reassembledFrame;
652648}
653649
650+ constexpr
654651bool QUICParser::parseTLSExtensions (TLSParser& parser)
655652{
656653 const bool extensionsParsed = parser.parseExtensions (
@@ -671,8 +668,8 @@ bool QUICParser::parseTLSExtensions(TLSParser& parser)
671668 || extension_type == TLSExtensionType::QUIC_TRANSPORT_PARAMETERS
672669 || extension_type == TLSExtensionType::QUIC_TRANSPORT_PARAMETERS_V2) {
673670 std::ranges::copy (extension.payload |
674- std::views::take (m_tlsExtensionBuffer. capacity () ),
675- std::back_inserter (m_tlsExtensionBuffer ));
671+ std::views::take (QUICExport::MAX_TLS_PAYLOAD_TO_SAVE ),
672+ std::back_inserter (extensionsPayload ));
676673 }
677674
678675 if (!m_exportData.extensionTypes .full ()) {
@@ -684,18 +681,20 @@ bool QUICParser::parseTLSExtensions(TLSParser& parser)
684681 return extensionsParsed;
685682}
686683
687- constexpr static
684+ constexpr
688685bool QUICInitialHeaderView::parseTLS (const ReassembledFrame& reassembledFrame)
689686{
690687 TLSParser parser;
691688 if (!parser.parseHelloFromQUIC (toSpan (reassembledFrame))) {
692689 return false ;
693690 }
691+
694692 tlsHandshake = parser.handshake ;
693+
695694 return parseTLSExtensions (parser);
696695}
697696
698- constexpr static
697+ constexpr
699698bool QUICInitialHeaderView::parse (std::span<const std::byte> destConnectionId,
700699 std::span<const std::byte> salt,
701700 const PacketType packetType,
@@ -728,7 +727,7 @@ bool QUICInitialHeaderView::parse(std::span<const std::byte> destConnectionId,
728727 // SNI and User Agent Extraction failed
729728 return false ;
730729 }
731-
730+
732731 clientHelloParsed = tlsHandshake.type == TLSHandshake::Type::CLIENT_HELLO;
733732
734733 return true ;
0 commit comments