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 )
 {
