diff --git a/include/mbedtls/x509.h b/include/mbedtls/x509.h
index 57e0727..abd36b8 100644
--- a/include/mbedtls/x509.h
+++ b/include/mbedtls/x509.h
@@ -148,7 +148,7 @@
 
 /*
  * X.509 v3 Key Usage Extension flags
- * Reminder: update x509_info_key_usage() when adding new flags.
+ * Reminder: update mbedtls_x509_info_key_usage() when adding new flags.
  */
 #define MBEDTLS_X509_KU_DIGITAL_SIGNATURE            (0x80)  /* bit 0 */
 #define MBEDTLS_X509_KU_NON_REPUDIATION              (0x40)  /* bit 1 */
@@ -370,23 +370,23 @@
 int mbedtls_x509_write_sig(unsigned char **p, unsigned char *start,
                            const char *oid, size_t oid_len,
                            unsigned char *sig, size_t size);
-int x509_get_ns_cert_type(unsigned char **p,
-                          const unsigned char *end,
-                          unsigned char *ns_cert_type);
-int x509_get_key_usage(unsigned char **p,
-                       const unsigned char *end,
-                       unsigned int *key_usage);
-int x509_get_subject_alt_name(unsigned char **p,
-                              const unsigned char *end,
-                              mbedtls_x509_sequence *subject_alt_name);
-int x509_info_subject_alt_name(char **buf, size_t *size,
-                               const mbedtls_x509_sequence
-                               *subject_alt_name,
-                               const char *prefix);
-int x509_info_cert_type(char **buf, size_t *size,
-                        unsigned char ns_cert_type);
-int x509_info_key_usage(char **buf, size_t *size,
-                        unsigned int key_usage);
+int mbedtls_x509_get_ns_cert_type(unsigned char **p,
+                                  const unsigned char *end,
+                                  unsigned char *ns_cert_type);
+int mbedtls_x509_get_key_usage(unsigned char **p,
+                               const unsigned char *end,
+                               unsigned int *key_usage);
+int mbedtls_x509_get_subject_alt_name(unsigned char **p,
+                                      const unsigned char *end,
+                                      mbedtls_x509_sequence *subject_alt_name);
+int mbedtls_x509_info_subject_alt_name(char **buf, size_t *size,
+                                       const mbedtls_x509_sequence
+                                       *subject_alt_name,
+                                       const char *prefix);
+int mbedtls_x509_info_cert_type(char **buf, size_t *size,
+                                unsigned char ns_cert_type);
+int mbedtls_x509_info_key_usage(char **buf, size_t *size,
+                                unsigned int key_usage);
 
 #define MBEDTLS_X509_SAFE_SNPRINTF                          \
     do {                                                    \
diff --git a/library/x509_crt.c b/library/x509_crt.c
index 261525d..a4eb712 100644
--- a/library/x509_crt.c
+++ b/library/x509_crt.c
@@ -562,9 +562,9 @@
     return 0;
 }
 
-int x509_get_ns_cert_type(unsigned char **p,
-                          const unsigned char *end,
-                          unsigned char *ns_cert_type)
+int mbedtls_x509_get_ns_cert_type(unsigned char **p,
+                                  const unsigned char *end,
+                                  unsigned char *ns_cert_type)
 {
     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
     mbedtls_x509_bitstring bs = { 0, 0, NULL };
@@ -583,9 +583,9 @@
     return 0;
 }
 
