diff --git a/include/mbedtls/md2.h b/include/mbedtls/md2.h
index 1f3b107..2c133a2 100644
--- a/include/mbedtls/md2.h
+++ b/include/mbedtls/md2.h
@@ -119,7 +119,7 @@
  *
  * \return         0 if successful
  */
-int mbedtls_md2_process_ext( mbedtls_md2_context *ctx );
+int mbedtls_internal_md2_process( mbedtls_md2_context *ctx );
 
 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
 #if defined(MBEDTLS_DEPRECATED_WARNING)
@@ -175,14 +175,14 @@
 /**
  * \brief          MD2 process data block (internal use only)
  *
- * \deprecated     Superseded by mbedtls_md2_process_ext() in 2.5.0
+ * \deprecated     Superseded by mbedtls_internal_md2_process() in 2.5.0
  *
  * \param ctx      MD2 context
  */
 MBEDTLS_DEPRECATED static inline void mbedtls_md2_process(
                                                     mbedtls_md2_context *ctx )
 {
-    mbedtls_md2_process_ext( ctx );
+    mbedtls_internal_md2_process( ctx );
 }
 
 #undef MBEDTLS_DEPRECATED
diff --git a/include/mbedtls/md4.h b/include/mbedtls/md4.h
index 7968b69..671c6a4 100644
--- a/include/mbedtls/md4.h
+++ b/include/mbedtls/md4.h
@@ -120,8 +120,8 @@
  *
  * \return         0 if successful
  */
-int mbedtls_md4_process_ext( mbedtls_md4_context *ctx,
-                             const unsigned char data[64] );
+int mbedtls_internal_md4_process( mbedtls_md4_context *ctx,
+                                  const unsigned char data[64] );
 
 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
 #if defined(MBEDTLS_DEPRECATED_WARNING)
@@ -177,7 +177,7 @@
 /**
  * \brief          MD4 process data block (internal use only)
  *
- * \deprecated     Superseded by mbedtls_md4_process_ext() in 2.5.0
+ * \deprecated     Superseded by mbedtls_internal_md4_process() in 2.5.0
  *
  * \param ctx      MD4 context
  * \param data     buffer holding one block of data
@@ -186,7 +186,7 @@
                                                 mbedtls_md4_context *ctx,
                                                 const unsigned char data[64] )
 {
-    mbedtls_md4_process_ext( ctx, data );
+    mbedtls_internal_md4_process( ctx, data );
 }
 
 #undef MBEDTLS_DEPRECATED
diff --git a/include/mbedtls/md5.h b/include/mbedtls/md5.h
index 7ecf49f..816d081 100644
--- a/include/mbedtls/md5.h
+++ b/include/mbedtls/md5.h
@@ -115,8 +115,8 @@
  *
  * \return         0 if successful
  */
-int mbedtls_md5_process_ext( mbedtls_md5_context *ctx,
-                             const unsigned char data[64] );
+int mbedtls_internal_md5_process( mbedtls_md5_context *ctx,
+                                  const unsigned char data[64] );
 
 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
 #if defined(MBEDTLS_DEPRECATED_WARNING)
@@ -172,7 +172,7 @@
 /**
  * \brief          MD5 process data block (internal use only)
  *
- * \deprecated     Superseded by mbedtls_md5_process_ext() in 2.5.0
+ * \deprecated     Superseded by mbedtls_internal_md5_process() in 2.5.0
  *
  * \param ctx      MD5 context
  * \param data     buffer holding one block of data
@@ -181,7 +181,7 @@
                                                 mbedtls_md5_context *ctx,
                                                 const unsigned char data[64] )
 {
-    mbedtls_md5_process_ext( ctx, data );
+    mbedtls_internal_md5_process( ctx, data );
 }
 
 #undef MBEDTLS_DEPRECATED
diff --git a/include/mbedtls/ripemd160.h b/include/mbedtls/ripemd160.h
index 5ef4700..aea16b3 100644
--- a/include/mbedtls/ripemd160.h
+++ b/include/mbedtls/ripemd160.h
@@ -120,8 +120,8 @@
  *
  * \return         0 if successful
  */
-int mbedtls_ripemd160_process_ext( mbedtls_ripemd160_context *ctx,
-                                   const unsigned char data[64] );
+int mbedtls_internal_ripemd160_process( mbedtls_ripemd160_context *ctx,
+                                        const unsigned char data[64] );
 
 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
 #if defined(MBEDTLS_DEPRECATED_WARNING)
