Renamed to keep naming consistent
Added macro to check AES key
diff --git a/include/psa/crypto.h b/include/psa/crypto.h
index febdd73..90c9397 100644
--- a/include/psa/crypto.h
+++ b/include/psa/crypto.h
@@ -3594,8 +3594,8 @@
  *          status is not #PSA_SUCCESS.
  *
  * \note    This function has to be defined by the vendor.
- *          A weakly liniked version is provided by default and returns
- *          PSA_ERROR_NOT_SUPPORTED. Do not use this function directlyu;
+ *          A weakly linked version is provided by default and returns
+ *          PSA_ERROR_NOT_SUPPORTED. Do not use this function directly;
  *          to generate a key, use psa_generate_key() instead.
  *
  * \param[in] type          Type of symmetric key to be generated.
@@ -3614,7 +3614,34 @@
  *         It is implementation-dependent whether a failure to initialize
  *         results in this error code.
  */
-psa_status_t psa_generate_vendor_symmetric(psa_key_type_t type, size_t bits, uint8_t * output, size_t output_size);
+psa_status_t psa_generate_symmetric_vendor(psa_key_type_t type, size_t bits, uint8_t * output, size_t output_size);
+
+/**
+ * \brief Perform vendor specific setup for cipher operations.
+ *
+ *
+ * \note    This function has to be defined by the vendor.
+ *          A weakly linked version is provided by default and returns
+ *          PSA_ERROR_NOT_SUPPORTED. Do not use this function directly;
+ *          to generate a key, use psa_generate_key() instead.
+ *
+ * \param[in] type          Type of symmetric key to be generated.
+ * \param[out] output       Output buffer for the generated data.
+ * \param[out] output_size  Number of bytes to generate and output.
+ *
+ * \retval #PSA_SUCCESS
+ * \retval #PSA_ERROR_NOT_SUPPORTED
+ * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY
+ * \retval #PSA_ERROR_INSUFFICIENT_MEMORY
+ * \retval #PSA_ERROR_COMMUNICATION_FAILURE
+ * \retval #PSA_ERROR_HARDWARE_FAILURE
+ * \retval #PSA_ERROR_CORRUPTION_DETECTED
+ * \retval #PSA_ERROR_BAD_STATE
+ *         The library has not been previously initialized by psa_crypto_init().
+ *         It is implementation-dependent whether a failure to initialize
+ *         results in this error code.
+ */
+psa_status_t psa_cipher_setup_vendor(psa_cipher_operation_t * operation, psa_key_handle_t handle, psa_algorithm_t alg);
 
 /**
  * \brief Generate a key or key pair.
@@ -3654,8 +3681,7 @@
  *         It is implementation-dependent whether a failure to initialize
  *         results in this error code.
  */
-psa_status_t psa_generate_key(const psa_key_attributes_t *attributes,
-                              psa_key_handle_t *handle);
+psa_status_t psa_generate_key(const psa_key_attributes_t * attributes, psa_key_handle_t * handle);
 
 /**@}*/
 
diff --git a/include/psa/crypto_values.h b/include/psa/crypto_values.h
index f2c34f3..ad35fc8 100644
--- a/include/psa/crypto_values.h
+++ b/include/psa/crypto_values.h
@@ -388,6 +388,9 @@
  */
 #define PSA_KEY_TYPE_VENDOR_AES ((psa_key_type_t)0xC0000001)
 
+/** Whether a key type is AES. */
+#define PSA_KEY_TYPE_IS_AES(type) (((type)&PSA_KEY_TYPE_AES) != 0)
+
 /** Key for a cipher or MAC algorithm based on DES or 3DES (Triple-DES).
  *
  * The size of the key can be 8 bytes (single DES), 16 bytes (2-key 3DES) or
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 );
diff --git a/library/psa_crypto_core.h b/library/psa_crypto_core.h
index 507cb01..f29ae4f 100644
--- a/library/psa_crypto_core.h
+++ b/library/psa_crypto_core.h
@@ -163,7 +163,7 @@
  *         It is implementation-dependent whether a failure to initialize
  *         results in this error code.
  */
-psa_status_t prepare_vendor_raw_data_slot(psa_key_type_t type, size_t bits, struct raw_data *raw);
+psa_status_t prepare_raw_data_slot_vendor(psa_key_type_t type, size_t bits, struct raw_data *raw);
 
 /** Completely wipe a slot in memory, including its policy.
  *