Introduce SSL helper function to mark pending alerts

This commit is contained in:
Hanno Becker 2019-07-03 13:56:59 +01:00
parent 3b014fc23a
commit f46e1ce812
3 changed files with 26 additions and 0 deletions

View File

@ -366,6 +366,7 @@
#define MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME 112 /* 0x70 */ #define MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME 112 /* 0x70 */
#define MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY 115 /* 0x73 */ #define MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY 115 /* 0x73 */
#define MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL 120 /* 0x78 */ #define MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL 120 /* 0x78 */
#define MBEDTLS_SSL_ALERT_MSG_NONE 255 /* internal */
#define MBEDTLS_SSL_HS_HELLO_REQUEST 0 #define MBEDTLS_SSL_HS_HELLO_REQUEST 0
#define MBEDTLS_SSL_HS_CLIENT_HELLO 1 #define MBEDTLS_SSL_HS_CLIENT_HELLO 1
@ -1234,6 +1235,9 @@ struct mbedtls_ssl_context
{ {
const mbedtls_ssl_config *conf; /*!< configuration information */ const mbedtls_ssl_config *conf; /*!< configuration information */
unsigned char pend_alert_level;
unsigned char pend_alert_msg;
/* /*
* Miscellaneous * Miscellaneous
*/ */

View File

@ -1724,4 +1724,15 @@ static inline unsigned int mbedtls_ssl_conf_get_ems_enforced(
#endif /* MBEDTLS_SSL_CONF_SINGLE_SIG_HASH */ #endif /* MBEDTLS_SSL_CONF_SINGLE_SIG_HASH */
__attribute__((always_inline)) static inline int mbedtls_ssl_pend_alert_message(
mbedtls_ssl_context *ssl,
unsigned char level,
unsigned char message )
{
if( level != MBEDTLS_SSL_ALERT_LEVEL_FATAL )
ssl->pend_alert_level = level;
ssl->pend_alert_msg = message;
return( 0 );
}
#endif /* ssl_internal.h */ #endif /* ssl_internal.h */

View File

@ -7983,6 +7983,9 @@ int mbedtls_ssl_setup( mbedtls_ssl_context *ssl,
if( ( ret = ssl_handshake_init( ssl ) ) != 0 ) if( ( ret = ssl_handshake_init( ssl ) ) != 0 )
goto error; goto error;
ssl->pend_alert_msg = MBEDTLS_SSL_ALERT_MSG_NONE;
ssl->pend_alert_level = MBEDTLS_SSL_ALERT_LEVEL_FATAL;
return( 0 ); return( 0 );
error: error:
@ -9835,6 +9838,14 @@ int mbedtls_ssl_handshake_step( mbedtls_ssl_context *ssl )
ret = mbedtls_ssl_handshake_server_step( ssl ); ret = mbedtls_ssl_handshake_server_step( ssl );
#endif #endif
if( ssl->pend_alert_msg != MBEDTLS_SSL_ALERT_MSG_NONE )
{
mbedtls_ssl_send_alert_message( ssl,
ssl->pend_alert_level,
ssl->pend_alert_msg );
ssl->pend_alert_msg = MBEDTLS_SSL_ALERT_MSG_NONE;
ssl->pend_alert_level = MBEDTLS_SSL_ALERT_LEVEL_FATAL;
}
return( ret ); return( ret );
} }