@@ -177,7 +177,7 @@
 /**
  * \brief          RIPEMD-160 process data block (internal use only)
  *
- * \deprecated     Superseded by mbedtls_ripemd160_process_ext() in 2.5.0
+ * \deprecated     Superseded by mbedtls_internal_ripemd160_process() in 2.5.0
  *
  * \param ctx      RIPEMD-160 context
  * \param data     buffer holding one block of data
@@ -186,7 +186,7 @@
                                             mbedtls_ripemd160_context *ctx,
                                             const unsigned char data[64] )
 {
-    mbedtls_ripemd160_process_ext( ctx, data );
+    mbedtls_internal_ripemd160_process( ctx, data );
 }
 
 #undef MBEDTLS_DEPRECATED
diff --git a/include/mbedtls/sha1.h b/include/mbedtls/sha1.h
index 9dde5b8..47a9f99 100644
--- a/include/mbedtls/sha1.h
+++ b/include/mbedtls/sha1.h
@@ -120,8 +120,8 @@
  *
  * \return         0 if successful
  */
-int mbedtls_sha1_process_ext( mbedtls_sha1_context *ctx,
-                              const unsigned char data[64] );
+int mbedtls_internal_sha1_process( mbedtls_sha1_context *ctx,
+                                   const unsigned char data[64] );
 
 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
 #if defined(MBEDTLS_DEPRECATED_WARNING)
@@ -177,7 +177,7 @@
 /**
  * \brief          SHA-1 process data block (internal use only)
  *
- * \deprecated     Superseded by mbedtls_sha1_process_ext() in 2.5.0
+ * \deprecated     Superseded by mbedtls_internal_sha1_process() in 2.5.0
  *
  * \param ctx      SHA-1 context
  * \param data     buffer holding one block of data
@@ -186,7 +186,7 @@
                                                 mbedtls_sha1_context *ctx,
                                                 const unsigned char data[64] )
 {
-    mbedtls_sha1_process_ext( ctx, data );
+    mbedtls_internal_sha1_process( ctx, data );
 }
 
 #undef MBEDTLS_DEPRECATED
diff --git a/include/mbedtls/sha256.h b/include/mbedtls/sha256.h
index 3667e8c..76555f4 100644
--- a/include/mbedtls/sha256.h
+++ b/include/mbedtls/sha256.h
@@ -122,8 +122,8 @@
  *
  * \return         0 if successful
  */
-int mbedtls_sha256_process_ext( mbedtls_sha256_context *ctx,
-                                const unsigned char data[64] );
+int mbedtls_internal_sha256_process( mbedtls_sha256_context *ctx,
+                                     const unsigned char data[64] );
 
 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
 #if defined(MBEDTLS_DEPRECATED_WARNING)
@@ -181,7 +181,7 @@
 /**
  * \brief          SHA-256 process data block (internal use only)
  *
- * \deprecated     Superseded by mbedtls_sha256_process_ext() in 2.5.0
+ * \deprecated     Superseded by mbedtls_internal_sha256_process() in 2.5.0
  *
  * \param ctx      SHA-256 context
  * \param data     buffer holding one block of data
@@ -190,7 +190,7 @@
                                                 mbedtls_sha256_context *ctx,
                                                 const unsigned char data[64] )
 {
-    mbedtls_sha256_process_ext( ctx, data );
+    mbedtls_internal_sha256_process( ctx, data );
 }
 
 #undef MBEDTLS_DEPRECATED
diff --git a/include/mbedtls/sha512.h b/include/mbedtls/sha512.h
index 3049110..0fbdb3b 100644
--- a/include/mbedtls/sha512.h
+++ b/include/mbedtls/sha512.h
@@ -122,8 +122,8 @@
  *
  * \return         0 if successful
  */
-int mbedtls_sha512_process_ext( mbedtls_sha512_context *ctx,
-                                const unsigned char data[128] );
+int mbedtls_internal_sha512_process( mbedtls_sha512_context *ctx,
+                                     const unsigned char data[128] );
 
 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
 #if defined(MBEDTLS_DEPRECATED_WARNING)
@@ -181,7 +181,7 @@
 /**
  * \brief          SHA-512 process data block (internal use only)
  *
- * \deprecated     Superseded by mbedtls_sha512_process_ext() in 2.5.0
+ * \deprecated     Superseded by mbedtls_internal_sha512_process() in 2.5.0
  *
  * \param ctx      SHA-512 context
  * \param data     buffer holding one block of data
@@ -190,7 +190,7 @@
                                             mbedtls_sha512_context *ctx,
                                             const unsigned char data[128] )
 {
-    mbedtls_sha512_process_ext( ctx, data );
+    mbedtls_internal_sha512_process( ctx, data );
 }
 
 #undef MBEDTLS_DEPRECATED
diff --git a/library/md2.c b/library/md2.c
index 7dd2b6b..a5d768b 100644
--- a/library/md2.c
+++ b/library/md2.c
@@ -116,7 +116,7 @@
 }
 
 #if !defined(MBEDTLS_MD2_PROCESS_ALT)
-int mbedtls_md2_process_ext( mbedtls_md2_context *ctx )
+int mbedtls_internal_md2_process( mbedtls_md2_context *ctx )
 {
     int i, j;
     unsigned char t = 0;
@@ -179,7 +179,7 @@
         if( ctx->left == 16 )
         {
             ctx->left = 0;
-            if( ( ret = mbedtls_md2_process_ext( ctx ) ) != 0 )
+            if( ( ret = mbedtls_internal_md2_process( ctx ) ) != 0 )
                 return( ret );
         }
     }
@@ -202,11 +202,11 @@
     for( i = ctx->left; i < 16; i++ )
         ctx->buffer[i] = x;
 
-    if( ( ret = mbedtls_md2_process_ext( ctx ) ) != 0 )
+    if( ( ret = mbedtls_internal_md2_process( ctx ) ) != 0 )
         return( ret );
 
     memcpy( ctx->buffer, ctx->cksum, 16 );
-    if( ( ret = mbedtls_md2_process_ext( ctx ) ) != 0 )
+    if( ( ret = mbedtls_internal_md2_process( ctx ) ) != 0 )
         return( ret );
 
     memcpy( output, ctx->state, 16 );
diff --git a/library/md4.c b/library/md4.c
index 9239b63..da4df7b 100644
--- a/library/md4.c
+++ b/library/md4.c
@@ -112,8 +112,8 @@
 }
 
 #if !defined(MBEDTLS_MD4_PROCESS_ALT)
-int mbedtls_md4_process_ext( mbedtls_md4_context *ctx,
-                             const unsigned char data[64] )
+int mbedtls_internal_md4_process( mbedtls_md4_context *ctx,
+                                  const unsigned char data[64] )
 {
     uint32_t X[16], A, B, C, D;
 
@@ -247,7 +247,7 @@
         memcpy( (void *) (ctx->buffer + left),
                 (void *) input, fill );
 
-        if( ( ret = mbedtls_md4_process_ext( ctx, ctx->buffer ) ) != 0 )
+        if( ( ret = mbedtls_internal_md4_process( ctx, ctx->buffer ) ) != 0 )
             return( ret );
 
         input += fill;
@@ -257,7 +257,7 @@
 
     while( ilen >= 64 )
     {
-        if( ( ret = mbedtls_md4_process_ext( ctx, input ) ) != 0 )
+        if( ( ret = mbedtls_internal_md4_process( ctx, input ) ) != 0 )
             return( ret );
 
         input += 64;
diff --git a/library/md5.c b/library/md5.c
index dd046af..8150f94 100644
--- a/library/md5.c
+++ b/library/md5.c
@@ -111,8 +111,8 @@
 }
 
 #if !defined(MBEDTLS_MD5_PROCESS_ALT)
-int mbedtls_md5_process_ext( mbedtls_md5_context *ctx,
-                             const unsigned char data[64] )
+int mbedtls_internal_md5_process( mbedtls_md5_context *ctx,
+                                  const unsigned char data[64] )
 {
     uint32_t X[16], A, B, C, D;
 
@@ -264,7 +264,7 @@
     if( left && ilen >= fill )
     {
         memcpy( (void *) (ctx->buffer + left), input, fill );
-        if( ( ret = mbedtls_md5_process_ext( ctx, ctx->buffer ) ) != 0 )
+        if( ( ret = mbedtls_internal_md5_process( ctx, ctx->buffer ) ) != 0 )
             return( ret );
 
         input += fill;
@@ -274,7 +274,7 @@
 
     while( ilen >= 64 )
     {
-        if( ( ret = mbedtls_md5_process_ext( ctx, input ) ) != 0 )
+        if( ( ret = mbedtls_internal_md5_process( ctx, input ) ) != 0 )
             return( ret );
 
         input += 64;
diff --git a/library/ripemd160.c b/library/ripemd160.c
index f1d1f1e..8bf988e 100644
--- a/library/ripemd160.c
+++ b/library/ripemd160.c
@@ -114,8 +114,8 @@
 /*
  * Process one block
  */
-int mbedtls_ripemd160_process_ext( mbedtls_ripemd160_context *ctx,
-                                   const unsigned char data[64] )
+int mbedtls_internal_ripemd160_process( mbedtls_ripemd160_context *ctx,
+                                        const unsigned char data[64] )
 {
     uint32_t A, B, C, D, E, Ap, Bp, Cp, Dp, Ep, X[16];
 
@@ -322,7 +322,7 @@
     {
         memcpy( (void *) (ctx->buffer + left), input, fill );
 
-        if( ( ret = mbedtls_ripemd160_process_ext( ctx, ctx->buffer ) ) != 0 )
+        if( ( ret = mbedtls_internal_ripemd160_process( ctx, ctx->buffer ) ) != 0 )
             return( ret );
 
         input += fill;
@@ -332,7 +332,7 @@
 
     while( ilen >= 64 )
     {
-        if( ( ret = mbedtls_ripemd160_process_ext( ctx, input ) ) != 0 )
+        if( ( ret = mbedtls_internal_ripemd160_process( ctx, input ) ) != 0 )
             return( ret );
 
         input += 64;
diff --git a/library/sha1.c b/library/sha1.c
index d2ec8ba..fdd0878 100644
--- a/library/sha1.c
+++ b/library/sha1.c
@@ -112,8 +112,8 @@
 }
 
 #if !defined(MBEDTLS_SHA1_PROCESS_ALT)
-int mbedtls_sha1_process_ext( mbedtls_sha1_context *ctx,
-                              const unsigned char data[64] )
+int mbedtls_internal_sha1_process( mbedtls_sha1_context *ctx,
+                                   const unsigned char data[64] )
 {
     uint32_t temp, W[16], A, B, C, D, E;
 
@@ -299,7 +299,7 @@
     {
         memcpy( (void *) (ctx->buffer + left), input, fill );
 
-        if( ( ret = mbedtls_sha1_process_ext( ctx, ctx->buffer ) ) != 0 )
+        if( ( ret = mbedtls_internal_sha1_process( ctx, ctx->buffer ) ) != 0 )
             return( ret );
 
         input += fill;
@@ -309,7 +309,7 @@
 
     while( ilen >= 64 )
     {
-        if( ( ret = mbedtls_sha1_process_ext( ctx, input ) ) != 0 )
+        if( ( ret = mbedtls_internal_sha1_process( ctx, input ) ) != 0 )
             return( ret );
 
         input += 64;
diff --git a/library/sha256.c b/library/sha256.c
index 337b8e6..88435a3 100644
--- a/library/sha256.c
+++ b/library/sha256.c
@@ -181,7 +181,7 @@
     d += temp1; h = temp1 + temp2;              \
 }
 
-int mbedtls_sha256_process_ext( mbedtls_sha256_context *ctx,
+int mbedtls_internal_sha256_process( mbedtls_sha256_context *ctx,
                                 const unsigned char data[64] )
 {
     uint32_t temp1, temp2, W[64];
@@ -267,7 +267,7 @@
     {
         memcpy( (void *) (ctx->buffer + left), input, fill );
 
-        if( ( ret = mbedtls_sha256_process_ext( ctx, ctx->buffer ) ) != 0 )
+        if( ( ret = mbedtls_internal_sha256_process( ctx, ctx->buffer ) ) != 0 )
             return( ret );
 
         input += fill;
@@ -277,7 +277,7 @@
 
     while( ilen >= 64 )
     {
-        if( ( ret = mbedtls_sha256_process_ext( ctx, input ) ) != 0 )
+        if( ( ret = mbedtls_internal_sha256_process( ctx, input ) ) != 0 )
             return( ret );
 
         input += 64;
diff --git a/library/sha512.c b/library/sha512.c
index 74c7533..ff7e5ca 100644
--- a/library/sha512.c
+++ b/library/sha512.c
@@ -198,8 +198,8 @@
     UL64(0x5FCB6FAB3AD6FAEC),  UL64(0x6C44198C4A475817)
 };
 
-int mbedtls_sha512_process_ext( mbedtls_sha512_context *ctx,
-                                const unsigned char data[128] )
+int mbedtls_internal_sha512_process( mbedtls_sha512_context *ctx,
+                                     const unsigned char data[128] )
 {
     int i;
     uint64_t temp1, temp2, W[80];
@@ -297,7 +297,7 @@
     {
         memcpy( (void *) (ctx->buffer + left), input, fill );
 
-        if( ( ret = mbedtls_sha512_process_ext( ctx, ctx->buffer ) ) != 0 )
+        if( ( ret = mbedtls_internal_sha512_process( ctx, ctx->buffer ) ) != 0 )
             return( ret );
 
         input += fill;
@@ -307,7 +307,7 @@
 
     while( ilen >= 128 )
     {
-        if( ( ret = mbedtls_sha512_process_ext( ctx, input ) ) != 0 )
+        if( ( ret = mbedtls_internal_sha512_process( ctx, input ) ) != 0 )
             return( ret );
 
         input += 128;
