MD: Implement config dep'n inlining of mbedtls_md_update()
diff --git a/include/mbedtls/md.h b/include/mbedtls/md.h
index b1caca8..cc04f22 100644
--- a/include/mbedtls/md.h
+++ b/include/mbedtls/md.h
@@ -330,7 +330,9 @@
  * \return          #MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter-verification
  *                  failure.
  */
-int mbedtls_md_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen );
+MBEDTLS_MD_INLINABLE_API int mbedtls_md_update( mbedtls_md_context_t *ctx,
+                                                const unsigned char *input,
+                                                size_t ilen );
 
 /**
  * \brief           This function finishes the digest operation,
@@ -524,12 +526,37 @@
     return( mbedtls_md_info_starts( md_info, ctx->md_ctx ) );
 }
 
+MBEDTLS_ALWAYS_INLINE static inline int mbedtls_md_update_internal(
+    mbedtls_md_context_t *ctx,
+    const unsigned char *input,
+    size_t ilen )
+{
+    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_update( md_info, ctx->md_ctx,
+                                    input, ilen ) );
+}
+
 #if defined(MBEDTLS_MD_SINGLE_HASH)
 MBEDTLS_MD_INLINABLE_API int mbedtls_md_starts(
     mbedtls_md_context_t *ctx )
 {
     return( mbedtls_md_starts_internal( ctx ) );
 }
+
+MBEDTLS_MD_INLINABLE_API int mbedtls_md_update(
+    mbedtls_md_context_t *ctx,
+    const unsigned char *input,
+    size_t ilen )
+{
+    return( mbedtls_md_update_internal( ctx, input, ilen ) );
+}
 #endif /* MBEDTLS_MD_SINGLE_HASH */
 
 #ifdef __cplusplus
diff --git a/library/md.c b/library/md.c
index bf90b50..aa14f83 100644
--- a/library/md.c
+++ b/library/md.c
@@ -464,21 +464,14 @@
 {
     return( mbedtls_md_starts_internal( ctx ) );
 }
-#endif /* !MBEDTLS_MD_SINGLE_HASH */
 
-int mbedtls_md_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen )
+int mbedtls_md_update( mbedtls_md_context_t *ctx,
+                       const unsigned char *input,
+                       size_t ilen )
 {
-    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_update( md_info, ctx->md_ctx,
-                                    input, ilen ) );
+    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 )
 {