diff --git a/library/ssl_msg.c b/library/ssl_msg.c
index 6e3dff7..1d9b012 100644
--- a/library/ssl_msg.c
+++ b/library/ssl_msg.c
@@ -744,26 +744,26 @@
                                         transform->psa_key_enc, transform->psa_alg );
 
             if( status != PSA_SUCCESS )
-                return( psa_status_to_mbedtls( status ) );
+                return( ssl_psa_status_to_mbedtls( status ) );
 
             status = psa_cipher_set_iv( &cipher_op, transform->iv_enc, transform->ivlen );
 
             if( status != PSA_SUCCESS )
-                return( psa_status_to_mbedtls( status ) );
+                return( ssl_psa_status_to_mbedtls( status ) );
 
             status = psa_cipher_update( &cipher_op,
                                         data, rec->data_len,
                                         data, rec->data_len, &olen );
 
             if( status != PSA_SUCCESS )
-                return( psa_status_to_mbedtls( status ) );
+                return( ssl_psa_status_to_mbedtls( status ) );
 
             status = psa_cipher_finish( &cipher_op,
                                         data + olen, rec->data_len - olen,
                                         &part_len );
 
             if( status != PSA_SUCCESS )
-                return( psa_status_to_mbedtls( status ) );
+                return( ssl_psa_status_to_mbedtls( status ) );
 
             olen += part_len;
         } else {
@@ -872,7 +872,7 @@
                                &rec->data_len );
 
         if( status != PSA_SUCCESS )
-            return( psa_status_to_mbedtls( status ) );
+            return( ssl_psa_status_to_mbedtls( status ) );
 #else
         if( ( ret = mbedtls_cipher_auth_encrypt_ext( &transform->cipher_ctx_enc,
                    iv, transform->ivlen,
@@ -986,26 +986,26 @@
                                     transform->psa_key_enc, transform->psa_alg );
 
         if( status != PSA_SUCCESS )
-            return( psa_status_to_mbedtls( status ) );
+            return( ssl_psa_status_to_mbedtls( status ) );
 
         status = psa_cipher_set_iv( &cipher_op, transform->iv_enc, transform->ivlen );
 
         if( status != PSA_SUCCESS )
-            return( psa_status_to_mbedtls( status ) );
+            return( ssl_psa_status_to_mbedtls( status ) );
 
         status = psa_cipher_update( &cipher_op,
                                     data, rec->data_len,
                                     data, rec->data_len, &olen );
 
         if( status != PSA_SUCCESS )
-            return( psa_status_to_mbedtls( status ) );
+            return( ssl_psa_status_to_mbedtls( status ) );
 
         status = psa_cipher_finish( &cipher_op,
                                     data + olen, rec->data_len - olen,
                                     &part_len );
 
         if( status != PSA_SUCCESS )
-            return( psa_status_to_mbedtls( status ) );
+            return( ssl_psa_status_to_mbedtls( status ) );
 
         olen += part_len;
 #else
@@ -1177,26 +1177,26 @@
                                         transform->psa_key_dec, transform->psa_alg );
 
             if( status != PSA_SUCCESS )
-                return( psa_status_to_mbedtls( status ) );
+                return( ssl_psa_status_to_mbedtls( status ) );
 
             status = psa_cipher_set_iv( &cipher_op, transform->iv_dec, transform->ivlen );
 
             if( status != PSA_SUCCESS )
-                return( psa_status_to_mbedtls( status ) );
+                return( ssl_psa_status_to_mbedtls( status ) );
 
             status = psa_cipher_update( &cipher_op,
                                         data, rec->data_len,
                                         data, rec->data_len, &olen );
 
             if( status != PSA_SUCCESS )
-                return( psa_status_to_mbedtls( status ) );
+                return( ssl_psa_status_to_mbedtls( status ) );
 
             status = psa_cipher_finish( &cipher_op,
                                         data + olen, rec->data_len - olen,
                                         &part_len );
 
             if( status != PSA_SUCCESS )
-                return( psa_status_to_mbedtls( status ) );
+                return( ssl_psa_status_to_mbedtls( status ) );
 
             olen += part_len;
         } else {
@@ -1325,7 +1325,7 @@
                                &olen );
 
         if( status != PSA_SUCCESS )
-            return( psa_status_to_mbedtls( status ) );
+            return( ssl_psa_status_to_mbedtls( status ) );
 #else
         if( ( ret = mbedtls_cipher_auth_decrypt_ext( &transform->cipher_ctx_dec,
                   iv, transform->ivlen,
@@ -1512,26 +1512,26 @@
                                     transform->psa_key_dec, transform->psa_alg );
 
         if( status != PSA_SUCCESS )
-            return( psa_status_to_mbedtls( status ) );
+            return( ssl_psa_status_to_mbedtls( status ) );
 
         status = psa_cipher_set_iv( &cipher_op, transform->iv_dec, transform->ivlen );
 
         if( status != PSA_SUCCESS )
-            return( psa_status_to_mbedtls( status ) );
+            return( ssl_psa_status_to_mbedtls( status ) );
 
         status = psa_cipher_update( &cipher_op,
                                     data, rec->data_len,
                                     data, rec->data_len, &olen );
 
         if( status != PSA_SUCCESS )
-            return( psa_status_to_mbedtls( status ) );
+            return( ssl_psa_status_to_mbedtls( status ) );
 
         status = psa_cipher_finish( &cipher_op,
                                     data + olen, rec->data_len - olen,
                                     &part_len );
 
         if( status != PSA_SUCCESS )
-            return( psa_status_to_mbedtls( status ) );
+            return( ssl_psa_status_to_mbedtls( status ) );
 
         olen += part_len;
 #else
