mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-07-29 11:41:15 +03:00
Catch failures of md_hmac operations
Declare mbedtls_md functions as MBEDTLS_CHECK_RETURN_TYPICAL, meaning that their return values should be checked. Do check the return values in our code. We were already doing that everywhere for hash calculations, but not for HMAC calculations. Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
@ -500,19 +500,37 @@ static int tls_prf_generic( mbedtls_md_type_t md_type,
|
||||
if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 )
|
||||
goto exit;
|
||||
|
||||
mbedtls_md_hmac_starts( &md_ctx, secret, slen );
|
||||
mbedtls_md_hmac_update( &md_ctx, tmp + md_len, nb );
|
||||
mbedtls_md_hmac_finish( &md_ctx, tmp );
|
||||
ret = mbedtls_md_hmac_starts( &md_ctx, secret, slen );
|
||||
if( ret != 0 )
|
||||
goto exit;
|
||||
ret = mbedtls_md_hmac_update( &md_ctx, tmp + md_len, nb );
|
||||
if( ret != 0 )
|
||||
goto exit;
|
||||
ret = mbedtls_md_hmac_finish( &md_ctx, tmp );
|
||||
if( ret != 0 )
|
||||
goto exit;
|
||||
|
||||
for( i = 0; i < dlen; i += md_len )
|
||||
{
|
||||
mbedtls_md_hmac_reset ( &md_ctx );
|
||||
mbedtls_md_hmac_update( &md_ctx, tmp, md_len + nb );
|
||||
mbedtls_md_hmac_finish( &md_ctx, h_i );
|
||||
ret = mbedtls_md_hmac_reset ( &md_ctx );
|
||||
if( ret != 0 )
|
||||
goto exit;
|
||||
ret = mbedtls_md_hmac_update( &md_ctx, tmp, md_len + nb );
|
||||
if( ret != 0 )
|
||||
goto exit;
|
||||
ret = mbedtls_md_hmac_finish( &md_ctx, h_i );
|
||||
if( ret != 0 )
|
||||
goto exit;
|
||||
|
||||
mbedtls_md_hmac_reset ( &md_ctx );
|
||||
mbedtls_md_hmac_update( &md_ctx, tmp, md_len );
|
||||
mbedtls_md_hmac_finish( &md_ctx, tmp );
|
||||
ret = mbedtls_md_hmac_reset ( &md_ctx );
|
||||
if( ret != 0 )
|
||||
goto exit;
|
||||
ret = mbedtls_md_hmac_update( &md_ctx, tmp, md_len );
|
||||
if( ret != 0 )
|
||||
goto exit;
|
||||
ret = mbedtls_md_hmac_finish( &md_ctx, tmp );
|
||||
if( ret != 0 )
|
||||
goto exit;
|
||||
|
||||
k = ( i + md_len > dlen ) ? dlen % md_len : md_len;
|
||||
|
||||
@ -958,8 +976,12 @@ static int ssl_tls12_populate_transform( mbedtls_ssl_transform *transform,
|
||||
For AEAD-based ciphersuites, there is nothing to do here. */
|
||||
if( mac_key_len != 0 )
|
||||
{
|
||||
mbedtls_md_hmac_starts( &transform->md_ctx_enc, mac_enc, mac_key_len );
|
||||
mbedtls_md_hmac_starts( &transform->md_ctx_dec, mac_dec, mac_key_len );
|
||||
ret = mbedtls_md_hmac_starts( &transform->md_ctx_enc, mac_enc, mac_key_len );
|
||||
if( ret != 0 )
|
||||
goto end;
|
||||
ret = mbedtls_md_hmac_starts( &transform->md_ctx_dec, mac_dec, mac_key_len );
|
||||
if( ret != 0 )
|
||||
goto end;
|
||||
}
|
||||
#endif
|
||||
#endif /* MBEDTLS_SSL_SOME_SUITES_USE_MAC */
|
||||
|
Reference in New Issue
Block a user