diff --git a/library/psa_crypto.c b/library/psa_crypto.c
index 6affd85..52191a6 100644
--- a/library/psa_crypto.c
+++ b/library/psa_crypto.c
@@ -5403,11 +5403,11 @@
 }
 #endif /* MBEDTLS_RSA_C && MBEDTLS_GENPRIME */
 
-// The weakly linked function "prepare_vendor_raw_data_slot_weak" which returns "PSA_ERROR_NOT_SUPPORTED" will be linked if 
-// the vendor does not provide a definition for "prepare_vendor_raw_data_slot"
-psa_status_t prepare_vendor_raw_data_slot( psa_key_type_t type, size_t bits, struct raw_data *raw) __attribute__ ((weak, alias("prepare_vendor_raw_data_slot_weak")));
-psa_status_t prepare_vendor_raw_data_slot_weak( psa_key_type_t type, size_t bits, struct raw_data *raw);
-psa_status_t prepare_vendor_raw_data_slot_weak( psa_key_type_t type, size_t bits, struct raw_data *raw)
+// The weakly linked function "prepare_raw_data_slot_vendor_weak" which returns "PSA_ERROR_NOT_SUPPORTED" will be linked if 
+// the vendor does not provide a definition for "prepare_raw_data_slot_vendor"
+psa_status_t prepare_raw_data_slot_vendor( psa_key_type_t type, size_t bits, struct raw_data *raw) __attribute__ ((weak, alias("prepare_raw_data_slot_vendor_weak")));
+psa_status_t prepare_raw_data_slot_vendor_weak( psa_key_type_t type, size_t bits, struct raw_data *raw);
+psa_status_t prepare_raw_data_slot_vendor_weak( psa_key_type_t type, size_t bits, struct raw_data *raw)
 {
     (void)type;
     (void)bits;
@@ -5415,11 +5415,11 @@
     return PSA_ERROR_NOT_SUPPORTED;
 }
 
-// The weakly linked function "psa_generate_vendor_symmetric_weak" which returns "PSA_ERROR_NOT_SUPPORTED" will be linked if 
-// the vendor does not provide a definition for "psa_generate_vendor_symmetric"
-psa_status_t psa_generate_vendor_symmetric( psa_key_type_t type, size_t bits, uint8_t * output, size_t output_size) __attribute__ ((weak, alias("psa_generate_vendor_symmetric_weak")));
-psa_status_t psa_generate_vendor_symmetric_weak( psa_key_type_t type, size_t bits, uint8_t * output, size_t output_size);
-psa_status_t psa_generate_vendor_symmetric_weak( psa_key_type_t type, size_t bits, uint8_t * output, size_t output_size)
+// The weakly linked function "psa_generate_symmetric_vendor_weak" which returns "PSA_ERROR_NOT_SUPPORTED" will be linked if 
+// the vendor does not provide a definition for "psa_generate_symmetric_vendor"
+psa_status_t psa_generate_symmetric_vendor( psa_key_type_t type, size_t bits, uint8_t * output, size_t output_size) __attribute__ ((weak, alias("psa_generate_symmetric_vendor_weak")));
+psa_status_t psa_generate_symmetric_vendor_weak( psa_key_type_t type, size_t bits, uint8_t * output, size_t output_size);
+psa_status_t psa_generate_symmetric_vendor_weak( psa_key_type_t type, size_t bits, uint8_t * output, size_t output_size)
 {
     (void)type;
     (void)output;
@@ -5441,10 +5441,10 @@
         psa_status_t status;
         if (PSA_KEY_TYPE_IS_VENDOR_DEFINED(type))
         {
-            status = prepare_vendor_raw_data_slot( type, bits, &slot->data.raw );
+            status = prepare_raw_data_slot_vendor( type, bits, &slot->data.raw );
             if( status != PSA_SUCCESS )
                 return( status );
-            status = psa_generate_vendor_symmetric( type, bits, slot->data.raw.data,
+            status = psa_generate_symmetric_vendor( type, bits, slot->data.raw.data,
                                         slot->data.raw.bytes );
             if( status != PSA_SUCCESS )
                 return( status );
