forked from wolfSSL/wolfssl
Fix window handling around word32 boundary
This commit is contained in:
@ -15414,23 +15414,24 @@ int wolfSSL_DtlsUpdateWindow(word16 cur_hi, word32 cur_lo,
|
||||
else {
|
||||
curLT = cur_hi < *next_hi;
|
||||
if (curLT) {
|
||||
if (cur_lo > (word32)(0 - DTLS_SEQ_BITS) &&
|
||||
*next_lo < DTLS_SEQ_BITS) {
|
||||
diff = *next_lo - cur_lo;
|
||||
if (*next_lo < DTLS_SEQ_BITS &&
|
||||
cur_lo >= (((word32)0xFFFFFFFF) - DTLS_SEQ_BITS)) {
|
||||
/* diff here can still result in a difference that can not
|
||||
* be stored in the window. The index is checked against
|
||||
* WOLFSSL_DTLS_WINDOW_WORDS later. */
|
||||
diff = *next_lo + ((word32)0xFFFFFFFF - cur_lo) + 1;
|
||||
}
|
||||
else {
|
||||
_DtlsUpdateWindowGTSeq(0, window);
|
||||
*next_lo = cur_lo + 1;
|
||||
if (*next_lo == 0)
|
||||
*next_hi = cur_hi + 1;
|
||||
else
|
||||
*next_hi = cur_hi;
|
||||
/* Too far back to update */
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (*next_lo > (word32)(0 - DTLS_SEQ_BITS) &&
|
||||
if (*next_lo >= (((word32)0xFFFFFFFF) - DTLS_SEQ_BITS) &&
|
||||
cur_lo < DTLS_SEQ_BITS) {
|
||||
/* diff here can still result in a difference that can not
|
||||
* be stored in the window. The index is checked against
|
||||
* WOLFSSL_DTLS_WINDOW_WORDS later. */
|
||||
diff = cur_lo - *next_lo;
|
||||
}
|
||||
else {
|
||||
|
@ -55621,10 +55621,16 @@ static void test_wolfSSL_DtlsUpdateWindow(void)
|
||||
DUW_TEST(2, 29, next_hi, next_lo, window, 2, 30, 0, 0x64000015);
|
||||
DUW_TEST(2, 33, next_hi, next_lo, window, 2, 34, 6, 0x40000151);
|
||||
DUW_TEST(2, 60, next_hi, next_lo, window, 2, 61, 0x3200000A, 0x88000001);
|
||||
DUW_TEST(1, 0xFFFFFFF0, next_hi, next_lo, window, 2, 61, 0x3200000A, 0x88000001);
|
||||
DUW_TEST(2, 0xFFFFFFFD, next_hi, next_lo, window, 2, 0xFFFFFFFE, 0, 0x01);
|
||||
DUW_TEST(3, 1, next_hi, next_lo, window, 3, 2, 0, 0x11);
|
||||
DUW_TEST(99, 66, next_hi, next_lo, window, 99, 67, 0, 0x01);
|
||||
DUW_TEST(50, 66, next_hi, next_lo, window, 99, 67, 0, 0x01);
|
||||
DUW_TEST(100, 68, next_hi, next_lo, window, 100, 69, 0, 0x01);
|
||||
DUW_TEST(99, 50, next_hi, next_lo, window, 100, 69, 0, 0x01);
|
||||
DUW_TEST(99, 0xFFFFFFFF, next_hi, next_lo, window, 100, 69, 0, 0x01);
|
||||
DUW_TEST(150, 0xFFFFFFFF, next_hi, next_lo, window, 151, 0, 0, 0x01);
|
||||
DUW_TEST(152, 0xFFFFFFFF, next_hi, next_lo, window, 153, 0, 0, 0x01);
|
||||
|
||||
printf(resultFmt, passed);
|
||||
}
|
||||
|
Reference in New Issue
Block a user