diff --git a/library/psa_crypto.c b/library/psa_crypto.c
index 929f457..a7d018b 100644
--- a/library/psa_crypto.c
+++ b/library/psa_crypto.c
@@ -5435,30 +5435,6 @@
 }
 #endif /* MBEDTLS_RSA_C && MBEDTLS_GENPRIME */
 
-// 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;
-    (void)raw;
-    return PSA_ERROR_NOT_SUPPORTED;
-}
-
-// 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;
-    (void)output_size;
-    return PSA_ERROR_NOT_SUPPORTED;
-}
-
 static psa_status_t psa_generate_key_internal(
     psa_key_slot_t *slot, size_t bits,
     const uint8_t *domain_parameters, size_t domain_parameters_size )
@@ -5471,31 +5447,18 @@
     if( key_type_is_raw_bytes( type ) )
     {
         psa_status_t status;
-        if (PSA_KEY_TYPE_IS_VENDOR_DEFINED(type))
-        {
-            status = prepare_raw_data_slot_vendor( type, bits, &slot->data.raw );
-            if( status != PSA_SUCCESS )
-                return( status );
-            status = psa_generate_symmetric_vendor( type, bits, slot->data.raw.data,
-                                        slot->data.raw.bytes );
-            if( status != PSA_SUCCESS )
-                return( status );
-        }
-        else
-        {
-            status = prepare_raw_data_slot( type, bits, &slot->data.raw );
-            if( status != PSA_SUCCESS )
-                return( status );
-            status = psa_generate_random( slot->data.raw.data,
-                                        slot->data.raw.bytes );
-            if( status != PSA_SUCCESS )
-                return( status );
-            #if defined(MBEDTLS_DES_C)
-            if( type == PSA_KEY_TYPE_DES )
-                psa_des_set_key_parity( slot->data.raw.data,
-                                        slot->data.raw.bytes );
-            #endif /* MBEDTLS_DES_C */
-        }
+        status = prepare_raw_data_slot( type, bits, &slot->data.raw );
+        if( status != PSA_SUCCESS )
+            return( status );
+        status = psa_generate_random( slot->data.raw.data,
+                                    slot->data.raw.bytes );
+        if( status != PSA_SUCCESS )
+            return( status );
+        #if defined(MBEDTLS_DES_C)
+        if( type == PSA_KEY_TYPE_DES )
+            psa_des_set_key_parity( slot->data.raw.data,
+                                    slot->data.raw.bytes );
+        #endif /* MBEDTLS_DES_C */
     }
     else
 
@@ -5574,7 +5537,19 @@
 
     return( PSA_SUCCESS );
 }
-
+// The weakly linked function "psa_generate_key_vendor_weak" which returns "PSA_ERROR_NOT_SUPPORTED" will be linked if 
+// the vendor does not provide a definition for "psa_generate_key_vendor"
+psa_status_t psa_generate_key_vendor( psa_key_slot_t *slot, size_t bits,
+    const uint8_t *domain_parameters, size_t domain_parameters_size ) __attribute__ ((weak, alias("psa_generate_key_vendor_weak")));
+psa_status_t psa_generate_key_vendor_weak( psa_key_slot_t *slot, size_t bits,
+    const uint8_t *domain_parameters, size_t domain_parameters_size );
+psa_status_t psa_generate_key_vendor_weak( psa_key_slot_t *slot, size_t bits,
+    const uint8_t *domain_parameters, size_t domain_parameters_size )
+{
+    (void) slot;
+    
+    return PSA_ERROR_NOT_SUPPORTED;
+}
 psa_status_t psa_generate_key( const psa_key_attributes_t *attributes,
                                psa_key_handle_t *handle )
 {
@@ -5605,6 +5580,12 @@
     }
     else
 #endif /* MBEDTLS_PSA_CRYPTO_SE_C */
+    if (PSA_KEY_TYPE_IS_VENDOR_DEFINED(slot->attr.type))
+    {
+        status = psa_generate_key_vendor(slot, attributes->core.bits,
+            attributes->domain_parameters, attributes->domain_parameters_size);
+    }
+    else
     {
         status = psa_generate_key_internal(
             slot, attributes->core.bits,
diff --git a/library/psa_crypto_core.h b/library/psa_crypto_core.h
index f29ae4f..0525cf1 100644
--- a/library/psa_crypto_core.h
+++ b/library/psa_crypto_core.h
@@ -46,23 +46,27 @@
         struct raw_data
         {
             uint8_t *data;
-            size_t bytes;
+            size_t    bytes;
         } raw;
 #if defined(MBEDTLS_RSA_C)
+
         /* RSA public key or key pair */
-        mbedtls_rsa_context *rsa;
-#endif /* MBEDTLS_RSA_C */
+        mbedtls_rsa_context * rsa;
+#endif                                 /* MBEDTLS_RSA_C */
 #if defined(MBEDTLS_ECP_C)
+
         /* EC public key or key pair */
-        mbedtls_ecp_keypair *ecp;
-#endif /* MBEDTLS_ECP_C */
+        mbedtls_ecp_keypair * ecp;
+#endif                                 /* MBEDTLS_ECP_C */
 #if defined(MBEDTLS_PSA_CRYPTO_SE_C)
+
         /* Any key type in a secure element */
         struct se
         {
             psa_key_slot_number_t slot_number;
         } se;
-#endif /* MBEDTLS_PSA_CRYPTO_SE_C */
+#endif                                 /* MBEDTLS_PSA_CRYPTO_SE_C */
+        void * vendor_context;
     } data;
 } psa_key_slot_t;
 
