diff --git a/library/ssl_tls13_keys.c b/library/ssl_tls13_keys.c index 6b8f8e146e..6f3338c818 100644 --- a/library/ssl_tls13_keys.c +++ b/library/ssl_tls13_keys.c @@ -655,8 +655,19 @@ int mbedtls_ssl_tls13_calculate_verify_data( mbedtls_ssl_context* ssl, size_t transcript_len; unsigned char *base_key = NULL; + size_t base_key_len = 0; mbedtls_ssl_tls13_handshake_secrets *tls13_hs_secrets = &ssl->handshake->tls13_hs_secrets; + if( from == MBEDTLS_SSL_IS_CLIENT ) + { + base_key = tls13_hs_secrets->client_handshake_traffic_secret; + base_key_len = sizeof( tls13_hs_secrets->client_handshake_traffic_secret ); + } + else + { + base_key = tls13_hs_secrets->server_handshake_traffic_secret; + base_key_len = sizeof( tls13_hs_secrets->server_handshake_traffic_secret ); + } mbedtls_md_type_t const md_type = ssl->handshake->ciphersuite_info->mac; const mbedtls_md_info_t* const md_info = @@ -681,11 +692,6 @@ int mbedtls_ssl_tls13_calculate_verify_data( mbedtls_ssl_context* ssl, } MBEDTLS_SSL_DEBUG_BUF( 4, "handshake hash", transcript, transcript_len ); - if( from == MBEDTLS_SSL_IS_CLIENT ) - base_key = tls13_hs_secrets->client_handshake_traffic_secret; - else - base_key = tls13_hs_secrets->server_handshake_traffic_secret; - ret = ssl_tls13_calc_finished_core( md_type, base_key, transcript, dst ); if( ret != 0 ) goto exit; @@ -696,16 +702,7 @@ int mbedtls_ssl_tls13_calculate_verify_data( mbedtls_ssl_context* ssl, exit: /* Erase handshake secrets */ - if( from == MBEDTLS_SSL_IS_CLIENT ) - { - mbedtls_platform_zeroize( base_key, - sizeof( tls13_hs_secrets->client_handshake_traffic_secret ) ); - } - else - { - mbedtls_platform_zeroize( base_key, - sizeof( tls13_hs_secrets->server_handshake_traffic_secret ) ); - } + mbedtls_platform_zeroize( base_key, base_key_len ); mbedtls_platform_zeroize( transcript, sizeof( transcript ) ); return( ret ); }