Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 3 additions & 6 deletions src/tls13.c
Original file line number Diff line number Diff line change
Expand Up @@ -12414,12 +12414,9 @@ static int DoTls13KeyUpdate(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
w64wrapper newEpoch = ssl->dtls13PeerEpoch;
w64Increment(&newEpoch);

/* RFC 9147 Section 4.2.1: the epoch must not exceed 2^48-1. Reject a
* peer KeyUpdate that would advance the receiving epoch past the
* limit. Validate on a local copy so ssl->dtls13PeerEpoch is left
* untouched when the check fails. */
if (w64GT(newEpoch,
w64From32(DTLS13_EPOCH_MAX_HI32, DTLS13_EPOCH_MAX_LO32)))
/* RFC 9147 Section 8: the 2^48-1 cap is sender-only; receivers MUST
* NOT enforce it. Guard only the wrap-to-zero (Section 4.2.1). */
if (w64IsZero(newEpoch))
return BAD_STATE_E;

ssl->dtls13PeerEpoch = newEpoch;
Expand Down
6 changes: 4 additions & 2 deletions wolfssl/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -5950,8 +5950,10 @@ enum {
DTLS13_EPOCH_TRAFFIC0 = 3
};

/* RFC 9147 Section 4.2.1: the DTLS 1.3 epoch is a 48-bit value and must not
* exceed 2^48-1. Expressed as the high/low 32-bit halves of a w64wrapper. */
/* Sender-side DTLS 1.3 epoch ceiling: we MUST NOT advance our own epoch past
* 2^48-1 (RFC 9147 Section 4.2.1). This gates only the sending epoch; receivers
* MUST NOT enforce it on the peer epoch (RFC 9147 Section 8). Expressed as the
* high/low 32-bit halves of a w64wrapper. */
#define DTLS13_EPOCH_MAX_HI32 0x0000FFFFU
#define DTLS13_EPOCH_MAX_LO32 0xFFFFFFFFU

Expand Down
Loading