More changes due to PR feedback
diff --git a/include/psa/crypto_driver.h b/include/psa/crypto_driver.h
index 14784bb..19f5ada 100644
--- a/include/psa/crypto_driver.h
+++ b/include/psa/crypto_driver.h
@@ -39,6 +39,7 @@
 typedef uint8_t encrypt_or_decrypt_t;
 typedef uint32_t psa_key_slot_t;
 typedef uint32_t psa_key_type_t;
+typedef uint32_t psa_key_usage_t;
 
 /** \defgroup opaque_mac Opaque Message Authentication Code
  * Generation and authentication of Message Authentication Codes (MACs) using
@@ -136,7 +137,7 @@
  */
 typedef psa_status_t (*pcd_mac_opaque_abort_t)(void *p_context);
 
-/** \brief A funciton that performs a MAC operation in one command and return
+/** \brief A function that performs a MAC operation in one command and returns
  * the calculated MAC using an opaque key
  * 
  * \param[in] p_input           A buffer containing the message to be MACed
@@ -146,7 +147,7 @@
  *                              operation
  * \param[out] p_mac            A buffer where the generated MAC will be
  *                              placed
- * \param[in] mac_size          The size in bytes of the `output` buffer
+ * \param[in] mac_size          The size in bytes of the `p_mac` buffer
  * \param[out] p_mac_length     After completion, will contain the number of
  *                              bytes placed in the `output` buffer
  * 
@@ -254,9 +255,7 @@
  * The contents of this structure are implementation dependent and are
  * therefore not described here.
  */
-struct pcd_mac_transparent_context_t {
-    // Implementation specific
-};
+typedef struct pcd_mac_transparent_context_s pcd_mac_transparent_context_t;
 
 /** \brief The function prototype for the setup operation of a
  * transparent-key MAC operation
@@ -278,7 +277,7 @@
  * \retval  PSA_SUCCESS
  *          Success.
  */
-typedef psa_status_t (*pcd_mac_transparent_setup_t)(struct pcd_mac_transparent_context_t *p_context,
+typedef psa_status_t (*pcd_mac_transparent_setup_t)(pcd_mac_transparent_context_t *p_context,
                                                     const uint8_t *p_key,
                                                     size_t key_length);
 
@@ -300,7 +299,7 @@
  *                              to the MAC operation
  * \param[in] input_length      The size in bytes of the input message buffer
  */
-typedef psa_status_t (*pcd_mac_transparent_update_t)(struct pcd_mac_transparent_context_t *p_context,
+typedef psa_status_t (*pcd_mac_transparent_update_t)(pcd_mac_transparent_context_t *p_context,
                                                      const uint8_t *p_input,
                                                      size_t input_length);
 
@@ -325,7 +324,7 @@
  * \retval PSA_SUCCESS
  *          Success.
  */
-typedef psa_status_t (*pcd_mac_transparent_finish_t)(struct pcd_mac_transparent_context_t *p_context,
+typedef psa_status_t (*pcd_mac_transparent_finish_t)(pcd_mac_transparent_context_t *p_context,
                                                      uint8_t *p_mac,
                                                      size_t mac_length);
 
@@ -351,7 +350,7 @@
  * \retval PSA_SUCCESS
  *          The operation completed successfully and the comparison matched
  */
-typedef psa_status_t (*pcd_mac_transparent_finish_verify_t)(struct pcd_mac_transparent_context_t *p_context,
+typedef psa_status_t (*pcd_mac_transparent_finish_verify_t)(pcd_mac_transparent_context_t *p_context,
                                                             const uint8_t *p_mac,
                                                             size_t mac_length);
 
@@ -371,7 +370,7 @@
  *                              aborted
  * 
  */
-typedef psa_status_t (*pcd_mac_transparent_abort_t)(struct pcd_mac_transparent_context_t *p_context);
+typedef psa_status_t (*pcd_mac_transparent_abort_t)(pcd_mac_transparent_context_t *p_context);
 
 /** \brief The function prototype for a one-shot operation of a transparent-key
  * MAC operation
@@ -479,7 +478,7 @@
 /** \brief A function pointer that sets the initialization vector (if
  * necessary) for an opaque cipher operation
  * 
- * Rationale: The `psa_cipher_*` function in the PSA Cryptographif API has two
+ * Rationale: The `psa_cipher_*` function in the PSA Cryptographic API has two
  * IV functions: one to set the IV, and one to generate it internally. The
  * generate function is not necessary for the driver API as the PSA Crypto
  * implementation can do the generation using its RNG features.
@@ -632,9 +631,7 @@
  * The contents of this structure are implementation dependent and are
  * therefore not described here.
  */
-struct pcd_cipher_transparent_context_t {
-    // Implementation specific
-};
+typedef struct pcd_cipher_transparent_context_s pcd_cipher_transparent_context_t;
 
 /** \brief The function prototype for the setup operation of transparent-key
  * block cipher operations.
@@ -662,7 +659,7 @@
  * 
  * \retval PSA_SUCCESS
  */
-typedef psa_status_t (*pcd_cipher_transparent_setup_t)(struct pcd_cipher_transparent_context_t *p_context,
+typedef psa_status_t (*pcd_cipher_transparent_setup_t)(pcd_cipher_transparent_context_t *p_context,
                                                        encrypt_or_decrypt_t direction,
                                                        const uint8_t *p_key_data,
                                                        size_t key_data_size);
@@ -685,7 +682,7 @@
  * 
  * \retval PSA_SUCCESS
 */
-typedef psa_status_t (*pcd_cipher_transparent_set_iv_t)(struct pcd_cipher_transparent_context_t *p_context,
+typedef psa_status_t (*pcd_cipher_transparent_set_iv_t)(pcd_cipher_transparent_context_t *p_context,
                                                         const uint8_t *p_iv,
                                                         size_t iv_length);
 
@@ -714,7 +711,7 @@
  * 
  * \retval PSA_SUCCESS
  */
-typedef psa_status_t (*pcd_cipher_transparent_update_t)(struct pcd_cipher_transparent_context_t *p_context,
+typedef psa_status_t (*pcd_cipher_transparent_update_t)(pcd_cipher_transparent_context_t *p_context,
                                                         const uint8_t *p_input,
                                                         size_t input_size,
                                                         uint8_t *p_output,
@@ -743,7 +740,7 @@
  * 
  * \retval PSA_SUCCESS
  */
-typedef psa_status_t (*pcd_cipher_transparent_finish_t)(struct pcd_cipher_transparent_context_t *p_context,
+typedef psa_status_t (*pcd_cipher_transparent_finish_t)(pcd_cipher_transparent_context_t *p_context,
                                                         uint8_t *p_output,
                                                         size_t output_size,
                                                         size_t *p_output_length);
@@ -765,7 +762,7 @@
  * 
  * \retval PSA_SUCCESS
  */
-typedef psa_status_t (*pcd_cipher_transparent_abort_t)(struct pcd_cipher_transparent_context_t *p_context);
+typedef psa_status_t (*pcd_cipher_transparent_abort_t)(pcd_cipher_transparent_context_t *p_context);
 
 /**@}*/
 
@@ -790,9 +787,7 @@
  * The contents of this structure are implementation dependent and are
  * therefore not described here
  */
-struct pcd_hash_context_t {
-    // Implementation specific
-};
+typedef struct pcd_hash_context_s pcd_hash_context_t;
 
 /** \brief The function prototype for the start operation of a hash (message
  * digest) operation
@@ -809,7 +804,7 @@
  * 
  * \retval  PSA_SUCCESS     Success.
  */
-typedef psa_status_t (*pcd_hash_setup_t)(struct pcd_hash_context_t *p_context);
+typedef psa_status_t (*pcd_hash_setup_t)(pcd_hash_context_t *p_context);
 
 /** \brief The function prototype for the update operation of a hash (message
  * digest) operation
@@ -828,7 +823,7 @@
  *                              to the hash operation
  * \param[in] input_length      The size in bytes of the input message buffer
  */
-typedef psa_status_t (*pcd_hash_update_t)(struct pcd_hash_context_t *p_context,
+typedef psa_status_t (*pcd_hash_update_t)(pcd_hash_context_t *p_context,
                                           const uint8_t *p_input,
                                           size_t input_length);
 
@@ -855,7 +850,7 @@
  * \retval PSA_SUCCESS
  *          Success.
  */
-typedef psa_status_t (*pcd_hash_finish_t)(struct pcd_hash_context_t *p_context,
+typedef psa_status_t (*pcd_hash_finish_t)(pcd_hash_context_t *p_context,
                                           uint8_t *p_output,
                                           size_t output_size,
                                           size_t *p_output_length);
@@ -873,7 +868,7 @@
  * \param[in,out] p_context A hardware-specific structure for the previously
  *                          started hash operation to be aborted
  */
-typedef void (*pcd_hash_abort_t)(struct pcd_hash_context_t *p_context);
+typedef void (*pcd_hash_abort_t)(pcd_hash_context_t *p_context);
 
 /**@}*/
 
@@ -1431,9 +1426,7 @@
 
 /** \brief A hardware-specific structure for a entropy providing hardware
  */
-struct pcd_entropy_context_t {
-    // Implementation specific
-};
+typedef struct pcd_entropy_context_s pcd_entropy_context_t;
 
 /** \brief Initialize an entropy driver
  *
@@ -1444,7 +1437,7 @@
  *
  * \retval PSA_SUCCESS
  */
-typedef psa_status_t (*pcd_entropy_init_t)(struct pcd_entropy_context_t *p_context);
+typedef psa_status_t (*pcd_entropy_init_t)(pcd_entropy_context_t *p_context);
 
 /** \brief Get a specified number of bytes from the entropy source
  * 
@@ -1472,7 +1465,7 @@
  * 
  * \retval PSA_SUCCESS
  */
-typedef psa_status_t (*pcd_entropy_get_bytes_t)(struct pcd_entropy_context_t *p_context,
+typedef psa_status_t (*pcd_entropy_get_bytes_t)(pcd_entropy_context_t *p_context,
                                                 uint8_t *p_buffer,
                                                 uint32_t buffer_size,
                                                 uint32_t *p_received_entropy_bytes);
@@ -1508,18 +1501,22 @@
  * This function can support any output from psa_export_key(). Refer to the
  * documentation of psa_export_key() for the format for each key type.
  *
- * \param[in] key_slot      Slot where the key will be stored. This must be a
- *                          valid slot for a key of the chosen type. It must
- *                          be unoccupied.
- * \param[in] type          Key type (a \c PSA_KEY_TYPE_XXX value).
- * \param[in] p_data        Buffer containing the key data.
- * \param[in] data_length   Size of the `data` buffer in bytes.
+ * \param[in] key_slot      Slot where the key will be stored
+ *                          This must be a valid slot for a key of the chosen
+ *                          type. It must be unoccupied.
+ * \param[in] type          Key type (a \c PSA_KEY_TYPE_XXX value)
+ * \param[in] algorithm     Key algorithm (a \c PSA_ALG_XXX value)
+ * \param[in] usage         The allowed uses of the key
+ * \param[in] p_data        Buffer containing the key data
+ * \param[in] data_length   Size of the `data` buffer in bytes
  *
  * \retval #PSA_SUCCESS
  *         Success.
  */
 typedef psa_status_t (*pcd_opaque_import_key_t)(psa_key_slot_t key_slot,
                                                 psa_key_type_t type,
+                                                psa_algorithm_t algorithm,
+                                                psa_key_usage_t usage,
                                                 const uint8_t *p_data,
                                                 size_t data_length);
 
@@ -1688,9 +1685,7 @@
  * The contents of this structure are implementation dependent and are
  * therefore not described here
  */
-struct pcd_key_derivation_context_t {
-    // Implementation specific
-};
+typedef struct pcd_key_derivation_context_s pcd_key_derivation_context_t;
 
 /** \brief Set up a key derivation operation by specifying the algorithm and
  * the source key sot
@@ -1703,7 +1698,7 @@
  * 
  * \retval PSA_SUCCESS
  */
-typedef psa_status_t (*pcd_key_derivation_setup_t)(struct pcd_key_derivation_context_t *p_context,
+typedef psa_status_t (*pcd_key_derivation_setup_t)(pcd_key_derivation_context_t *p_context,
                                                    psa_algorithm_t kdf_alg,
                                                    psa_key_slot_t source_key);
 
@@ -1722,9 +1717,9 @@
  * 
  * \retval PSA_SUCCESS
  */
-typedef psa_status_t (*pcd_key_derivation_collateral_t)(struct pcd_key_derivation_context_t *p_context,
+typedef psa_status_t (*pcd_key_derivation_collateral_t)(pcd_key_derivation_context_t *p_context,
                                                          uint32_t collateral_id,
-                                                         const uint8_t p_collateral,
+                                                         const uint8_t *p_collateral,
                                                          size_t collateral_size);
 
 /** \brief Perform the final key derivation step and place the generated key
@@ -1736,7 +1731,7 @@
  * 
  * \retval PSA_SUCCESS
  */
-typedef psa_status_t (*pcd_key_derivation_derive_t)(struct pcd_key_derivation_context_t *p_context,
+typedef psa_status_t (*pcd_key_derivation_derive_t)(pcd_key_derivation_context_t *p_context,
                                                     psa_key_slot_t dest_key);
 
 /** \brief Perform the final step of a key agreement and place the generated