diff --git a/library/md.c b/library/md.c
index 303cdcb..821a5e8 100644
--- a/library/md.c
+++ b/library/md.c
@@ -49,6 +49,12 @@
 #include <stdio.h>
 #endif
 
+#define MBEDTLS_MD_VALIDATE_RET(cond) \
+        MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_MD_BAD_INPUT_DATA )
+#define MBEDTLS_MD_VALIDATE_RET_NULL(cond) \
+        MBEDTLS_INTERNAL_VALIDATE_RET( cond, NULL )
+#define MBEDTLS_MD_VALIDATE(cond)    MBEDTLS_INTERNAL_VALIDATE( cond )
+
 /*
  * Reminder: update profiles in x509_crt.c when adding a new hash!
  */
@@ -94,8 +100,7 @@
 
 const mbedtls_md_info_t *mbedtls_md_info_from_string( const char *md_name )
 {
-    if( NULL == md_name )
-        return( NULL );
+    MBEDTLS_MD_VALIDATE_RET_NULL( md_name != NULL );
 
     /* Get the appropriate digest information */
 #if defined(MBEDTLS_MD2_C)
@@ -176,6 +181,7 @@
 
 void mbedtls_md_init( mbedtls_md_context_t *ctx )
 {
+    MBEDTLS_MD_VALIDATE( ctx != NULL );
     memset( ctx, 0, sizeof( mbedtls_md_context_t ) );
 }
 
@@ -200,12 +206,11 @@
 int mbedtls_md_clone( mbedtls_md_context_t *dst,
                       const mbedtls_md_context_t *src )
 {
-    if( dst == NULL || dst->md_info == NULL ||
-        src == NULL || src->md_info == NULL ||
-        dst->md_info != src->md_info )
-    {
-        return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
-    }
+    MBEDTLS_MD_VALIDATE_RET( dst != NULL );
+    MBEDTLS_MD_VALIDATE_RET( src != NULL );
+    MBEDTLS_MD_VALIDATE_RET( dst->md_info != NULL );
+    MBEDTLS_MD_VALIDATE_RET( src->md_info != NULL );
+    MBEDTLS_MD_VALIDATE_RET( dst->md_info == src->md_info );
 
     dst->md_info->clone_func( dst->md_ctx, src->md_ctx );
 
@@ -221,8 +226,8 @@
 
 int mbedtls_md_setup( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_info, int hmac )
 {
-    if( md_info == NULL || ctx == NULL )
-        return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+    MBEDTLS_MD_VALIDATE_RET( md_info != NULL );
+    MBEDTLS_MD_VALIDATE_RET( ctx != NULL );
 
     if( ( ctx->md_ctx = md_info->ctx_alloc_func() ) == NULL )
         return( MBEDTLS_ERR_MD_ALLOC_FAILED );
@@ -244,24 +249,26 @@
 
 int mbedtls_md_starts( mbedtls_md_context_t *ctx )
 {
-    if( ctx == NULL || ctx->md_info == NULL )
-        return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+    MBEDTLS_MD_VALIDATE_RET( ctx != NULL );
+    MBEDTLS_MD_VALIDATE_RET( ctx->md_info != NULL );
 
     return( ctx->md_info->starts_func( 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 == NULL )
-        return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+    MBEDTLS_MD_VALIDATE_RET( ctx != NULL );
+    MBEDTLS_MD_VALIDATE_RET( ctx->md_info != NULL );
+    MBEDTLS_MD_VALIDATE_RET( input != NULL );
 
     return( ctx->md_info->update_func( ctx->md_ctx, input, ilen ) );
 }
 
 int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output )
 {
-    if( ctx == NULL || ctx->md_info == NULL )
-        return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+    MBEDTLS_MD_VALIDATE_RET( ctx != NULL );
+    MBEDTLS_MD_VALIDATE_RET( ctx->md_info != NULL );
+    MBEDTLS_MD_VALIDATE_RET( output != NULL );
 
     return( ctx->md_info->finish_func( ctx->md_ctx, output ) );
 }
@@ -269,8 +276,8 @@
 int mbedtls_md( const mbedtls_md_info_t *md_info, const unsigned char *input, size_t ilen,
             unsigned char *output )
 {
-    if( md_info == NULL )
-        return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+    MBEDTLS_MD_VALIDATE_RET( md_info != NULL );
+    MBEDTLS_MD_VALIDATE_RET( output != NULL );
 
     return( md_info->digest_func( input, ilen, output ) );
 }
@@ -284,8 +291,9 @@
     mbedtls_md_context_t ctx;
     unsigned char buf[1024];
 
-    if( md_info == NULL )
-        return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+    MBEDTLS_MD_VALIDATE_RET( md_info != NULL );
+    MBEDTLS_MD_VALIDATE_RET( path != NULL );
+    MBEDTLS_MD_VALIDATE_RET( output != NULL );
 
     if( ( f = fopen( path, "rb" ) ) == NULL )
         return( MBEDTLS_ERR_MD_FILE_IO_ERROR );
@@ -323,8 +331,10 @@
     unsigned char *ipad, *opad;
     size_t i;
 
-    if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL )
-        return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+    MBEDTLS_MD_VALIDATE_RET( ctx != NULL );
+    MBEDTLS_MD_VALIDATE_RET( ctx->md_info  != NULL );
+    MBEDTLS_MD_VALIDATE_RET( ctx->hmac_ctx != NULL );
+    MBEDTLS_MD_VALIDATE_RET( key != NULL );
 
     if( keylen > (size_t) ctx->md_info->block_size )
     {
@@ -365,8 +375,9 @@
 
 int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen )
 {
-    if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL )
-        return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+    MBEDTLS_MD_VALIDATE_RET( ctx != NULL );
+    MBEDTLS_MD_VALIDATE_RET( ctx->hmac_ctx != NULL );
+    MBEDTLS_MD_VALIDATE_RET( ctx->md_info != NULL );
 
     return( ctx->md_info->update_func( ctx->md_ctx, input, ilen ) );
 }
@@ -377,8 +388,10 @@
     unsigned char tmp[MBEDTLS_MD_MAX_SIZE];
     unsigned char *opad;
 
-    if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL )
-        return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+    MBEDTLS_MD_VALIDATE_RET( ctx != NULL );
+    MBEDTLS_MD_VALIDATE_RET( ctx->hmac_ctx != NULL );
+    MBEDTLS_MD_VALIDATE_RET( ctx->md_info != NULL );
+    MBEDTLS_MD_VALIDATE_RET( output != NULL );
 
     opad = (unsigned char *) ctx->hmac_ctx + ctx->md_info->block_size;
 
