mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2026-07-30 16:26:33 +08:00
Introduce ssl_buffering_shift_slots
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
This commit is contained in:
parent
072ddb0346
commit
7fabb42524
@ -376,6 +376,7 @@ exit:
|
||||
/* Forward declarations for functions related to message buffering. */
|
||||
static void ssl_buffering_free_slot(mbedtls_ssl_context *ssl,
|
||||
uint8_t slot);
|
||||
static void ssl_buffering_shift_slots(mbedtls_ssl_context *ssl, unsigned shift);
|
||||
static void ssl_free_buffered_record(mbedtls_ssl_context *ssl);
|
||||
MBEDTLS_CHECK_RETURN_CRITICAL
|
||||
static int ssl_load_buffered_message(mbedtls_ssl_context *ssl);
|
||||
@ -3472,28 +3473,10 @@ int mbedtls_ssl_update_handshake_status(mbedtls_ssl_context *ssl)
|
||||
#if defined(MBEDTLS_SSL_PROTO_DTLS)
|
||||
if (ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM &&
|
||||
ssl->handshake != NULL) {
|
||||
unsigned offset;
|
||||
mbedtls_ssl_hs_buffer *hs_buf;
|
||||
|
||||
/* Increment handshake sequence number */
|
||||
hs->in_msg_seq++;
|
||||
|
||||
/*
|
||||
* Clear up handshake buffering and reassembly structure.
|
||||
*/
|
||||
|
||||
/* Free first entry */
|
||||
ssl_buffering_free_slot(ssl, 0);
|
||||
|
||||
/* Shift all other entries */
|
||||
for (offset = 0, hs_buf = &hs->buffering.hs[0];
|
||||
offset + 1 < MBEDTLS_SSL_MAX_BUFFERED_HS;
|
||||
offset++, hs_buf++) {
|
||||
*hs_buf = *(hs_buf + 1);
|
||||
}
|
||||
|
||||
/* Create a fresh last entry */
|
||||
memset(hs_buf, 0, sizeof(mbedtls_ssl_hs_buffer));
|
||||
ssl_buffering_shift_slots(ssl, 1);
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
@ -6494,6 +6477,42 @@ static void ssl_buffering_free_slot(mbedtls_ssl_context *ssl,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Shift the buffering slots to the left by `shift` positions.
|
||||
* After the operation, slot i contains the previous slot i + shift.
|
||||
*/
|
||||
static void ssl_buffering_shift_slots(mbedtls_ssl_context *ssl,
|
||||
unsigned shift)
|
||||
{
|
||||
mbedtls_ssl_handshake_params * const hs = ssl->handshake;
|
||||
unsigned offset;
|
||||
|
||||
if (shift == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (shift >= MBEDTLS_SSL_MAX_BUFFERED_HS) {
|
||||
shift = MBEDTLS_SSL_MAX_BUFFERED_HS;
|
||||
}
|
||||
|
||||
/* Free discarded entries */
|
||||
for (offset = 0; offset < shift; offset++) {
|
||||
ssl_buffering_free_slot(ssl, offset);
|
||||
}
|
||||
|
||||
/* Shift remaining entries left */
|
||||
for (offset = 0; offset + shift < MBEDTLS_SSL_MAX_BUFFERED_HS; offset++) {
|
||||
hs->buffering.hs[offset] = hs->buffering.hs[offset + shift];
|
||||
}
|
||||
|
||||
/* Reset the remaining entries at the end. It may have been already
|
||||
* partially done by the loop freing the discarded entries but that is
|
||||
* simpler and safer.
|
||||
*/
|
||||
for (; offset < MBEDTLS_SSL_MAX_BUFFERED_HS; offset++) {
|
||||
memset(&hs->buffering.hs[offset], 0, sizeof(hs->buffering.hs[offset]));
|
||||
}
|
||||
}
|
||||
#endif /* MBEDTLS_SSL_PROTO_DTLS */
|
||||
|
||||
/*
|
||||
|
||||
@ -2256,7 +2256,7 @@ run_test "Default, TLS 1.2" \
|
||||
requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
|
||||
requires_ciphersuite_enabled TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256
|
||||
run_test "Default, DTLS" \
|
||||
"$P_SRV dtls=1" \
|
||||
"$P_SRV debug_level=5 dtls=1" \
|
||||
"$P_CLI dtls=1" \
|
||||
0 \
|
||||
-s "Protocol is DTLSv1.2" \
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user