From 993691d9ba9d9b3d984724802c6f12643d09ac72 Mon Sep 17 00:00:00 2001 From: Hanno Becker Date: Wed, 4 Sep 2019 13:24:44 +0100 Subject: [PATCH] MD: Implement config dep'n inlining of mbedtls_md_finish() --- include/mbedtls/md.h | 54 +++++++++++++++++++++++++++++++++++++++++--- library/md.c | 19 +++------------- 2 files changed, 54 insertions(+), 19 deletions(-) diff --git a/include/mbedtls/md.h b/include/mbedtls/md.h index cc04f2210..899623f7a 100644 --- a/include/mbedtls/md.h +++ b/include/mbedtls/md.h @@ -352,7 +352,8 @@ MBEDTLS_MD_INLINABLE_API int mbedtls_md_update( mbedtls_md_context_t *ctx, * \return #MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter-verification * failure. */ -int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output ); +MBEDTLS_MD_INLINABLE_API int mbedtls_md_finish( mbedtls_md_context_t *ctx, + unsigned char *output ); /** * \brief This function calculates the message-digest of a buffer, @@ -372,8 +373,11 @@ int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output ); * \return #MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter-verification * failure. */ -int mbedtls_md( mbedtls_md_handle_t md_info, const unsigned char *input, size_t ilen, - unsigned char *output ); +MBEDTLS_MD_INLINABLE_API int mbedtls_md( + mbedtls_md_handle_t md_info, + const unsigned char *input, + size_t ilen, + unsigned char *output ); #if defined(MBEDTLS_FS_IO) /** @@ -543,6 +547,34 @@ MBEDTLS_ALWAYS_INLINE static inline int mbedtls_md_update_internal( input, ilen ) ); } +MBEDTLS_ALWAYS_INLINE static inline int mbedtls_md_finish_internal( + mbedtls_md_context_t *ctx, unsigned char *output ) +{ + mbedtls_md_handle_t md_info; + if( 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_finish( md_info, ctx->md_ctx, + output ) ); +} + +MBEDTLS_ALWAYS_INLINE static inline int mbedtls_md_internal( + mbedtls_md_handle_t md_info, + const unsigned char *input, + size_t ilen, + unsigned char *output ) +{ + if( md_info == MBEDTLS_MD_INVALID_HANDLE ) + return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + + return( mbedtls_md_info_digest( md_info, input, + ilen, output) ); +} + #if defined(MBEDTLS_MD_SINGLE_HASH) MBEDTLS_MD_INLINABLE_API int mbedtls_md_starts( mbedtls_md_context_t *ctx ) @@ -557,6 +589,22 @@ MBEDTLS_MD_INLINABLE_API int mbedtls_md_update( { return( mbedtls_md_update_internal( ctx, input, ilen ) ); } + +MBEDTLS_MD_INLINABLE_API int mbedtls_md_finish( + mbedtls_md_context_t *ctx, unsigned char *output ) +{ + return( mbedtls_md_finish_internal( ctx, output ) ); +} + +MBEDTLS_MD_INLINABLE_API int mbedtls_md( + mbedtls_md_handle_t md_info, + const unsigned char *input, + size_t ilen, + unsigned char *output ) +{ + return( mbedtls_md_internal( md_info, input, ilen, output ) ); +} + #endif /* MBEDTLS_MD_SINGLE_HASH */ #ifdef __cplusplus diff --git a/library/md.c b/library/md.c index aa14f838d..b648baabc 100644 --- a/library/md.c +++ b/library/md.c @@ -471,31 +471,18 @@ int mbedtls_md_update( mbedtls_md_context_t *ctx, { return( mbedtls_md_update_internal( ctx, input, ilen ) ); } -#endif /* !MBEDTLS_MD_SINGLE_HASH */ int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output ) { - mbedtls_md_handle_t md_info; - if( 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_finish( md_info, ctx->md_ctx, - output ) ); + return( mbedtls_md_finish_internal( ctx, output ) ); } int mbedtls_md( mbedtls_md_handle_t md_info, const unsigned char *input, size_t ilen, unsigned char *output ) { - if( md_info == MBEDTLS_MD_INVALID_HANDLE ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); - - return( mbedtls_md_info_digest( md_info, input, - ilen, output) ); + return( mbedtls_md_internal( md_info, input, ilen, output ) ); } +#endif /* !MBEDTLS_MD_SINGLE_HASH */ #if defined(MBEDTLS_FS_IO) int mbedtls_md_file( mbedtls_md_handle_t md_info, const char *path, unsigned char *output )