-int x509_get_key_usage(unsigned char **p,
-                       const unsigned char *end,
-                       unsigned int *key_usage)
+int mbedtls_x509_get_key_usage(unsigned char **p,
+                               const unsigned char *end,
+                               unsigned int *key_usage)
 {
     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
     size_t i;
@@ -660,9 +660,9 @@
  * NOTE: we list all types, but only use dNSName and otherName
  * of type HwModuleName, as defined in RFC 4108, at this point.
  */
-int x509_get_subject_alt_name(unsigned char **p,
-                              const unsigned char *end,
-                              mbedtls_x509_sequence *subject_alt_name)
+int mbedtls_x509_get_subject_alt_name(unsigned char **p,
+                                      const unsigned char *end,
+                                      mbedtls_x509_sequence *subject_alt_name)
 {
     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
     size_t len, tag_len;
@@ -1029,8 +1029,8 @@
 
             case MBEDTLS_X509_EXT_KEY_USAGE:
                 /* Parse key usage */
-                if ((ret = x509_get_key_usage(p, end_ext_octet,
-                                              &crt->key_usage)) != 0) {
+                if ((ret = mbedtls_x509_get_key_usage(p, end_ext_octet,
+                                                      &crt->key_usage)) != 0) {
                     return ret;
                 }
                 break;
@@ -1045,16 +1045,16 @@
 
             case MBEDTLS_X509_EXT_SUBJECT_ALT_NAME:
                 /* Parse subject alt name */
-                if ((ret = x509_get_subject_alt_name(p, end_ext_octet,
-                                                     &crt->subject_alt_names)) != 0) {
+                if ((ret = mbedtls_x509_get_subject_alt_name(p, end_ext_octet,
+                                                             &crt->subject_alt_names)) != 0) {
                     return ret;
                 }
                 break;
 
             case MBEDTLS_X509_EXT_NS_CERT_TYPE:
                 /* Parse netscape certificate type */
-                if ((ret = x509_get_ns_cert_type(p, end_ext_octet,
-                                                 &crt->ns_cert_type)) != 0) {
+                if ((ret = mbedtls_x509_get_ns_cert_type(p, end_ext_octet,
+                                                         &crt->ns_cert_type)) != 0) {
                     return ret;
                 }
                 break;
@@ -1849,10 +1849,10 @@
 }
 
 #if !defined(MBEDTLS_X509_REMOVE_INFO)
-int x509_info_subject_alt_name(char **buf, size_t *size,
-                               const mbedtls_x509_sequence
-                               *subject_alt_name,
-                               const char *prefix)
+int mbedtls_x509_info_subject_alt_name(char **buf, size_t *size,
+                                       const mbedtls_x509_sequence
+                                       *subject_alt_name,
+                                       const char *prefix)
 {
     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
     size_t i;
@@ -1965,8 +1965,8 @@
     if (ns_cert_type & (type))                 \
     PRINT_ITEM(name);
 
-int x509_info_cert_type(char **buf, size_t *size,
-                        unsigned char ns_cert_type)
+int mbedtls_x509_info_cert_type(char **buf, size_t *size,
+                                unsigned char ns_cert_type)
 {
     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
     size_t n = *size;
@@ -1992,8 +1992,8 @@
     if (key_usage & (code))    \
     PRINT_ITEM(name);
 
-int x509_info_key_usage(char **buf, size_t *size,
-                        unsigned int key_usage)
+int mbedtls_x509_info_key_usage(char **buf, size_t *size,
+                                unsigned int key_usage)
 {
     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
     size_t n = *size;
@@ -2167,9 +2167,9 @@
         ret = mbedtls_snprintf(p, n, "\n%ssubject alt name  :", prefix);
         MBEDTLS_X509_SAFE_SNPRINTF;
 
-        if ((ret = x509_info_subject_alt_name(&p, &n,
-                                              &crt->subject_alt_names,
-                                              prefix)) != 0) {
+        if ((ret = mbedtls_x509_info_subject_alt_name(&p, &n,
+                                                      &crt->subject_alt_names,
+                                                      prefix)) != 0) {
             return ret;
         }
     }
@@ -2178,7 +2178,7 @@
         ret = mbedtls_snprintf(p, n, "\n%scert. type        : ", prefix);
         MBEDTLS_X509_SAFE_SNPRINTF;
 
-        if ((ret = x509_info_cert_type(&p, &n, crt->ns_cert_type)) != 0) {
+        if ((ret = mbedtls_x509_info_cert_type(&p, &n, crt->ns_cert_type)) != 0) {
             return ret;
         }
     }
@@ -2187,7 +2187,7 @@
         ret = mbedtls_snprintf(p, n, "\n%skey usage         : ", prefix);
         MBEDTLS_X509_SAFE_SNPRINTF;
 
-        if ((ret = x509_info_key_usage(&p, &n, crt->key_usage)) != 0) {
+        if ((ret = mbedtls_x509_info_key_usage(&p, &n, crt->key_usage)) != 0) {
             return ret;
         }
     }
diff --git a/library/x509_csr.c b/library/x509_csr.c
index f1c4c66..1f133e8 100644
--- a/library/x509_csr.c
+++ b/library/x509_csr.c
@@ -127,24 +127,24 @@
             switch (ext_type) {
                 case MBEDTLS_X509_EXT_KEY_USAGE:
                     /* Parse key usage */
-                    if ((ret = x509_get_key_usage(p, end_ext_data,
-                                                  &csr->key_usage)) != 0) {
+                    if ((ret = mbedtls_x509_get_key_usage(p, end_ext_data,
+                                                          &csr->key_usage)) != 0) {
                         return ret;
                     }
                     break;
 
                 case MBEDTLS_X509_EXT_SUBJECT_ALT_NAME:
                     /* Parse subject alt name */
-                    if ((ret = x509_get_subject_alt_name(p, end_ext_data,
-                                                         &csr->subject_alt_names)) != 0) {
+                    if ((ret = mbedtls_x509_get_subject_alt_name(p, end_ext_data,
+                                                                 &csr->subject_alt_names)) != 0) {
                         return ret;
                     }
                     break;
 
                 case MBEDTLS_X509_EXT_NS_CERT_TYPE:
                     /* Parse netscape certificate type */
-                    if ((ret = x509_get_ns_cert_type(p, end_ext_data,
-                                                     &csr->ns_cert_type)) != 0) {
+                    if ((ret = mbedtls_x509_get_ns_cert_type(p, end_ext_data,
+                                                             &csr->ns_cert_type)) != 0) {
                         return ret;
                     }
                     break;
@@ -517,9 +517,9 @@
         ret = mbedtls_snprintf(p, n, "\n%ssubject alt name  :", prefix);
         MBEDTLS_X509_SAFE_SNPRINTF;
 
-        if ((ret = x509_info_subject_alt_name(&p, &n,
-                                              &csr->subject_alt_names,
-                                              prefix)) != 0) {
+        if ((ret = mbedtls_x509_info_subject_alt_name(&p, &n,
+                                                      &csr->subject_alt_names,
+                                                      prefix)) != 0) {
             return ret;
         }
     }
@@ -528,7 +528,7 @@
         ret = mbedtls_snprintf(p, n, "\n%scert. type        : ", prefix);
         MBEDTLS_X509_SAFE_SNPRINTF;
 
-        if ((ret = x509_info_cert_type(&p, &n, csr->ns_cert_type)) != 0) {
+        if ((ret = mbedtls_x509_info_cert_type(&p, &n, csr->ns_cert_type)) != 0) {
             return ret;
         }
     }
@@ -537,7 +537,7 @@
         ret = mbedtls_snprintf(p, n, "\n%skey usage         : ", prefix);
         MBEDTLS_X509_SAFE_SNPRINTF;
 
-        if ((ret = x509_info_key_usage(&p, &n, csr->key_usage)) != 0) {
+        if ((ret = mbedtls_x509_info_key_usage(&p, &n, csr->key_usage)) != 0) {
             return ret;
         }
     }
