Introduce sub-structure of ssl_handshake_params for buffering

This commit introduces a sub-structure `buffering` within
mbedtls_ssl_handshake_params that shall contain all data
related to the reassembly and/or buffering of handshake
messages.

Currently, only buffering of CCS messages is implemented,
so the only member of this struct is the previously introduced
`seen_ccs` field.
This commit is contained in:
Hanno Becker 2018-08-16 09:45:56 +01:00
parent e25e3b7d96
commit d7f8ae2508
2 changed files with 10 additions and 6 deletions

View file

@ -308,8 +308,12 @@ struct mbedtls_ssl_handshake_params
unsigned char alt_out_ctr[8]; /*!< Alternative record epoch/counter unsigned char alt_out_ctr[8]; /*!< Alternative record epoch/counter
for resending messages */ for resending messages */
struct
{
uint8_t seen_ccs; /*!< Indicates if a CCS message has uint8_t seen_ccs; /*!< Indicates if a CCS message has
* been seen in the current flight. */ * been seen in the current flight. */
} buffering;
#endif /* MBEDTLS_SSL_PROTO_DTLS */ #endif /* MBEDTLS_SSL_PROTO_DTLS */
/* /*

View file

@ -3070,7 +3070,7 @@ void mbedtls_ssl_recv_flight_completed( mbedtls_ssl_context *ssl )
ssl->handshake->in_flight_start_seq = ssl->handshake->in_msg_seq; ssl->handshake->in_flight_start_seq = ssl->handshake->in_msg_seq;
/* We don't want to remember CCS's across flight boundaries. */ /* We don't want to remember CCS's across flight boundaries. */
ssl->handshake->seen_ccs = 0; ssl->handshake->buffering.seen_ccs = 0;
/* Cancel timer */ /* Cancel timer */
ssl_set_timer( ssl, 0 ); ssl_set_timer( ssl, 0 );
@ -4436,11 +4436,11 @@ static int ssl_load_buffered_message( mbedtls_ssl_context *ssl )
{ {
/* Check if we have seen a ChangeCipherSpec before. /* Check if we have seen a ChangeCipherSpec before.
* If yes, synthesize a CCS record. */ * If yes, synthesize a CCS record. */
if( ! hs->seen_ccs ) if( ! hs->buffering.seen_ccs )
{ {
MBEDTLS_SSL_DEBUG_MSG( 2, ( "CCS not seen in the current flight" ) ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "CCS not seen in the current flight" ) );
ret = -1; ret = -1;
goto exit; return( -1 );
} }
MBEDTLS_SSL_DEBUG_MSG( 2, ( "Inject buffered CCS message" ) ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "Inject buffered CCS message" ) );
@ -4452,7 +4452,7 @@ static int ssl_load_buffered_message( mbedtls_ssl_context *ssl )
ssl->in_left = 0; ssl->in_left = 0;
ssl->next_record_offset = 0; ssl->next_record_offset = 0;
hs->seen_ccs = 0; hs->buffering.seen_ccs = 0;
goto exit; goto exit;
} }
ret = -1; ret = -1;
@ -4477,7 +4477,7 @@ static int ssl_buffer_message( mbedtls_ssl_context *ssl )
{ {
case MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC: case MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC:
MBEDTLS_SSL_DEBUG_MSG( 2, ( "Remember CCS message" ) ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "Remember CCS message" ) );
hs->seen_ccs = 1; hs->buffering.seen_ccs = 1;
break; break;
case MBEDTLS_SSL_MSG_HANDSHAKE: case MBEDTLS_SSL_MSG_HANDSHAKE: