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.
  *
