Update HMAC and MD FI countermeasures
-Return error value by default.
-Success is returned only after checking internal states.
-Append flow_control to cover also last function call.
diff --git a/library/md.c b/library/md.c
index 7644ac6..777b43c 100644
--- a/library/md.c
+++ b/library/md.c
@@ -525,7 +525,7 @@
int ret;
unsigned char sum[MBEDTLS_MD_MAX_SIZE];
unsigned char *ipad, *opad;
- size_t i;
+ size_t i = 0;
mbedtls_md_handle_t md_info;
@@ -588,16 +588,14 @@
cleanup:
mbedtls_platform_zeroize( sum, sizeof( sum ) );
- if ( ret == 0 )
- {
- ret = MBEDTLS_ERR_PLATFORM_FAULT_DETECTED;
- /* Check possible fault injection */
- if ( ( i - 2 ) == keylen ) {
- ret = 0;
- }
- }
+ if ( ret != 0 )
+ return ret;
- return( ret );
+ /* Check possible fault injection */
+ if ( ( i - 2 ) == keylen )
+ return ret; // success, return 0 from ret
+
+ return( MBEDTLS_ERR_PLATFORM_FAULT_DETECTED );
}
int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx,