diff --git a/library/pk_wrap.c b/library/pk_wrap.c
index ff8eeb1..f8ce099 100644
--- a/library/pk_wrap.c
+++ b/library/pk_wrap.c
@@ -87,7 +87,7 @@
         return MBEDTLS_ERR_RSA_VERIFY_FAILED;
     }
 
-    key_len = mbedtls_rsa_pubkey_write(rsa, buf, &p);
+    key_len = mbedtls_rsa_write_pubkey(rsa, buf, &p);
     if (key_len <= 0) {
         return MBEDTLS_ERR_PK_BAD_INPUT_DATA;
     }
@@ -185,7 +185,7 @@
         return MBEDTLS_ERR_PK_BUFFER_TOO_SMALL;
     }
 
-    key_len = mbedtls_rsa_key_write(rsa_ctx, buf, &p);
+    key_len = mbedtls_rsa_write_key(rsa_ctx, buf, &p);
     if (key_len <= 0) {
         mbedtls_free(buf);
         return MBEDTLS_ERR_PK_BAD_INPUT_DATA;
@@ -293,7 +293,7 @@
         return MBEDTLS_ERR_RSA_BAD_INPUT_DATA;
     }
 
-    key_len = mbedtls_rsa_key_write(rsa, buf, &p);
+    key_len = mbedtls_rsa_write_key(rsa, buf, &p);
     if (key_len <= 0) {
         return MBEDTLS_ERR_PK_BAD_INPUT_DATA;
     }
@@ -375,7 +375,7 @@
         return MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE;
     }
 
-    key_len = mbedtls_rsa_pubkey_write(rsa, buf, &p);
+    key_len = mbedtls_rsa_write_pubkey(rsa, buf, &p);
     if (key_len <= 0) {
         return MBEDTLS_ERR_PK_BAD_INPUT_DATA;
     }
diff --git a/library/pkparse.c b/library/pkparse.c
index 17df101..b2127b2 100644
--- a/library/pkparse.c
+++ b/library/pkparse.c
@@ -850,7 +850,7 @@
 
 #if defined(MBEDTLS_RSA_C)
     if (pk_alg == MBEDTLS_PK_RSA) {
-        ret = mbedtls_rsa_pubkey_parse(mbedtls_pk_rsa(*pk), p, end);
+        ret = mbedtls_rsa_parse_pubkey(mbedtls_pk_rsa(*pk), p, end);
     } else
 #endif /* MBEDTLS_RSA_C */
 #if defined(MBEDTLS_PK_HAVE_ECC_KEYS)
@@ -1098,7 +1098,7 @@
 
 #if defined(MBEDTLS_RSA_C)
     if (pk_alg == MBEDTLS_PK_RSA) {
-        if ((ret = mbedtls_rsa_key_parse(mbedtls_pk_rsa(*pk), p, len)) != 0) {
+        if ((ret = mbedtls_rsa_parse_key(mbedtls_pk_rsa(*pk), p, len)) != 0) {
             mbedtls_pk_free(pk);
             return ret;
         }
@@ -1288,7 +1288,7 @@
     if (ret == 0) {
         pk_info = mbedtls_pk_info_from_type(MBEDTLS_PK_RSA);
         if ((ret = mbedtls_pk_setup(pk, pk_info)) != 0 ||
-            (ret = mbedtls_rsa_key_parse(mbedtls_pk_rsa(*pk),
+            (ret = mbedtls_rsa_parse_key(mbedtls_pk_rsa(*pk),
                                          pem.buf, pem.buflen)) != 0) {
             mbedtls_pk_free(pk);
         }
@@ -1429,7 +1429,7 @@
 
     pk_info = mbedtls_pk_info_from_type(MBEDTLS_PK_RSA);
     if (mbedtls_pk_setup(pk, pk_info) == 0 &&
-        mbedtls_rsa_key_parse(mbedtls_pk_rsa(*pk), key, keylen) == 0) {
+        mbedtls_rsa_parse_key(mbedtls_pk_rsa(*pk), key, keylen) == 0) {
         return 0;
     }
 
@@ -1504,7 +1504,7 @@
             return ret;
         }
 
-        if ((ret = mbedtls_rsa_pubkey_parse(mbedtls_pk_rsa(*ctx), &p, p + pem.buflen)) != 0) {
+        if ((ret = mbedtls_rsa_parse_pubkey(mbedtls_pk_rsa(*ctx), &p, p + pem.buflen)) != 0) {
             mbedtls_pk_free(ctx);
         }
 
@@ -1551,7 +1551,7 @@
     }
 
     p = (unsigned char *) key;
-    ret = mbedtls_rsa_pubkey_parse(mbedtls_pk_rsa(*ctx), &p, p + keylen);
+    ret = mbedtls_rsa_parse_pubkey(mbedtls_pk_rsa(*ctx), &p, p + keylen);
     if (ret == 0) {
         return ret;
     }
diff --git a/library/pkwrite.c b/library/pkwrite.c
index 91529eb..b9ddcf1 100644
--- a/library/pkwrite.c
+++ b/library/pkwrite.c
@@ -78,7 +78,7 @@
         return (int) len;
     }
 #endif /* MBEDTLS_USE_PSA_CRYPTO */
-    return mbedtls_rsa_key_write(mbedtls_pk_rsa(*pk), buf, p);
+    return mbedtls_rsa_write_key(mbedtls_pk_rsa(*pk), buf, p);
 }
 #endif /* MBEDTLS_RSA_C */
 
@@ -416,7 +416,7 @@
 
 #if defined(MBEDTLS_RSA_C)
     if (mbedtls_pk_get_type(key) == MBEDTLS_PK_RSA) {
-        MBEDTLS_ASN1_CHK_ADD(len, mbedtls_rsa_pubkey_write(mbedtls_pk_rsa(*key), start, p));
+        MBEDTLS_ASN1_CHK_ADD(len, mbedtls_rsa_write_pubkey(mbedtls_pk_rsa(*key), start, p));
     } else
 #endif
 #if defined(MBEDTLS_PK_HAVE_ECC_KEYS)
diff --git a/library/psa_crypto_rsa.c b/library/psa_crypto_rsa.c
index cfa2da6..0047a26 100644
--- a/library/psa_crypto_rsa.c
+++ b/library/psa_crypto_rsa.c
@@ -71,11 +71,11 @@
 
     /* Parse the data. */
     if (PSA_KEY_TYPE_IS_KEY_PAIR(type)) {
-        status = mbedtls_to_psa_error(mbedtls_rsa_key_parse(*p_rsa, data, data_length));
+        status = mbedtls_to_psa_error(mbedtls_rsa_parse_key(*p_rsa, data, data_length));
     } else {
         unsigned char *p = data;
         unsigned char *end = (data + data_length);
-        status = mbedtls_to_psa_error(mbedtls_rsa_pubkey_parse(*p_rsa, &p, end));
+        status = mbedtls_to_psa_error(mbedtls_rsa_parse_pubkey(*p_rsa, &p, end));
     }
     if (status != PSA_SUCCESS) {
         goto exit;
@@ -163,9 +163,9 @@
      * representation of the non-encrypted PKCS#1 RSAPrivateKey for a
      * private key and of the RFC3279 RSAPublicKey for a public key. */
     if (PSA_KEY_TYPE_IS_KEY_PAIR(type)) {
-        ret = mbedtls_rsa_key_write(rsa, data, &end);
+        ret = mbedtls_rsa_write_key(rsa, data, &end);
     } else {
-        ret = mbedtls_rsa_pubkey_write(rsa, data, &end);
+        ret = mbedtls_rsa_write_pubkey(rsa, data, &end);
     }
 
     if (ret < 0) {
diff --git a/library/rsa.c b/library/rsa.c
index b81039c..62b56cd 100644
--- a/library/rsa.c
+++ b/library/rsa.c
@@ -46,7 +46,7 @@
 
 #include "mbedtls/platform.h"
 
-int mbedtls_rsa_key_parse(mbedtls_rsa_context *rsa, const unsigned char *key, size_t keylen)
+int mbedtls_rsa_parse_key(mbedtls_rsa_context *rsa, const unsigned char *key, size_t keylen)
 {
     int ret, version;
     size_t len;
@@ -192,7 +192,7 @@
     return ret;
 }
 
-int mbedtls_rsa_pubkey_parse(mbedtls_rsa_context *rsa, unsigned char **p,
+int mbedtls_rsa_parse_pubkey(mbedtls_rsa_context *rsa, unsigned char **p,
                              const unsigned char *end)
 {
     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
@@ -250,7 +250,7 @@
     return 0;
 }
 
-int mbedtls_rsa_key_write(const mbedtls_rsa_context *rsa, unsigned char *start,
+int mbedtls_rsa_write_key(const mbedtls_rsa_context *rsa, unsigned char *start,
                           unsigned char **p)
 {
     size_t len = 0;
@@ -342,7 +342,7 @@
  *      publicExponent    INTEGER   -- e
  *  }
  */
-int mbedtls_rsa_pubkey_write(const mbedtls_rsa_context *rsa, unsigned char *start,
+int mbedtls_rsa_write_pubkey(const mbedtls_rsa_context *rsa, unsigned char *start,
                              unsigned char **p)
 {
     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
diff --git a/library/rsa_internal.h b/library/rsa_internal.h
index 6046850..7bbdc8c 100644
--- a/library/rsa_internal.h
+++ b/library/rsa_internal.h
@@ -28,7 +28,7 @@
  * \return          MBEDTLS_ERR_ASN1_xxx in case of ASN.1 parsing errors.
  * \return          MBEDTLS_ERR_RSA_BAD_INPUT_DATA in case of invalid version.
  */
-int mbedtls_rsa_key_parse(mbedtls_rsa_context *rsa, const unsigned char *key, size_t keylen);
+int mbedtls_rsa_parse_key(mbedtls_rsa_context *rsa, const unsigned char *key, size_t keylen);
 
 /**
  * \brief           Parse a PKCS#1 (ASN.1) encoded public RSA key.
@@ -44,7 +44,7 @@
  * \return          MBEDTLS_ERR_RSA_BAD_INPUT_DATA in case of importing or
  *                  priv/pub validation errors.
  */
-int mbedtls_rsa_pubkey_parse(mbedtls_rsa_context *rsa, unsigned char **p,
+int mbedtls_rsa_parse_pubkey(mbedtls_rsa_context *rsa, unsigned char **p,
                              const unsigned char *end);
 
 /**
@@ -67,7 +67,7 @@
  * \note            The output buffer is filled backward, i.e. starting from its
  *                  end and moving toward its start.
  */
-int mbedtls_rsa_key_write(const mbedtls_rsa_context *rsa, unsigned char *start,
+int mbedtls_rsa_write_key(const mbedtls_rsa_context *rsa, unsigned char *start,
                           unsigned char **p);
 
 /**
@@ -90,7 +90,7 @@
  * \note            The output buffer is filled backward, i.e. starting from its
  *                  end and moving toward its start.
  */
-int mbedtls_rsa_pubkey_write(const mbedtls_rsa_context *rsa, unsigned char *start,
+int mbedtls_rsa_write_pubkey(const mbedtls_rsa_context *rsa, unsigned char *start,
                              unsigned char **p);
 
 #if defined(MBEDTLS_PKCS1_V21)