@@ -400,8 +413,9 @@
     int ret;
     unsigned char *ipad;
 
-    if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL )
-        return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+    MBEDTLS_MD_VALIDATE_RET( ctx != NULL );
+    MBEDTLS_MD_VALIDATE_RET( ctx->hmac_ctx != NULL );
+    MBEDTLS_MD_VALIDATE_RET( ctx->md_info != NULL );
 
     ipad = (unsigned char *) ctx->hmac_ctx;
 
@@ -419,8 +433,9 @@
     mbedtls_md_context_t ctx;
     int ret;
 
-    if( md_info == NULL )
-        return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+    MBEDTLS_MD_VALIDATE_RET( md_info != NULL );
+    MBEDTLS_MD_VALIDATE_RET( key != NULL );
+    MBEDTLS_MD_VALIDATE_RET( output != NULL );
 
     mbedtls_md_init( &ctx );
 
@@ -442,32 +457,29 @@
 
 int mbedtls_md_process( mbedtls_md_context_t *ctx, const unsigned char *data )
 {
-    if( ctx == NULL || ctx->md_info == NULL )
-        return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
+    MBEDTLS_MD_VALIDATE_RET( ctx != NULL );
+    MBEDTLS_MD_VALIDATE_RET( ctx->md_info != NULL );
 
     return( ctx->md_info->process_func( ctx->md_ctx, data ) );
 }
 
 unsigned char mbedtls_md_get_size( const mbedtls_md_info_t *md_info )
 {
-    if( md_info == NULL )
-        return( 0 );
+    MBEDTLS_INTERNAL_VALIDATE_RET( md_info != NULL, 0 );
 
     return md_info->size;
 }
 
 mbedtls_md_type_t mbedtls_md_get_type( const mbedtls_md_info_t *md_info )
 {
-    if( md_info == NULL )
-        return( MBEDTLS_MD_NONE );
+    MBEDTLS_INTERNAL_VALIDATE_RET( md_info != NULL, MBEDTLS_MD_NONE );
 
     return md_info->type;
 }
 
 const char *mbedtls_md_get_name( const mbedtls_md_info_t *md_info )
 {
-    if( md_info == NULL )
-        return( NULL );
+    MBEDTLS_MD_VALIDATE_RET_NULL( md_info != NULL );
 
     return md_info->name;
 }
