Added ECC vendor macros
Made vendor support more generic
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,