Introduce getter for MD handle from MD context
diff --git a/library/hmac_drbg.c b/library/hmac_drbg.c
index c9c541d..b51e9b1 100644
--- a/library/hmac_drbg.c
+++ b/library/hmac_drbg.c
@@ -70,7 +70,8 @@
const unsigned char *additional,
size_t add_len )
{
- size_t md_len = mbedtls_md_get_size( ctx->md_ctx.md_info );
+ size_t md_len = mbedtls_md_get_size(
+ mbedtls_md_get_handle( &ctx->md_ctx ) );
unsigned char rounds = ( additional != NULL && add_len != 0 ) ? 2 : 1;
unsigned char sep[1];
unsigned char K[MBEDTLS_MD_MAX_SIZE];
@@ -329,7 +330,8 @@
{
int ret;
mbedtls_hmac_drbg_context *ctx = (mbedtls_hmac_drbg_context *) p_rng;
- size_t md_len = mbedtls_md_get_size( ctx->md_ctx.md_info );
+ size_t md_len = mbedtls_md_get_size(
+ mbedtls_md_get_handle( &ctx->md_ctx ) );
size_t left = out_len;
unsigned char *out = output;
diff --git a/library/md.c b/library/md.c
index e1d7e9d..81e3023 100644
--- a/library/md.c
+++ b/library/md.c
@@ -189,16 +189,19 @@
void mbedtls_md_free( mbedtls_md_context_t *ctx )
{
- if( ctx == NULL || ctx->md_info == MBEDTLS_MD_INVALID_HANDLE )
+ if( ctx == NULL || mbedtls_md_get_handle( ctx ) == MBEDTLS_MD_INVALID_HANDLE )
return;
if( ctx->md_ctx != NULL )
- mbedtls_md_info_ctx_free_func( ctx->md_info )( ctx->md_ctx );
+ {
+ mbedtls_md_info_ctx_free_func(
+ mbedtls_md_get_handle( ctx ) )( ctx->md_ctx );
+ }
if( ctx->hmac_ctx != NULL )
{
mbedtls_platform_zeroize( ctx->hmac_ctx,
- 2 * mbedtls_md_info_block_size( ctx->md_info ) );
+ 2 * mbedtls_md_info_block_size( mbedtls_md_get_handle( ctx ) ) );
mbedtls_free( ctx->hmac_ctx );
}
@@ -208,14 +211,15 @@
int mbedtls_md_clone( mbedtls_md_context_t *dst,
const mbedtls_md_context_t *src )
{
- if( dst == NULL || dst->md_info == MBEDTLS_MD_INVALID_HANDLE ||
- src == NULL || src->md_info == MBEDTLS_MD_INVALID_HANDLE ||
- dst->md_info != src->md_info )
+ if( dst == NULL || mbedtls_md_get_handle( dst ) == MBEDTLS_MD_INVALID_HANDLE ||
+ src == NULL || mbedtls_md_get_handle( src ) == MBEDTLS_MD_INVALID_HANDLE ||
+ mbedtls_md_get_handle( dst ) != mbedtls_md_get_handle( src ) )
{
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
}
- mbedtls_md_info_clone_func( dst->md_info )( dst->md_ctx, src->md_ctx );
+ mbedtls_md_info_clone_func( mbedtls_md_get_handle( dst ) )
+ ( dst->md_ctx, src->md_ctx );
return( 0 );
}
@@ -237,7 +241,8 @@
if( hmac != 0 )
{
- ctx->hmac_ctx = mbedtls_calloc( 2, mbedtls_md_info_block_size( md_info ) );
+ ctx->hmac_ctx = mbedtls_calloc( 2,
+ mbedtls_md_info_block_size( md_info ) );
if( ctx->hmac_ctx == NULL )
{
mbedtls_md_info_ctx_free_func( md_info )( ctx->md_ctx );
@@ -252,28 +257,43 @@
int mbedtls_md_starts( mbedtls_md_context_t *ctx )
{
- if( ctx == NULL || ctx->md_info == MBEDTLS_MD_INVALID_HANDLE )
+ mbedtls_md_handle_t md_info;
+ if( ctx == NULL )
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
- return( mbedtls_md_info_starts_func( ctx->md_info )( ctx->md_ctx ) );
+ md_info = mbedtls_md_get_handle( ctx );
+ if( md_info == MBEDTLS_MD_INVALID_HANDLE )
+ return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+
+ return( mbedtls_md_info_starts_func( md_info )( ctx->md_ctx ) );
}
int mbedtls_md_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen )
{
- if( ctx == NULL || ctx->md_info == MBEDTLS_MD_INVALID_HANDLE )
+ mbedtls_md_handle_t md_info;
+ if( ctx == NULL )
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
- return( mbedtls_md_info_update_func( ctx->md_info )( ctx->md_ctx,
- input, ilen ) );
+ md_info = mbedtls_md_get_handle( ctx );
+ if( md_info == MBEDTLS_MD_INVALID_HANDLE )
+ return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+
+ return( mbedtls_md_info_update_func( md_info )( ctx->md_ctx,
+ input, ilen ) );
}
int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output )
{
- if( ctx == NULL || ctx->md_info == MBEDTLS_MD_INVALID_HANDLE )
+ mbedtls_md_handle_t md_info;
+ if( ctx == NULL )
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
- return( mbedtls_md_info_finish_func( ctx->md_info )( ctx->md_ctx,
- output ) );
+ md_info = mbedtls_md_get_handle( ctx );
+ if( md_info == MBEDTLS_MD_INVALID_HANDLE )
+ return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+
+ return( mbedtls_md_info_finish_func( md_info )( ctx->md_ctx,
+ output ) );
}
int mbedtls_md( mbedtls_md_handle_t md_info, const unsigned char *input, size_t ilen,
@@ -348,18 +368,20 @@
mbedtls_md_update_func_t *update;
mbedtls_md_finish_func_t *finish;
- if( ctx == NULL ||
- ctx->md_info == MBEDTLS_MD_INVALID_HANDLE ||
- ctx->hmac_ctx == NULL )
- {
+ mbedtls_md_handle_t md_info;
+
+ if( ctx == NULL || ctx->hmac_ctx == NULL )
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
- }
- starts = mbedtls_md_info_starts_func( ctx->md_info );
- update = mbedtls_md_info_update_func( ctx->md_info );
- finish = mbedtls_md_info_finish_func( ctx->md_info );
+ md_info = mbedtls_md_get_handle( ctx );
+ if( md_info == MBEDTLS_MD_INVALID_HANDLE )
+ return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
- if( keylen > (size_t) mbedtls_md_info_block_size( ctx->md_info ) )
+ starts = mbedtls_md_info_starts_func( md_info );
+ update = mbedtls_md_info_update_func( md_info );
+ finish = mbedtls_md_info_finish_func( md_info );
+
+ if( keylen > (size_t) mbedtls_md_info_block_size( md_info ) )
{
if( ( ret = starts( ctx->md_ctx ) ) != 0 )
goto cleanup;
@@ -370,15 +392,16 @@
if( ( ret = finish( ctx->md_ctx, sum ) ) != 0 )
goto cleanup;
- keylen = mbedtls_md_info_size( ctx->md_info );
+ keylen = mbedtls_md_info_size( md_info );
key = sum;
}
ipad = (unsigned char *) ctx->hmac_ctx;
- opad = (unsigned char *) ctx->hmac_ctx + mbedtls_md_info_block_size( ctx->md_info );
+ opad = (unsigned char *) ctx->hmac_ctx +
+ mbedtls_md_info_block_size( md_info );
- memset( ipad, 0x36, mbedtls_md_info_block_size( ctx->md_info ) );
- memset( opad, 0x5C, mbedtls_md_info_block_size( ctx->md_info ) );
+ memset( ipad, 0x36, mbedtls_md_info_block_size( md_info ) );
+ memset( opad, 0x5C, mbedtls_md_info_block_size( md_info ) );
for( i = 0; i < keylen; i++ )
{
@@ -389,8 +412,11 @@
if( ( ret = starts( ctx->md_ctx ) ) != 0 )
goto cleanup;
- if( ( ret = update( ctx->md_ctx, ipad, mbedtls_md_info_block_size( ctx->md_info ) ) ) != 0 )
+ if( ( ret = update( ctx->md_ctx, ipad,
+ mbedtls_md_info_block_size( md_info ) ) ) != 0 )
+ {
goto cleanup;
+ }
cleanup:
mbedtls_platform_zeroize( sum, sizeof( sum ) );
@@ -398,16 +424,19 @@
return( ret );
}
-int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen )
+int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx,
+ const unsigned char *input, size_t ilen )
{
- if( ctx == NULL ||
- ctx->md_info == MBEDTLS_MD_INVALID_HANDLE ||
- ctx->hmac_ctx == NULL )
- {
- return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
- }
+ mbedtls_md_handle_t md_info;
- return( mbedtls_md_info_update_func( ctx->md_info )(
+ if( ctx == NULL || ctx->hmac_ctx == NULL )
+ return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+
+ md_info = mbedtls_md_get_handle( ctx );
+ if( md_info == MBEDTLS_MD_INVALID_HANDLE )
+ return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+
+ return( mbedtls_md_info_update_func( md_info )(
ctx->md_ctx, input, ilen ) );
}
@@ -421,18 +450,21 @@
mbedtls_md_update_func_t *update;
mbedtls_md_finish_func_t *finish;
- if( ctx == NULL ||
- ctx->md_info == MBEDTLS_MD_INVALID_HANDLE ||
- ctx->hmac_ctx == NULL )
- {
+ mbedtls_md_handle_t md_info;
+
+ if( ctx == NULL || ctx->hmac_ctx == NULL )
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
- }
- starts = mbedtls_md_info_starts_func( ctx->md_info );
- update = mbedtls_md_info_update_func( ctx->md_info );
- finish = mbedtls_md_info_finish_func( ctx->md_info );
+ md_info = mbedtls_md_get_handle( ctx );
+ if( md_info == MBEDTLS_MD_INVALID_HANDLE )
+ return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
- opad = (unsigned char *) ctx->hmac_ctx + mbedtls_md_info_block_size( ctx->md_info );
+ starts = mbedtls_md_info_starts_func( md_info );
+ update = mbedtls_md_info_update_func( md_info );
+ finish = mbedtls_md_info_finish_func( md_info );
+
+ opad = (unsigned char *) ctx->hmac_ctx +
+ mbedtls_md_info_block_size( md_info );
if( ( ret = finish( ctx->md_ctx, tmp ) ) != 0 )
return( ret );
@@ -440,11 +472,17 @@
if( ( ret = starts( ctx->md_ctx ) ) != 0 )
return( ret );
- if( ( ret = update( ctx->md_ctx, opad, mbedtls_md_info_block_size( ctx->md_info ) ) ) != 0 )
+ if( ( ret = update( ctx->md_ctx, opad,
+ mbedtls_md_info_block_size( md_info ) ) ) != 0 )
+ {
return( ret );
+ }
- if( ( ret = update( ctx->md_ctx, tmp, mbedtls_md_info_size( ctx->md_info ) ) ) != 0 )
+ if( ( ret = update( ctx->md_ctx, tmp,
+ mbedtls_md_info_size( md_info ) ) ) != 0 )
+ {
return( ret );
+ }
if( ( ret = finish( ctx->md_ctx, output ) ) != 0 )
return( ret );
@@ -457,21 +495,24 @@
int ret;
unsigned char *ipad;
- if( ctx == NULL ||
- ctx->md_info == MBEDTLS_MD_INVALID_HANDLE ||
- ctx->hmac_ctx == NULL )
- {
+ mbedtls_md_handle_t md_info;
+
+ if( ctx == NULL || ctx->hmac_ctx == NULL )
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
- }
+
+ md_info = mbedtls_md_get_handle( ctx );
+ if( md_info == MBEDTLS_MD_INVALID_HANDLE )
+ return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
ipad = (unsigned char *) ctx->hmac_ctx;
- ret = mbedtls_md_info_starts_func( ctx->md_info )( ctx->md_ctx );
+ ret = mbedtls_md_info_starts_func( md_info )( ctx->md_ctx );
if( ret != 0 )
return( ret );
- ret = mbedtls_md_info_update_func( ctx->md_info )(
- ctx->md_ctx, ipad, mbedtls_md_info_block_size( ctx->md_info ) );
+ ret = mbedtls_md_info_update_func( md_info )(
+ ctx->md_ctx, ipad,
+ mbedtls_md_info_block_size( md_info ) );
return( ret );
}
@@ -506,13 +547,15 @@
int mbedtls_md_process( mbedtls_md_context_t *ctx, const unsigned char *data )
{
- if( ctx == NULL ||
- ctx->md_info == MBEDTLS_MD_INVALID_HANDLE )
- {
+ mbedtls_md_handle_t md_info;
+ if( ctx == NULL )
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
- }
- return( mbedtls_md_info_process_func( ctx->md_info )(
+ md_info = mbedtls_md_get_handle( ctx );
+ if( md_info == MBEDTLS_MD_INVALID_HANDLE )
+ return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+
+ return( mbedtls_md_info_process_func( md_info )(
ctx->md_ctx, data ) );
}
diff --git a/library/pkcs5.c b/library/pkcs5.c
index 2717aaa..a517778 100644
--- a/library/pkcs5.c
+++ b/library/pkcs5.c
@@ -226,7 +226,7 @@
unsigned int i;
unsigned char md1[MBEDTLS_MD_MAX_SIZE];
unsigned char work[MBEDTLS_MD_MAX_SIZE];
- unsigned char md_size = mbedtls_md_get_size( ctx->md_info );
+ unsigned char md_size = mbedtls_md_get_size( mbedtls_md_get_handle( ctx ) );
size_t use_len;
unsigned char *out_p = output;
unsigned char counter[4];
diff --git a/library/rsa.c b/library/rsa.c
index 2674c10..3bfc73e 100644
--- a/library/rsa.c
+++ b/library/rsa.c
@@ -1076,7 +1076,7 @@
memset( mask, 0, MBEDTLS_MD_MAX_SIZE );
memset( counter, 0, 4 );
- hlen = mbedtls_md_get_size( md_ctx->md_info );
+ hlen = mbedtls_md_get_size( mbedtls_md_get_handle( md_ctx ) );
/* Generate and apply dbMask */
p = dst;