From: Hugo Landau Date: Tue, 23 May 2023 11:23:05 +0000 (+0100) Subject: QUIC WIRE: Utility function to determine if PN is in an ACK frame X-Git-Tag: openssl-3.2.0-alpha1~636 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dfd8176f2556ca7ad0029012a048a3adc840bca5;p=thirdparty%2Fopenssl.git QUIC WIRE: Utility function to determine if PN is in an ACK frame Reviewed-by: Tomas Mraz Reviewed-by: Matt Caswell Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/21029) --- diff --git a/include/internal/quic_wire.h b/include/internal/quic_wire.h index a514d08d3dd..e9ff8e6f356 100644 --- a/include/internal/quic_wire.h +++ b/include/internal/quic_wire.h @@ -159,6 +159,9 @@ typedef struct ossl_quic_frame_ack_st { unsigned int ecn_present : 1; } OSSL_QUIC_FRAME_ACK; +/* Returns 1 if the given frame contains the given PN. */ +int ossl_quic_frame_ack_contains_pn(const OSSL_QUIC_FRAME_ACK *ack, QUIC_PN pn); + /* QUIC Frame: STREAM */ typedef struct ossl_quic_frame_stream_st { uint64_t stream_id; /* Stream ID */ diff --git a/ssl/quic/quic_wire.c b/ssl/quic/quic_wire.c index 7df32c77b21..937d16e1c8c 100644 --- a/ssl/quic/quic_wire.c +++ b/ssl/quic/quic_wire.c @@ -15,6 +15,18 @@ OSSL_SAFE_MATH_UNSIGNED(uint64_t, uint64_t) +int ossl_quic_frame_ack_contains_pn(const OSSL_QUIC_FRAME_ACK *ack, QUIC_PN pn) +{ + size_t i; + + for (i = 0; i < ack->num_ack_ranges; ++i) + if (pn >= ack->ack_ranges[i].start + && pn <= ack->ack_ranges[i].end) + return 1; + + return 0; +} + /* * QUIC Wire Format Encoding * =========================