diff --git a/api-tests/dev_apis/crypto/test_c001/test_c001.h b/api-tests/dev_apis/crypto/test_c001/test_c001.h
index 02a8c6b..de25766 100644
--- a/api-tests/dev_apis/crypto/test_c001/test_c001.h
+++ b/api-tests/dev_apis/crypto/test_c001/test_c001.h
@@ -18,9 +18,9 @@
 #define _TEST_C001_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c001)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c001)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 #define  GENERATE_SIZE               32
 
diff --git a/api-tests/dev_apis/crypto/test_c001/test_entry_c001.c b/api-tests/dev_apis/crypto/test_c001/test_entry_c001.c
index e1ba064..5ae3163 100644
--- a/api-tests/dev_apis/crypto/test_c001/test_entry_c001.c
+++ b/api-tests/dev_apis/crypto/test_c001/test_entry_c001.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 1)
 #define TEST_DESC "Testing psa_crypto_init API: Basic\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c002/test_c002.c b/api-tests/dev_apis/crypto/test_c002/test_c002.c
index e5c15a5..63944c9 100644
--- a/api-tests/dev_apis/crypto/test_c002/test_c002.c
+++ b/api-tests/dev_apis/crypto/test_c002/test_c002.c
@@ -24,7 +24,6 @@
 client_test_t test_c002_crypto_list[] = {
     NULL,
     psa_import_key_test,
-    psa_import_key_negative_test,
     NULL,
 };
 
@@ -32,14 +31,20 @@
 
 int32_t psa_import_key_test(security_t caller)
 {
-    uint32_t         length, i;
-    uint8_t          data[BUFFER_SIZE];
-    const uint8_t    *key_data;
-    psa_key_policy_t policy;
-    psa_key_type_t   key_type;
-    size_t           bits;
-    int              num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t          status;
+    int32_t               i, status;
+    uint8_t               data[BUFFER_SIZE];
+    size_t                length;
+    const uint8_t        *key_data;
+    psa_key_type_t        get_key_type;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_key_attributes_t  get_attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -55,14 +60,9 @@
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
         {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
             {
                 if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
                     key_data = rsa_384_keypair;
@@ -83,7 +83,7 @@
         }
         else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
                 key_data = ec_keypair;
             else
                 key_data = ec_keydata;
@@ -91,130 +91,66 @@
         else
             key_data = check1[i].key_data;
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                                check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3));
 
+        /* If failure is expected, continue with the next data set */
         if (check1[i].expected_status != PSA_SUCCESS)
             continue;
 
-        /* Get basic metadata about a key */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle,
-                                      &key_type, &bits);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+        /* Get the attributes of the imported key and check if it matches the given value */
+        status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, check1[i].key_handle,
+                 &get_attributes);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
-        TEST_ASSERT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(7));
+        val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type);
+        TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(5));
 
-        TEST_ASSERT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(8));
+        if (check1[i].attr_bits != 0)
+            TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].attr_bits, TEST_CHECKPOINT_NUM(6));
+        else
+            TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].expected_bit_length,
+                              TEST_CHECKPOINT_NUM(7));
 
         /* Export a key in binary format */
         status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle, data,
                                       BUFFER_SIZE, &length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
-        TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(10));
+        /* Check the attributes of the exported key */
+        TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(8));
 
         if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type))
         {
-            TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(11));
+            TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(9));
         }
         else if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type) || PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(12));
+            TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(10));
         }
         else
         {
             return VAL_STATUS_INVALID;
         }
 
-        /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13));
-    }
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
 
-    return VAL_STATUS_SUCCESS;
-}
+        val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
 
-int32_t psa_import_key_negative_test(security_t caller)
-{
-    int              num_checks = sizeof(check2)/sizeof(check2[0]);
-    int32_t          i, status;
-    psa_key_policy_t policy;
-    psa_key_handle_t invalid_key_handle;
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_ARGUMENT, TEST_CHECKPOINT_NUM(12));
 
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    for (i = 0; i < num_checks; i++)
-    {
-        val->print(PRINT_TEST, "[Check %d] Test psa_import_key with already occupied key slot\n",
-                                                                                  g_test_count++);
-
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Initialize a key policy structure to a default that forbids all
-        * usage of the key
-        */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-        memset(&invalid_key_handle, 0xDEADDEAD, sizeof(invalid_key_handle));
-        /* Set the usage policy on a key slot */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                                check2[i].key_alg);
-
-        /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle,
-                             check2[i].key_type, check2[i].key_data, check2[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
-
-        /* Import the key data into the occupied key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle,
-                                     check2[i].key_type, check2[i].key_data, check2[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_ALREADY_EXISTS, TEST_CHECKPOINT_NUM(5));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_import_key with zero as key handle\n",
-                                                                                   g_test_count++);
-        /* Import the key data with zero as key handle */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, 0, check2[i].key_type,
-                                                         check2[i].key_data, check2[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_import_key with destroyed handle\n",
-                                                                                   g_test_count++);
-        /* Destroy the handle */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
-
-        /* Import the key data with destroyed handle */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle,
-                                     check2[i].key_type, check2[i].key_data, check2[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(8));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_import_key with unallocated key handle\n",
-                                                                                   g_test_count++);
-        /* Import the key data with unallocated key handle */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, invalid_key_handle, check2[i].key_type,
-                                                         check2[i].key_data, check2[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_EQUAL(check1[i].key_handle, 0, TEST_CHECKPOINT_NUM(13));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c002/test_c002.h b/api-tests/dev_apis/crypto/test_c002/test_c002.h
index 4081d29..d12fb7d 100644
--- a/api-tests/dev_apis/crypto/test_c002/test_c002.h
+++ b/api-tests/dev_apis/crypto/test_c002/test_c002.h
@@ -18,14 +18,13 @@
 #define _TEST_C002_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c002)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c002)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c002_crypto_list[];
 
 int32_t psa_import_key_test(security_t caller);
-int32_t psa_import_key_negative_test(security_t caller);
 #endif /* _TEST_C002_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c002/test_data.h b/api-tests/dev_apis/crypto/test_c002/test_data.h
index 0b2faea..38db0a5 100644
--- a/api-tests/dev_apis/crypto/test_c002/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c002/test_data.h
@@ -23,6 +23,7 @@
     psa_key_type_t          key_type;
     uint8_t                 key_data[34];
     uint32_t                key_length;
+    size_t                  attr_bits;
     psa_key_usage_t         usage;
     psa_algorithm_t         key_alg;
     uint32_t                expected_bit_length;
@@ -167,7 +168,7 @@
 {"Test psa_import_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
  0x5F, 0xC9, 0x77},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
  BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
@@ -176,7 +177,7 @@
 {"Test psa_import_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES,
 {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
  0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05},
- AES_24B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ AES_24B_KEY_SIZE, BYTES_TO_BITS(AES_24B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
  BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
@@ -186,23 +187,22 @@
 {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
  0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
  0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ AES_32B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
  BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
-#endif
 
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
 #ifdef ARCH_TEST_RSA_2048
 {"Test psa_import_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
  {0},
- 270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+ 270, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
  2048, 270, PSA_SUCCESS
 },
 
-{"Test psa_import_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_import_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR,
  {0},
- 1193, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+ 1193, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
  2048, 1193, PSA_SUCCESS
 },
 #endif
@@ -212,7 +212,7 @@
 #ifdef ARCH_TEST_DES_1KEY
 {"Test psa_import_key with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES,
  {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
- DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ DES_8B_KEY_SIZE, BYTES_TO_BITS(DES_8B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
  BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
@@ -221,7 +221,7 @@
 {"Test psa_import_key with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES,
 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
- DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ DES3_2KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
  BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS
 },
 #endif
@@ -231,7 +231,7 @@
 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
  0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86,
  0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
- DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ DES3_3KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
  BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS
 },
 #endif
@@ -242,16 +242,16 @@
 {"Test psa_import_key with EC Public key\n", 9,
  PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
  {0},
- 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY,
+ 65, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY,
  256, 65, PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 {"Test psa_import_key with EC keypair\n", 10,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1),
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
  {0},
- 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY,
+ 28, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY,
  224, 28, PSA_SUCCESS
 },
 #endif
@@ -263,14 +263,14 @@
 {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
  0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05, 0xC9, 0xED,
  0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_34B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ AES_34B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
  BYTES_TO_BITS(AES_34B_KEY_SIZE), AES_34B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 
 {"Test psa_import_key with incorrect key data size\n", 12, PSA_KEY_TYPE_AES,
 {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
  0x40, 0xAC, 0xA3, 0x90, 0x77},
-AES_18B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+AES_18B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
 BYTES_TO_BITS(AES_18B_KEY_SIZE), AES_18B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
@@ -278,22 +278,9 @@
 {"Test psa_import_key with incorrect key type\n", 13, PSA_KEY_TYPE_VENDOR_FLAG,
 {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
  0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05},
-AES_24B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+AES_24B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
 BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_ERROR_NOT_SUPPORTED,
 },
 #endif
-};
-
-static test_data check2[] = {
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_import_key negative cases\n", 1, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9, 0x77},
-AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
-BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_ALREADY_EXISTS
-},
 #endif
-#endif
-
 };
diff --git a/api-tests/dev_apis/crypto/test_c002/test_entry_c002.c b/api-tests/dev_apis/crypto/test_c002/test_entry_c002.c
index 6f31df0..1ea3d4f 100644
--- a/api-tests/dev_apis/crypto/test_c002/test_entry_c002.c
+++ b/api-tests/dev_apis/crypto/test_c002/test_entry_c002.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 2)
 #define TEST_DESC "Testing crypto key management APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c003/test_c003.c b/api-tests/dev_apis/crypto/test_c003/test_c003.c
index 1968cb1..814513d 100644
--- a/api-tests/dev_apis/crypto/test_c003/test_c003.c
+++ b/api-tests/dev_apis/crypto/test_c003/test_c003.c
@@ -23,7 +23,6 @@
 client_test_t test_c003_crypto_list[] = {
     NULL,
     psa_export_key_test,
-    psa_export_key_negative_test,
     NULL,
 };
 
@@ -32,13 +31,17 @@
 
 int32_t psa_export_key_test(security_t caller)
 {
-    uint32_t         length, i;
-    const uint8_t    *key_data;
-    psa_key_policy_t policy;
-    psa_key_type_t   key_type;
-    size_t           bits;
-    int              num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t          status;
+    int32_t               i, status;
+    size_t                length;
+    const uint8_t        *key_data;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -50,10 +53,7 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
+        memset(data, 0, BUFFER_SIZE);
 
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
@@ -61,7 +61,7 @@
 
         if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
         {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
             {
                 if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
                     key_data = rsa_384_keypair;
@@ -82,7 +82,7 @@
         }
         else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
                 key_data = ec_keypair;
             else
                 key_data = ec_keydata;
@@ -90,131 +90,48 @@
         else
             key_data = check1[i].key_data;
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                                            check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Get basic metadata about a key */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle,
-                                       &key_type, &bits);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Make sure the metada matches with the given data */
-        TEST_ASSERT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(7));
-        TEST_ASSERT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(8));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Export a key in binary format */
         status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle, data,
                                       check1[i].buffer_size, &length);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
+        /* If failure is expected, continue with the next data set */
         if (check1[i].expected_status != PSA_SUCCESS)
             continue;
 
-        /* Check if the key length matches with the given length */
-        TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(10));
+        /* Check the attributes of the exported key */
+        TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(5));
 
-        /* Check if original key data matches with the exported data */
         if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type))
         {
-            TEST_ASSERT_MEMCMP(check1[i].key_data, data, length, TEST_CHECKPOINT_NUM(11));
+            TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(6));
         }
         else if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type) || PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(12));
+            TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(7));
         }
         else
         {
             return VAL_STATUS_INVALID;
         }
-    }
 
-    return VAL_STATUS_SUCCESS;
-}
-
-int32_t psa_export_key_negative_test(security_t caller)
-{
-    int              num_checks = sizeof(check2)/sizeof(check2[0]);
-    uint32_t         i, length;
-    int32_t          status;
-    psa_key_policy_t policy;
-
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    for (i = 0; i < num_checks; i++)
-    {
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_export_key with unallocated key handle\n",
-                                                                                 g_test_count++);
-        /* Export a key in binary format */
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check2[i].key_handle, data,
-                                       check2[i].key_length, &length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_export_key with empty key handle\n",
-                                                                                 g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
-
-        /* Export a key in binary format */
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check2[i].key_handle, data,
-                                       check2[i].key_length, &length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(5));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_export_key with zero as key handle\n",
-                                                                                 g_test_count++);
-        /* Export a key in binary format */
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, 0, data,
-                                       check2[i].key_length, &length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_export_key with destroyed key handle\n",
-                                                                                 g_test_count++);
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
-
-        /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle,
-                                     check2[i].key_type, check2[i].key_data, check2[i].key_length);
+        /* Destroy the key handle and check if export key fails */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
-        /* Destroy the key handle */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
-
-        /* Export a key in binary format */
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check2[i].key_handle, data,
-                                       check2[i].key_length, &length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(10));
+        status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle, data,
+                                      check1[i].buffer_size, &length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(9));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c003/test_c003.h b/api-tests/dev_apis/crypto/test_c003/test_c003.h
index 4d8a4d6..96ed12b 100644
--- a/api-tests/dev_apis/crypto/test_c003/test_c003.h
+++ b/api-tests/dev_apis/crypto/test_c003/test_c003.h
@@ -18,9 +18,9 @@
 #define _TEST_C003_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c003)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c003)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c003/test_data.h b/api-tests/dev_apis/crypto/test_c003/test_data.h
index dfe0a0b..625cc17 100644
--- a/api-tests/dev_apis/crypto/test_c003/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c003/test_data.h
@@ -23,6 +23,7 @@
     psa_key_type_t          key_type;
     uint8_t                 key_data[34];
     uint32_t                key_length;
+    size_t                  attr_bits;
     psa_key_usage_t         usage;
     psa_algorithm_t         key_alg;
     size_t                  buffer_size;
@@ -166,7 +167,7 @@
 {"Test psa_export_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
  0x5F, 0xC9, 0x77},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
  BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
@@ -175,7 +176,7 @@
 {"Test psa_export_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES,
 {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
  0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05},
- AES_24B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
+ AES_24B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
  BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
@@ -185,7 +186,7 @@
 {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
  0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
  0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
+ AES_32B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
  BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
@@ -195,13 +196,13 @@
 #ifdef ARCH_TEST_RSA_2048
 {"Test psa_export_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
  {0},
- 270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE,
+ 270, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE,
  2048, 270, PSA_SUCCESS
 },
 
-{"Test psa_export_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_export_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR,
  {0},
- 1193, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE,
+ 1193, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE,
  2048, 1193, PSA_SUCCESS
 },
 #endif
@@ -211,7 +212,7 @@
 #ifdef ARCH_TEST_DES_1KEY
 {"Test psa_export_key with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES,
  {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
- DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
+ DES_8B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
  BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
@@ -220,7 +221,7 @@
 {"Test psa_export_key with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES,
 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
- DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
+ DES3_2KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
  BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS
 },
 #endif
@@ -230,7 +231,7 @@
 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
  0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86,
  0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
- DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
+ DES3_3KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
  BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS
 },
 #endif
@@ -241,16 +242,16 @@
 {"Test psa_export_key with EC Public key\n", 9,
  PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
  {0},
- 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE,
+ 65, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE,
  256, 65, PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 {"Test psa_export_key with EC keypair\n", 10,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1),
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
  {0},
- 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE,
+ 28, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE,
  224, 28, PSA_SUCCESS
 },
 #endif
@@ -261,29 +262,16 @@
 {"Test psa_export_key with key policy verify\n", 11, PSA_KEY_TYPE_AES,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
  0x5F, 0xC9, 0x05},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_VERIFY, PSA_ALG_CTR, BUFFER_SIZE,
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_VERIFY, PSA_ALG_CTR, BUFFER_SIZE,
  BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_NOT_PERMITTED
 },
 
 {"Test psa_export_key with less buffer size\n", 12, PSA_KEY_TYPE_AES,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
  0x5F, 0xC9, 0x05},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, 14,
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, 14,
  BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_BUFFER_TOO_SMALL
 },
 #endif
 #endif
 };
-
-static test_data check2[] = {
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_export_key negative case\n", 13, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9, 0x05},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
- BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
-},
-#endif
-#endif
-};
diff --git a/api-tests/dev_apis/crypto/test_c003/test_entry_c003.c b/api-tests/dev_apis/crypto/test_c003/test_entry_c003.c
index 8b50159..59efbf1 100644
--- a/api-tests/dev_apis/crypto/test_c003/test_entry_c003.c
+++ b/api-tests/dev_apis/crypto/test_c003/test_entry_c003.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 3)
 #define TEST_DESC "Testing crypto key management APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c004/test_c004.c b/api-tests/dev_apis/crypto/test_c004/test_c004.c
index d99c483..2eed9a4 100644
--- a/api-tests/dev_apis/crypto/test_c004/test_c004.c
+++ b/api-tests/dev_apis/crypto/test_c004/test_c004.c
@@ -23,7 +23,6 @@
 client_test_t test_c004_crypto_list[] = {
     NULL,
     test_psa_export_public_key,
-    test_psa_export_public_key_handle,
     NULL,
 };
 
@@ -32,13 +31,17 @@
 
 int32_t test_psa_export_public_key(security_t caller)
 {
-    uint32_t         length, i;
-    const uint8_t    *key_data;
-    psa_key_policy_t policy;
-    psa_key_type_t   key_type;
-    size_t           bits;
-    int              num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t          status;
+    int32_t               i, status;
+    size_t                length;
+    const uint8_t        *key_data;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -50,10 +53,7 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
+        memset(data, 0, BUFFER_SIZE);
 
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
@@ -61,7 +61,7 @@
 
         if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
         {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
             {
                 if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
                     key_data = rsa_384_keypair;
@@ -82,7 +82,7 @@
         }
         else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
                 key_data = ec_keypair;
             else
                 key_data = ec_keydata;
@@ -90,168 +90,54 @@
         else
             key_data = check1[i].key_data;
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                                      check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Get basic metadata about a key */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle,
-                                      &key_type, &bits);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        TEST_ASSERT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(7));
-
-        TEST_ASSERT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(8));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Export a key in binary format */
         status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY, check1[i].key_handle, data,
                                       check1[i].buffer_size, &length);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
+        /* If failure is expected, continue with the next data set */
         if (check1[i].expected_status != PSA_SUCCESS)
             continue;
 
-        TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(10));
+        TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(5));
 
         /* Check if original key data matches with the exported data */
         if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type))
         {
-            TEST_ASSERT_MEMCMP(check1[i].key_data, data, length, TEST_CHECKPOINT_NUM(11));
+            TEST_ASSERT_MEMCMP(check1[i].key_data, data, length, TEST_CHECKPOINT_NUM(6));
         }
         else if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type) || PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
                 key_data = expected_rsa_256_pubprv;
 
-            else if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
+            else if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
                 key_data = expected_ec_pubprv;
 
-            TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(12));
+            TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(7));
         }
         else
         {
             return VAL_STATUS_INVALID;
         }
-    }
 
-    return VAL_STATUS_SUCCESS;
-
-}
-
-int32_t test_psa_export_public_key_handle(security_t caller)
-{
-    int              num_checks = sizeof(check2)/sizeof(check2[0]);
-    uint32_t         i, length;
-    int32_t          status;
-    const uint8_t    *key_data;
-    psa_key_policy_t policy;
-
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    for (i = 0; i < num_checks; i++)
-    {
-        val->print(PRINT_TEST, "[Check %d] Test psa_export_key with unallocated key handle\n",
-                                                                                 g_test_count++);
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        /* Export a key in binary format */
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY, check2[i].key_handle, data,
-                                      check2[i].key_length, &length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_export_key with empty key handle\n",
-                                                                                 g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
-
-        /* Export a key in binary format */
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY, check2[i].key_handle, data,
-                                      check2[i].key_length, &length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(5));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_export_key with zero as key handle\n",
-                                                                                 g_test_count++);
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY, 0, data,
-                                      check2[i].key_length, &length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_export_key with destroyed key handle\n",
-                                                                                 g_test_count++);
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
-
-        if (PSA_KEY_TYPE_IS_RSA(check2[i].key_type))
-        {
-            if (check2[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
-            {
-                if (check2[i].expected_bit_length == BYTES_TO_BITS(384))
-                    key_data = rsa_384_keypair;
-                else if (check2[i].expected_bit_length == BYTES_TO_BITS(256))
-                    key_data = rsa_256_keypair;
-                else
-                    return VAL_STATUS_INVALID;
-            }
-            else
-            {
-                if (check2[i].expected_bit_length == BYTES_TO_BITS(384))
-                    key_data = rsa_384_keydata;
-                else if (check2[i].expected_bit_length == BYTES_TO_BITS(256))
-                    key_data = rsa_256_keydata;
-                else
-                    return VAL_STATUS_INVALID;
-            }
-        }
-        else if (PSA_KEY_TYPE_IS_ECC(check2[i].key_type))
-        {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check2[i].key_type))
-                key_data = ec_keypair;
-            else
-                key_data = ec_keydata;
-        }
-        else
-            key_data = check2[i].key_data;
-
-        /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle,
-                                     check2[i].key_type, key_data, check2[i].key_length);
+        /* Destroy the key handle and check if export key fails */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
-        /* Destroy the key handle */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
-
-        /* Export a key in binary format */
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY, check2[i].key_handle, data,
-                                      check2[i].key_length, &length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(10));
+        status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY, check1[i].key_handle, data,
+                                      check1[i].buffer_size, &length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(9));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c004/test_c004.h b/api-tests/dev_apis/crypto/test_c004/test_c004.h
index c24ec82..518013f 100644
--- a/api-tests/dev_apis/crypto/test_c004/test_c004.h
+++ b/api-tests/dev_apis/crypto/test_c004/test_c004.h
@@ -18,14 +18,13 @@
 #define _TEST_C004_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c004)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c004)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c004_crypto_list[];
 
 int32_t test_psa_export_public_key(security_t caller);
-int32_t test_psa_export_public_key_handle(security_t caller);
 #endif /* _TEST_C004_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c004/test_data.h b/api-tests/dev_apis/crypto/test_c004/test_data.h
index 66dae2a..f389a0f 100644
--- a/api-tests/dev_apis/crypto/test_c004/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c004/test_data.h
@@ -23,6 +23,7 @@
     psa_key_type_t          key_type;
     uint8_t                 key_data[34];
     uint32_t                key_length;
+    size_t                  attr_bits;
     psa_key_usage_t         usage;
     psa_algorithm_t         key_alg;
     size_t                  buffer_size;
@@ -198,7 +199,7 @@
 {"Test psa_export_public_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
  0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
  BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
@@ -207,7 +208,7 @@
 {"Test psa_export_public_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES,
 {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
  0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9},
- AES_24B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
+ AES_24B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
  BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
@@ -217,7 +218,7 @@
 {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
  0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
  0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
+ AES_32B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
  BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
@@ -227,13 +228,13 @@
 #ifdef ARCH_TEST_RSA_2048
 {"Test psa_export_public_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
  {0},
- 270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE,
+ 270, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE,
  2048, 270, PSA_SUCCESS
 },
 
-{"Test psa_export_public_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_export_public_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR,
  {0},
- 1193, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE,
+ 1193, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE,
  2048, 270, PSA_SUCCESS
 },
 #endif
@@ -243,7 +244,7 @@
 #ifdef ARCH_TEST_DES_1KEY
 {"Test psa_export_public_key with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES,
  {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
- DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
+ DES_8B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
  BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
@@ -252,7 +253,7 @@
 {"Test psa_export_public_key with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES,
 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
- DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
+ DES3_2KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
  BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
@@ -262,7 +263,7 @@
 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
  0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86,
  0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
- DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
+ DES3_3KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE,
  BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
@@ -273,16 +274,16 @@
 {"Test psa_export_public_key with EC Public key\n", 9,
  PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
  {0},
- 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE,
+ 65, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE,
  256, 65, PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 {"Test psa_export_public_key with EC keypair\n", 10,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1),
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
  {0},
- 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE,
+ 28, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE,
  224, 57, PSA_SUCCESS
 },
 #endif
@@ -292,21 +293,9 @@
 #ifdef ARCH_TEST_RSA
 {"Test psa_export_public_key with less buffer size\n", 12, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
 {0},
-270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 200,
+270, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 200,
 2048, 270, PSA_ERROR_BUFFER_TOO_SMALL
 },
 #endif
 #endif
 };
-
-static test_data check2[] = {
-#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
-#ifdef ARCH_TEST_RSA
-{"Test psa_export_public_key negative case\n", 13, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
- {0},
- 270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE,
- 2048, 270, PSA_SUCCESS
-},
-#endif
-#endif
-};
diff --git a/api-tests/dev_apis/crypto/test_c004/test_entry_c004.c b/api-tests/dev_apis/crypto/test_c004/test_entry_c004.c
index 7b8fdc9..e552b55 100644
--- a/api-tests/dev_apis/crypto/test_c004/test_entry_c004.c
+++ b/api-tests/dev_apis/crypto/test_c004/test_entry_c004.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 4)
 #define TEST_DESC "Testing crypto key management APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c005/test_c005.c b/api-tests/dev_apis/crypto/test_c005/test_c005.c
index 1af6b36..e14e117 100644
--- a/api-tests/dev_apis/crypto/test_c005/test_c005.c
+++ b/api-tests/dev_apis/crypto/test_c005/test_c005.c
@@ -23,7 +23,6 @@
 client_test_t test_c005_crypto_list[] = {
     NULL,
     psa_destroy_key_test,
-    psa_destroy_invalid_key_test,
     NULL,
 };
 
@@ -31,13 +30,23 @@
 
 int32_t psa_destroy_key_test(security_t caller)
 {
-    uint32_t         i;
-    const uint8_t    *key_data;
-    psa_key_policy_t policy;
-    psa_key_type_t   key_type;
-    size_t           bits;
-    int              num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t          status;
+    int32_t               i, status;
+    const uint8_t        *key_data;
+    psa_key_type_t        get_key_type;
+    psa_key_id_t          get_key_id;
+    psa_key_lifetime_t    get_key_lifetime;
+    psa_key_usage_t       get_key_usage_flags;
+    psa_algorithm_t       get_key_algorithm;
+    size_t                get_key_bits;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_key_attributes_t  set_attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -49,21 +58,13 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        key_type = 0;
-        bits = 0;
-
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
         if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
         {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
             {
                 if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
                     key_data = rsa_384_keypair;
@@ -84,7 +85,7 @@
         }
         else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
                 key_data = ec_keypair;
             else
                 key_data = ec_keydata;
@@ -92,90 +93,51 @@
         else
             key_data = check1[i].key_data;
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &set_attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &set_attributes, check1[i].attr_bits);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &set_attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ID, &set_attributes, check1[i].key_id);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_LIFETIME, &set_attributes, check1[i].key_lifetime);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &set_attributes, check1[i].key_alg);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                                      check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &set_attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
-        /* Get basic metadata about a key */
-        TEST_ASSERT_EQUAL(val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle,
-                    &key_type, &bits),
-                    PSA_SUCCESS,
-                    TEST_CHECKPOINT_NUM(6));
-
-        /* Check that metadata matches with given data */
-        TEST_ASSERT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(7));
-        TEST_ASSERT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(8));
-
-        /* Destroy a key and restore the slot to its default state */
+        /* Destroy the key handle */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
-        /* Get basic metadata about a key */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle,
-                                      &key_type, &bits);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(10));
+        /* Getting the attributes of the destroyed key should return error */
+        status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, check1[i].key_handle,
+                 &attributes);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(5));
 
-        /* Check that if the key metadata are destroyed */
-        TEST_ASSERT_NOT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(11));
-        TEST_ASSERT_NOT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(12));
-    }
+        /* Check if all the attributes are erased */
+        val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type);
+        TEST_ASSERT_EQUAL(get_key_type, 0, TEST_CHECKPOINT_NUM(6));
 
-    return VAL_STATUS_SUCCESS;
-}
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ID, &attributes, &get_key_id);
+        TEST_ASSERT_EQUAL(get_key_id, 0, TEST_CHECKPOINT_NUM(7));
 
-int32_t psa_destroy_invalid_key_test(security_t caller)
-{
-    int             num_checks = sizeof(check2)/sizeof(check2[0]);
-    int32_t         i, status;
+        val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, &attributes, &get_key_lifetime);
+        TEST_ASSERT_EQUAL(get_key_lifetime, 0, TEST_CHECKPOINT_NUM(8));
 
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+        val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags);
+        TEST_ASSERT_EQUAL(get_key_usage_flags, 0, TEST_CHECKPOINT_NUM(9));
 
-    for (i = 0; i < num_checks; i++)
-    {
-        val->print(PRINT_TEST, "[Check %d] Test psa_destroy_key with unallocated key handle\n",
-                                                                                 g_test_count++);
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm);
+        TEST_ASSERT_EQUAL(get_key_algorithm, 0, TEST_CHECKPOINT_NUM(10));
 
-        /* Destroy a key and restore the slot to its default state */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
+        val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &attributes, &get_key_bits);
+        TEST_ASSERT_EQUAL(get_key_bits,  0, TEST_CHECKPOINT_NUM(11));
 
-        val->print(PRINT_TEST, "[Check %d] Test psa_destroy_key with zero as key handle\n",
-                                                                                 g_test_count++);
-        /* Destroy a key and restore the slot to its default state */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, 0);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
+        /* Destroying an empty key handle should return error */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(12));
 
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-         val->print(PRINT_TEST, "[Check %d] Test psa_destroy_key with empty key handle\n",
-                                                                                 g_test_count++);
-        /* Destroy a key and restore the slot to its default state */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Destroy a key and restore the slot to its default state */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(7));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c005/test_c005.h b/api-tests/dev_apis/crypto/test_c005/test_c005.h
index d191aed..50cad3d 100644
--- a/api-tests/dev_apis/crypto/test_c005/test_c005.h
+++ b/api-tests/dev_apis/crypto/test_c005/test_c005.h
@@ -18,14 +18,13 @@
 #define _TEST_C005_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c005)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c005)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c005_crypto_list[];
 
 int32_t psa_destroy_key_test(security_t caller);
-int32_t psa_destroy_invalid_key_test(security_t caller);
 #endif /* _TEST_C005_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c005/test_data.h b/api-tests/dev_apis/crypto/test_c005/test_data.h
index bab27f2..3b70b18 100644
--- a/api-tests/dev_apis/crypto/test_c005/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c005/test_data.h
@@ -23,10 +23,12 @@
     psa_key_type_t          key_type;
     uint8_t                 key_data[34];
     uint32_t                key_length;
+    size_t                  attr_bits;
     psa_key_usage_t         usage;
     psa_algorithm_t         key_alg;
+    psa_key_id_t            key_id;
+    psa_key_lifetime_t      key_lifetime;
     uint32_t                expected_bit_length;
-    uint32_t                expected_key_length;
     psa_status_t            expected_status;
 } test_data;
 
@@ -166,8 +168,9 @@
 {"Test psa_destroy_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
  0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ 0x12, PSA_KEY_LIFETIME_VOLATILE,
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), PSA_SUCCESS
 },
 #endif
 
@@ -175,8 +178,9 @@
 {"Test psa_destroy_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES,
 {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
  0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9},
- AES_24B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS
+ AES_24B_KEY_SIZE, BYTES_TO_BITS(AES_24B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ 0x34, PSA_KEY_LIFETIME_VOLATILE,
+ BYTES_TO_BITS(AES_24B_KEY_SIZE), PSA_SUCCESS
 },
 #endif
 
@@ -185,8 +189,9 @@
 {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
  0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
  0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS
+ AES_32B_KEY_SIZE, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ 0x56, PSA_KEY_LIFETIME_VOLATILE,
+ BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_SUCCESS
 },
 #endif
 #endif
@@ -195,14 +200,16 @@
 #ifdef ARCH_TEST_RSA_2048
 {"Test psa_destroy_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
  {0},
- 270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- 2048, 270, PSA_SUCCESS
+ 270, 2048, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+ 0x78, PSA_KEY_LIFETIME_VOLATILE,
+ 2048, PSA_SUCCESS
 },
 
-{"Test psa_destroy_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_destroy_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR,
  {0},
- 1193, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- 2048, 1193, PSA_SUCCESS
+ 1193, 2048, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+ 0x89, PSA_KEY_LIFETIME_VOLATILE,
+ 2048, PSA_SUCCESS
 },
 #endif
 #endif
@@ -211,8 +218,9 @@
 #ifdef ARCH_TEST_DES_1KEY
 {"Test psa_destroy_key with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES,
  {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
- DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS
+ DES_8B_KEY_SIZE, BYTES_TO_BITS(DES_8B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ 0xAB, PSA_KEY_LIFETIME_VOLATILE,
+ BYTES_TO_BITS(DES_8B_KEY_SIZE), PSA_SUCCESS
 },
 #endif
 
@@ -220,8 +228,9 @@
 {"Test psa_destroy_key with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES,
 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
- DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS
+ DES3_2KEY_SIZE, BYTES_TO_BITS(DES3_2KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ 0xBC, PSA_KEY_LIFETIME_VOLATILE,
+ BYTES_TO_BITS(DES3_2KEY_SIZE), PSA_SUCCESS
 },
 #endif
 
@@ -230,8 +239,9 @@
 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
  0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86,
  0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
- DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS
+ DES3_3KEY_SIZE, BYTES_TO_BITS(DES3_3KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ 0xCD, PSA_KEY_LIFETIME_VOLATILE,
+ BYTES_TO_BITS(DES3_3KEY_SIZE), PSA_SUCCESS
 },
 #endif
 #endif
@@ -241,8 +251,9 @@
 {"Test psa_destroy_key with EC Public key\n", 9,
  PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
  {0},
- 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY,
- 256, 65, PSA_SUCCESS
+ 65, 256, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY,
+ 0xEF, PSA_KEY_LIFETIME_VOLATILE,
+ 256, PSA_SUCCESS
 },
 #endif
 #endif
@@ -250,24 +261,11 @@
 #ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 {"Test psa_destroy_key with EC keypair\n", 10,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1),
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
  {0},
- 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
- 224, 28, PSA_SUCCESS
-},
-#endif
-#endif
-};
-
-
-static test_data check2[] = {
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_destroy_key negative case\n", 11, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
+ 28, 224, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
+ 0x123, PSA_KEY_LIFETIME_VOLATILE,
+ 224, PSA_SUCCESS
 },
 #endif
 #endif
diff --git a/api-tests/dev_apis/crypto/test_c005/test_entry_c005.c b/api-tests/dev_apis/crypto/test_c005/test_entry_c005.c
index 9559f13..0a8b46d 100644
--- a/api-tests/dev_apis/crypto/test_c005/test_entry_c005.c
+++ b/api-tests/dev_apis/crypto/test_c005/test_entry_c005.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 5)
 #define TEST_DESC "Testing crypto key management APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c006/test_c006.c b/api-tests/dev_apis/crypto/test_c006/test_c006.c
index a18aaa7..61fecdc 100644
--- a/api-tests/dev_apis/crypto/test_c006/test_c006.c
+++ b/api-tests/dev_apis/crypto/test_c006/test_c006.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,159 +19,62 @@
 #include "val_target.h"
 #include "test_c006.h"
 #include "test_data.h"
+#include "val_crypto.h"
 
 client_test_t test_c006_crypto_list[] = {
     NULL,
-    psa_get_key_information_test,
-    psa_get_key_information_invalid_test,
+    psa_hash_compute_test,
     NULL,
 };
 
 static int g_test_count = 1;
 
-int32_t psa_get_key_information_test(security_t caller)
+int32_t psa_hash_compute_test(security_t caller)
 {
-    int32_t          i, status;
-    const uint8_t    *key_data;
-    psa_key_policy_t policy;
-    psa_key_type_t   key_type;
-    size_t           bits;
-    int              num_checks = sizeof(check1)/sizeof(check1[0]);
+    int                     num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t                 i, status;
+    const char              *expected_hash;
+    char                    hash[HASH_64B];
+    size_t                  hash_length, hash_size = sizeof(hash);
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
 
-    /* Set the key data buffer to the input base on algorithm */
     for (i = 0; i < num_checks; i++)
     {
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
-        {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
-            {
-                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
-                    key_data = rsa_384_keypair;
-                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
-                    key_data = rsa_256_keypair;
-                else
-                    return VAL_STATUS_INVALID;
-            }
-            else
-            {
-                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
-                    key_data = rsa_384_keydata;
-                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
-                    key_data = rsa_256_keydata;
-                else
-                    return VAL_STATUS_INVALID;
-            }
-        }
-        else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
-        {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
-                key_data = ec_keypair;
-            else
-                key_data = ec_keydata;
-        }
+        if (check1[i].alg == PSA_ALG_SHA_384)
+            expected_hash = sha384_hash;
+        else if (check1[i].alg == PSA_ALG_SHA_512)
+            expected_hash = sha512_hash;
         else
-            key_data = check1[i].key_data;
+            expected_hash = check1[i].hash;
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
-
-        /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                                      check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Get basic metadata about a key */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle,
-                                      &key_type, &bits);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
+        /* Calculate the hash (digest) of a message */
+        status = val->crypto_function(VAL_CRYPTO_HASH_COMPUTE, check1[i].alg, &check1[i].input,
+                 check1[i].input_length, hash, hash_size, &hash_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5));
 
         if (check1[i].expected_status != PSA_SUCCESS)
+        {
             continue;
+        }
 
-        /* Check that it matches with given data */
-        TEST_ASSERT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(7));
-        TEST_ASSERT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(8));
-    }
-
-    return VAL_STATUS_SUCCESS;
-}
-
-int32_t psa_get_key_information_invalid_test(security_t caller)
-{
-    int              num_checks = sizeof(check2)/sizeof(check2[0]);
-    int32_t          i, status;
-
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    for (i = 0; i < num_checks; i++)
-    {
-        val->print(PRINT_TEST, "[Check %d] Test psa_get_key_information with unallocated"
-                                                        " key handle\n", g_test_count++);
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        /* Get basic metadata about a key */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check2[i].key_handle,
-                                      &check2[i].key_type, &check2[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_get_key_information with zero as"
-                                                        " key handle\n", g_test_count++);
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, 0,
-                                      &check2[i].key_type, &check2[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_get_key_information with empty key handle\n",
-                                                                         g_test_count++);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Get basic metadata about a key */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check2[i].key_handle,
-                                      &check2[i].key_type, &check2[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(6));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_get_key_information with destroyed"
-                                                        " key handle\n", g_test_count++);
-        /* Destroy a key and restore the slot to its default state */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
-
-        /* Get basic metadata about a key */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check2[i].key_handle,
-                                      &check2[i].key_type, &check2[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(8));
-
+        TEST_ASSERT_EQUAL(hash_length, PSA_HASH_SIZE(check1[i].alg), TEST_CHECKPOINT_NUM(7));
+        TEST_ASSERT_MEMCMP(hash, expected_hash, hash_length, TEST_CHECKPOINT_NUM(8));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c006/test_c006.h b/api-tests/dev_apis/crypto/test_c006/test_c006.h
index f8d834b..c46a0b3 100644
--- a/api-tests/dev_apis/crypto/test_c006/test_c006.h
+++ b/api-tests/dev_apis/crypto/test_c006/test_c006.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,14 +18,13 @@
 #define _TEST_C006_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c006)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c006)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c006_crypto_list[];
 
-int32_t psa_get_key_information_test(security_t caller);
-int32_t psa_get_key_information_invalid_test(security_t caller);
+int32_t psa_hash_compute_test(security_t caller);
 #endif /* _TEST_C006_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c006/test_data.h b/api-tests/dev_apis/crypto/test_c006/test_data.h
index ccc52e2..5aeee35 100644
--- a/api-tests/dev_apis/crypto/test_c006/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c006/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,255 +18,108 @@
 #include "val_crypto.h"
 
 typedef struct {
-    char                    test_desc[75];
-    psa_key_handle_t        key_handle;
-    psa_key_type_t          key_type;
-    uint8_t                 key_data[34];
-    uint32_t                key_length;
-    psa_key_usage_t         usage;
-    psa_algorithm_t         key_alg;
-    uint32_t                expected_bit_length;
-    uint32_t                expected_key_length;
+    char                    test_desc[50];
+    psa_algorithm_t         alg;
+    char                    input;
+    size_t                  input_length;
+    char                    hash[32];
+    size_t                  hash_length;
     psa_status_t            expected_status;
 } test_data;
 
-static const uint8_t rsa_384_keypair[1];
-static const uint8_t rsa_384_keydata[1];
+static const char sha384_hash[] = {
+0x43, 0x72, 0xe3, 0x8a, 0x92, 0xa2, 0x8b, 0x5d, 0x2c, 0x39, 0x1e, 0x62,
+0x45, 0x2a, 0x86, 0xd5, 0x0e, 0x02, 0x67, 0x22, 0x8b, 0xe1, 0x76, 0xc7, 0x7d, 0x24, 0x02, 0xef,
+0xfe, 0x9f, 0xa5, 0x0d, 0xe4, 0x07, 0xbb, 0xb8, 0x51, 0xb3, 0x7d, 0x59, 0x04, 0xab, 0xa2, 0xde,
+0xde, 0x74, 0xda, 0x2a};
 
-static const uint8_t rsa_256_keypair[] = {
- 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0,
- 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27,
- 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F,
- 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE,
- 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1,
- 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B,
- 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA,
- 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63,
- 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34,
- 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73,
- 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10,
- 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4,
- 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5,
- 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23,
- 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0,
- 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63,
- 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77,
- 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39,
- 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33,
- 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5,
- 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01,
- 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50,
- 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7,
- 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79,
- 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A,
- 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA,
- 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB,
- 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A,
- 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22,
- 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4,
- 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F,
- 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64,
- 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32,
- 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3,
- 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6,
- 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9,
- 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41,
- 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F,
- 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C,
- 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A,
- 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58,
- 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9,
- 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6,
- 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC,
- 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1,
- 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43,
- 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD,
- 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C,
- 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD,
- 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0,
- 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53,
- 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D,
- 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63,
- 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B,
- 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1,
- 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B,
- 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED,
- 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB,
- 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C,
- 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3,
- 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4,
- 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB,
- 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52,
- 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA,
- 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77,
- 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3,
- 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F,
- 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22,
- 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95,
- 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39,
- 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE,
- 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41,
- 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2,
- 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C,
- 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED,
- 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE,
- 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5,
- 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8,
- 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF,
- 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC,
- 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63,
- 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D,
- 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C,
- 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A,
- 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76,
- 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD,
- 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43,
- 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC,
- 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5,
- 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2,
- 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F,
- 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0};
-
-static const uint8_t rsa_256_keydata[] = {
- 0x30, 0x82, 0x01, 0x0A,
- 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1,
- 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44,
- 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1,
- 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1,
- 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11,
- 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB,
- 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F,
- 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49,
- 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0,
- 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53,
- 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF,
- 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE,
- 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99,
- 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6,
- 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7,
- 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89,
- 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1,
- 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0,
- 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01};
-
-static const uint8_t ec_keydata[] = {
- 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f,
- 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0,
- 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b,
- 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98,
- 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20};
-
-static const uint8_t ec_keypair[] = {
- 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38,
- 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42};
+static const char sha512_hash[] = {
+0x29, 0x6e, 0x22, 0x67, 0xd7, 0x4c, 0x27, 0x8d, 0xaa, 0xaa, 0x94, 0x0d,
+0x17, 0xb0, 0xcf, 0xb7, 0x4a, 0x50, 0x83, 0xf8, 0xe0, 0x69, 0x72, 0x6d, 0x8c, 0x84, 0x1c, 0xbe,
+0x59, 0x6e, 0x04, 0x31, 0xcb, 0x77, 0x41, 0xa5, 0xb5, 0x0f, 0x71, 0x66, 0x6c, 0xfd, 0x54, 0xba,
+0xcb, 0x7b, 0x00, 0xae, 0xa8, 0x91, 0x49, 0x9c, 0xf4, 0xef, 0x6a, 0x03, 0xc8, 0xa8, 0x3f, 0xe3,
+0x7c, 0x3f, 0x7b, 0xaf};
 
 static test_data check1[] = {
-
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_get_key_information 16 Byte AES\n", 1, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
+#ifdef ARCH_TEST_MD2
+{"Test psa_hash_compute with MD2 algorithm\n",
+ PSA_ALG_MD2, 0xbd, 1,
+ {0x8c, 0x9c, 0x17, 0x66, 0x5d, 0x25, 0xb3, 0x5f, 0xc4, 0x13, 0xc4, 0x18, 0x05, 0xc6, 0x79, 0xcf},
+ 16, PSA_SUCCESS,
 },
 #endif
 
-#ifdef ARCH_TEST_AES_192
-{"Test psa_get_key_information 24 Byte AES\n", 2, PSA_KEY_TYPE_AES,
-{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
- 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9},
- AES_24B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS
+#ifdef ARCH_TEST_MD4
+{"Test psa_hash_compute with MD4 algorithm\n",
+ PSA_ALG_MD4, 0xbd, 1,
+ {0x18, 0xc3, 0x3f, 0x97, 0x29, 0x7e, 0xfe, 0x5f, 0x8a, 0x73, 0x22, 0x58, 0x28, 0x9f, 0xda, 0x25},
+ 16, PSA_SUCCESS,
 },
 #endif
 
-#ifdef ARCH_TEST_AES_256
-{"Test psa_get_key_information 32 Byte AES\n", 3, PSA_KEY_TYPE_AES,
-{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
- 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
- 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS
+#ifdef ARCH_TEST_MD5
+{"Test psa_hash_compute with MD5 algorithm\n",
+ PSA_ALG_MD5, 0xbd, 1,
+ {0xab, 0xae, 0x57, 0xcb, 0x56, 0x2e, 0xcf, 0x29, 0x5b, 0x4a, 0x37, 0xa7, 0x6e, 0xfe, 0x61, 0xfb},
+ 16, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_RIPEMD160
+{"Test psa_hash_compute with RIPEMD160 algorithm\n",
+ PSA_ALG_RIPEMD160, 0xbd, 1,
+ {0x50, 0x89, 0x26, 0x5e, 0xe5, 0xd9, 0xaf, 0x75, 0xd1, 0x2d, 0xbf, 0x7e, 0xa2, 0xf2, 0x7d, 0xbd,
+  0xee, 0x43, 0x5b, 0x37},
+ 20, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_SHA1
+{"Test psa_hash_compute with SHA1 algorithm\n",
+ PSA_ALG_SHA_1, 0xbd, 1,
+ {0x90, 0x34, 0xaa, 0xf4, 0x51, 0x43, 0x99, 0x6a, 0x2b, 0x14, 0x46, 0x5c, 0x35, 0x2a, 0xb0, 0xc6,
+  0xfa, 0x26, 0xb2, 0x21},
+ 20, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_SHA224
+{"Test psa_hash_compute with SHA224 algorithm\n",
+ PSA_ALG_SHA_224, 0xbd, 1,
+ {0xb1, 0xe4, 0x6b, 0xb9, 0xef, 0xe4, 0x5a, 0xf5, 0x54, 0x36, 0x34, 0x49, 0xc6, 0x94, 0x5a, 0x0d,
+  0x61, 0x69, 0xfc, 0x3a, 0x5a, 0x39, 0x6a, 0x56, 0xcb, 0x97, 0xcb, 0x57},
+ 28, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_SHA256
+{"Test psa_hash_compute with SHA256 algorithm\n",
+ PSA_ALG_SHA_256, 0xbd, 1,
+ {0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70,
+  0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x2b},
+ 32, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_SHA384
+{"Test psa_hash_compute with SHA384 algorithm\n",
+ PSA_ALG_SHA_384, 0xbd, 1, {0}, 48, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_SHA512
+{"Test psa_hash_compute with SHA512 algorithm\n",
+ PSA_ALG_SHA_512, 0xbd, 1, {0}, 64, PSA_SUCCESS,
+},
+
+#ifdef ARCH_TEST_SHA512
+{"Test psa_hash_compute with small buffer size\n",
+ PSA_ALG_SHA_512, 0xbd, 1, {0}, 60, PSA_ERROR_BUFFER_TOO_SMALL,
 },
 #endif
 #endif
 
-#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
-#ifdef ARCH_TEST_RSA_2048
-{"Test psa_get_key_information 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
- {0},
- 270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- 2048, 270, PSA_SUCCESS
+{"Test psa_hash_compute with invalid algorithm\n",
+ PSA_HASH_ALG_INVALID, 0xbd, 1, {0}, 64, PSA_ERROR_NOT_SUPPORTED,
 },
-
-{"Test psa_get_key_information with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR,
- {0},
- 1193, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- 2048, 1193, PSA_SUCCESS
-},
-#endif
-#endif
-
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_DES_1KEY
-{"Test psa_get_key_information with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES,
- {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
- DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_DES_2KEY
-{"Test psa_get_key_information with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES,
-{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
- DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_DES_3KEY
-{"Test psa_get_key_information with Triple DES 3-Key\n", 8, PSA_KEY_TYPE_DES,
-{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
- 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86,
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
- DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS
-},
-#endif
-#endif
-
-#ifdef ARCH_TEST_ECDSA
-#ifdef ARCH_TEST_ECC_CURVE_SECP256R1
-{"Test psa_get_key_information with EC Public key\n", 9,
- PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
- {0},
- 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY,
- 256, 65, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_ECC_CURVE_SECP224R1
-{"Test psa_get_key_information with EC keypair\n", 10,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1),
- {0},
- 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY,
- 224, 28, PSA_SUCCESS
-},
-#endif
-#endif
-};
-
-static test_data check2[] = {
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_get_key_information negative cases\n", 11, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
-},
-#endif
-#endif
 };
diff --git a/api-tests/dev_apis/crypto/test_c006/test_entry_c006.c b/api-tests/dev_apis/crypto/test_c006/test_entry_c006.c
index 983ee81..d1536d2 100644
--- a/api-tests/dev_apis/crypto/test_c006/test_entry_c006.c
+++ b/api-tests/dev_apis/crypto/test_c006/test_entry_c006.c
@@ -19,8 +19,9 @@
 #include "val_target.h"
 #include "test_c006.h"
 
-#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 6)
-#define TEST_DESC "Testing crypto key management APIs\n"
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 06)
+#define TEST_DESC "Testing crypto hash functions APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c007/test_c007.c b/api-tests/dev_apis/crypto/test_c007/test_c007.c
index 9b3371f..1c86caa 100644
--- a/api-tests/dev_apis/crypto/test_c007/test_c007.c
+++ b/api-tests/dev_apis/crypto/test_c007/test_c007.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,165 +23,48 @@
 
 client_test_t test_c007_crypto_list[] = {
     NULL,
-    psa_set_key_policy_test,
-    psa_set_key_policy_negative_test,
+    psa_hash_compare_test,
     NULL,
 };
 
 static int g_test_count = 1;
 
-int32_t psa_set_key_policy_test(security_t caller)
+int32_t psa_hash_compare_test(security_t caller)
 {
-    const uint8_t    *key_data;
-    psa_key_policy_t policy, expected_policy;
-    int              num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t          i, status;
+    int                     num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t                 i, status;
+    const char              *hash;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
 
-    /* Set the key data buffer to the input base on algorithm */
     for (i = 0; i < num_checks; i++)
     {
-
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
-        {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
-            {
-                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
-                    key_data = rsa_384_keypair;
-                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
-                    key_data = rsa_256_keypair;
-                else
-                    return VAL_STATUS_INVALID;
-            }
-            else
-            {
-                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
-                    key_data = rsa_384_keydata;
-                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
-                    key_data = rsa_256_keydata;
-                else
-                    return VAL_STATUS_INVALID;
-            }
-        }
-        else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
-        {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
-                key_data = ec_keypair;
-            else
-                key_data = ec_keydata;
-        }
+        if (check1[i].alg == PSA_ALG_SHA_384)
+            hash = sha384_hash;
+        else if (check1[i].alg == PSA_ALG_SHA_512)
+            hash = sha512_hash;
         else
-            key_data = check1[i].key_data;
+            hash = check1[i].hash;
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                         check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
-
-        if (check1[i].expected_status != PSA_SUCCESS)
-            continue;
-
-        /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                                      check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /*  Get the usage policy for a key slot */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_POLICY, check1[i].key_handle,
-                                      &expected_policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Check if the usage is same as programmed */
-        TEST_ASSERT_EQUAL(expected_policy.usage, check1[i].usage, TEST_CHECKPOINT_NUM(7));
-
-        /* Check if the algorithm is same as programmed */
-        TEST_ASSERT_EQUAL(expected_policy.alg, check1[i].key_alg, TEST_CHECKPOINT_NUM(8));
-    }
-
-    return VAL_STATUS_SUCCESS;
-}
-
-int32_t psa_set_key_policy_negative_test(security_t caller)
-{
-    int              num_checks = sizeof(check2)/sizeof(check2[0]);
-    int32_t          i, status;
-    psa_key_policy_t policy;
-
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    /* Initialize a key policy structure to a default that forbids all
-    * usage of the key
-    */
-    val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-    for (i = 0; i < num_checks; i++)
-    {
-        val->print(PRINT_TEST, "[Check %d] Test psa_set_key_policy with unallocated key handle\n",
-                                                                                  g_test_count++);
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        /* Set the usage policy on a key slot */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                           check2[i].key_alg);
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_set_key_policy with zero as key handle\n",
-                                                                                  g_test_count++);
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, 0, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
-
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-        /* Set the usage policy on a key slot */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                           check2[i].key_alg);
-        val->print(PRINT_TEST, "[Check %d] Test psa_set_key_policy with already occupied handle\n",
-                                                                                  g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle,
-                                      check2[i].key_type, check2[i].key_data, check2[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_ALREADY_EXISTS, TEST_CHECKPOINT_NUM(8));
+        /* Calculate the hash (digest) of a message and compare it with a reference value */
+        status = val->crypto_function(VAL_CRYPTO_HASH_COMPARE, check1[i].alg, &check1[i].input,
+                 check1[i].input_length, hash, check1[i].hash_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c007/test_c007.h b/api-tests/dev_apis/crypto/test_c007/test_c007.h
index ee5635f..55918d9 100644
--- a/api-tests/dev_apis/crypto/test_c007/test_c007.h
+++ b/api-tests/dev_apis/crypto/test_c007/test_c007.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,15 +18,13 @@
 #define _TEST_C007_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c007)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c007)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c007_crypto_list[];
 
-int32_t psa_set_key_policy_test(security_t caller);
-int32_t psa_set_key_policy_negative_test(security_t caller);
+int32_t psa_hash_compare_test(security_t caller);
 #endif /* _TEST_C007_CLIENT_TESTS_H_ */
-
diff --git a/api-tests/dev_apis/crypto/test_c007/test_data.h b/api-tests/dev_apis/crypto/test_c007/test_data.h
index 7572696..5d6dc86 100644
--- a/api-tests/dev_apis/crypto/test_c007/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c007/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,268 +18,114 @@
 #include "val_crypto.h"
 
 typedef struct {
-    char                    test_desc[75];
-    psa_key_handle_t        key_handle;
-    psa_key_type_t          key_type;
-    uint8_t                 key_data[34];
-    uint32_t                key_length;
-    psa_key_usage_t         usage;
-    psa_algorithm_t         key_alg;
-    uint32_t                expected_bit_length;
-    uint32_t                expected_key_length;
+    char                    test_desc[50];
+    psa_algorithm_t         alg;
+    char                    input;
+    size_t                  input_length;
+    char                    hash[32];
+    size_t                  hash_length;
     psa_status_t            expected_status;
 } test_data;
 
-static const uint8_t rsa_384_keypair[1];
-static const uint8_t rsa_384_keydata[1];
+static const char sha384_hash[] = {
+0x43, 0x72, 0xe3, 0x8a, 0x92, 0xa2, 0x8b, 0x5d, 0x2c, 0x39, 0x1e, 0x62,
+0x45, 0x2a, 0x86, 0xd5, 0x0e, 0x02, 0x67, 0x22, 0x8b, 0xe1, 0x76, 0xc7, 0x7d, 0x24, 0x02, 0xef,
+0xfe, 0x9f, 0xa5, 0x0d, 0xe4, 0x07, 0xbb, 0xb8, 0x51, 0xb3, 0x7d, 0x59, 0x04, 0xab, 0xa2, 0xde,
+0xde, 0x74, 0xda, 0x2a};
 
-static const uint8_t rsa_256_keypair[] = {
- 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0,
- 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27,
- 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F,
- 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE,
- 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1,
- 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B,
- 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA,
- 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63,
- 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34,
- 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73,
- 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10,
- 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4,
- 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5,
- 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23,
- 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0,
- 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63,
- 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77,
- 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39,
- 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33,
- 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5,
- 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01,
- 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50,
- 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7,
- 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79,
- 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A,
- 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA,
- 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB,
- 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A,
- 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22,
- 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4,
- 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F,
- 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64,
- 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32,
- 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3,
- 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6,
- 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9,
- 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41,
- 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F,
- 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C,
- 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A,
- 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58,
- 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9,
- 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6,
- 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC,
- 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1,
- 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43,
- 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD,
- 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C,
- 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD,
- 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0,
- 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53,
- 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D,
- 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63,
- 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B,
- 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1,
- 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B,
- 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED,
- 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB,
- 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C,
- 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3,
- 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4,
- 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB,
- 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52,
- 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA,
- 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77,
- 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3,
- 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F,
- 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22,
- 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95,
- 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39,
- 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE,
- 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41,
- 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2,
- 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C,
- 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED,
- 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE,
- 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5,
- 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8,
- 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF,
- 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC,
- 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63,
- 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D,
- 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C,
- 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A,
- 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76,
- 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD,
- 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43,
- 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC,
- 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5,
- 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2,
- 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F,
- 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0};
-
-static const uint8_t rsa_256_keydata[] = {
- 0x30, 0x82, 0x01, 0x0A,
- 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1,
- 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44,
- 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1,
- 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1,
- 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11,
- 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB,
- 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F,
- 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49,
- 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0,
- 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53,
- 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF,
- 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE,
- 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99,
- 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6,
- 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7,
- 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89,
- 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1,
- 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0,
- 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01};
-
-static const uint8_t ec_keydata[] = {
- 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f,
- 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0,
- 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b,
- 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98,
- 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20};
-
-static const uint8_t ec_keypair[] = {
- 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38,
- 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42};
+static const char sha512_hash[] = {
+0x29, 0x6e, 0x22, 0x67, 0xd7, 0x4c, 0x27, 0x8d, 0xaa, 0xaa, 0x94, 0x0d,
+0x17, 0xb0, 0xcf, 0xb7, 0x4a, 0x50, 0x83, 0xf8, 0xe0, 0x69, 0x72, 0x6d, 0x8c, 0x84, 0x1c, 0xbe,
+0x59, 0x6e, 0x04, 0x31, 0xcb, 0x77, 0x41, 0xa5, 0xb5, 0x0f, 0x71, 0x66, 0x6c, 0xfd, 0x54, 0xba,
+0xcb, 0x7b, 0x00, 0xae, 0xa8, 0x91, 0x49, 0x9c, 0xf4, 0xef, 0x6a, 0x03, 0xc8, 0xa8, 0x3f, 0xe3,
+0x7c, 0x3f, 0x7b, 0xaf};
 
 static test_data check1[] = {
-
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_set_key_policy 16 Byte AES\n", 1, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
+#ifdef ARCH_TEST_MD2
+{"Test psa_hash_compare with MD2 algorithm\n",
+ PSA_ALG_MD2, 0xbd, 1,
+ {0x8c, 0x9c, 0x17, 0x66, 0x5d, 0x25, 0xb3, 0x5f, 0xc4, 0x13, 0xc4, 0x18, 0x05, 0xc6, 0x79, 0xcf},
+ 16, PSA_SUCCESS,
 },
 #endif
 
-#ifdef ARCH_TEST_AES_192
-{"Test psa_set_key_policy 24 Byte AES\n", 2, PSA_KEY_TYPE_AES,
-{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
- 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9},
- AES_24B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS
+#ifdef ARCH_TEST_MD4
+{"Test psa_hash_compare with MD4 algorithm\n",
+ PSA_ALG_MD4, 0xbd, 1,
+ {0x18, 0xc3, 0x3f, 0x97, 0x29, 0x7e, 0xfe, 0x5f, 0x8a, 0x73, 0x22, 0x58, 0x28, 0x9f, 0xda, 0x25},
+ 16, PSA_SUCCESS,
 },
 #endif
 
-#ifdef ARCH_TEST_AES_256
-{"Test psa_set_key_policy 32 Byte AES\n", 3, PSA_KEY_TYPE_AES,
-{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
- 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
- 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS
-},
-#endif
-#endif
-
-#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
-#ifdef ARCH_TEST_RSA_2048
-{"Test psa_set_key_policy 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
- {0},
- 270, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- 2048, 270, PSA_SUCCESS
-},
-
-{"Test psa_set_key_policy with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR,
- {0},
- 1193, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- 2048, 1193, PSA_SUCCESS
-},
-#endif
-#endif
-
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_DES_1KEY
-{"Test psa_set_key_policy with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES,
- {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
- DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS
+#ifdef ARCH_TEST_MD5
+{"Test psa_hash_compare with MD5 algorithm\n",
+ PSA_ALG_MD5, 0xbd, 1,
+ {0xab, 0xae, 0x57, 0xcb, 0x56, 0x2e, 0xcf, 0x29, 0x5b, 0x4a, 0x37, 0xa7, 0x6e, 0xfe, 0x61, 0xfb},
+ 16, PSA_SUCCESS,
 },
 #endif
 
-#ifdef ARCH_TEST_DES_2KEY
-{"Test psa_set_key_policy with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES,
-{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
- DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS
+#ifdef ARCH_TEST_RIPEMD160
+{"Test psa_hash_compare with RIPEMD160 algorithm\n",
+ PSA_ALG_RIPEMD160, 0xbd, 1,
+ {0x50, 0x89, 0x26, 0x5e, 0xe5, 0xd9, 0xaf, 0x75, 0xd1, 0x2d, 0xbf, 0x7e, 0xa2, 0xf2, 0x7d, 0xbd,
+  0xee, 0x43, 0x5b, 0x37},
+ 20, PSA_SUCCESS,
 },
 #endif
 
-#ifdef ARCH_TEST_DES_3KEY
-{"Test psa_set_key_policy with Triple DES 3-Key\n", 8, PSA_KEY_TYPE_DES,
-{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
- 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86,
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
- DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS
-},
-#endif
-#endif
-
-#ifdef ARCH_TEST_ECDSA
-#ifdef ARCH_TEST_ECC_CURVE_SECP256R1
-{"Test psa_set_key_policy with EC Public key\n", 9,
- PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
- {0},
- 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY,
- 256, 65, PSA_SUCCESS
+#ifdef ARCH_TEST_SHA1
+{"Test psa_hash_compare with SHA1 algorithm\n",
+ PSA_ALG_SHA_1, 0xbd, 1,
+ {0x90, 0x34, 0xaa, 0xf4, 0x51, 0x43, 0x99, 0x6a, 0x2b, 0x14, 0x46, 0x5c, 0x35, 0x2a, 0xb0, 0xc6,
+  0xfa, 0x26, 0xb2, 0x21},
+ 20, PSA_SUCCESS,
 },
 #endif
 
-#ifdef ARCH_TEST_ECC_CURVE_SECP224R1
-{"Test psa_set_key_policy with EC keypair\n", 10,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1),
- {0},
- 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY,
- 224, 28, PSA_SUCCESS
+#ifdef ARCH_TEST_SHA224
+{"Test psa_hash_compare with SHA224 algorithm\n",
+ PSA_ALG_SHA_224, 0xbd, 1,
+ {0xb1, 0xe4, 0x6b, 0xb9, 0xef, 0xe4, 0x5a, 0xf5, 0x54, 0x36, 0x34, 0x49, 0xc6, 0x94, 0x5a, 0x0d,
+  0x61, 0x69, 0xfc, 0x3a, 0x5a, 0x39, 0x6a, 0x56, 0xcb, 0x97, 0xcb, 0x57},
+ 28, PSA_SUCCESS,
 },
 #endif
-#endif
 
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_set_key_policy with invalid usage\n", 13, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
-AES_16B_KEY_SIZE, PSA_KEY_USAGE_INVALID, PSA_ALG_CTR,
-BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
+#ifdef ARCH_TEST_SHA256
+{"Test psa_hash_compare with SHA256 algorithm\n",
+ PSA_ALG_SHA_256, 0xbd, 1,
+ {0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70,
+  0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x2b},
+ 32, PSA_SUCCESS,
 },
 #endif
-#endif
-};
 
-
-static test_data check2[] = {
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_set_key_policy negative case\n", 11, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
-AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
-BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_ALREADY_EXISTS
+#ifdef ARCH_TEST_SHA384
+{"Test psa_hash_compare with SHA384 algorithm\n",
+ PSA_ALG_SHA_384, 0xbd, 1, {0}, 48, PSA_SUCCESS,
 },
 #endif
+
+#ifdef ARCH_TEST_SHA512
+{"Test psa_hash_compare with SHA512 algorithm\n",
+ PSA_ALG_SHA_512, 0xbd, 1, {0}, 64, PSA_SUCCESS,
+},
 #endif
 
+#ifdef ARCH_TEST_SHA256
+{"Test psa_hash_compare with incorrect hash\n",
+ PSA_ALG_SHA_256, 0xbd, 1,
+ {0x68, 0x32, 0x57, 0x20, 0xab, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70,
+  0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x78},
+ 32, PSA_ERROR_INVALID_SIGNATURE,
+},
+
+{"Test psa_hash_compare with incorrect hash length\n",
+ PSA_ALG_SHA_256, 0xbd, 1,
+ {0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70,
+  0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x2b},
+ 31, PSA_ERROR_INVALID_SIGNATURE,
+},
+#endif
 };
diff --git a/api-tests/dev_apis/crypto/test_c007/test_entry_c007.c b/api-tests/dev_apis/crypto/test_c007/test_entry_c007.c
index c1fbe53..2825b02 100644
--- a/api-tests/dev_apis/crypto/test_c007/test_entry_c007.c
+++ b/api-tests/dev_apis/crypto/test_c007/test_entry_c007.c
@@ -19,8 +19,9 @@
 #include "val_target.h"
 #include "test_c007.h"
 
-#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 7)
-#define TEST_DESC "Testing crypto key management APIs\n"
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 07)
+#define TEST_DESC "Testing crypto hash functions APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c008/test_c008.c b/api-tests/dev_apis/crypto/test_c008/test_c008.c
index 363d5c7..afd7742 100644
--- a/api-tests/dev_apis/crypto/test_c008/test_c008.c
+++ b/api-tests/dev_apis/crypto/test_c008/test_c008.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,21 +23,23 @@
 
 client_test_t test_c008_crypto_list[] = {
     NULL,
-    psa_get_key_policy_test,
-    psa_get_key_policy_negative_test,
+    psa_key_derivation_setup_test,
     NULL,
 };
 
 static int g_test_count = 1;
 
-int32_t psa_get_key_policy_test(security_t caller)
+int32_t psa_key_derivation_setup_test(security_t caller)
 {
-    const uint8_t    *key_data;
-    psa_key_policy_t policy, expected_policy;
-    psa_key_usage_t  expected_usage;
-    psa_algorithm_t  expected_alg;
-    int              num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t          i, status;
+    int32_t                         i, status;
+    int                             num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_derivation_operation_t  operation = PSA_KEY_DERIVATION_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -49,135 +51,19 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-        memset(&expected_usage, 0, sizeof(psa_key_usage_t));
-        memset(&expected_alg, 0, sizeof(psa_algorithm_t));
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
-        {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
-            {
-                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
-                    key_data = rsa_384_keypair;
-                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
-                    key_data = rsa_256_keypair;
-                else
-                    return VAL_STATUS_INVALID;
-            }
-            else
-            {
-                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
-                    key_data = rsa_384_keydata;
-                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
-                    key_data = rsa_256_keydata;
-                else
-                    return VAL_STATUS_INVALID;
-            }
-        }
-        else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
-        {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
-                key_data = ec_keypair;
-            else
-                key_data = ec_keydata;
-        }
-        else
-            key_data = check1[i].key_data;
+        /* Set up a key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                         check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
+        /* Abort the key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
-        /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                                      check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Get the usage policy for a key slot */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_POLICY, check1[i].key_handle,
-                                      &expected_policy);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
-
-        if (check1[i].expected_status != PSA_SUCCESS)
-            continue;
-
-        TEST_ASSERT_EQUAL(expected_policy.usage, check1[i].usage, TEST_CHECKPOINT_NUM(7));
-        TEST_ASSERT_EQUAL(expected_policy.alg, check1[i].key_alg, TEST_CHECKPOINT_NUM(8));
-
-        /* Retrieve the usage field of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_GET_USAGE, &policy, &expected_usage);
-
-        /* Retrieve the algorithm field of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_GET_ALGORITHM, &policy, &expected_alg);
-
-        TEST_ASSERT_EQUAL(expected_usage, check1[i].usage, TEST_CHECKPOINT_NUM(9));
-        TEST_ASSERT_EQUAL(expected_alg, check1[i].key_alg, TEST_CHECKPOINT_NUM(10));
     }
 
     return VAL_STATUS_SUCCESS;
 }
-
-int32_t psa_get_key_policy_negative_test(security_t caller)
-{
-    int              num_checks = sizeof(check2)/sizeof(check2[0]);
-    int32_t          i, status;
-    psa_key_policy_t policy;
-
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    /* Initialize a key policy structure to a default that forbids all
-    * usage of the key
-    */
-    val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-    for (i = 0; i < num_checks; i++)
-    {
-        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
-        val->print(PRINT_TEST, check2[i].test_desc, 0);
-
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_get_key_policy with unallocated key handle\n",
-                                                                                  g_test_count++);
-        /* Get the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_POLICY, check2[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_get_key_policy with zero as key handle\n",
-                                                                                  g_test_count++);
-        /* Get the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_POLICY, 0, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_get_key_policy with empty key handle\n",
-                                                                                  g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Get the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_POLICY, check2[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS,  TEST_CHECKPOINT_NUM(6));
-     }
-
-     return VAL_STATUS_SUCCESS;
-}
diff --git a/api-tests/dev_apis/crypto/test_c008/test_c008.h b/api-tests/dev_apis/crypto/test_c008/test_c008.h
index a67628d..7fd8270 100644
--- a/api-tests/dev_apis/crypto/test_c008/test_c008.h
+++ b/api-tests/dev_apis/crypto/test_c008/test_c008.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,14 +18,13 @@
 #define _TEST_C008_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c008)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c008)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c008_crypto_list[];
 
-int32_t psa_get_key_policy_test(security_t caller);
-int32_t psa_get_key_policy_negative_test(security_t caller);
+int32_t psa_key_derivation_setup_test(security_t caller);
 #endif /* _TEST_C008_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c008/test_data.h b/api-tests/dev_apis/crypto/test_c008/test_data.h
index 90a9d91..a350c16 100644
--- a/api-tests/dev_apis/crypto/test_c008/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c008/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,254 +19,28 @@
 
 typedef struct {
     char                    test_desc[75];
-    psa_key_handle_t        key_handle;
-    psa_key_type_t          key_type;
-    uint8_t                 key_data[34];
-    uint32_t                key_length;
-    psa_key_usage_t         usage;
-    psa_algorithm_t         key_alg;
-    uint32_t                expected_bit_length;
-    uint32_t                expected_key_length;
+    psa_algorithm_t         alg;
     psa_status_t            expected_status;
 } test_data;
 
-static const uint8_t rsa_384_keypair[1];
-static const uint8_t rsa_384_keydata[1];
-
-static const uint8_t rsa_256_keypair[] = {
- 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0,
- 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27,
- 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F,
- 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE,
- 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1,
- 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B,
- 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA,
- 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63,
- 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34,
- 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73,
- 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10,
- 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4,
- 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5,
- 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23,
- 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0,
- 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63,
- 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77,
- 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39,
- 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33,
- 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5,
- 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01,
- 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50,
- 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7,
- 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79,
- 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A,
- 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA,
- 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB,
- 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A,
- 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22,
- 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4,
- 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F,
- 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64,
- 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32,
- 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3,
- 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6,
- 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9,
- 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41,
- 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F,
- 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C,
- 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A,
- 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58,
- 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9,
- 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6,
- 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC,
- 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1,
- 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43,
- 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD,
- 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C,
- 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD,
- 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0,
- 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53,
- 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D,
- 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63,
- 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B,
- 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1,
- 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B,
- 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED,
- 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB,
- 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C,
- 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3,
- 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4,
- 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB,
- 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52,
- 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA,
- 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77,
- 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3,
- 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F,
- 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22,
- 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95,
- 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39,
- 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE,
- 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41,
- 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2,
- 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C,
- 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED,
- 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE,
- 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5,
- 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8,
- 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF,
- 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC,
- 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63,
- 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D,
- 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C,
- 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A,
- 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76,
- 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD,
- 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43,
- 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC,
- 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5,
- 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2,
- 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F,
- 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0};
-
-static const uint8_t rsa_256_keydata[] = {
- 0x30, 0x82, 0x01, 0x0A,
- 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1,
- 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44,
- 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1,
- 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1,
- 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11,
- 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB,
- 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F,
- 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49,
- 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0,
- 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53,
- 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF,
- 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE,
- 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99,
- 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6,
- 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7,
- 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89,
- 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1,
- 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0,
- 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01};
-
-static const uint8_t ec_keydata[] = {
- 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f,
- 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0,
- 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b,
- 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98,
- 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20};
-
-static const uint8_t ec_keypair[] = {
- 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38,
- 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42};
-
 static test_data check1[] = {
-
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_get_key_policy 16 Byte AES\n", 1, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_AES_192
-{"Test psa_get_key_policy 24 Byte AES\n", 2, PSA_KEY_TYPE_AES,
-{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
- 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9},
- AES_24B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_AES_256
-{"Test psa_get_key_policy 32 Byte AES\n", 3, PSA_KEY_TYPE_AES,
-{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
- 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
- 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS
-},
-#endif
-#endif
-
-#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
-#ifdef ARCH_TEST_RSA_2048
-{"Test psa_get_key_policy 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
- {0},
- 270, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- 2048, 270, PSA_SUCCESS
+{"Test psa_key_derivation_setup - ECDH + HKDF-SHA-256\n",
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_SUCCESS
 },
 
-{"Test psa_get_key_policy with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR,
- {0},
- 1193, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- 2048, 1193, PSA_SUCCESS
+{"Test psa_key_derivation_setup - ECDH, unknown KDF\n",
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(0)),
+ PSA_ERROR_NOT_SUPPORTED
 },
-#endif
-#endif
 
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_DES_1KEY
-{"Test psa_get_key_policy with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES,
- {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
- DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS
+{"Test psa_key_derivation_setup - bad key derivation algorithm\n",
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_HASH_ALG_INVALID),
+ PSA_ERROR_INVALID_ARGUMENT
 },
-#endif
 
-#ifdef ARCH_TEST_DES_2KEY
-{"Test psa_get_key_policy with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES,
-{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
- DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS
+{"Test psa_key_derivation_setup - Invalid Algorithm\n",
+ PSA_ALG_INVALID,
+ PSA_ERROR_INVALID_ARGUMENT,
 },
-#endif
-
-#ifdef ARCH_TEST_DES_3KEY
-{"Test psa_get_key_policy with Triple DES 3-Key\n", 8, PSA_KEY_TYPE_DES,
-{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
- 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86,
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
- DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS
-},
-#endif
-#endif
-
-#ifdef ARCH_TEST_ECDSA
-#ifdef ARCH_TEST_ECC_CURVE_SECP256R1
-{"Test psa_get_key_policy with EC Public key\n", 9,
- PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
- {0},
- 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY,
- 256, 65, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_ECC_CURVE_SECP224R1
-{"Test psa_get_key_policy with EC keypair\n", 10,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1),
- {0},
- 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY,
- 224, 28, PSA_SUCCESS
-},
-#endif
-#endif
-};
-
-static test_data check2[] = {
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_get_key_policy negative cases\n", 11, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
-},
-#endif
-#endif
 };
diff --git a/api-tests/dev_apis/crypto/test_c008/test_entry_c008.c b/api-tests/dev_apis/crypto/test_c008/test_entry_c008.c
index 59f3a24..e31f9d8 100644
--- a/api-tests/dev_apis/crypto/test_c008/test_entry_c008.c
+++ b/api-tests/dev_apis/crypto/test_c008/test_entry_c008.c
@@ -20,7 +20,8 @@
 #include "test_c008.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 8)
-#define TEST_DESC "Testing crypto key management APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c009/test_c009.c b/api-tests/dev_apis/crypto/test_c009/test_c009.c
index 9b252b8..5410ec4 100644
--- a/api-tests/dev_apis/crypto/test_c009/test_c009.c
+++ b/api-tests/dev_apis/crypto/test_c009/test_c009.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,21 +21,25 @@
 #include "test_data.h"
 #include "val_crypto.h"
 
-#define  MAX_KEYS   100
-
 client_test_t test_c009_crypto_list[] = {
     NULL,
-    psa_allocate_key_test,
-    psa_allocate_key_negative_test,
+    psa_key_derivation_input_bytes_test,
     NULL,
 };
 
 static int g_test_count = 1;
 
-int32_t psa_allocate_key_test(security_t caller)
+int32_t psa_key_derivation_input_bytes_test(security_t caller)
 {
-    int              num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t          i, status;
+    int32_t                        i, status;
+    int                            num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_derivation_operation_t operation = PSA_KEY_DERIVATION_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -51,45 +55,27 @@
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3));
-
-        /* Destroy a key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
-    }
-
-    return VAL_STATUS_SUCCESS;
-}
-
-int32_t psa_allocate_key_negative_test(security_t caller)
-{
-    int32_t             i, j, status;
-    psa_key_handle_t    key_handle[MAX_KEYS];
-
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    val->print(PRINT_TEST, "[Check %d] Testing the insufficient memory\n", g_test_count++);
-
-    for (i = 0; i < MAX_KEYS; i++)
-    {
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &key_handle[i]);
-        if (status != PSA_SUCCESS)
-        {
-            TEST_ASSERT_EQUAL(status, PSA_ERROR_INSUFFICIENT_MEMORY, TEST_CHECKPOINT_NUM(2));
-            break;
-        }
-    }
-
-    for (j = 0; j < i; j++)
-    {
-        /* Destroy a key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle[j]);
+        /* Set up a key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation, check1[i].alg);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Provide an input for key derivation or key agreement */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES, &operation,
+                 check1[i].step, check1[i].data, check1[i].data_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
+
+        /* Abort the key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        if (check1[i].expected_status != PSA_SUCCESS)
+            continue;
+
+        /* Key derivation on an aborted operation should fail */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES, &operation,
+                 check1[i].step, check1[i].data, check1[i].data_length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(6));
+
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c009/test_c009.h b/api-tests/dev_apis/crypto/test_c009/test_c009.h
index f5e758b..c96f1f6 100644
--- a/api-tests/dev_apis/crypto/test_c009/test_c009.h
+++ b/api-tests/dev_apis/crypto/test_c009/test_c009.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,14 +18,13 @@
 #define _TEST_C009_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c009)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c009)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c009_crypto_list[];
 
-int32_t psa_allocate_key_test(security_t caller);
-int32_t psa_allocate_key_negative_test(security_t caller);
+int32_t psa_key_derivation_input_bytes_test(security_t caller);
 #endif /* _TEST_C009_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c009/test_data.h b/api-tests/dev_apis/crypto/test_c009/test_data.h
index fd4be3c..647537b 100644
--- a/api-tests/dev_apis/crypto/test_c009/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c009/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,55 +18,54 @@
 #include "val_crypto.h"
 
 typedef struct {
-    char                    test_desc[75];
-    psa_key_handle_t        key_handle;
-    psa_status_t            expected_status;
+    char                        test_desc[75];
+    psa_algorithm_t             alg;
+    uint8_t                     data[32];
+    size_t                      data_length;
+    psa_key_derivation_step_t   step;
+    psa_status_t                expected_status;
 } test_data;
 
 static test_data check1[] = {
-#ifdef ARCH_TEST_AES_128
-{"Test psa_allocate_key 16 Byte AES\n", 1, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_AES_192
-{"Test psa_allocate_key 24 Byte AES\n", 2, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_AES_256
-{"Test psa_allocate_key 32 Byte AES\n", 3, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_RSA_2048
-{"Test psa_allocate_key 2048 RSA public key\n", 4, PSA_SUCCESS
+{"Test psa_key_derivation_input_bytes - Step as Info\n",
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ "abcdefghijklmnop", 16,
+ PSA_KEY_DERIVATION_INPUT_INFO,
+ PSA_SUCCESS,
 },
 
-{"Test psa_allocate_key with RSA 2048 keypair\n", 5, PSA_SUCCESS,
-},
-#endif
-
-#ifdef ARCH_TEST_DES_1KEY
-{"Test psa_allocate_key with DES 64 bit key\n", 6, PSA_SUCCESS,
-},
-#endif
-
-#ifdef ARCH_TEST_DES_2KEY
-{"Test psa_allocate_key with Triple DES 2-Key\n", 7, PSA_SUCCESS,
-},
-#endif
-
-#ifdef ARCH_TEST_DES_3KEY
-{"Test psa_allocate_key with Triple DES 3-Key\n", 8, PSA_SUCCESS,
-},
-#endif
-
-#ifdef ARCH_TEST_ECC_CURVE_SECP192R1
-{"Test psa_allocate_key with EC Public key\n", 9, PSA_SUCCESS,
+{"Test psa_key_derivation_input_bytes - Step as secret\n",
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ "abcdefghijklmnop", 16,
+ PSA_KEY_DERIVATION_INPUT_SECRET,
+ PSA_ERROR_INVALID_ARGUMENT,
 },
 
-{"Test psa_allocate_key with EC keypair\n", 10, PSA_SUCCESS
+{"Test psa_key_derivation_input_bytes - Step as salt\n",
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ "abcdefghijklmnop", 16,
+ PSA_KEY_DERIVATION_INPUT_SALT,
+ PSA_SUCCESS,
 },
-#endif
+
+{"Test psa_key_derivation_input_bytes - Step as label\n",
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ "abcdefghijklmnop", 16,
+ PSA_KEY_DERIVATION_INPUT_LABEL,
+ PSA_SUCCESS,
+},
+
+{"Test psa_key_derivation_input_bytes - Step as seed\n",
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ "abcdefghijklmnop", 16,
+ PSA_KEY_DERIVATION_INPUT_SEED,
+ PSA_SUCCESS,
+},
+
+{"Test psa_key_derivation_input_bytes - Invalid step\n",
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ "abcdefghijklmnop", 16,
+ PSA_KEY_DERIVATION_STEP_INVALID,
+ PSA_ERROR_INVALID_ARGUMENT,
+},
 };
diff --git a/api-tests/dev_apis/crypto/test_c009/test_entry_c009.c b/api-tests/dev_apis/crypto/test_c009/test_entry_c009.c
index 93a0abe..5dce994 100644
--- a/api-tests/dev_apis/crypto/test_c009/test_entry_c009.c
+++ b/api-tests/dev_apis/crypto/test_c009/test_entry_c009.c
@@ -20,7 +20,8 @@
 #include "test_c009.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 9)
-#define TEST_DESC "Testing crypto key management APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c010/test_c010.c b/api-tests/dev_apis/crypto/test_c010/test_c010.c
index 24e335e..041d26b 100644
--- a/api-tests/dev_apis/crypto/test_c010/test_c010.c
+++ b/api-tests/dev_apis/crypto/test_c010/test_c010.c
@@ -23,20 +23,29 @@
 
 client_test_t test_c010_crypto_list[] = {
     NULL,
-    psa_get_key_lifetime_test,
-    psa_get_key_lifetime_negative_test,
+    psa_key_attributes_set_get_test,
     NULL,
 };
 
 static int g_test_count = 1;
 
-int32_t psa_get_key_lifetime_test(security_t caller)
+int32_t psa_key_attributes_set_get_test(security_t caller)
 {
-    const uint8_t       *key_data;
-    psa_key_policy_t    policy;
-    int                 num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t             i, status;
-    psa_key_lifetime_t  lifetime;
+    int32_t               i, status;
+    psa_key_type_t        get_key_type;
+    psa_key_id_t          get_key_id;
+    psa_key_lifetime_t    get_key_lifetime;
+    psa_key_usage_t       get_key_usage_flags;
+    psa_algorithm_t       get_key_algorithm;
+    size_t                get_key_bits;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -48,121 +57,78 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
-         {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
-            {
-                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
-                    key_data = rsa_384_keypair;
-                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
-                    key_data = rsa_256_keypair;
-                else
-                    return VAL_STATUS_INVALID;
-            }
-            else
-            {
-                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
-                    key_data = rsa_384_keydata;
-                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
-                    key_data = rsa_256_keydata;
-                else
-                    return VAL_STATUS_INVALID;
-            }
-        }
-        else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
-        {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
-                key_data = ec_keypair;
-            else
-                key_data = ec_keydata;
-        }
-        else
-            key_data = check1[i].key_data;
+        /* Check if all the attributes are initialized to zero */
+        val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type);
+        TEST_ASSERT_EQUAL(get_key_type, 0, TEST_CHECKPOINT_NUM(3));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                        check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ID, &attributes, &get_key_id);
+        TEST_ASSERT_EQUAL(get_key_id, 0, TEST_CHECKPOINT_NUM(4));
 
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3));
+        val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, &attributes, &get_key_lifetime);
+        TEST_ASSERT_EQUAL(get_key_lifetime, 0, TEST_CHECKPOINT_NUM(5));
 
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags);
+        TEST_ASSERT_EQUAL(get_key_usage_flags, 0, TEST_CHECKPOINT_NUM(6));
 
-        /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                                      check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm);
+        TEST_ASSERT_EQUAL(get_key_algorithm, 0, TEST_CHECKPOINT_NUM(7));
 
-        /* Get the lifetime of a key slot */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, check1[i].key_handle, &lifetime);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+        val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &attributes, &get_key_bits);
+        TEST_ASSERT_EQUAL(get_key_bits,  0, TEST_CHECKPOINT_NUM(8));
 
-        TEST_ASSERT_EQUAL(lifetime, check1[i].lifetime, TEST_CHECKPOINT_NUM(7));
+       /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ID, &attributes, check1[i].key_id);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_LIFETIME, &attributes, check1[i].key_lifetime);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+        /* Check if all the attributes are as per the input */
+        val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type);
+        TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(9));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ID, &attributes, &get_key_id);
+        TEST_ASSERT_EQUAL(get_key_id, check1[i].key_id, TEST_CHECKPOINT_NUM(10));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, &attributes, &get_key_lifetime);
+        TEST_ASSERT_EQUAL(get_key_lifetime, check1[i].key_lifetime, TEST_CHECKPOINT_NUM(11));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags);
+        TEST_ASSERT_EQUAL(get_key_usage_flags, check1[i].usage, TEST_CHECKPOINT_NUM(12));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm);
+        TEST_ASSERT_EQUAL(get_key_algorithm, check1[i].key_alg, TEST_CHECKPOINT_NUM(13));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &attributes, &get_key_bits);
+        TEST_ASSERT_EQUAL(get_key_bits,  check1[i].attr_bits, TEST_CHECKPOINT_NUM(14));
+
+        /* Reset the attributes */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        /* Check if all the attributes are erased */
+        val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type);
+        TEST_ASSERT_EQUAL(get_key_type, 0, TEST_CHECKPOINT_NUM(15));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ID, &attributes, &get_key_id);
+        TEST_ASSERT_EQUAL(get_key_id, 0, TEST_CHECKPOINT_NUM(16));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, &attributes, &get_key_lifetime);
+        TEST_ASSERT_EQUAL(get_key_lifetime, 0, TEST_CHECKPOINT_NUM(17));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags);
+        TEST_ASSERT_EQUAL(get_key_usage_flags, 0, TEST_CHECKPOINT_NUM(18));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm);
+        TEST_ASSERT_EQUAL(get_key_algorithm, 0, TEST_CHECKPOINT_NUM(19));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &attributes, &get_key_bits);
+        TEST_ASSERT_EQUAL(get_key_bits,  0, TEST_CHECKPOINT_NUM(20));
     }
 
     return VAL_STATUS_SUCCESS;
 }
-
-int32_t psa_get_key_lifetime_negative_test(security_t caller)
-{
-    int                 num_checks = sizeof(check2)/sizeof(check2[0]);
-    int32_t             i, status;
-    psa_key_lifetime_t  lifetime;
-    psa_key_policy_t    policy;
-
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    for (i = 0; i < num_checks; i++)
-    {
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_get_key_lifetime with invalid key handle\n",
-                                                                                  g_test_count++);
-        /* Get the lifetime of a key slot */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, check2[i].key_handle, &lifetime);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_get_key_lifetime with zero as key handle\n",
-                                                                                  g_test_count++);
-        /* Get the lifetime of a key slot */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, 0, &lifetime);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_get_key_lifetime with empty key handle\n",
-                                                                                  g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Get the lifetime of a key slot */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, check2[i].key_handle, &lifetime);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
-     }
-
-     return VAL_STATUS_SUCCESS;
-}
diff --git a/api-tests/dev_apis/crypto/test_c010/test_c010.h b/api-tests/dev_apis/crypto/test_c010/test_c010.h
index 03308e8..eb5bdf7 100644
--- a/api-tests/dev_apis/crypto/test_c010/test_c010.h
+++ b/api-tests/dev_apis/crypto/test_c010/test_c010.h
@@ -18,14 +18,13 @@
 #define _TEST_C010_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c010)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c010)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c010_crypto_list[];
 
-int32_t psa_get_key_lifetime_test(security_t caller);
-int32_t psa_get_key_lifetime_negative_test(security_t caller);
+int32_t psa_key_attributes_set_get_test(security_t caller);
 #endif /* _TEST_C010_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c010/test_data.h b/api-tests/dev_apis/crypto/test_c010/test_data.h
index e8c7b2d..d6dc65d 100644
--- a/api-tests/dev_apis/crypto/test_c010/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c010/test_data.h
@@ -19,257 +19,18 @@
 
 typedef struct {
     char                    test_desc[75];
-    psa_key_handle_t        key_handle;
     psa_key_type_t          key_type;
-    uint8_t                 key_data[34];
-    uint32_t                key_length;
+    size_t                  attr_bits;
     psa_key_usage_t         usage;
     psa_algorithm_t         key_alg;
+    psa_key_id_t            key_id;
+    psa_key_lifetime_t      key_lifetime;
     psa_key_lifetime_t      lifetime;
-    uint32_t                expected_bit_length;
-    uint32_t                expected_key_length;
-    psa_status_t            expected_status;
 } test_data;
 
-static const uint8_t rsa_384_keypair[1];
-static const uint8_t rsa_384_keydata[1];
-
-static const uint8_t rsa_256_keypair[] = {
- 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0,
- 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27,
- 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F,
- 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE,
- 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1,
- 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B,
- 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA,
- 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63,
- 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34,
- 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73,
- 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10,
- 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4,
- 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5,
- 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23,
- 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0,
- 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63,
- 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77,
- 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39,
- 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33,
- 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5,
- 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01,
- 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50,
- 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7,
- 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79,
- 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A,
- 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA,
- 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB,
- 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A,
- 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22,
- 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4,
- 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F,
- 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64,
- 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32,
- 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3,
- 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6,
- 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9,
- 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41,
- 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F,
- 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C,
- 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A,
- 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58,
- 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9,
- 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6,
- 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC,
- 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1,
- 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43,
- 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD,
- 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C,
- 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD,
- 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0,
- 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53,
- 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D,
- 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63,
- 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B,
- 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1,
- 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B,
- 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED,
- 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB,
- 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C,
- 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3,
- 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4,
- 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB,
- 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52,
- 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA,
- 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77,
- 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3,
- 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F,
- 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22,
- 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95,
- 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39,
- 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE,
- 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41,
- 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2,
- 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C,
- 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED,
- 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE,
- 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5,
- 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8,
- 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF,
- 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC,
- 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63,
- 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D,
- 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C,
- 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A,
- 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76,
- 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD,
- 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43,
- 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC,
- 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5,
- 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2,
- 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F,
- 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0};
-
-static const uint8_t rsa_256_keydata[] = {
- 0x30, 0x82, 0x01, 0x0A,
- 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1,
- 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44,
- 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1,
- 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1,
- 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11,
- 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB,
- 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F,
- 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49,
- 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0,
- 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53,
- 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF,
- 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE,
- 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99,
- 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6,
- 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7,
- 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89,
- 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1,
- 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0,
- 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01};
-
-static const uint8_t ec_keydata[] = {
- 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f,
- 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0,
- 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b,
- 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98,
- 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20};
-
-static const uint8_t ec_keypair[] = {
- 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38,
- 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42};
-
 static test_data check1[] = {
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_get_key_lifetime 16 Byte AES\n", 1, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- PSA_KEY_LIFETIME_VOLATILE, BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
+{"Test set/get key attributes\n", PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_16B_KEY_SIZE),
+ PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, 0x1234,
+ PSA_KEY_LIFETIME_PERSISTENT
 },
-#endif
-#endif
-
-#ifdef NO_SUPPORT
-/* PSA crypto doesn't support these test scenarios */
-{"Test psa_get_key_lifetime 24 Byte AES\n", 2, PSA_KEY_TYPE_AES,
-{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
- 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9},
- AES_24B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR,
- PSA_KEY_LIFETIME_PERSISTENT, BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS
-},
-
-{"Test psa_get_key_lifetime 32 Byte AES\n", 3, PSA_KEY_TYPE_AES,
-{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
- 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
- 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CTR,
- PSA_KEY_LIFETIME_WRITE_ONCE, BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
-#ifdef ARCH_TEST_RSA_2048
-{"Test psa_get_key_lifetime 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
- {0},
- 270, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- PSA_KEY_LIFETIME_VOLATILE, 2048, 270, PSA_SUCCESS
-},
-#endif
-#endif
-
-#ifdef NO_SUPPORT
-/* PSA crypto doesn't support these test scenarios */
-{"Test psa_get_key_lifetime with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR,
- {0},
- 1193, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- PSA_KEY_LIFETIME_PERSISTENT, 2048, 1193, PSA_SUCCESS
-},
-
-{"Test psa_get_key_lifetime with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES,
- {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
- DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- PSA_KEY_LIFETIME_WRITE_ONCE, BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_DES_2KEY
-{"Test psa_get_key_lifetime with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES,
-{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
- DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- PSA_KEY_LIFETIME_VOLATILE, BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS
-},
-#endif
-#endif
-
-#ifdef NO_SUPPORT
-/* PSA crypto doesn't support these test scenarios */
-{"Test psa_get_key_lifetime with Triple DES 3-Key\n", 8, PSA_KEY_TYPE_DES,
-{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
- 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86,
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
- DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- PSA_KEY_LIFETIME_PERSISTENT, BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION
-#ifdef ARCH_TEST_ECC_CURVE_SECP256R1
-{"Test psa_get_key_lifetime with EC Public key\n", 9,
- PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
- {0},
- 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
- PSA_KEY_LIFETIME_VOLATILE, 256, 65, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_ECC_CURVE_SECP224R1
-{"Test psa_get_key_lifetime with EC keypair\n", 10,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1),
- {0},
- 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
- PSA_KEY_LIFETIME_VOLATILE, 224, 28, PSA_SUCCESS
-},
-#endif
-#endif
-
-};
-
-
-static test_data check2[] = {
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_get_key_lifetime with negative cases\n", 11, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_VOLATILE,
- BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
-},
-#endif
-#endif
 };
diff --git a/api-tests/dev_apis/crypto/test_c010/test_entry_c010.c b/api-tests/dev_apis/crypto/test_c010/test_entry_c010.c
index 23012e9..c8e32c7 100644
--- a/api-tests/dev_apis/crypto/test_c010/test_entry_c010.c
+++ b/api-tests/dev_apis/crypto/test_c010/test_entry_c010.c
@@ -20,7 +20,8 @@
 #include "test_c010.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 10)
-#define TEST_DESC "Testing crypto key management APIs\n"
+#define TEST_DESC "Testing crypto key attributes APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c011/test_c011.c b/api-tests/dev_apis/crypto/test_c011/test_c011.c
index 13176a2..4dbc8da 100644
--- a/api-tests/dev_apis/crypto/test_c011/test_c011.c
+++ b/api-tests/dev_apis/crypto/test_c011/test_c011.c
@@ -35,6 +35,12 @@
     int32_t                 i, status;
     psa_hash_operation_t    operation;
 
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
diff --git a/api-tests/dev_apis/crypto/test_c011/test_c011.h b/api-tests/dev_apis/crypto/test_c011/test_c011.h
index 3b33444..4c49ee9 100644
--- a/api-tests/dev_apis/crypto/test_c011/test_c011.h
+++ b/api-tests/dev_apis/crypto/test_c011/test_c011.h
@@ -18,9 +18,9 @@
 #define _TEST_C011_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c011)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c011)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c011/test_entry_c011.c b/api-tests/dev_apis/crypto/test_c011/test_entry_c011.c
index 33d5730..0913ede 100644
--- a/api-tests/dev_apis/crypto/test_c011/test_entry_c011.c
+++ b/api-tests/dev_apis/crypto/test_c011/test_entry_c011.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 11)
 #define TEST_DESC "Testing crypto hash functions APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c012/test_c012.c b/api-tests/dev_apis/crypto/test_c012/test_c012.c
index a02f8ad..1bce2b3 100644
--- a/api-tests/dev_apis/crypto/test_c012/test_c012.c
+++ b/api-tests/dev_apis/crypto/test_c012/test_c012.c
@@ -37,6 +37,12 @@
     int32_t                 i, status;
     psa_hash_operation_t    operation;
 
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
diff --git a/api-tests/dev_apis/crypto/test_c012/test_c012.h b/api-tests/dev_apis/crypto/test_c012/test_c012.h
index ca36220..6c82797 100644
--- a/api-tests/dev_apis/crypto/test_c012/test_c012.h
+++ b/api-tests/dev_apis/crypto/test_c012/test_c012.h
@@ -18,9 +18,9 @@
 #define _TEST_C012_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c012)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c012)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c012/test_entry_c012.c b/api-tests/dev_apis/crypto/test_c012/test_entry_c012.c
index cae0904..d749054 100644
--- a/api-tests/dev_apis/crypto/test_c012/test_entry_c012.c
+++ b/api-tests/dev_apis/crypto/test_c012/test_entry_c012.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 12)
 #define TEST_DESC "Testing crypto hash functions APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c013/test_c013.c b/api-tests/dev_apis/crypto/test_c013/test_c013.c
index ccec9ca..3072d14 100644
--- a/api-tests/dev_apis/crypto/test_c013/test_c013.c
+++ b/api-tests/dev_apis/crypto/test_c013/test_c013.c
@@ -37,6 +37,12 @@
     psa_hash_operation_t    operation;
     const char              *hash;
 
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
diff --git a/api-tests/dev_apis/crypto/test_c013/test_c013.h b/api-tests/dev_apis/crypto/test_c013/test_c013.h
index 5135dda..02e91e6 100644
--- a/api-tests/dev_apis/crypto/test_c013/test_c013.h
+++ b/api-tests/dev_apis/crypto/test_c013/test_c013.h
@@ -18,9 +18,9 @@
 #define _TEST_C013_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c013)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c013)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c013/test_entry_c013.c b/api-tests/dev_apis/crypto/test_c013/test_entry_c013.c
index 99ca4d2..b343e65 100644
--- a/api-tests/dev_apis/crypto/test_c013/test_entry_c013.c
+++ b/api-tests/dev_apis/crypto/test_c013/test_entry_c013.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 13)
 #define TEST_DESC "Testing crypto hash functions APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c014/test_c014.c b/api-tests/dev_apis/crypto/test_c014/test_c014.c
index 272e0e0..5a5863e 100644
--- a/api-tests/dev_apis/crypto/test_c014/test_c014.c
+++ b/api-tests/dev_apis/crypto/test_c014/test_c014.c
@@ -40,6 +40,12 @@
     char                    hash[HASH_64B];
     size_t                  hash_length, hash_size = sizeof(hash);
 
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
diff --git a/api-tests/dev_apis/crypto/test_c014/test_c014.h b/api-tests/dev_apis/crypto/test_c014/test_c014.h
index 348e07c..35dc791 100644
--- a/api-tests/dev_apis/crypto/test_c014/test_c014.h
+++ b/api-tests/dev_apis/crypto/test_c014/test_c014.h
@@ -18,9 +18,9 @@
 #define _TEST_C014_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c014)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c014)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c014/test_entry_c014.c b/api-tests/dev_apis/crypto/test_c014/test_entry_c014.c
index 3934edc..0a95c7a 100644
--- a/api-tests/dev_apis/crypto/test_c014/test_entry_c014.c
+++ b/api-tests/dev_apis/crypto/test_c014/test_entry_c014.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 14)
 #define TEST_DESC "Testing crypto hash functions APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c015/test_c015.c b/api-tests/dev_apis/crypto/test_c015/test_c015.c
index 8f725f3..3e989e7 100644
--- a/api-tests/dev_apis/crypto/test_c015/test_c015.c
+++ b/api-tests/dev_apis/crypto/test_c015/test_c015.c
@@ -36,6 +36,12 @@
     int32_t                 i, status;
     psa_hash_operation_t    operation;
 
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
diff --git a/api-tests/dev_apis/crypto/test_c015/test_c015.h b/api-tests/dev_apis/crypto/test_c015/test_c015.h
index bf435c2..34490be 100644
--- a/api-tests/dev_apis/crypto/test_c015/test_c015.h
+++ b/api-tests/dev_apis/crypto/test_c015/test_c015.h
@@ -18,9 +18,9 @@
 #define _TEST_C015_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c015)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c015)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c015/test_entry_c015.c b/api-tests/dev_apis/crypto/test_c015/test_entry_c015.c
index b403a95..5afd52c 100644
--- a/api-tests/dev_apis/crypto/test_c015/test_entry_c015.c
+++ b/api-tests/dev_apis/crypto/test_c015/test_entry_c015.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 15)
 #define TEST_DESC "Testing crypto hash functions APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c016/test_c016.c b/api-tests/dev_apis/crypto/test_c016/test_c016.c
index 9781827..63fa51c 100644
--- a/api-tests/dev_apis/crypto/test_c016/test_c016.c
+++ b/api-tests/dev_apis/crypto/test_c016/test_c016.c
@@ -24,7 +24,6 @@
 client_test_t test_c016_crypto_list[] = {
     NULL,
     psa_generate_key_test,
-    psa_generate_key_negative_test,
     NULL,
 };
 
@@ -33,17 +32,26 @@
 
 int32_t psa_generate_key_test(security_t caller)
 {
-    int                     num_checks = sizeof(check1)/sizeof(check1[0]);
-    uint32_t                i, length;
-    psa_key_policy_t        policy;
-    psa_key_type_t          key_type;
-    size_t                  bits;
-    int32_t                 status;
+    int32_t               i, status;
+    size_t                length;
+    psa_key_type_t        get_key_type;
+    psa_key_usage_t       get_key_usage;
+    psa_algorithm_t       get_key_alg;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_key_attributes_t  get_attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
 
+    /* Set the key data buffer to the input base on algorithm */
     for (i = 0; i < num_checks; i++)
     {
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
@@ -53,53 +61,51 @@
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Initialize a key policy structure to a default that forbids all
-        * usage of the key
-        */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
+       /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
-
-        /* Generate a key or key pair */
-        status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].bits, check1[i].extra, check1[i].extra_size);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5));
+        /* Generate the key */
+        status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, &attributes, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3));
 
         if (check1[i].expected_status != PSA_SUCCESS)
-        {
-            /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
             continue;
-        }
 
-        /* Get basic metadata about a key */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle,
-                    &key_type, &bits);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+        /* Get the attributes of the imported key and check if it matches the given value */
+        status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, check1[i].key_handle,
+                 &get_attributes);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
-        TEST_ASSERT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(8));
+        val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &get_attributes, &get_key_type);
+        TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(5));
 
-        TEST_ASSERT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(9));
+        if (check1[i].attr_bits != 0)
+            TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].attr_bits, TEST_CHECKPOINT_NUM(6));
+        else
+            TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].expected_bit_length,
+                              TEST_CHECKPOINT_NUM(7));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &get_attributes, &get_key_usage);
+        TEST_ASSERT_EQUAL(get_key_usage, check1[i].usage, TEST_CHECKPOINT_NUM(8));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &get_attributes, &get_key_alg);
+        TEST_ASSERT_EQUAL(get_key_alg, check1[i].key_alg, TEST_CHECKPOINT_NUM(9));
 
         /* Export a key in binary format */
         status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle, data,
                                       BUFFER_SIZE, &length);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(10));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
 
+        /* Check the attributes of the exported key */
         TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(11));
 
+        /* Reset the attributes */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &get_attributes);
+
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
@@ -107,78 +113,3 @@
 
     return VAL_STATUS_SUCCESS;
 }
-
-int32_t psa_generate_key_negative_test(security_t caller)
-{
-    int                     num_checks = sizeof(check2)/sizeof(check2[0]);
-    uint32_t                i;
-    psa_key_policy_t        policy;
-    int32_t                 status;
-
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    for (i = 0; i < num_checks; i++)
-    {
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_generate_key with unallocated key handle\n",
-                                                                                 g_test_count++);
-        /* Generate a key or key pair */
-        status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, check2[i].key_handle,
-                    check2[i].key_type, check2[i].bits, check2[i].extra, check2[i].extra_size);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_generate_key with zero as key handle\n",
-                                                                                 g_test_count++);
-        /* Generate a key or key pair */
-        status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, 0, check2[i].key_type,
-                                          check2[i].bits, check2[i].extra, check2[i].extra_size);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_generate_key with pre-occupied key handle\n",
-                                                                                 g_test_count++);
-        /* Initialize a key policy structure to a default that forbids all
-        * usage of the key
-        */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Generate a key or key pair */
-        status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, check2[i].key_handle,
-                    check2[i].key_type, check2[i].bits, check2[i].extra, check2[i].extra_size);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
-
-        /* Generate a key or key pair */
-        status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, check2[i].key_handle,
-                    check2[i].key_type, check2[i].bits, check2[i].extra, check2[i].extra_size);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_ALREADY_EXISTS, TEST_CHECKPOINT_NUM(8));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_generate_key with destroyed key handle\n",
-                                                                                 g_test_count++);
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
-
-        /* Generate a key or key pair */
-        status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, check2[i].key_handle,
-                    check2[i].key_type, check2[i].bits, check2[i].extra, check2[i].extra_size);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(10));
-    }
-
-    return VAL_STATUS_SUCCESS;
-}
-
diff --git a/api-tests/dev_apis/crypto/test_c016/test_c016.h b/api-tests/dev_apis/crypto/test_c016/test_c016.h
index 7697b91..3302aa8 100644
--- a/api-tests/dev_apis/crypto/test_c016/test_c016.h
+++ b/api-tests/dev_apis/crypto/test_c016/test_c016.h
@@ -18,14 +18,13 @@
 #define _TEST_C016_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c016)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c016)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c016_crypto_list[];
 
 int32_t psa_generate_key_test(security_t caller);
-int32_t psa_generate_key_negative_test(security_t caller);
 #endif /* _TEST_C016_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c016/test_data.h b/api-tests/dev_apis/crypto/test_c016/test_data.h
index 8bcd087..c184c90 100644
--- a/api-tests/dev_apis/crypto/test_c016/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c016/test_data.h
@@ -23,123 +23,89 @@
     psa_key_type_t          key_type;
     psa_key_usage_t         usage;
     psa_algorithm_t         key_alg;
-    size_t                  bits;
-    void                    *extra;
-    size_t                  extra_size;
+    size_t                  attr_bits;
     uint32_t                expected_bit_length;
     uint32_t                expected_key_length;
     psa_status_t            expected_status;
 } test_data;
 
-#ifdef FUTURE_SUPPORT
-static uint32_t rsa_extra = 3;
-#endif
-
 static test_data check1[] = {
 #ifdef ARCH_TEST_CIPER_MODE_CTR
 #ifdef ARCH_TEST_AES_128
 {"Test psa_generate_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES,
- PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_16B_KEY_SIZE),  NULL, 0,
+ PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE),
  BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_AES_192
 {"Test psa_generate_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES,
- PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_24B_KEY_SIZE),  NULL, 0,
+ PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_24B_KEY_SIZE),
  BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_AES_256
 {"Test psa_generate_key 32 Byte AES\n", 3, PSA_KEY_TYPE_AES,
- PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_32B_KEY_SIZE),  NULL, 0,
+ PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_32B_KEY_SIZE),
  BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_DES_1KEY
 {"Test psa_generate_key with DES 64 bit key\n", 4, PSA_KEY_TYPE_DES,
- PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES_8B_KEY_SIZE), NULL, 0,
+ PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(DES_8B_KEY_SIZE),
  BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_DES_2KEY
 {"Test psa_generate_key with Triple DES 2-Key\n", 5, PSA_KEY_TYPE_DES,
- PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES3_2KEY_SIZE), NULL, 0,
+ PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(DES3_2KEY_SIZE),
  BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_DES_3KEY
 {"Test psa_generate_key with Triple DES 3-Key\n", 6, PSA_KEY_TYPE_DES,
- PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(DES3_3KEY_SIZE), NULL, 0,
+ PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(DES3_3KEY_SIZE),
  BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS
 },
 #endif
 
-#ifdef ARCH_TEST_AES_256
-{"Test psa_generate_key with Null extra and Non-Zero extra size\n", 7, PSA_KEY_TYPE_AES,
- PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_32B_KEY_SIZE), NULL, sizeof(uint32_t),
- 0, 0, PSA_ERROR_INVALID_ARGUMENT
-},
-#endif
 #endif
 
-#ifdef FUTURE_SUPPORT
-{"Test psa_generate_key with RSA 2048 Keypair\n", 8, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_generate_key with RSA 2048 Keypair\n", 7, PSA_KEY_TYPE_RSA_KEY_PAIR,
  PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN | PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- 2048, NULL, 0,
- 2048, 1193, PSA_SUCCESS
+ 2048, 2048, 1192, PSA_SUCCESS
 },
-#endif
 
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 #ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION
-{"Test psa_generate_key with ECC KeyPair\n", 9,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1),
- PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
- 224, NULL, 0,
+{"Test psa_generate_key with ECC KeyPair\n", 8,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
+ PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, 224,
  224, 28, PSA_SUCCESS
 },
 #endif
 #endif
 
-#ifdef FUTURE_SUPPORT
-{"Test psa_generate_key with Non-Null extra for 32 Byte AES key\n", 10, PSA_KEY_TYPE_AES,
- PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_32B_KEY_SIZE), &rsa_extra, sizeof(uint32_t),
- 0, 0, PSA_ERROR_INVALID_ARGUMENT
-},
-#endif
-
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
 #ifdef ARCH_TEST_RSA_2048
-{"Test psa_generate_key with RSA 2048 Public key\n", 11, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
+{"Test psa_generate_key with RSA 2048 Public key\n", 9, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
  PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN | PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- 2048, NULL, 0,
- 2048, 1193, PSA_ERROR_NOT_SUPPORTED
+ 2048, 2048, 1192, PSA_ERROR_NOT_SUPPORTED
 },
 #endif
 #endif
-};
 
-static test_data check2[] = {
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_generate_key negative cases\n", 12, PSA_KEY_TYPE_AES,
- PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_16B_KEY_SIZE),  NULL, 0,
- BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
+{"Test psa_generate_key with invalid key type\n", 10, 0,
+ PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE),
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_NOT_SUPPORTED
 },
-#endif
-#endif
+
+{"Test psa_generate_key with invalid usage flags\n", 11, PSA_KEY_TYPE_AES,
+ PSA_KEY_USAGE_INVALID, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE),
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
+},
 };
diff --git a/api-tests/dev_apis/crypto/test_c016/test_entry_c016.c b/api-tests/dev_apis/crypto/test_c016/test_entry_c016.c
index 3957dd6..c88aa16 100644
--- a/api-tests/dev_apis/crypto/test_c016/test_entry_c016.c
+++ b/api-tests/dev_apis/crypto/test_c016/test_entry_c016.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 16)
 #define TEST_DESC "Testing crypto generator functions APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c017/test_c017.c b/api-tests/dev_apis/crypto/test_c017/test_c017.c
index 8aeab9c..4536f35 100644
--- a/api-tests/dev_apis/crypto/test_c017/test_c017.c
+++ b/api-tests/dev_apis/crypto/test_c017/test_c017.c
@@ -27,7 +27,7 @@
     NULL,
 };
 
-static int g_test_count = 1;
+static int     g_test_count = 1;
 static uint8_t data[BUFFER_SIZE], changed[BUFFER_SIZE];
 
 int32_t psa_generate_random_test(security_t caller)
@@ -37,6 +37,12 @@
     uint8_t     trail[] = "don't overwrite me";
     int32_t     status;
 
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
diff --git a/api-tests/dev_apis/crypto/test_c017/test_c017.h b/api-tests/dev_apis/crypto/test_c017/test_c017.h
index ee8c4ef..dedf975 100644
--- a/api-tests/dev_apis/crypto/test_c017/test_c017.h
+++ b/api-tests/dev_apis/crypto/test_c017/test_c017.h
@@ -18,9 +18,9 @@
 #define _TEST_C017_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c017)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c017)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c017/test_entry_c017.c b/api-tests/dev_apis/crypto/test_c017/test_entry_c017.c
index 500d2ec..d39eb09 100644
--- a/api-tests/dev_apis/crypto/test_c017/test_entry_c017.c
+++ b/api-tests/dev_apis/crypto/test_c017/test_entry_c017.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,7 +20,8 @@
 #include "test_c017.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 17)
-#define TEST_DESC "Testing crypto generator functions APIs\n"
+#define TEST_DESC "Testing crypto generation APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c018/test_c018.c b/api-tests/dev_apis/crypto/test_c018/test_c018.c
index 0bdf91a..e85842d 100644
--- a/api-tests/dev_apis/crypto/test_c018/test_c018.c
+++ b/api-tests/dev_apis/crypto/test_c018/test_c018.c
@@ -23,157 +23,174 @@
 
 client_test_t test_c018_crypto_list[] = {
     NULL,
-    psa_generator_read_test,
-    psa_generator_read_negative_test,
+    psa_key_derivation_input_key_test,
+    psa_key_derivation_input_key_negative_test,
     NULL,
 };
 
-static int      g_test_count = 1;
-static uint8_t  data[BUFFER_SIZE_HIGH];
+static int g_test_count = 1;
 
-int32_t psa_generator_read_test(security_t caller)
+int32_t psa_key_derivation_input_key_test(security_t caller)
 {
-    int                     num_checks = sizeof(check1)/sizeof(check1[0]);
-    uint32_t                i, j, data_sum, remaining_size;
-    psa_key_policy_t        policy;
-    psa_crypto_generator_t  generator, invalid_generator;
-    int32_t                 status;
+    int32_t                        i, status;
+    const uint8_t                 *key_data;
+    int                            num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_derivation_operation_t operation = PSA_KEY_DERIVATION_OPERATION_INIT;
+    psa_key_attributes_t           attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
 
+    /* Set the key data buffer to the input base on algorithm */
     for (i = 0; i < num_checks; i++)
     {
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        memset(&generator, 0, sizeof(generator));
-        memset(&invalid_generator, 0xDEADEAD, sizeof(invalid_generator));
-        memset(data, 0, sizeof(data));
+        if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
+        {
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
+            {
+                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
+                    key_data = rsa_384_keypair;
+                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
+                    key_data = rsa_256_keypair;
+                else
+                    return VAL_STATUS_INVALID;
+            }
+            else
+            {
+                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
+                    key_data = rsa_384_keydata;
+                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
+                    key_data = rsa_256_keydata;
+                else
+                    return VAL_STATUS_INVALID;
+            }
+        }
+        else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
+        {
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
+                key_data = ec_keypair;
+            else
+                key_data = ec_keydata;
+        }
+        else
+            key_data = check1[i].key_data;
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                                      check1[i].key_type, check1[i].key_data, check1[i].key_length);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        if (check1[i].expected_status == PSA_SUCCESS)
+        {
+            /* Provide an input for key derivation or key agreement without setup should be
+             * failure.
+             */
+            status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation,
+                     check1[i].step, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(4));
+        }
+
+        /* Set up a key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation,
+                 check1[i].alg);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
-        /* Set up a key derivation operation. Using this function to initialize the generate as
-         * XOR or PRNG generator initialization is not implemented.
-         */
-        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator, check1[i].key_handle,
-                    check1[i].key_alg, &check1[i].salt, check1[i].salt_length, &check1[i].label,
-                    check1[i].label_length, check1[i].capacity);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Read some data from a generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator, data,
-                                      check1[i].size);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7));
+        /* Provide an input for key derivation or key agreement */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation,
+                 check1[i].step, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
-            /* Abort a generator */
-            status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
-
-            /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+            /* Abort the key derivation operation */
+            status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
             continue;
         }
 
-        data_sum = 0;
-        /* Check that if generated data are zero */
-        for (j = 0; j < check1[i].size; j++)
-        {
-            data_sum += data[j];
-        }
-
-        memset(data, 0, sizeof(data));
-        TEST_ASSERT_NOT_EQUAL(data_sum, 0, TEST_CHECKPOINT_NUM(10));
-
-        remaining_size = check1[i].capacity - check1[i].size;
-        if (remaining_size > 0)
-        {
-            /* Read some data from a generator */
-            status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator,
-                                          data, remaining_size);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
-
-            data_sum = 0;
-            /* Check that if generated data are zero */
-            for (j = 0; j < remaining_size; j++)
-            {
-                data_sum += data[j];
-            }
-
-            memset(data, 0, sizeof(data));
-            TEST_ASSERT_NOT_EQUAL(data_sum, 0, TEST_CHECKPOINT_NUM(12));
-
-            /* Read some data from a generator */
-            status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator,
-                                          data, check1[i].size);
-            TEST_ASSERT_EQUAL(status, PSA_ERROR_INSUFFICIENT_DATA, TEST_CHECKPOINT_NUM(13));
-        }
-
-        /* Abort a generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14));
-
-        /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+
+        /* Provide an input for key derivation or key agreement */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation,
+                 check1[i].step, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(9));
+
+        /* Abort the key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
 }
 
-int32_t psa_generator_read_negative_test(security_t caller)
+int32_t psa_key_derivation_input_key_negative_test(security_t caller)
 {
-    uint32_t                i;
-    psa_crypto_generator_t  generator[] = {psa_crypto_generator_init(),
-                                           PSA_CRYPTO_GENERATOR_INIT, {0} };
-    uint32_t                generator_count = sizeof(generator)/sizeof(generator[0]);
-    int32_t                 status;
-
-    val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
-    val->print(PRINT_TEST, "Test psa_generator_read without setup\n", 0);
+    int32_t                        i, status;
+    int                            num_checks = sizeof(check2)/sizeof(check2[0]);
+    psa_key_derivation_operation_t operation = PSA_KEY_DERIVATION_OPERATION_INIT;
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
 
-    memset(data, 0, sizeof(data));
-
-    for (i = 0; i < generator_count; i++)
+    /* Set the key data buffer to the input base on algorithm */
+    for (i = 0; i < num_checks; i++)
     {
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator[i], data, 1);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(2));
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check2[i].test_desc, 0);
 
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator[i]);
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Set up a key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation,
+                 check2[i].alg);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Provide an input for key derivation or key agreement */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation,
+                 check2[i].step, check2[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
+
+        /* Abort the key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+
+        /* Set up a key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation,
+                 check2[i].alg);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        /* Provide an input for key derivation or key agreement */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation,
+                 check2[i].step, 0);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c018/test_c018.h b/api-tests/dev_apis/crypto/test_c018/test_c018.h
index bd19651..3d18506 100644
--- a/api-tests/dev_apis/crypto/test_c018/test_c018.h
+++ b/api-tests/dev_apis/crypto/test_c018/test_c018.h
@@ -18,14 +18,14 @@
 #define _TEST_C018_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c018)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c018)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c018_crypto_list[];
 
-int32_t psa_generator_read_test(security_t caller);
-int32_t psa_generator_read_negative_test(security_t caller);
+int32_t psa_key_derivation_input_key_test(security_t caller);
+int32_t psa_key_derivation_input_key_negative_test(security_t caller);
 #endif /* _TEST_C018_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c018/test_data.h b/api-tests/dev_apis/crypto/test_c018/test_data.h
index f2c136e..56d26fc 100644
--- a/api-tests/dev_apis/crypto/test_c018/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c018/test_data.h
@@ -18,80 +18,254 @@
 #include "val_crypto.h"
 
 typedef struct {
-    char                    test_desc[75];
-    psa_key_handle_t        key_handle;
-    psa_key_type_t          key_type;
-    uint8_t                 key_data[32];
-    uint32_t                key_length;
-    psa_key_usage_t         usage;
-    psa_algorithm_t         key_alg;
-    uint8_t                 salt[16];
-    size_t                  salt_length;
-    uint8_t                 label[16];
-    size_t                  label_length;
-    size_t                  capacity;
-    size_t                  size;
-    psa_status_t            expected_status;
+    char                        test_desc[75];
+    psa_key_handle_t            key_handle;
+    psa_key_type_t              key_type;
+    uint8_t                     key_data[34];
+    uint32_t                    key_length;
+    size_t                      attr_bits;
+    psa_key_usage_t             usage;
+    psa_algorithm_t             key_alg;
+    psa_key_derivation_step_t   step;
+    psa_algorithm_t             alg;
+    uint32_t                    expected_bit_length;
+    uint32_t                    expected_key_length;
+    psa_status_t                expected_status;
 } test_data;
 
+static const uint8_t rsa_384_keypair[1];
+static const uint8_t rsa_384_keydata[1];
+
+static const uint8_t rsa_256_keypair[] = {
+ 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0,
+ 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27,
+ 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F,
+ 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE,
+ 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1,
+ 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B,
+ 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA,
+ 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63,
+ 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34,
+ 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73,
+ 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10,
+ 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4,
+ 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5,
+ 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23,
+ 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0,
+ 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63,
+ 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77,
+ 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39,
+ 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33,
+ 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5,
+ 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01,
+ 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50,
+ 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7,
+ 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79,
+ 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A,
+ 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA,
+ 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB,
+ 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A,
+ 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22,
+ 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4,
+ 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F,
+ 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64,
+ 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32,
+ 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3,
+ 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6,
+ 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9,
+ 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41,
+ 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F,
+ 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C,
+ 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A,
+ 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58,
+ 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9,
+ 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6,
+ 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC,
+ 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1,
+ 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43,
+ 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD,
+ 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C,
+ 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD,
+ 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0,
+ 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53,
+ 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D,
+ 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63,
+ 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B,
+ 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1,
+ 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B,
+ 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED,
+ 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB,
+ 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C,
+ 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3,
+ 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4,
+ 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB,
+ 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52,
+ 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA,
+ 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77,
+ 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3,
+ 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F,
+ 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22,
+ 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95,
+ 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39,
+ 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE,
+ 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41,
+ 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2,
+ 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C,
+ 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED,
+ 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE,
+ 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5,
+ 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8,
+ 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF,
+ 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC,
+ 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63,
+ 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D,
+ 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C,
+ 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A,
+ 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76,
+ 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD,
+ 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43,
+ 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC,
+ 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5,
+ 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2,
+ 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F,
+ 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0};
+
+static const uint8_t rsa_256_keydata[] = {
+ 0x30, 0x82, 0x01, 0x0A,
+ 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1,
+ 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44,
+ 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1,
+ 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1,
+ 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11,
+ 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB,
+ 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F,
+ 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49,
+ 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0,
+ 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53,
+ 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF,
+ 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE,
+ 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99,
+ 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6,
+ 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7,
+ 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89,
+ 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1,
+ 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0,
+ 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01};
+
+static const uint8_t ec_keydata[] = {
+ 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f,
+ 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0,
+ 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b,
+ 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98,
+ 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20};
+
+static const uint8_t ec_keypair[] = {
+ 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38,
+ 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42};
+
 static test_data check1[] = {
-/* Covers the following cases
- * - 16 Byte key
- * - SHA 256
- * - Output size less than generator capacity
- */
-#ifdef ARCH_TEST_HKDF
-#ifdef ARCH_TEST_SHA256
-{"Test psa_generator_read to get 16 Byte data with SHA-256\n", 1, PSA_KEY_TYPE_DERIVE,
+
+{"Test psa_key_derivation_input_key 16 Byte Key\n", 1, PSA_KEY_TYPE_DERIVE,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
- {0}, 0, {0}, 0, 32,
- 16, PSA_SUCCESS
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ PSA_KEY_DERIVATION_INPUT_SECRET, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
+},
+
+{"Test psa_key_derivation_input_key with invalid usage\n", 2, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ PSA_KEY_DERIVATION_INPUT_SECRET, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_NOT_PERMITTED
+},
+
+{"Test psa_key_derivation_input_key with step as label\n", 3, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ PSA_KEY_DERIVATION_INPUT_LABEL, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
+},
+
+{"Test psa_key_derivation_input_key with step as info\n", 4, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ PSA_KEY_DERIVATION_INPUT_INFO, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
+},
+
+{"Test psa_key_derivation_input_key with step as seed\n", 5, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ PSA_KEY_DERIVATION_INPUT_SEED, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
+},
+
+{"Test psa_key_derivation_input_key with step as salt\n", 6, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ PSA_KEY_DERIVATION_INPUT_SALT, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
+},
+
+#ifdef ARCH_TEST_AES_192
+{"Test psa_key_derivation_input_key with key type as AES(not derive)\n", 7, PSA_KEY_TYPE_AES,
+{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
+ 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05},
+ AES_24B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ PSA_KEY_DERIVATION_INPUT_SECRET, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT,
 },
 #endif
-/* Covers the following cases
- * - 32 Byte key
- * - SHA 512
- * - Output size equal to generator capacity
- */
-#ifdef ARCH_TEST_SHA512
-{"Test psa_generator_read to get 32 Byte data with SHA-512\n", 2, PSA_KEY_TYPE_DERIVE,
+
+{"Test psa_key_derivation_input_key incorrect key algorithm\n", 8, PSA_KEY_TYPE_DERIVE,
 {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
  0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
  0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_512),
- {0}, 0, {0}, 0, 64,
- 64, PSA_SUCCESS
-},
-#endif
-
-/* Covers the following cases
- * - 8 Byte Key
- * - SHA 1
- * - Output size greater than the generator capacity
- */
-#ifdef ARCH_TEST_SHA1
-{"Test psa_generator_read to get 8 Byte data with SHA-1\n", 3, PSA_KEY_TYPE_DERIVE,
-{0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
- DES_8B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_1),
- {0}, 0, {0}, 0, 64,
- 70, PSA_ERROR_INSUFFICIENT_DATA
+ AES_32B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_CTR, PSA_KEY_DERIVATION_INPUT_SECRET,
+ PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_ERROR_NOT_PERMITTED
 },
 
-{"Test psa_generator_read to request maximum capacity\n", 4, PSA_KEY_TYPE_DERIVE,
-{0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
- DES_8B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_1),
- {0}, 0, {0}, 0, (255 * 20),
- (255 * 20), PSA_SUCCESS
+#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
+#ifdef ARCH_TEST_RSA_2048
+{"Test psa_key_derivation_input_key 2048 RSA public key\n", 9, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
+ {0},
+ 270, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), PSA_KEY_DERIVATION_INPUT_SECRET,
+ PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ 2048, 270, PSA_ERROR_INVALID_ARGUMENT,
 },
 
-{"Test psa_generator_read to request maximum capacity +1\n", 5, PSA_KEY_TYPE_DERIVE,
-{0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
- DES_8B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_1),
- {0}, 0, {0}, 0, (255 * 20),
- ((255 * 20) + 1), PSA_ERROR_INSUFFICIENT_DATA
+{"Test psa_key_derivation_input_key with RSA 2048 keypair\n", 10, PSA_KEY_TYPE_RSA_KEY_PAIR,
+ {0},
+ 1193, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), PSA_KEY_DERIVATION_INPUT_SECRET,
+ PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ 2048, 1193, PSA_ERROR_INVALID_ARGUMENT,
 },
 #endif
 #endif
+
+{"Test psa_key_derivation_input_key with zero as step\n", 1, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ 0, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
+},
+};
+
+static test_data check2[] = {
+
+{"Test psa_key_derivation_input_key invalid handle\n", 11, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ PSA_KEY_DERIVATION_INPUT_SECRET, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_HANDLE
+},
 };
diff --git a/api-tests/dev_apis/crypto/test_c018/test_entry_c018.c b/api-tests/dev_apis/crypto/test_c018/test_entry_c018.c
index 4ae7f2d..13ee596 100644
--- a/api-tests/dev_apis/crypto/test_c018/test_entry_c018.c
+++ b/api-tests/dev_apis/crypto/test_c018/test_entry_c018.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,14 +20,15 @@
 #include "test_c018.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 18)
-#define TEST_DESC "Testing crypto generator functions APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
 
 void test_entry(val_api_t *val_api, psa_api_t *psa_api)
 {
-    int32_t  status = VAL_STATUS_SUCCESS;
+    int32_t   status = VAL_STATUS_SUCCESS;
 
     val = val_api;
     psa = psa_api;
diff --git a/api-tests/dev_apis/crypto/test_c019/test_c019.c b/api-tests/dev_apis/crypto/test_c019/test_c019.c
index 3f0a670..2cd2f48 100644
--- a/api-tests/dev_apis/crypto/test_c019/test_c019.c
+++ b/api-tests/dev_apis/crypto/test_c019/test_c019.c
@@ -19,26 +19,28 @@
 #include "val_target.h"
 #include "test_c019.h"
 #include "test_data.h"
-#include "val_crypto.h"
 
 client_test_t test_c019_crypto_list[] = {
     NULL,
-    psa_get_generator_capacity_test,
-    psa_get_generator_capacity_negative_test,
+    psa_key_derivation_key_agreement_test,
+    psa_key_derivation_key_agreement_negative_test,
     NULL,
 };
 
-static int       g_test_count = 1;
-static uint8_t   data[BUFFER_SIZE];
+static int         g_test_count = 1;
 
-int32_t psa_get_generator_capacity_test(security_t caller)
+int32_t psa_key_derivation_key_agreement_test(security_t caller)
 {
-    int                     num_checks = sizeof(check1)/sizeof(check1[0]);
-    uint32_t                i, remaining_size;
-    size_t                  capacity;
-    psa_key_policy_t        policy;
-    psa_crypto_generator_t  generator;
-    int32_t                 status;
+    int                             num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t                         i, status;
+    psa_key_attributes_t            attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_key_derivation_operation_t  operation = PSA_KEY_DERIVATION_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -49,112 +51,85 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        memset(&generator, 0, sizeof(generator));
-        memset(data, 0, sizeof(data));
-
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                                      check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
-        /* Set up a key derivation operation. Using this function to initialize the generate as
-         * XOR or PRNG generator initialization is not implemented.
-         */
-        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator, check1[i].key_handle,
-                    check1[i].key_alg, check1[i].salt, check1[i].salt_length, check1[i].label,
-                    check1[i].label_length, check1[i].capacity);
+        /* Set up a key agreement operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation,
+                 check1[i].key_alg);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+
+        /* Perform a key agreement */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT, &operation,
+                 check1[i].step, check1[i].key_handle, check1[i].peer_key,
+                 check1[i].peer_key_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5));
+
+        /* Abort the key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
 
-        /* Retrieve the current capacity of a generator */
-        status = val->crypto_function(VAL_CRYPTO_GET_GENERATOR_CAPACITY, &generator, &capacity);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7));
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
 
         if (check1[i].expected_status != PSA_SUCCESS)
-        {
-            /* Abort a generator */
-            status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
-
-            /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
-
             continue;
-        }
 
-        TEST_ASSERT_EQUAL(capacity, check1[i].capacity, TEST_CHECKPOINT_NUM(10));
-
-        /* Generate random bytes */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator, data,
-                                      check1[i].size);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
-
-        remaining_size = check1[i].capacity - check1[i].size;
-
-        /* Retrieve the current capacity of a generator */
-        status = val->crypto_function(VAL_CRYPTO_GET_GENERATOR_CAPACITY, &generator, &capacity);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
-
-        TEST_ASSERT_EQUAL(capacity, remaining_size, TEST_CHECKPOINT_NUM(13));
-
-        /* Abort a generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14));
-
-        /* Destroy the key */
+        /* Destroy a key and restore the slot to its default state */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
     }
 
     return VAL_STATUS_SUCCESS;
 }
 
-int32_t psa_get_generator_capacity_negative_test(security_t caller)
+int32_t psa_key_derivation_key_agreement_negative_test(security_t caller)
 {
-    uint32_t                i;
-    size_t                  capacity;
-    psa_crypto_generator_t  generator[] = {psa_crypto_generator_init(),
-                                           PSA_CRYPTO_GENERATOR_INIT, {0} };
-    uint32_t                generator_count = sizeof(generator)/sizeof(generator[0]);
-    int32_t                 status;
+    int32_t                         i, status;
+    int                             num_checks = sizeof(check2)/sizeof(check2[0]);
+    psa_key_derivation_operation_t  operation = PSA_KEY_DERIVATION_OPERATION_INIT;
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
 
-    val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
-    val->print(PRINT_TEST, "Test psa_get_generator_capacity without setup\n", 0);
-
-    for (i = 0; i < generator_count; i++)
+    for (i = 0; i < num_checks; i++)
     {
-        /* Retrieve the current capacity of a generator */
-        status = val->crypto_function(VAL_CRYPTO_GET_GENERATOR_CAPACITY, &generator[i], &capacity);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(2));
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Abort a generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator[i]);
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation,
+                 check2[i].key_alg);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        val->print(PRINT_TEST, "[Check %d] Test psa_key_derivation_key_agreement "
+                               "- Invalid handle\n", g_test_count++);
+
+        /* Set up a key agreement operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT, &operation,
+                 check2[i].step, check2[i].key_handle, check2[i].peer_key,
+                 check2[i].peer_key_length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
+
+        val->print(PRINT_TEST, "[Check %d] Test psa_key_derivation_key_agreement"
+                               " - Zero as handle\n", g_test_count++);
+
+        /* Set up a key agreement operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT, &operation,
+                 check2[i].step, 0, check2[i].peer_key, check2[i].peer_key_length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(5));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c019/test_c019.h b/api-tests/dev_apis/crypto/test_c019/test_c019.h
index d8924d3..a91daed 100644
--- a/api-tests/dev_apis/crypto/test_c019/test_c019.h
+++ b/api-tests/dev_apis/crypto/test_c019/test_c019.h
@@ -18,14 +18,14 @@
 #define _TEST_C019_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c019)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c019)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c019_crypto_list[];
 
-int32_t psa_get_generator_capacity_test(security_t caller);
-int32_t psa_get_generator_capacity_negative_test(security_t caller);
+int32_t psa_key_derivation_key_agreement_test(security_t caller);
+int32_t psa_key_derivation_key_agreement_negative_test(security_t caller);
 #endif /* _TEST_C019_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c019/test_data.h b/api-tests/dev_apis/crypto/test_c019/test_data.h
index 592d03e..4ce7bd7 100644
--- a/api-tests/dev_apis/crypto/test_c019/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c019/test_data.h
@@ -18,52 +18,174 @@
 #include "val_crypto.h"
 
 typedef struct {
-    char                    test_desc[75];
-    psa_key_handle_t        key_handle;
-    psa_key_type_t          key_type;
-    uint8_t                 key_data[32];
-    uint32_t                key_length;
-    psa_key_usage_t         usage;
-    psa_algorithm_t         key_alg;
-    uint8_t                 salt[16];
-    size_t                  salt_length;
-    uint8_t                 label[16];
-    size_t                  label_length;
-    size_t                  capacity;
-    size_t                  size;
-    psa_status_t            expected_status;
+    char                        test_desc[85];
+    psa_key_handle_t            key_handle;
+    psa_key_type_t              key_type;
+    uint8_t                     key_data[91];
+    uint32_t                    key_length;
+    psa_key_usage_t             usage;
+    psa_algorithm_t             key_alg;
+    psa_key_derivation_step_t   step;
+    uint8_t                     peer_key[120];
+    size_t                      peer_key_length;
+    psa_status_t                expected_status;
 } test_data;
 
+
 static test_data check1[] = {
-/* Covers the following cases
- * - 16 Byte key
- * - SHA 256
- * - Output size less than generator capacity
- */
-#ifdef ARCH_TEST_HKDF
-#ifdef ARCH_TEST_SHA256
-{"Test psa_generator_get_capacity to get 16 Byte data with SHA-256\n", 1, PSA_KEY_TYPE_DERIVE,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
- {0}, 0, {0}, 0, 32,
- 16, PSA_SUCCESS
+#ifdef ARCH_TEST_ECDH
+#ifdef ARCH_TEST_ECC_CURVE_SECP256R1
+{"Test psa_key_derivation_key_agreement - ECDH SECP256R1\n", 1,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2,
+ 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a,
+ 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET,
+{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
+ 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
+ 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
+ 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0,
+ 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab},
+ 65, PSA_SUCCESS
+},
+
+{"Test psa_key_derivation_key_agreement - Invalid step\n", 2,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2,
+ 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a,
+ 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_LABEL,
+{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
+ 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
+ 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
+ 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0,
+ 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab},
+ 65, PSA_ERROR_INVALID_ARGUMENT
+},
+
+#endif
+
+#ifdef ARCH_TEST_ECC_CURVE_SECP384R1
+{"Test psa_key_derivation_key_agreement - ECDH SECP384R1\n", 3,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP384R1),
+{0x09, 0x9f, 0x3c, 0x70, 0x34, 0xd4, 0xa2, 0xc6, 0x99, 0x88, 0x4d, 0x73, 0xa3,
+ 0x75, 0xa6, 0x7f, 0x76, 0x24, 0xef, 0x7c, 0x6b, 0x3c, 0x0f, 0x16, 0x06, 0x47,
+ 0xb6, 0x74, 0x14, 0xdc, 0xe6, 0x55, 0xe3, 0x5b, 0x53, 0x80, 0x41, 0xe6, 0x49,
+ 0xee, 0x3f, 0xae, 0xf8, 0x96, 0x78, 0x3a, 0xb1, 0x94}, 48, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET,
+{0x04, 0xe5, 0x58,
+ 0xdb, 0xef, 0x53, 0xee, 0xcd, 0xe3, 0xd3, 0xfc, 0xcf, 0xc1, 0xae, 0xa0, 0x8a,
+ 0x89, 0xa9, 0x87, 0x47, 0x5d, 0x12, 0xfd, 0x95, 0x0d, 0x83, 0xcf, 0xa4, 0x17,
+ 0x32, 0xbc, 0x50, 0x9d, 0x0d, 0x1a, 0xc4, 0x3a, 0x03, 0x36, 0xde, 0xf9, 0x6f,
+ 0xda, 0x41, 0xd0, 0x77, 0x4a, 0x35, 0x71, 0xdc, 0xfb, 0xec, 0x7a, 0xac, 0xf3,
+ 0x19, 0x64, 0x72, 0x16, 0x9e, 0x83, 0x84, 0x30, 0x36, 0x7f, 0x66, 0xee, 0xbe,
+ 0x3c, 0x6e, 0x70, 0xc4, 0x16, 0xdd, 0x5f, 0x0c, 0x68, 0x75, 0x9d, 0xd1, 0xff,
+ 0xf8, 0x3f, 0xa4, 0x01, 0x42, 0x20, 0x9d, 0xff, 0x5e, 0xaa, 0xd9, 0x6d, 0xb9,
+ 0xe6, 0x38, 0x6c}, 97,
+ PSA_SUCCESS
 },
 #endif
 
-/* Covers the following cases
- * - 32 Byte key
- * - SHA 512
- * - Output size equal to generator capacity
- */
-#ifdef ARCH_TEST_SHA512
-{"Test psa_generator_get_capacity to get 32 Byte data with SHA-512\n", 2, PSA_KEY_TYPE_DERIVE,
-{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
- 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
- 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_512),
- {0}, 0, {0}, 0, 64,
- 64, PSA_SUCCESS
+#ifdef ARCH_TEST_ECC_CURVE_SECP256R1
+{"Test psa_key_derivation_key_agreement - Invalid usage\n", 4,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2,
+ 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a,
+ 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_ENCRYPT,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET,
+{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
+ 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
+ 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
+ 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0,
+ 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab},
+ 65,
+ PSA_ERROR_NOT_PERMITTED
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_ECC_CURVE_SECP256R1
+#ifdef ARCH_TEST_SHA256
+#ifdef ARCH_TEST_HKDF
+{"Test psa_key_derivation_key_agreement - KDF instead of a key agreement algorithm\n", 5,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2,
+ 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a,
+ 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+ PSA_KEY_DERIVATION_INPUT_SECRET,
+{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
+ 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
+ 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
+ 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0,
+ 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab},
+ 65,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_ECDH
+{"Test psa_key_derivation_key_agreement - Public key on different curve\n", 6,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2,
+ 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a,
+ 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET,
+{0x04, 0xe5, 0x58,
+ 0xdb, 0xef, 0x53, 0xee, 0xcd, 0xe3, 0xd3, 0xfc, 0xcf, 0xc1, 0xae, 0xa0, 0x8a,
+ 0x89, 0xa9, 0x87, 0x47, 0x5d, 0x12, 0xfd, 0x95, 0x0d, 0x83, 0xcf, 0xa4, 0x17,
+ 0x32, 0xbc, 0x50, 0x9d, 0x0d, 0x1a, 0xc4, 0x3a, 0x03, 0x36, 0xde, 0xf9, 0x6f,
+ 0xda, 0x41, 0xd0, 0x77, 0x4a, 0x35, 0x71, 0xdc, 0xfb, 0xec, 0x7a, 0xac, 0xf3,
+ 0x19, 0x64, 0x72, 0x16, 0x9e, 0x83, 0x84, 0x30, 0x36, 0x7f, 0x66, 0xee, 0xbe,
+ 0x3c, 0x6e, 0x70, 0xc4, 0x16, 0xdd, 0x5f, 0x0c, 0x68, 0x75, 0x9d, 0xd1, 0xff,
+ 0xf8, 0x3f, 0xa4, 0x01, 0x42, 0x20, 0x9d, 0xff, 0x5e, 0xaa, 0xd9, 0x6d, 0xb9,
+ 0xe6, 0x38, 0x6c}, 97,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+
+{"Test psa_key_derivation_key_agreement - Public key instead of private key\n", 7,
+ PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
+ 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
+ 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
+ 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0,
+ 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab},
+ 65, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET,
+{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
+ 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
+ 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
+ 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0,
+ 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab},
+ 65, PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+#endif
+};
+
+static test_data check2[] = {
+#ifdef ARCH_TEST_ECDH
+#ifdef ARCH_TEST_ECC_CURVE_SECP256R1
+{"Test psa_key_derivation_key_agreement - Negative case\n", 8,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2,
+ 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a,
+ 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET,
+{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
+ 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
+ 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
+ 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0,
+ 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab},
+ 65,
+ PSA_ERROR_INVALID_HANDLE
 },
 #endif
 #endif
diff --git a/api-tests/dev_apis/crypto/test_c019/test_entry_c019.c b/api-tests/dev_apis/crypto/test_c019/test_entry_c019.c
index b1c5b15..8d58d19 100644
--- a/api-tests/dev_apis/crypto/test_c019/test_entry_c019.c
+++ b/api-tests/dev_apis/crypto/test_c019/test_entry_c019.c
@@ -20,14 +20,15 @@
 #include "test_c019.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 19)
-#define TEST_DESC "Testing crypto generator functions APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
 
 void test_entry(val_api_t *val_api, psa_api_t *psa_api)
 {
-    int32_t  status = VAL_STATUS_SUCCESS;
+    int32_t   status = VAL_STATUS_SUCCESS;
 
     val = val_api;
     psa = psa_api;
diff --git a/api-tests/dev_apis/crypto/test_c020/test_c020.c b/api-tests/dev_apis/crypto/test_c020/test_c020.c
index 0363d03..7fc0e3f 100644
--- a/api-tests/dev_apis/crypto/test_c020/test_c020.c
+++ b/api-tests/dev_apis/crypto/test_c020/test_c020.c
@@ -21,30 +21,27 @@
 #include "test_data.h"
 #include "val_crypto.h"
 
-#define  SLOT_1     0
-#define  SLOT_2     1
-#define  SLOT_3     2
-#define  SLOT_4     3
-
 client_test_t test_c020_crypto_list[] = {
     NULL,
-    psa_generator_import_key_test,
-    psa_generator_import_key_negative_test,
+    psa_key_derivation_output_bytes_test,
     NULL,
 };
 
-static int                     g_test_count = 1;
-static uint8_t                 data[BUFFER_SIZE];
-static psa_crypto_generator_t  generator;
+static int      g_test_count = 1;
+static uint8_t  output[BUFFER_SIZE];
 
-int32_t psa_generator_import_key_test(security_t caller)
+int32_t psa_key_derivation_output_bytes_test(security_t caller)
 {
-    int                     num_checks = sizeof(check1)/sizeof(check1[0]);
-    uint32_t                i, j, data_sum, remaining_size, length = 0;
-    uint32_t                salt = 0, label = 0;
-    size_t                  salt_length = 0, label_length = 0;
-    psa_key_policy_t        policy;
-    int32_t                 status;
+    uint32_t                        i, status;
+    int                             num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t            attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_key_derivation_operation_t  operation = PSA_KEY_DERIVATION_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -55,274 +52,84 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        memset(&generator, 0, sizeof(generator));
-        memset(data, 0, sizeof(data));
+        /* Import the key if the derivation input is key */
+        if (check1[i].step == PSA_KEY_DERIVATION_INPUT_SECRET)
+        {
+            /* Setup the attributes for the key */
+            val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+            val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+            val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage[SLOT_1],
-                                                                      check1[i].key_alg[SLOT_1]);
+            /* Import the key data into the key slot */
+            status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                     check1[i].key_length, &check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+        }
 
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle[SLOT_1]);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle[SLOT_1],
-                                      &policy);
+        /* Start the key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation,
+                 check1[i].key_alg);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
-        /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle[SLOT_1],
-                    check1[i].key_type[SLOT_1], check1[i].key_data, check1[i].key_length);
+        /* Set the capacity for the generator */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY, &operation,
+                 check1[i].capacity);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
-        /* Set up a key derivation operation. Using this function to initialize the generate as
-         * XOR or PRNG generator initialization is not implemented.
-         */
-        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator,
-                    check1[i].key_handle[SLOT_1],  check1[i].key_alg[SLOT_1], &salt, salt_length,
-                    &label, label_length, check1[i].capacity);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+        /* Provide input as key or data depending on the step */
+        if (check1[i].step == PSA_KEY_DERIVATION_INPUT_SECRET)
+        {
+            /* Provide an input for key derivation or key agreement */
+            status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation,
+                     check1[i].step, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+        }
+        else
+        {
+            status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES, &operation,
+                     check1[i].step, check1[i].data, check1[i].data_length);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+        }
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
+        /* Read some data from a key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES, &operation, output,
+                 check1[i].output_size);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage[SLOT_2],
-                                                                         check1[i].key_alg[SLOT_2]);
+        if (check1[i].step == PSA_KEY_DERIVATION_INPUT_SECRET)
+        {
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
 
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle[SLOT_2]);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle[SLOT_2],
-                                      &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
-
-        /* Create a symmetric key from data read from a generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_IMPORT_KEY, check1[i].key_handle[SLOT_2],
-                    check1[i].key_type[SLOT_2], BYTES_TO_BITS(check1[i].size), &generator);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9));
+            /* Reset the key attributes and check if psa_import_key fails */
+            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+        }
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
-            /* Abort a generator */
-            status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
+            status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
 
-            /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle[SLOT_1]);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
-
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle[SLOT_2]);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
-
             continue;
         }
 
-        /* Export a key in binary format */
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle[SLOT_2], data,
-                                      BUFFER_SIZE, &length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13));
+        /* Read some data from a key derivation operation with no data in the operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES, &operation, output,
+                 check1[i].output_size);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INSUFFICIENT_DATA, TEST_CHECKPOINT_NUM(11));
 
-        TEST_ASSERT_EQUAL(length, check1[i].size, TEST_CHECKPOINT_NUM(14));
+        /* Abort the derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
 
-        data_sum = 0;
-        /* Check that if generated data are zero */
-        for (j = 0; j < check1[i].size; j++)
-        {
-            data_sum += data[j];
-        }
-
-        memset(data, 0, sizeof(data));
-        TEST_ASSERT_NOT_EQUAL(data_sum, 0, TEST_CHECKPOINT_NUM(15));
-
-        remaining_size = check1[i].capacity - check1[i].size;
-        if (remaining_size > 0)
-        {
-            length = 0;
-            /* Initialize a key policy structure to a default that forbids all
-             * usage of the key
-             */
-            val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-            /* Set the standard fields of a policy structure */
-            val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage[SLOT_2],
-                                                                        check1[i].key_alg[SLOT_2]);
-
-            /* Allocate a key slot for a transient key */
-            status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle[SLOT_3]);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16));
-
-            /* Set the usage policy on a key slot */
-            status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle[SLOT_3],
-                                          &policy);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(17));
-
-            /* Create a symmetric key from data read from a generator */
-            status = val->crypto_function(VAL_CRYPTO_GENERATOR_IMPORT_KEY,
-                        check1[i].key_handle[SLOT_3], check1[i].key_type[SLOT_2],
-                        BYTES_TO_BITS(check1[i].size), &generator);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(18));
-
-            /* Export a key in binary format */
-            status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle[SLOT_3], data,
-                        BUFFER_SIZE, &length);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(19));
-
-            TEST_ASSERT_EQUAL(length, remaining_size, TEST_CHECKPOINT_NUM(20));
-
-            data_sum = 0;
-            /* Check that if generated data are zero */
-            for (j = 0; j < remaining_size; j++)
-            {
-                data_sum += data[j];
-            }
-
-            memset(data, 0, sizeof(data));
-            TEST_ASSERT_NOT_EQUAL(data_sum, 0, TEST_CHECKPOINT_NUM(21));
-
-            /* Initialize a key policy structure to a default that forbids all
-             * usage of the key
-             */
-            val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-            /* Set the standard fields of a policy structure */
-            val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage[SLOT_2],
-                                                                        check1[i].key_alg[SLOT_2]);
-
-            /* Allocate a key slot for a transient key */
-            status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle[SLOT_4]);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(22));
-
-            /* Set the usage policy on a key slot */
-            status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle[SLOT_4],
-                                          &policy);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(23));
-
-            /* Create a symmetric key from data read from a generator */
-            status = val->crypto_function(VAL_CRYPTO_GENERATOR_IMPORT_KEY,
-                        check1[i].key_handle[SLOT_4], check1[i].key_type[SLOT_2],
-                        BYTES_TO_BITS(check1[i].size), &generator);
-            TEST_ASSERT_EQUAL(status, PSA_ERROR_INSUFFICIENT_DATA, TEST_CHECKPOINT_NUM(24));
-
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle[SLOT_3]);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(25));
-
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle[SLOT_4]);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(26));
-
-        }
-
-        /* Abort a generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(27));
-
-        /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle[SLOT_1]);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(28));
-
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle[SLOT_2]);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(29));
-    }
-
-    return VAL_STATUS_SUCCESS;
-}
-
-int32_t psa_generator_import_key_negative_test(security_t caller)
-{
-    int                     num_checks = sizeof(check2)/sizeof(check2[0]);
-    int32_t                 i, status;
-    uint32_t                salt = 0, label = 0;
-    size_t                  salt_length = 0, label_length = 0;
-    uint8_t                 data[BUFFER_SIZE];
-    psa_key_policy_t        policy;
-
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    for (i = 0; i < num_checks; i++)
-    {
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        memset(&generator, 0, sizeof(generator));
-        memset(data, 0, sizeof(data));
-
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage[SLOT_1],
-                                                                     check2[i].key_alg[SLOT_1]);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle[SLOT_1]);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle[SLOT_1],
-                                      &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
-
-        /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle[SLOT_1],
-                    check2[i].key_type[SLOT_1], check2[i].key_data, check2[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set up a key derivation operation. Using this function to initialize the generate as
-         * XOR or PRNG generator initialization is not implemented.
-         */
-        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator,
-                    check2[i].key_handle[SLOT_1], check2[i].key_alg[SLOT_1], &salt, salt_length,
-                    &label, label_length, check2[i].capacity);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_generator_import_key with invalid handle\n",
-                                                                                 g_test_count++);
-        /* Create a symmetric key from data read from a generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_IMPORT_KEY, check2[i].key_handle[SLOT_2],
-                    check2[i].key_type[SLOT_2], check2[i].size, &generator);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(7));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_generator_import_key with zero handle\n",
-                                                                                 g_test_count++);
-        /* Create a symmetric key from data read from a generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_IMPORT_KEY, ZERO_KEY_SLOT,
-                    check2[i].key_type[SLOT_2], check2[i].size, &generator);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(7));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_generator_import_key with"
-                                                     " pre-occupied key slot\n", g_test_count++);
-        /* Create a symmetric key from data read from a generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_IMPORT_KEY, check2[i].key_handle[SLOT_1],
-                    check2[i].key_type[SLOT_2], check2[i].size, &generator);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_ALREADY_EXISTS, TEST_CHECKPOINT_NUM(9));
-
-        /* Abort a generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
-
-        /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle[SLOT_1]);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
-
+        /* Expect bad state when derivation is called on an aborted operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES, &operation,
+                 output, 0);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(13));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c020/test_c020.h b/api-tests/dev_apis/crypto/test_c020/test_c020.h
index 9584bef..331108e 100644
--- a/api-tests/dev_apis/crypto/test_c020/test_c020.h
+++ b/api-tests/dev_apis/crypto/test_c020/test_c020.h
@@ -18,14 +18,13 @@
 #define _TEST_C020_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c020)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c020)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c020_crypto_list[];
 
-int32_t psa_generator_import_key_test(security_t caller);
-int32_t psa_generator_import_key_negative_test(security_t caller);
+int32_t psa_key_derivation_output_bytes_test(security_t caller);
 #endif /* _TEST_C020_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c020/test_data.h b/api-tests/dev_apis/crypto/test_c020/test_data.h
index 512625d..e1c6bbf 100644
--- a/api-tests/dev_apis/crypto/test_c020/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c020/test_data.h
@@ -18,105 +18,61 @@
 #include "val_crypto.h"
 
 typedef struct {
-    char                    test_desc[75];
-    psa_key_handle_t        key_handle[4];
-    psa_key_type_t          key_type[2];
-    uint8_t                 key_data[32];
-    uint32_t                key_length;
-    psa_key_usage_t         usage[2];
-    psa_algorithm_t         key_alg[2];
-    size_t                  capacity;
-    size_t                  size;
-    psa_status_t            expected_status;
+    char                        test_desc[75];
+    psa_key_handle_t            key_handle;
+    psa_key_type_t              key_type;
+    uint8_t                     key_data[34];
+    uint32_t                    key_length;
+    size_t                      output_size;
+    psa_key_usage_t             usage;
+    psa_algorithm_t             key_alg;
+    psa_key_derivation_step_t   step;
+    size_t                      capacity;
+    uint8_t                     data[16];
+    size_t                      data_length;
+    psa_status_t                expected_status;
 } test_data;
 
 static test_data check1[] = {
-#ifdef ARCH_TEST_HKDF
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-#ifdef ARCH_TEST_SHA256
-{"Test psa_generator_import_key for 16 Byte AES Key\n", {1, 2, 3, 4},
-{PSA_KEY_TYPE_DERIVE, PSA_KEY_TYPE_AES},
+{"Test psa_key_derivation_output_bytes - Key\n", 1, PSA_KEY_TYPE_DERIVE,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, {PSA_KEY_USAGE_DERIVE, PSA_KEY_USAGE_EXPORT},
- {PSA_ALG_HKDF(PSA_ALG_SHA_256), PSA_ALG_CTR},
- 32, 16, PSA_SUCCESS
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, 42, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET, 42, {0}, 0,
+ PSA_SUCCESS
 },
-#endif
-#endif
 
-#ifdef ARCH_TEST_SHA512
-#ifdef ARCH_TEST_DES_3KEY
-{"Test psa_generator_import_key for Triple DES 3-Key\n", {5, 6, 7, 8},
-{PSA_KEY_TYPE_DERIVE, PSA_KEY_TYPE_DES},
-{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
- 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
- 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, {PSA_KEY_USAGE_DERIVE, PSA_KEY_USAGE_EXPORT},
-{PSA_ALG_HKDF(PSA_ALG_SHA_512), PSA_ALG_CTR},
- DES3_3KEY_SIZE, DES3_3KEY_SIZE, PSA_SUCCESS
+{"Test psa_key_derivation_output_bytes - Info\n", 2, PSA_KEY_TYPE_DERIVE,
+{0}, 0, 42, 0, PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_INFO, 42, "This is the info", 16,
+ PSA_SUCCESS
 },
-#endif
-#endif
 
-#ifdef ARCH_TEST_SHA1
-#ifdef ARCH_TEST_AES
-{"Test psa_generator_import_key output greater than capacity\n", {9, 10, 11, 12},
-{PSA_KEY_TYPE_DERIVE, PSA_KEY_TYPE_AES},
-{0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
- DES_8B_KEY_SIZE, {PSA_KEY_USAGE_DERIVE, PSA_KEY_USAGE_EXPORT},
-{PSA_ALG_HKDF(PSA_ALG_SHA_1), PSA_ALG_CTR},
- 64, 80, PSA_ERROR_INSUFFICIENT_DATA
+{"Test psa_key_derivation_output_bytes - Salt\n", 3, PSA_KEY_TYPE_DERIVE,
+{0}, 0, 42, 0, PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SALT, 42, "This is the info", 16,
+ PSA_ERROR_BAD_STATE
 },
-#endif
-#endif
 
-#ifdef ARCH_TEST_SHA256
-#ifdef ARCH_TEST_RSA
-{"Test psa_generator_import_key for RSA Public Key - Invalid type\n", {13, 14, 15, 16},
-{PSA_KEY_TYPE_DERIVE, PSA_KEY_TYPE_RSA_PUBLIC_KEY},
+{"Test psa_key_derivation_output_bytes - Label\n", 4, PSA_KEY_TYPE_DERIVE,
+{0}, 0, 42, 0, PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_LABEL, 42, "This is the info", 16,
+ PSA_ERROR_BAD_STATE
+},
+
+{"Test psa_key_derivation_output_bytes - Seed\n", 5, PSA_KEY_TYPE_DERIVE,
+{0}, 0, 42, 0, PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SEED, 42, "This is the info", 16,
+ PSA_ERROR_BAD_STATE
+},
+
+{"Test psa_key_derivation_output_bytes - Greater Capacity than available\n", 6, PSA_KEY_TYPE_DERIVE,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, {PSA_KEY_USAGE_DERIVE, PSA_KEY_USAGE_EXPORT},
-{PSA_ALG_HKDF(PSA_ALG_SHA_256), PSA_ALG_CTR},
- 32, 16, PSA_ERROR_INVALID_ARGUMENT
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, BUFFER_SIZE, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET, 42, {0}, 0,
+ PSA_ERROR_INSUFFICIENT_DATA,
 },
-#endif
-#endif
-
-#ifdef ARCH_TEST_SHA256
-#ifdef ARCH_TEST_AES_128
-{"Test psa_generator_import_key for invalid byte for generation\n", {20, 21, 22, 23},
-{PSA_KEY_TYPE_DERIVE, PSA_KEY_TYPE_AES},
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, {PSA_KEY_USAGE_DERIVE, PSA_KEY_USAGE_EXPORT},
-{PSA_ALG_HKDF(PSA_ALG_SHA_256), PSA_ALG_CTR},
- 32, 10, PSA_ERROR_INVALID_ARGUMENT
-},
-#endif
-#endif
-#endif
-#endif
-};
-
-static test_data check2[] = {
-#ifdef ARCH_TEST_HKDF
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-#ifdef ARCH_TEST_SHA256
-{"Test psa_generator_import_key negative cases\n",
-{17, 18, 18, 18},
-{PSA_KEY_TYPE_DERIVE, PSA_KEY_TYPE_AES},
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, {PSA_KEY_USAGE_DERIVE, PSA_KEY_USAGE_EXPORT},
-{PSA_ALG_HKDF(PSA_ALG_SHA_256), PSA_ALG_CTR},
- 32, BYTES_TO_BITS(8), PSA_ERROR_INVALID_HANDLE
-},
-#endif
-#endif
-#endif
-#endif
 };
diff --git a/api-tests/dev_apis/crypto/test_c020/test_entry_c020.c b/api-tests/dev_apis/crypto/test_c020/test_entry_c020.c
index c109392..283df1c 100644
--- a/api-tests/dev_apis/crypto/test_c020/test_entry_c020.c
+++ b/api-tests/dev_apis/crypto/test_c020/test_entry_c020.c
@@ -20,7 +20,8 @@
 #include "test_c020.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 20)
-#define TEST_DESC "Testing crypto generator functions APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c021/test_c021.c b/api-tests/dev_apis/crypto/test_c021/test_c021.c
index 7a3c39c..947ed2e 100644
--- a/api-tests/dev_apis/crypto/test_c021/test_c021.c
+++ b/api-tests/dev_apis/crypto/test_c021/test_c021.c
@@ -21,21 +21,31 @@
 #include "test_data.h"
 #include "val_crypto.h"
 
+#define     SLOT_1      1
+#define     SLOT_2      2
+
 client_test_t test_c021_crypto_list[] = {
     NULL,
-    psa_generator_abort_test,
+    psa_key_derivation_output_key_test,
     NULL,
 };
 
-static int        g_test_count = 1;
-static uint8_t    data[BUFFER_SIZE];
+static int      g_test_count = 1;
 
-int32_t psa_generator_abort_test(security_t caller)
+int32_t psa_key_derivation_output_key_test(security_t caller)
 {
-    int                     num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t                 i, status;
-    psa_key_policy_t        policy;
-    psa_crypto_generator_t  generator;
+    uint32_t                        i, status;
+    int                             num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_handle_t                key_handle[2];
+    psa_key_attributes_t            attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_key_attributes_t            derv_attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_key_derivation_operation_t  operation = PSA_KEY_DERIVATION_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -43,72 +53,93 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
 
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        memset(&generator, 0, sizeof(generator));
-        memset(data, 0, sizeof(data));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
-        val->print(PRINT_TEST, "[Check %d] Test psa_generator_abort on empty generator\n",
-                                                                            g_test_count++);
-        /* Abort an empty generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+        /* Import the key if the derivation input is key */
+        if (check1[i].step == PSA_KEY_DERIVATION_INPUT_SECRET)
+        {
+            /* Import the key data into the key slot */
+            status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                     check1[i].key_length, &check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+        }
 
-        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
-        val->print(PRINT_TEST, check1[i].test_desc, 0);
-
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
+        /* Start the key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation,
+                 check1[i].key_alg);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
-        /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
+        /* Set the capacity for the generator */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY, &operation,
+                 check1[i].capacity);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
-        /* Set up a key derivation operation. Using this function to initialize the generate as
-         * XOR or PRNG generator initialization is not implemented.
-         */
-        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator, check1[i].key_handle,
-                    check1[i].key_alg, check1[i].salt, check1[i].salt_length, check1[i].label,
-                    check1[i].label_length, check1[i].capacity);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+        /* Provide input as key or data depending on the step */
+        if (check1[i].step == PSA_KEY_DERIVATION_INPUT_SECRET)
+        {
+            /* Provide an input for key derivation or key agreement */
+            status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation,
+                     check1[i].step, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+        }
+        else
+        {
+            status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES, &operation,
+                     check1[i].step, check1[i].data, check1[i].data_length);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+        }
 
-        /* Abort the generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &derv_attributes, check1[i].derive_key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &derv_attributes, check1[i].derive_key_bits);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &derv_attributes,
+        check1[i].derive_key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &derv_attributes,
+        check1[i].derive_usage);
 
-        /* Generate random bytes */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator, data, check1[i].size);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(8));
+        /*  Derive a key from an ongoing key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY, &derv_attributes,
+                 &operation, &key_handle[SLOT_1]);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8));
 
-        val->print(PRINT_TEST, "[Check %d] Multiple psa_generator_abort test\n", g_test_count++);
-        /* Abort the generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+        if (check1[i].step == PSA_KEY_DERIVATION_INPUT_SECRET)
+        {
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
 
-        /* Abort the generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+        }
 
-        /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
+        if (check1[i].expected_status != PSA_SUCCESS)
+        {
+            status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+
+            continue;
+        }
+
+        /* Read some key from a key derivation operation with no data in the operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY, &derv_attributes,
+                 &operation, &key_handle[SLOT_2]);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INSUFFICIENT_DATA, TEST_CHECKPOINT_NUM(11));
+
+        /* Abort the derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
+
+        /* Expect bad state when derivation is called on an aborted operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY, &derv_attributes,
+                 &operation, &key_handle[SLOT_2]);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(13));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c021/test_c021.h b/api-tests/dev_apis/crypto/test_c021/test_c021.h
index 77b0783..7c6ea1d 100644
--- a/api-tests/dev_apis/crypto/test_c021/test_c021.h
+++ b/api-tests/dev_apis/crypto/test_c021/test_c021.h
@@ -18,13 +18,13 @@
 #define _TEST_C021_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c021)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c021)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c021_crypto_list[];
 
-int32_t psa_generator_abort_test(security_t caller);
+int32_t psa_key_derivation_output_key_test(security_t caller);
 #endif /* _TEST_C021_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c021/test_data.h b/api-tests/dev_apis/crypto/test_c021/test_data.h
index 6f42e9e..6a31c78 100644
--- a/api-tests/dev_apis/crypto/test_c021/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c021/test_data.h
@@ -18,34 +18,153 @@
 #include "val_crypto.h"
 
 typedef struct {
-    char                    test_desc[75];
-    psa_key_handle_t        key_handle;
-    psa_key_type_t          key_type;
-    uint8_t                 key_data[32];
-    uint32_t                key_length;
-    psa_key_usage_t         usage;
-    psa_algorithm_t         key_alg;
-    uint8_t                 salt[16];
-    size_t                  salt_length;
-    uint8_t                 label[16];
-    size_t                  label_length;
-    size_t                  capacity;
-    size_t                  size;
-    psa_status_t            expected_status;
+    char                        test_desc[75];
+    psa_key_handle_t            key_handle;
+    psa_key_type_t              key_type;
+    uint8_t                     key_data[34];
+    uint32_t                    key_length;
+    psa_key_usage_t             usage;
+    psa_algorithm_t             key_alg;
+    psa_key_derivation_step_t   step;
+    size_t                      capacity;
+    uint8_t                     data[16];
+    size_t                      data_length;
+    psa_key_type_t              derive_key_type;
+    size_t                      derive_key_bits;
+    psa_key_usage_t             derive_usage;
+    psa_algorithm_t             derive_key_alg;
+    psa_status_t                expected_status;
 } test_data;
 
 static test_data check1[] = {
-#ifdef ARCH_TEST_HKDF
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_SHA256
-{"Test psa_generator_abort\n", 1, PSA_KEY_TYPE_DERIVE,
+{"Test psa_key_derivation_output_key - Key\n", 1, PSA_KEY_TYPE_DERIVE,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
- {0}, 0, {0}, 0, 32,
- 16, PSA_SUCCESS
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET, 32, {0}, 0,
+ PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR,
+ PSA_SUCCESS
 },
-#endif
-#endif
-#endif
+
+{"Test psa_key_derivation_output_key - Info\n", 1, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_INFO, 32, "This is the info", 16,
+ PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR,
+ PSA_SUCCESS
+},
+
+{"Test psa_key_derivation_output_key - Label\n", 1, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_LABEL, 32, "This is the info", 16,
+ PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR,
+ PSA_SUCCESS
+},
+
+{"Test psa_key_derivation_output_key - Seed\n", 1, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SEED, 32, "This is the info", 16,
+ PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR,
+ PSA_SUCCESS
+},
+
+{"Test psa_key_derivation_output_key - Salt\n", 1, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SALT, 32, "This is the info", 16,
+ PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR,
+ PSA_SUCCESS
+},
+
+{"Test psa_key_derivation_output_key - DES key export\n", 1, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET, 32, {0}, 0,
+ PSA_KEY_TYPE_DES, BYTES_TO_BITS(DES3_3KEY_SIZE), PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR,
+ PSA_SUCCESS
+},
+
+{"Test psa_key_derivation_output_key - Greater Capacity than available\n", 1, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET, 16, {0}, 0,
+ PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR,
+ PSA_ERROR_INSUFFICIENT_DATA
+},
+
+{"Test psa_key_derivation_output_key - ECC Public key\n", 1, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET, 256, {0}, 0,
+ PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), 256, PSA_KEY_USAGE_EXPORT,
+ PSA_ERROR_NOT_SUPPORTED,
+},
+
+{"Test psa_key_derivation_output_key -  ECC keypair\n", 1, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET, 224, {0}, 0,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), 224, PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
+ PSA_SUCCESS
+},
+
+{"Test psa_key_derivation_output_key -  RSA Public Key", 1, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET, 256, {0}, 0,
+ PSA_KEY_TYPE_RSA_PUBLIC_KEY, 2048, PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+ PSA_ERROR_NOT_SUPPORTED,
+},
+
+{"Test psa_key_derivation_output_key -  RSA keypair\n", 1, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET, 256, {0}, 0,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), 2046, PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+ PSA_SUCCESS
+},
+
+{"Test psa_key_derivation_output_key - Invalid key size\n", 1, PSA_KEY_TYPE_DERIVE,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)),
+ PSA_KEY_DERIVATION_INPUT_SECRET, 32, {0}, 0,
+ PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_18B_KEY_SIZE), PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR,
+ PSA_ERROR_NOT_SUPPORTED
+},
 };
diff --git a/api-tests/dev_apis/crypto/test_c021/test_entry_c021.c b/api-tests/dev_apis/crypto/test_c021/test_entry_c021.c
index 621cd97..18883dc 100644
--- a/api-tests/dev_apis/crypto/test_c021/test_entry_c021.c
+++ b/api-tests/dev_apis/crypto/test_c021/test_entry_c021.c
@@ -20,7 +20,8 @@
 #include "test_c021.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 21)
-#define TEST_DESC "Testing crypto generator functions APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c022/test_c022.c b/api-tests/dev_apis/crypto/test_c022/test_c022.c
index 049e8d1..a71e98e 100644
--- a/api-tests/dev_apis/crypto/test_c022/test_c022.c
+++ b/api-tests/dev_apis/crypto/test_c022/test_c022.c
@@ -24,174 +24,46 @@
 
 client_test_t test_c022_crypto_list[] = {
     NULL,
-    psa_key_derivation_test,
-    psa_key_derivation_negative_test,
+    psa_key_derivation_abort_test,
     NULL,
 };
 
 static int         g_test_count = 1;
-static uint8_t     data[BUFFER_SIZE];
+static uint8_t     output[BUFFER_SIZE];
 
-int32_t psa_key_derivation_test(security_t caller)
+int32_t psa_key_derivation_abort_test(security_t caller)
 {
-    int                     num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t                 i, status;
-    size_t                  capacity;
-    psa_key_policy_t        policy;
-    psa_crypto_generator_t  generator;
+    int32_t                         status;
+    psa_key_derivation_operation_t  func = psa_key_derivation_operation_init();
+    psa_key_derivation_operation_t  init = PSA_KEY_DERIVATION_OPERATION_INIT;
+    psa_key_derivation_operation_t  zero;
+
+    memset(&zero, 0, sizeof(zero));
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
 
-    for (i = 0; i < num_checks; i++)
-    {
-        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
-        val->print(PRINT_TEST, check1[i].test_desc, 0);
+    /* Setting up the watchdog timer for each check */
+    status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+    TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
+    val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+    val->print(PRINT_TEST, "Test psa_key_derivation_abort\n", 0);
 
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+    status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &func);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        memset(&generator, 0, sizeof(generator));
-        memset(data, 0, sizeof(data));
-        capacity = 0;
+    status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &init);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
+    status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &zero);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                                      &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
-
-        /* Set up a key derivation operation. Using this function to initialize the generate as
-         * XOR or PRNG generator initialization is not implemented.
-         */
-        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator,
-                    check1[i].key_handle, check1[i].key_alg, check1[i].salt,
-                    check1[i].salt_length, check1[i].label, check1[i].label_length,
-                    check1[i].capacity);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5));
-
-        if (check1[i].expected_status != PSA_SUCCESS)
-        {
-            /* Abort the generator */
-            status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-            /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
-
-            continue;
-        }
-
-        /* Retrieve the current capacity of a generator */
-        status = val->crypto_function(VAL_CRYPTO_GET_GENERATOR_CAPACITY, &generator, &capacity);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
-
-        TEST_ASSERT_EQUAL(capacity, check1[i].capacity, TEST_CHECKPOINT_NUM(9));
-
-        /* Abort the generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
-
-        /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
-    }
-
-    return VAL_STATUS_SUCCESS;
-}
-
-int32_t psa_key_derivation_negative_test(security_t caller)
-{
-    int                     num_checks = sizeof(check2)/sizeof(check2[0]);
-    int32_t                 i, status;
-    psa_key_policy_t        policy;
-    psa_key_handle_t        empty_key_handle;
-    psa_crypto_generator_t  generator;
-
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    for (i = 0; i < num_checks; i++)
-    {
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        memset(&generator, 0, sizeof(generator));
-        memset(data, 0, sizeof(data));
-
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_key_derivation with Invalid key handle\n",
-                                                                                 g_test_count++);
-        /* Set up a key derivation operation. Using this function to initialize the generate as
-         * XOR or PRNG generator initialization is not implemented.
-         */
-        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator,
-                    check2[i].key_handle, check2[i].key_alg, check2[i].salt,
-                    check2[i].salt_length, check2[i].label, check2[i].label_length,
-                    check2[i].capacity);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_key_derivation with Zero as key handle\n",
-                                                                                 g_test_count++);
-        /* Set up a key derivation operation. Using this function to initialize the generate as
-         * XOR or PRNG generator initialization is not implemented.
-         */
-        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator,
-                    0, check2[i].key_alg, check2[i].salt,
-                    check2[i].salt_length, check2[i].label, check2[i].label_length,
-                    check2[i].capacity);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(7));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_key_derivation with Empty key handle\n",
-                                                                                 g_test_count++);
-         /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &empty_key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, empty_key_handle,
-                                      &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
-
-        /* Set up a key derivation operation. Using this function to initialize the generate as
-         * XOR or PRNG generator initialization is not implemented.
-         */
-        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator,
-                    empty_key_handle, check2[i].key_alg, check2[i].salt,
-                    check2[i].salt_length, check2[i].label, check2[i].label_length,
-                    check2[i].capacity);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(10));
-    }
+    /* Read some data from a key derivation operation with no data in the operation */
+    status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES, &func, output,
+             BUFFER_SIZE);
+    TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(5));
 
     return VAL_STATUS_SUCCESS;
 }
diff --git a/api-tests/dev_apis/crypto/test_c022/test_c022.h b/api-tests/dev_apis/crypto/test_c022/test_c022.h
index 1339ec7..57b7b0c 100644
--- a/api-tests/dev_apis/crypto/test_c022/test_c022.h
+++ b/api-tests/dev_apis/crypto/test_c022/test_c022.h
@@ -18,14 +18,13 @@
 #define _TEST_C022_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c022)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c022)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c022_crypto_list[];
 
-int32_t psa_key_derivation_test(security_t caller);
-int32_t psa_key_derivation_negative_test(security_t caller);
+int32_t psa_key_derivation_abort_test(security_t caller);
 #endif /* _TEST_C022_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c022/test_data.h b/api-tests/dev_apis/crypto/test_c022/test_data.h
index 7dcc94f..dc0c03e 100644
--- a/api-tests/dev_apis/crypto/test_c022/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c022/test_data.h
@@ -17,126 +17,4 @@
 
 #include "val_crypto.h"
 
-typedef struct {
-    char                    test_desc[75];
-    psa_key_handle_t        key_handle;
-    psa_key_type_t          key_type;
-    uint8_t                 key_data[32];
-    uint32_t                key_length;
-    psa_key_usage_t         usage;
-    psa_algorithm_t         key_alg;
-    const uint8_t           salt[16];
-    size_t                  salt_length;
-    const uint8_t           label[16];
-    size_t                  label_length;
-    size_t                  capacity;
-    psa_status_t            expected_status;
-} test_data;
-
-static test_data check1[] = {
-#ifdef ARCH_TEST_HKDF
-#ifdef ARCH_TEST_SHA256
-{"Test psa_key_derivation to get 16 Byte data with SHA-256\n", 1, PSA_KEY_TYPE_DERIVE,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
- {0}, 0, {0}, 0, 32,
- PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_SHA512
-{"Test psa_key_derivation to get 32 Byte data with SHA-512\n", 2, PSA_KEY_TYPE_DERIVE,
-{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
- 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
- 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_512),
- {0}, 0, {0}, 0, 64,
- PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_MD5
-{"Test psa_key_derivation to get 32 Byte data with MD-5\n", 3, PSA_KEY_TYPE_DERIVE,
-{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
- 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
- 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_MD5),
- {0}, 0, {0}, 0, 64,
- PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_SHA256
-{"Test psa_key_derivation to get 16 Byte data with salt and label\n", 4, PSA_KEY_TYPE_DERIVE,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
- "abcdefghijklmnop", 16, "This is a label", 15, 32,
- PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_SHA1
-{"Test psa_key_derivation with too large capacity for alg and key\n", 6, PSA_KEY_TYPE_DERIVE,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_1),
- {0}, 0, {0}, 0, 5200,
- PSA_ERROR_INVALID_ARGUMENT
-},
-#endif
-
-#ifdef ARCH_TEST_SHA256
-{"Test psa_key_derivation with unsupported key type\n", 11, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
- {0}, 0, {0}, 0, 32,
- PSA_ERROR_INVALID_ARGUMENT
-},
-
-{"Test psa_key_derivation with incorrect usage\n", 12, PSA_KEY_TYPE_DERIVE,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_HKDF(PSA_ALG_SHA_256),
- {0}, 0, {0}, 0, 32,
- PSA_ERROR_NOT_PERMITTED
-},
-#endif
-
-{"Test psa_key_derivation with unsupported key derivation algorithm\n", 14, PSA_KEY_TYPE_DERIVE,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_CATEGORY_HASH),
- {0}, 0, {0}, 0, 32,
- PSA_ERROR_NOT_SUPPORTED
-},
-#endif
-
-#ifdef ARCH_TEST_RSA_PKCS1V15_CRYPT
-{"Test psa_key_derivation with invalid algorithm\n", 5, PSA_KEY_TYPE_DERIVE,
-{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
- 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
- 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_RSA_PKCS1V15_CRYPT,
- {0}, 0, {0}, 0, 64,
- PSA_ERROR_INVALID_ARGUMENT
-},
-#endif
-};
-
-static test_data check2[] = {
-#ifdef ARCH_TEST_HKDF
-#ifdef ARCH_TEST_SHA512
-{"Test psa_key_derivation to get 32 Byte data with SHA-512\n", 13, PSA_KEY_TYPE_DERIVE,
-{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
- 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
- 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
- AES_32B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_512),
- {0}, 0, {0}, 0, 64,
- PSA_SUCCESS
-},
-#endif
-#endif
-};
+/* Keeping this file empty incase if future support is needed */
diff --git a/api-tests/dev_apis/crypto/test_c022/test_entry_c022.c b/api-tests/dev_apis/crypto/test_c022/test_entry_c022.c
index 2d7e798..04b4afc 100644
--- a/api-tests/dev_apis/crypto/test_c022/test_entry_c022.c
+++ b/api-tests/dev_apis/crypto/test_c022/test_entry_c022.c
@@ -20,7 +20,8 @@
 #include "test_c022.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 22)
-#define TEST_DESC "Testing crypto generator functions APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c023/test_c023.c b/api-tests/dev_apis/crypto/test_c023/test_c023.c
index 9c786dc..6d91e2a 100644
--- a/api-tests/dev_apis/crypto/test_c023/test_c023.c
+++ b/api-tests/dev_apis/crypto/test_c023/test_c023.c
@@ -23,18 +23,24 @@
 
 client_test_t test_c023_crypto_list[] = {
     NULL,
-    psa_key_policy_get_usage_test,
+    psa_key_derivation_set_get_capacity_test,
     NULL,
 };
 
 static int g_test_count = 1;
 
-int32_t psa_key_policy_get_usage_test(security_t caller)
+int32_t psa_key_derivation_set_get_capacity_test(security_t caller)
 {
     int                     num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t                 i, status;
-    psa_key_policy_t        policy;
-    psa_key_usage_t         usage;
+    size_t                          capacity = 0;
+    psa_key_derivation_operation_t  operation = PSA_KEY_DERIVATION_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -45,23 +51,49 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
+        /* Start the key derivation operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation,
+                 check1[i].key_alg);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
-        /* Retrieve the usage field of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_GET_USAGE, &policy, &usage);
+        /* Set the capacity for the generator */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY, &operation,
+                 check1[i].capacity);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
-        TEST_ASSERT_EQUAL(usage, check1[i].usage, TEST_CHECKPOINT_NUM(3));
+        if (check1[i].expected_status != PSA_SUCCESS)
+        {
+            status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+            continue;
+        }
+
+        /* Get the capacity for the generator */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY, &operation,
+                 &capacity);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+
+        /* Check if the capacity as per the expected value */
+        TEST_ASSERT_EQUAL(capacity, check1[i].capacity, TEST_CHECKPOINT_NUM(7));
+
+        /* Abort the operation */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+
+        /* Setting the capacity on an aborted operation should be an error */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY, &operation,
+                 check1[i].capacity);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9));
+
+        /* Getting the capacity on an aborted operation should be an error */
+        status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY, &operation,
+                  &capacity);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(10));
+
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c023/test_c023.h b/api-tests/dev_apis/crypto/test_c023/test_c023.h
index 43c40e4..2e0af10 100644
--- a/api-tests/dev_apis/crypto/test_c023/test_c023.h
+++ b/api-tests/dev_apis/crypto/test_c023/test_c023.h
@@ -18,13 +18,13 @@
 #define _TEST_C023_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c023)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c023)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c023_crypto_list[];
 
-int32_t psa_key_policy_get_usage_test(security_t caller);
+int32_t psa_key_derivation_set_get_capacity_test(security_t caller);
 #endif /* _TEST_C023_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c023/test_data.h b/api-tests/dev_apis/crypto/test_c023/test_data.h
index 2ef937c..1bc6455 100644
--- a/api-tests/dev_apis/crypto/test_c023/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c023/test_data.h
@@ -19,37 +19,21 @@
 
 typedef struct {
     char                    test_desc[75];
-    psa_key_usage_t         usage;
     psa_algorithm_t         key_alg;
+    size_t                  capacity;
+    psa_status_t            expected_status;
 } test_data;
 
 static test_data check1[] = {
-#ifdef ARCH_TEST_HKDF
-#ifdef ARCH_TEST_SHA256
-{"Test psa_key_policy_get_usage with usage as encrypt\n",
- PSA_KEY_USAGE_ENCRYPT, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+{"Test psa_key_derivation_set_get_capacity - Less than operation's capacity\n",
+ PSA_ALG_HKDF(PSA_ALG_SHA_256), 42, PSA_SUCCESS
 },
 
-{"Test psa_key_policy_get_usage with usage as decrypt\n",
- PSA_KEY_USAGE_DECRYPT, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+{"Test psa_key_derivation_set_get_capacity - Equal to operation's capacity\n",
+ PSA_ALG_HKDF(PSA_ALG_SHA_256), 8160, PSA_SUCCESS
 },
 
-{"Test psa_key_policy_get_usage with usage as derive\n",
- PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
+{"Test psa_key_derivation_set_get_capacity - More than operation's capacity\n",
+ PSA_ALG_HKDF(PSA_ALG_SHA_256), 10000, PSA_ERROR_INVALID_ARGUMENT
 },
-
-{"Test psa_key_policy_get_usage with usage as export\n",
- PSA_KEY_USAGE_EXPORT, PSA_ALG_HKDF(PSA_ALG_SHA_256),
-},
-
-{"Test psa_key_policy_get_usage with usage as sign\n",
- PSA_KEY_USAGE_SIGN, PSA_ALG_HKDF(PSA_ALG_SHA_256),
-},
-
-{"Test psa_key_policy_get_usage with usage as verify\n",
- PSA_KEY_USAGE_VERIFY, PSA_ALG_HKDF(PSA_ALG_SHA_256),
-},
-#endif
-#endif
-
 };
diff --git a/api-tests/dev_apis/crypto/test_c023/test_entry_c023.c b/api-tests/dev_apis/crypto/test_c023/test_entry_c023.c
index d177a9d..db4d0bb 100644
--- a/api-tests/dev_apis/crypto/test_c023/test_entry_c023.c
+++ b/api-tests/dev_apis/crypto/test_c023/test_entry_c023.c
@@ -20,7 +20,8 @@
 #include "test_c023.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 23)
-#define TEST_DESC "Testing crypto key management APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c024/test_c024.c b/api-tests/dev_apis/crypto/test_c024/test_c024.c
index 16b52e6..2354ba1 100644
--- a/api-tests/dev_apis/crypto/test_c024/test_c024.c
+++ b/api-tests/dev_apis/crypto/test_c024/test_c024.c
@@ -23,7 +23,6 @@
 client_test_t test_c024_crypto_list[] = {
     NULL,
     psa_aead_encrypt_test,
-    psa_aead_encrypt_negative_test,
     NULL,
 };
 
@@ -44,12 +43,18 @@
 
 int32_t psa_aead_encrypt_test(security_t caller)
 {
-    int32_t          i, status;
-    uint8_t          ciphertext[BUFFER_SIZE];
-    psa_key_policy_t policy;
-    size_t           ciphertext_length;
-    int              num_checks = sizeof(check1)/sizeof(check1[0]);
-    uint8_t          *nonce, *additional_data;
+    int32_t               i, status;
+    uint8_t               ciphertext[BUFFER_SIZE];
+    size_t                ciphertext_length;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    uint8_t              *nonce, *additional_data;
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -60,34 +65,19 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        memset(ciphertext, 0, sizeof(ciphertext));
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                        &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                        check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         if (is_buffer_empty(check1[i].nonce, check1[i].nonce_length) == TRUE)
         {
@@ -111,115 +101,40 @@
                     check1[i].additional_data_length, check1[i].plaintext,
                     check1[i].plaintext_length, ciphertext, check1[i].ciphertext_size,
                     &ciphertext_length);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Destroy the key */
             status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
-        }
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
             continue;
+        }
 
         /* Check if the length matches */
         TEST_ASSERT_EQUAL(ciphertext_length,
                     check1[i].expected_ciphertext_length,
-                    TEST_CHECKPOINT_NUM(8));
+                    TEST_CHECKPOINT_NUM(6));
 
         /* Check if the data matches */
         TEST_ASSERT_MEMCMP(ciphertext, check1[i].expected_ciphertext, ciphertext_length,
-                           TEST_CHECKPOINT_NUM(9));
+                           TEST_CHECKPOINT_NUM(7));
 
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
-    }
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
-    return VAL_STATUS_SUCCESS;
-}
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
 
-int32_t psa_aead_encrypt_negative_test(security_t caller)
-{
-    int32_t          i, status;
-    uint8_t          ciphertext[BUFFER_SIZE];
-    psa_key_policy_t policy;
-    size_t           ciphertext_length;
-    int              num_checks = sizeof(check2)/sizeof(check2[0]);
-    uint8_t          *nonce, *additional_data;
-
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    for (i = 0; i < num_checks; i++)
-    {
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
-
-        if (is_buffer_empty(check2[i].nonce, check2[i].nonce_length) == TRUE)
-        {
-            nonce = NULL;
-            check2[i].nonce_length = 0;
-        }
-        else
-            nonce = check2[i].nonce;
-
-        if (is_buffer_empty(check2[i].additional_data, check2[i].additional_data_length) == TRUE)
-        {
-            additional_data = NULL;
-            check2[i].additional_data_length = 0;
-        }
-        else
-            additional_data = check2[i].additional_data;
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_aead_encrypt - Invalid key handle\n",
-                                                                             g_test_count++);
-        /* Process an authenticated encryption operation */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT, check2[i].key_handle,
-                    check2[i].key_alg, nonce, check2[i].nonce_length, additional_data,
-                    check2[i].additional_data_length, check2[i].plaintext,
-                    check2[i].plaintext_length, ciphertext, check2[i].ciphertext_size,
+        /* Process an authenticated encryption operation on a destroyed key*/
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT, check1[i].key_handle,
+                    check1[i].key_alg, nonce, check1[i].nonce_length, additional_data,
+                    check1[i].additional_data_length, check1[i].plaintext,
+                    check1[i].plaintext_length, ciphertext, check1[i].ciphertext_size,
                     &ciphertext_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_aead_encrypt - Zero as key handle\n",
-                                                                             g_test_count++);
-        /* Process an authenticated encryption operation */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT, 0,
-                    check2[i].key_alg, nonce, check2[i].nonce_length, additional_data,
-                    check2[i].additional_data_length, check2[i].plaintext,
-                    check2[i].plaintext_length, ciphertext, check2[i].ciphertext_size,
-                    &ciphertext_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_aead_encrypt - Empty key handle\n",
-                                                                             g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle,
-                        &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Process an authenticated encryption operation */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT, check2[i].key_handle,
-                    check2[i].key_alg, nonce, check2[i].nonce_length, additional_data,
-                    check2[i].additional_data_length, check2[i].plaintext,
-                    check2[i].plaintext_length, ciphertext, check2[i].ciphertext_size,
-                    &ciphertext_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7));
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(9));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c024/test_c024.h b/api-tests/dev_apis/crypto/test_c024/test_c024.h
index 5060e3e..1e76863 100644
--- a/api-tests/dev_apis/crypto/test_c024/test_c024.h
+++ b/api-tests/dev_apis/crypto/test_c024/test_c024.h
@@ -18,15 +18,14 @@
 #define _TEST_C024_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c024)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c024)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c024_crypto_list[];
 
 int32_t psa_aead_encrypt_test(security_t caller);
-int32_t psa_aead_encrypt_negative_test(security_t caller);
 
 #endif /* _TEST_C024_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c024/test_data.h b/api-tests/dev_apis/crypto/test_c024/test_data.h
index f280002..dfe2f1f 100644
--- a/api-tests/dev_apis/crypto/test_c024/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c024/test_data.h
@@ -17,8 +17,6 @@
 
 #include "val_crypto.h"
 
-#define EMPTY_KEY_SLOT      31
-
 typedef struct {
     char                    test_desc[75];
     psa_key_handle_t        key_handle;
@@ -162,19 +160,3 @@
 #endif
 #endif
 };
-
-static test_data check2[] = {
-#ifdef ARCH_TEST_GCM
-#ifdef ARCH_TEST_AES_128
-{"Test psa_aead_encrypt - Negative case\n", 9, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM,
-{0}, 13, {0}, 0, "hello world", 11,
-{0x5D, 0xC1, 0x72, 0x23, 0x66, 0x96, 0xFD, 0xFC, 0x93, 0x06, 0x27, 0x52, 0xC7,
- 0x0A, 0xCB, 0x36, 0x55, 0x30, 0xC9, 0x48, 0x8F, 0x5E, 0xA5, 0xB9, 0x51, 0xFB,
- 0x4E},
- BUFFER_SIZE, 27, PSA_ERROR_DOES_NOT_EXIST
-},
-#endif
-#endif
-};
diff --git a/api-tests/dev_apis/crypto/test_c024/test_entry_c024.c b/api-tests/dev_apis/crypto/test_c024/test_entry_c024.c
index caf7415..91af959 100644
--- a/api-tests/dev_apis/crypto/test_c024/test_entry_c024.c
+++ b/api-tests/dev_apis/crypto/test_c024/test_entry_c024.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 24)
 #define TEST_DESC "Testing crypto AEAD APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c025/test_c025.c b/api-tests/dev_apis/crypto/test_c025/test_c025.c
index f9dc3fd..c8a6df4 100644
--- a/api-tests/dev_apis/crypto/test_c025/test_c025.c
+++ b/api-tests/dev_apis/crypto/test_c025/test_c025.c
@@ -23,7 +23,6 @@
 client_test_t test_c025_crypto_list[] = {
     NULL,
     psa_aead_decrypt_test,
-    psa_aead_decrypt_negative_test,
     NULL,
 };
 
@@ -46,10 +45,16 @@
 {
     int32_t          i, status;
     uint8_t          plaintext[BUFFER_SIZE];
-    psa_key_policy_t policy;
     size_t           plaintext_length;
     int              num_checks = sizeof(check1)/sizeof(check1[0]);
     uint8_t          *nonce, *additional_data;
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -60,33 +65,19 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        memset(plaintext, 0, sizeof(plaintext));
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                                      &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         if (is_buffer_empty(check1[i].nonce, check1[i].nonce_length) == TRUE)
         {
@@ -131,91 +122,17 @@
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        /* Process an authenticated decryption operation on a destroyed key handle */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT, check1[i].key_handle,
+                  check1[i].key_alg, nonce, check1[i].nonce_length, additional_data,
+                  check1[i].additional_data_length, check1[i].ciphertext, check1[i].ciphertext_size,
+                  plaintext, check1[i].plaintext_size, &plaintext_length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(11));
     }
 
     return VAL_STATUS_SUCCESS;
 }
-
-int32_t psa_aead_decrypt_negative_test(security_t caller)
-{
-    int32_t          i, status;
-    uint8_t          plaintext[BUFFER_SIZE];
-    psa_key_policy_t policy;
-    size_t           plaintext_length;
-    int              num_checks = sizeof(check2)/sizeof(check2[0]);
-    uint8_t          *nonce, *additional_data;
-
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    for (i = 0; i < num_checks; i++)
-    {
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
-
-        if (is_buffer_empty(check2[i].nonce, check2[i].nonce_length) == TRUE)
-        {
-            nonce = NULL;
-            check2[i].nonce_length = 0;
-        }
-        else
-            nonce = check2[i].nonce;
-
-        if (is_buffer_empty(check2[i].additional_data, check2[i].additional_data_length) == TRUE)
-        {
-            additional_data = NULL;
-            check2[i].additional_data_length = 0;
-        }
-        else
-            additional_data = check2[i].additional_data;
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_aead_decrypt - Invalid key handle\n",
-                                                                             g_test_count++);
-        /* Process an authenticated decryption operation */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT, check2[i].key_handle,
-                  check2[i].key_alg, nonce, check2[i].nonce_length, additional_data,
-                  check2[i].additional_data_length, check2[i].ciphertext, check2[i].ciphertext_size,
-                  plaintext, check2[i].plaintext_size, &plaintext_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_aead_decrypt - Zero as key handle\n",
-                                                                             g_test_count++);
-        /* Process an authenticated decryption operation */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT, 0,
-                  check2[i].key_alg, nonce, check2[i].nonce_length, additional_data,
-                  check2[i].additional_data_length, check2[i].ciphertext, check2[i].ciphertext_size,
-                  plaintext, check2[i].plaintext_size, &plaintext_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_aead_decrypt - Empty key handle\n",
-                                                                             g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle,
-                        &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Process an authenticated decryption operation */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT, check2[i].key_handle,
-                  check2[i].key_alg, nonce, check2[i].nonce_length, additional_data,
-                  check2[i].additional_data_length, check2[i].ciphertext, check2[i].ciphertext_size,
-                  plaintext, check2[i].plaintext_size, &plaintext_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7));
-     }
-
-     return VAL_STATUS_SUCCESS;
-}
diff --git a/api-tests/dev_apis/crypto/test_c025/test_c025.h b/api-tests/dev_apis/crypto/test_c025/test_c025.h
index 5b0667b..27674cd 100644
--- a/api-tests/dev_apis/crypto/test_c025/test_c025.h
+++ b/api-tests/dev_apis/crypto/test_c025/test_c025.h
@@ -18,9 +18,9 @@
 #define _TEST_C025_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c025)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c025)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c025/test_data.h b/api-tests/dev_apis/crypto/test_c025/test_data.h
index 44ce513..82977ed 100644
--- a/api-tests/dev_apis/crypto/test_c025/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c025/test_data.h
@@ -17,8 +17,6 @@
 
 #include "val_crypto.h"
 
-#define EMPTY_KEY_SLOT      31
-
 typedef struct {
     char                    test_desc[75];
     psa_key_handle_t        key_handle;
@@ -57,7 +55,7 @@
  39, 23, PSA_SUCCESS
 },
 
-{"Test psa_aead_encrypt - AES-CCM\n", 2, PSA_KEY_TYPE_AES,
+{"Test psa_aead_decrypt - AES-CCM\n", 2, PSA_KEY_TYPE_AES,
 {0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
  0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM,
 {0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
@@ -73,7 +71,7 @@
  0xe9}, 40, 24, PSA_SUCCESS
 },
 
-{"Test psa_aead_encrypt - AES-CCM 24 bytes Tag length = 4\n", 3, PSA_KEY_TYPE_AES,
+{"Test psa_aead_decrypt - AES-CCM 24 bytes Tag length = 4\n", 3, PSA_KEY_TYPE_AES,
 {0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
  0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT,
  PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
@@ -208,19 +206,3 @@
 #endif
 #endif
 };
-
-static test_data check2[] = {
-#ifdef ARCH_TEST_GCM
-#ifdef ARCH_TEST_AES_128
-{"Test psa_aead_decrypt - Negative cases\n", 11, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_GCM,
-{0}, 13, {0}, 0, "hello world", BUFFER_SIZE,
-{0x5D, 0xC1, 0x72, 0x23, 0x66, 0x96, 0xFD, 0xFC, 0x93, 0x06, 0x27, 0x52, 0xC7,
- 0x0A, 0xCB, 0x36, 0x55, 0x30, 0xC9, 0x48, 0x8F, 0x5E, 0xA5, 0xB9, 0x51, 0xFB,
- 0x4E},
- 11, 27, PSA_ERROR_INVALID_ARGUMENT
-},
-#endif
-#endif
-};
diff --git a/api-tests/dev_apis/crypto/test_c025/test_entry_c025.c b/api-tests/dev_apis/crypto/test_c025/test_entry_c025.c
index f71ac41..45822f3 100644
--- a/api-tests/dev_apis/crypto/test_c025/test_entry_c025.c
+++ b/api-tests/dev_apis/crypto/test_c025/test_entry_c025.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 25)
 #define TEST_DESC "Testing crypto AEAD APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c026/test_c026.c b/api-tests/dev_apis/crypto/test_c026/test_c026.c
index 03d9def..94fa65f 100644
--- a/api-tests/dev_apis/crypto/test_c026/test_c026.c
+++ b/api-tests/dev_apis/crypto/test_c026/test_c026.c
@@ -33,9 +33,15 @@
 
 int32_t psa_mac_sign_setup_test(security_t caller)
 {
-    int                 num_checks = sizeof(check1)/sizeof(check1[0]);
-    psa_key_policy_t    policy;
-    int32_t             i, status;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               i, status;
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -47,32 +53,15 @@
         val->print(PRINT_TEST, check1[i].test_desc, 0);
         memset(&operation, 0, sizeof(operation));
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                                      &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Start a multipart MAC calculation operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation,
@@ -98,6 +87,9 @@
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
@@ -106,7 +98,6 @@
 int32_t psa_mac_sign_setup_negative_test(security_t caller)
 {
     int                 num_checks = sizeof(check2)/sizeof(check2[0]);
-    psa_key_policy_t    policy;
     int32_t             i, status;
 
     /* Initialize the PSA crypto library*/
@@ -115,51 +106,24 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-        memset(&operation, 0, sizeof(operation));
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_mac_sign_setup with invalid key handle\n",
+        val->print(PRINT_TEST, "[Check %d] Test psa_mac_sign_setup invalid key handle\n",
                                                                                  g_test_count++);
-        /* Start a multipart MAC calculation operation */
+        /* Start a multipart MAC verification operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation,
                     check2[i].key_handle, check2[i].key_alg);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
 
-        val->print(PRINT_TEST, "[Check %d] Test psa_mac_sign_setup with zero key handle\n",
+        val->print(PRINT_TEST, "[Check %d] Test psa_mac_sign_setup zero as key handle\n",
                                                                                  g_test_count++);
-        /* Start a multipart MAC calculation operation */
+        /* Start a multipart MAC verification operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation,
                     0, check2[i].key_alg);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_mac_sign_setup with empty key handle\n",
-                                                                                 g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle,
-                                      &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Start a multipart MAC calculation operation */
-        status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation,
-                    check2[i].key_handle, check2[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7));
     }
 
     return VAL_STATUS_SUCCESS;
 }
-
diff --git a/api-tests/dev_apis/crypto/test_c026/test_c026.h b/api-tests/dev_apis/crypto/test_c026/test_c026.h
index 8d3e052..f90449c 100644
--- a/api-tests/dev_apis/crypto/test_c026/test_c026.h
+++ b/api-tests/dev_apis/crypto/test_c026/test_c026.h
@@ -18,9 +18,9 @@
 #define _TEST_C026_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c026)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c026)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c026/test_data.h b/api-tests/dev_apis/crypto/test_c026/test_data.h
index df4d3a5..02fc148 100644
--- a/api-tests/dev_apis/crypto/test_c026/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c026/test_data.h
@@ -17,8 +17,6 @@
 
 #include "val_crypto.h"
 
-#define EMPTY_KEY_SLOT      31
-
 typedef struct {
     char                    test_desc[75];
     psa_key_handle_t        key_handle;
@@ -142,14 +140,18 @@
 };
 
 static test_data check2[] = {
-#ifdef ARCH_TEST_AES_128
-#ifdef ARCH_TEST_CMAC
-{"Test psa_mac_sign_setup - Negative case\n", 12, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9, 0x00},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_SIGN, PSA_ALG_CMAC,
- PSA_ERROR_INVALID_ARGUMENT
+#ifdef ARCH_TEST_HMAC
+#ifdef ARCH_TEST_SHA256
+{"Test psa_mac_sign_setup 64 negative case\n", 11, PSA_KEY_TYPE_HMAC,
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c,
+ 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
+ 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
+ 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33,
+ 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f},
+ 64, PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_256),
+ PSA_SUCCESS
 },
 #endif
 #endif
 };
+;
diff --git a/api-tests/dev_apis/crypto/test_c026/test_entry_c026.c b/api-tests/dev_apis/crypto/test_c026/test_entry_c026.c
index 89b3126..57aa1b3 100644
--- a/api-tests/dev_apis/crypto/test_c026/test_entry_c026.c
+++ b/api-tests/dev_apis/crypto/test_c026/test_entry_c026.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 26)
 #define TEST_DESC "Testing crypto MAC APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c027/test_c027.c b/api-tests/dev_apis/crypto/test_c027/test_c027.c
index b6e3288..c4de02b 100644
--- a/api-tests/dev_apis/crypto/test_c027/test_c027.c
+++ b/api-tests/dev_apis/crypto/test_c027/test_c027.c
@@ -33,11 +33,17 @@
 
 int32_t psa_mac_update_test(security_t caller)
 {
-    int                 num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t             i, status;
-    size_t              length;
-    psa_key_policy_t    policy;
-    psa_mac_operation_t operation;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               i, status;
+    size_t                length;
+    psa_mac_operation_t   operation;
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -50,50 +56,39 @@
         memset(&operation, 0, sizeof(operation));
         memset(data, 0, sizeof(data));
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Start a multipart MAC calculation operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation,
                     check1[i].key_handle, check1[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
         /* Add a message fragment to a multipart MAC operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE, &operation, check1[i].data,
                     check1[i].data_size);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5));
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Abort a MAC operation */
             status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
 
             /* Destroy the key */
             status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
             continue;
         }
@@ -101,20 +96,20 @@
         /* Finish the calculation of the MAC of a message */
         status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_FINISH, &operation, data,
                     sizeof(data), &length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
         /* Add a message fragment to the same multipart MAC operation*/
         status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE, &operation, check1[i].data,
                     check1[i].data_size);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(11));
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9));
 
         /* Abort a MAC operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
 
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c027/test_c027.h b/api-tests/dev_apis/crypto/test_c027/test_c027.h
index ea4c22f..4af68c6 100644
--- a/api-tests/dev_apis/crypto/test_c027/test_c027.h
+++ b/api-tests/dev_apis/crypto/test_c027/test_c027.h
@@ -18,9 +18,9 @@
 #define _TEST_C027_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c027)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c027)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c027/test_entry_c027.c b/api-tests/dev_apis/crypto/test_c027/test_entry_c027.c
index fedebfc..8e40ce1 100644
--- a/api-tests/dev_apis/crypto/test_c027/test_entry_c027.c
+++ b/api-tests/dev_apis/crypto/test_c027/test_entry_c027.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 27)
 #define TEST_DESC "Testing crypto MAC APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c028/test_c028.c b/api-tests/dev_apis/crypto/test_c028/test_c028.c
index 475feb7..9599fb4 100644
--- a/api-tests/dev_apis/crypto/test_c028/test_c028.c
+++ b/api-tests/dev_apis/crypto/test_c028/test_c028.c
@@ -32,12 +32,17 @@
 
 int32_t psa_mac_sign_finish_test(security_t caller)
 {
-    int                 num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t             i, status;
-    size_t              length;
-    psa_key_policy_t    policy;
-    psa_mac_operation_t operation;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               i, status;
+    size_t                length;
+    psa_mac_operation_t   operation;
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
 
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -50,65 +55,53 @@
         memset(&operation, 0, sizeof(operation));
         memset(data, 0, sizeof(data));
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Start a multipart MAC calculation operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation,
                     check1[i].key_handle, check1[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
         /* Add a message fragment to a multipart MAC operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE, &operation, check1[i].data,
                     check1[i].data_size);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
         /* Finish the calculation of the MAC of a message */
         status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_FINISH, &operation, data,
                     check1[i].mac_size, &length);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Abort a MAC operation */
             status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
             /* Destroy the key */
             status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
             continue;
         }
 
         /* Check if the MAC length matches with the expected length */
-        TEST_ASSERT_EQUAL(length, check1[i].expected_length, TEST_CHECKPOINT_NUM(11));
+        TEST_ASSERT_EQUAL(length, check1[i].expected_length, TEST_CHECKPOINT_NUM(9));
 
         /* Check if the MAC data matches with the expected data */
-        TEST_ASSERT_MEMCMP(check1[i].expected_data, data, length, TEST_CHECKPOINT_NUM(12));
+        TEST_ASSERT_MEMCMP(check1[i].expected_data, data, length, TEST_CHECKPOINT_NUM(10));
 
         memset(data, 0, sizeof(data));
 
@@ -118,15 +111,15 @@
          */
         status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_FINISH, &operation, data,
                     check1[i].mac_size, &length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(13));
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(11));
 
         /* Abort a MAC operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
 
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c028/test_c028.h b/api-tests/dev_apis/crypto/test_c028/test_c028.h
index a8b1b0f..bebadba 100644
--- a/api-tests/dev_apis/crypto/test_c028/test_c028.h
+++ b/api-tests/dev_apis/crypto/test_c028/test_c028.h
@@ -18,9 +18,9 @@
 #define _TEST_C028_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c028)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c028)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c028/test_entry_c028.c b/api-tests/dev_apis/crypto/test_c028/test_entry_c028.c
index 86dda65..7646fd5 100644
--- a/api-tests/dev_apis/crypto/test_c028/test_entry_c028.c
+++ b/api-tests/dev_apis/crypto/test_c028/test_entry_c028.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 28)
 #define TEST_DESC "Testing crypto MAC APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c029/test_c029.c b/api-tests/dev_apis/crypto/test_c029/test_c029.c
index 53be0db..816aa10 100644
--- a/api-tests/dev_apis/crypto/test_c029/test_c029.c
+++ b/api-tests/dev_apis/crypto/test_c029/test_c029.c
@@ -33,9 +33,15 @@
 
 int32_t psa_mac_verify_setup_test(security_t caller)
 {
-    int                 num_checks = sizeof(check1)/sizeof(check1[0]);
-    psa_key_policy_t    policy;
-    int32_t             i, status;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               i, status;
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -47,43 +53,30 @@
         val->print(PRINT_TEST, check1[i].test_desc, 0);
         memset(&operation, 0, sizeof(operation));
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                                      &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Start a multipart MAC verification operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP, &operation,
                     check1[i].key_handle, check1[i].key_alg);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         /* Whether setup succeeded or failed, abort must succeed.
          * Abort a MAC operation
          */
         status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
         /* If setup failed, reproduce the failure, so that the caller can
          * test the resulting state of the operation object.
@@ -92,12 +85,12 @@
         {
             status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP, &operation,
                         check1[i].key_handle, check1[i].key_alg);
-            TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8));
+            TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
         }
 
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
     }
 
     return VAL_STATUS_SUCCESS;
@@ -106,7 +99,6 @@
 int32_t psa_mac_verify_setup_negative_test(security_t caller)
 {
     int                 num_checks = sizeof(check2)/sizeof(check2[0]);
-    psa_key_policy_t    policy;
     int32_t             i, status;
 
     /* Initialize the PSA crypto library*/
@@ -115,20 +107,10 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-        memset(&operation, 0, sizeof(operation));
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
-
         val->print(PRINT_TEST, "[Check %d] Test psa_mac_verify_setup invalid key handle\n",
                                                                                  g_test_count++);
         /* Start a multipart MAC verification operation */
@@ -142,17 +124,6 @@
         status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP, &operation,
                     0, check2[i].key_alg);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_mac_verify_setup empty key handle\n",
-                                                                                 g_test_count++);
-        /* Start a multipart MAC verification operation */
-        status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP, &operation,
-                    check2[i].key_handle, check2[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(6));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c029/test_c029.h b/api-tests/dev_apis/crypto/test_c029/test_c029.h
index b549fed..e12700a 100644
--- a/api-tests/dev_apis/crypto/test_c029/test_c029.h
+++ b/api-tests/dev_apis/crypto/test_c029/test_c029.h
@@ -18,9 +18,9 @@
 #define _TEST_C029_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c029)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c029)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c029/test_data.h b/api-tests/dev_apis/crypto/test_c029/test_data.h
index 4adad3a..1a55b00 100644
--- a/api-tests/dev_apis/crypto/test_c029/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c029/test_data.h
@@ -17,8 +17,6 @@
 
 #include "val_crypto.h"
 
-#define EMPTY_KEY_SLOT      31
-
 typedef struct {
     char                    test_desc[75];
     psa_key_handle_t        key_handle;
diff --git a/api-tests/dev_apis/crypto/test_c029/test_entry_c029.c b/api-tests/dev_apis/crypto/test_c029/test_entry_c029.c
index 78c323f..0ca3e50 100644
--- a/api-tests/dev_apis/crypto/test_c029/test_entry_c029.c
+++ b/api-tests/dev_apis/crypto/test_c029/test_entry_c029.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 29)
 #define TEST_DESC "Testing crypto MAC APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c030/test_c030.c b/api-tests/dev_apis/crypto/test_c030/test_c030.c
index 177b0f0..323ee8b 100644
--- a/api-tests/dev_apis/crypto/test_c030/test_c030.c
+++ b/api-tests/dev_apis/crypto/test_c030/test_c030.c
@@ -31,10 +31,16 @@
 
 int32_t psa_mac_verify_finish_test(security_t caller)
 {
-    int                 num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t             i, status;
-    psa_key_policy_t    policy;
-    psa_mac_operation_t operation;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               i, status;
+    psa_mac_operation_t   operation;
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -46,58 +52,46 @@
         val->print(PRINT_TEST, check1[i].test_desc, 0);
         memset(&operation, 0, sizeof(operation));
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Start a multipart MAC calculation operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP, &operation,
                     check1[i].key_handle, check1[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
         /* Add a message fragment to a multipart MAC operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE, &operation, check1[i].data,
                     check1[i].data_size);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
         /* Finish the calculation of the MAC of a message and compare it with
          * an expected value
          */
         status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_FINISH, &operation,
                     check1[i].expected_mac, check1[i].mac_size);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Abort a MAC operation */
             status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
             /* Destroy the key */
             status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
             continue;
         }
 
@@ -107,15 +101,15 @@
          */
         status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_FINISH, &operation,
                     check1[i].expected_mac, check1[i].mac_size);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(11));
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9));
 
         /* Abort a MAC operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
 
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c030/test_c030.h b/api-tests/dev_apis/crypto/test_c030/test_c030.h
index 46c2720..eacecd8 100644
--- a/api-tests/dev_apis/crypto/test_c030/test_c030.h
+++ b/api-tests/dev_apis/crypto/test_c030/test_c030.h
@@ -18,9 +18,9 @@
 #define _TEST_C030_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c030)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c030)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c030/test_entry_c030.c b/api-tests/dev_apis/crypto/test_c030/test_entry_c030.c
index 0188a08..6fd4896 100644
--- a/api-tests/dev_apis/crypto/test_c030/test_entry_c030.c
+++ b/api-tests/dev_apis/crypto/test_c030/test_entry_c030.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 30)
 #define TEST_DESC "Testing crypto MAC APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c031/test_c031.c b/api-tests/dev_apis/crypto/test_c031/test_c031.c
index 040e8a8..eaef9bd 100644
--- a/api-tests/dev_apis/crypto/test_c031/test_c031.c
+++ b/api-tests/dev_apis/crypto/test_c031/test_c031.c
@@ -33,10 +33,16 @@
 
 int32_t psa_mac_abort_test(security_t caller)
 {
-    int                 num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t             i, status;
-    psa_key_policy_t    policy;
-    psa_mac_operation_t operation;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               i, status;
+    psa_mac_operation_t   operation;
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -48,31 +54,19 @@
         val->print(PRINT_TEST, check1[i].test_desc, 0);
         memset(&operation, 0, sizeof(operation));
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Start a multipart MAC calculation operation */
         status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation,
@@ -97,19 +91,19 @@
 
 int32_t psa_mac_abort_before_finish_test(security_t caller)
 {
-    size_t              length;
-    psa_key_policy_t    policy;
-    psa_algorithm_t     key_alg = PSA_ALG_CMAC;
-    psa_key_usage_t     usage = PSA_KEY_USAGE_SIGN;
-    psa_key_handle_t    key_handle = 10;
-    psa_key_type_t      key_type = PSA_KEY_TYPE_AES;
-    psa_mac_operation_t operation;
-    uint8_t             key_data[] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7,
+    size_t                length;
+    psa_algorithm_t       key_alg = PSA_ALG_CMAC;
+    psa_key_usage_t       usage = PSA_KEY_USAGE_SIGN;
+    psa_key_handle_t      key_handle = 10;
+    psa_key_type_t        key_type = PSA_KEY_TYPE_AES;
+    psa_mac_operation_t   operation;
+    uint8_t               key_data[] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7,
                                       0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c};
-    uint8_t             input_data[] = {0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65};
-    size_t              key_length = sizeof(key_data);
-    size_t              inputdata_size = sizeof(input_data);
-    int32_t             status;
+    uint8_t               input_data[] = {0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65};
+    size_t                key_length = sizeof(key_data);
+    size_t                inputdata_size = sizeof(input_data);
+    int32_t               status;
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
 
     memset(data, 0, sizeof(data));
     memset(&operation, 0, sizeof(operation));
@@ -125,26 +119,15 @@
     status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
     TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-    /* Initialize a key policy structure to a default that forbids all
-     * usage of the key
-     */
-    val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-    /* Set the standard fields of a policy structure */
-    val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, usage, key_alg);
-
-    /* Allocate a key slot for a transient key */
-    status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &key_handle);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-    /* Set the usage policy on a key slot */
-    status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, key_handle, &policy);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+    /* Setup the attributes for the key */
+    val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, key_type);
+    val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, usage);
+    val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, key_alg);
 
     /* Import the key data into the key slot */
-    status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, key_handle, key_type, key_data,
-                key_length);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+    status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+             key_length, &key_handle);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
     /* Start a multipart MAC calculation operation */
     status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation, key_handle, key_alg);
diff --git a/api-tests/dev_apis/crypto/test_c031/test_c031.h b/api-tests/dev_apis/crypto/test_c031/test_c031.h
index 0aee628..7582a59 100644
--- a/api-tests/dev_apis/crypto/test_c031/test_c031.h
+++ b/api-tests/dev_apis/crypto/test_c031/test_c031.h
@@ -18,9 +18,9 @@
 #define _TEST_C031_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c031)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c031)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c031/test_entry_c031.c b/api-tests/dev_apis/crypto/test_c031/test_entry_c031.c
index bd97a0d..f7b9d7a 100644
--- a/api-tests/dev_apis/crypto/test_c031/test_entry_c031.c
+++ b/api-tests/dev_apis/crypto/test_c031/test_entry_c031.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 31)
 #define TEST_DESC "Testing crypto MAC APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c032/test_c032.c b/api-tests/dev_apis/crypto/test_c032/test_c032.c
index 44e4682..0b10ef3 100644
--- a/api-tests/dev_apis/crypto/test_c032/test_c032.c
+++ b/api-tests/dev_apis/crypto/test_c032/test_c032.c
@@ -35,35 +35,32 @@
 {
     int                     num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t                 i, status;
-    const uint8_t           *key_data;
-    psa_key_policy_t        policy;
+    const uint8_t          *key_data;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
 
+    /* Set the key data buffer to the input base on algorithm */
     for (i = 0; i < num_checks; i++)
     {
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
-        memset(&operation, 0, sizeof(operation));
-
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
 
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
         if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
         {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
             {
                 if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
                     key_data = rsa_384_keypair;
@@ -84,7 +81,7 @@
         }
         else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
                 key_data = ec_keypair;
             else
                 key_data = ec_keydata;
@@ -92,41 +89,41 @@
         else
             key_data = check1[i].key_data;
 
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Set the key for a multipart symmetric encryption operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation,
                     check1[i].key_handle, check1[i].key_alg);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         /* Whether setup succeeded or failed, abort must succeed.
          * Abort a cipher operation
          */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation,
                         check1[i].key_handle, check1[i].key_alg);
-            TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8));
+            TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
         }
 
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
@@ -136,7 +133,6 @@
 {
     int                     num_checks = sizeof(check2)/sizeof(check2[0]);
     int32_t                 i, status;
-    psa_key_policy_t        policy;
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -144,20 +140,10 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-        memset(&operation, 0, sizeof(operation));
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
-
         val->print(PRINT_TEST, "[Check %d] Test psa_cipher_encrypt_setup - Invalid key handle\n",
                                                                                    g_test_count++);
         /* Set the key for a multipart symmetric encryption operation */
@@ -171,22 +157,6 @@
         status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation,
                     0, check2[i].key_alg);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_cipher_encrypt_setup - Empty key handle\n",
-                                                                                   g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Set the key for a multipart symmetric encryption operation */
-        status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation,
-                    check2[i].key_handle, check2[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c032/test_c032.h b/api-tests/dev_apis/crypto/test_c032/test_c032.h
index 02a902c..f229c1a 100644
--- a/api-tests/dev_apis/crypto/test_c032/test_c032.h
+++ b/api-tests/dev_apis/crypto/test_c032/test_c032.h
@@ -18,9 +18,9 @@
 #define _TEST_C032_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c032)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c032)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c032/test_data.h b/api-tests/dev_apis/crypto/test_c032/test_data.h
index f7be679..763afde 100644
--- a/api-tests/dev_apis/crypto/test_c032/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c032/test_data.h
@@ -23,6 +23,7 @@
     psa_key_type_t          key_type;
     uint8_t                 key_data[64];
     uint32_t                key_length;
+    size_t                  attr_bits;
     psa_key_usage_t         usage;
     psa_algorithm_t         key_alg;
     size_t                  expected_bit_length;
@@ -164,7 +165,7 @@
 #ifdef ARCH_TEST_AES_128
 {"Test psa_cipher_encrypt_setup 16 Byte AES\n", 1, PSA_KEY_TYPE_AES,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE,
+ 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, BYTES_TO_BITS(AES_16B_KEY_SIZE),
  PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE),
  PSA_SUCCESS
 },
@@ -173,7 +174,7 @@
 #ifdef ARCH_TEST_AES_192
 {"Test psa_cipher_encrypt_setup 24 Byte AES\n", 2, PSA_KEY_TYPE_AES,
 {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
- 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9}, AES_24B_KEY_SIZE,
+ 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9}, AES_24B_KEY_SIZE, 0,
  PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_24B_KEY_SIZE),
  PSA_SUCCESS
 },
@@ -183,7 +184,7 @@
 {"Test psa_cipher_encrypt_setup 32 Byte AES\n", 3, PSA_KEY_TYPE_AES,
 {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
  0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
- 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, AES_32B_KEY_SIZE,
+ 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, AES_32B_KEY_SIZE, 0,
  PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_32B_KEY_SIZE),
  PSA_SUCCESS
 },
@@ -194,7 +195,7 @@
 #ifdef ARCH_TEST_DES_1KEY
 {"Test psa_cipher_encrypt_setup DES 64 bit key\n", 4, PSA_KEY_TYPE_DES,
  {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
- DES_8B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, BYTES_TO_BITS(DES_8B_KEY_SIZE),
+ DES_8B_KEY_SIZE, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, BYTES_TO_BITS(DES_8B_KEY_SIZE),
  PSA_SUCCESS
 },
 #endif
@@ -203,7 +204,7 @@
 {"Test psa_cipher_encrypt_setup Triple DES 2-Key\n", 5, PSA_KEY_TYPE_DES,
 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
- DES3_2KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, BYTES_TO_BITS(DES3_2KEY_SIZE),
+ DES3_2KEY_SIZE, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, BYTES_TO_BITS(DES3_2KEY_SIZE),
  PSA_SUCCESS
 },
 #endif
@@ -213,7 +214,7 @@
 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
  0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86,
  0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
- DES3_3KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, BYTES_TO_BITS(DES3_3KEY_SIZE),
+ DES3_3KEY_SIZE, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, BYTES_TO_BITS(DES3_3KEY_SIZE),
  PSA_SUCCESS
 },
 #endif
@@ -222,7 +223,7 @@
 #ifdef ARCH_TEST_CIPER_MODE_CTR
 {"Test psa_cipher_encrypt_setup 16 Byte raw data\n", 7, PSA_KEY_TYPE_RAW_DATA,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE,
+ 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, 0,
  PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE),
  PSA_ERROR_NOT_SUPPORTED
 },
@@ -232,7 +233,7 @@
 #ifdef ARCH_TEST_CMAC
 {"Test psa_cipher_encrypt_setup - not a cipher algorithm\n", 8, PSA_KEY_TYPE_AES,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE,
+ 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, 0,
  PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CMAC, BYTES_TO_BITS(AES_16B_KEY_SIZE),
  PSA_ERROR_INVALID_ARGUMENT
 },
@@ -241,7 +242,7 @@
 #ifdef ARCH_TEST_CIPER
 {"Test psa_cipher_encrypt_setup - unknown cipher algorithm\n", 9, PSA_KEY_TYPE_AES,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE,
+ 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, 0,
  PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CATEGORY_CIPHER, BYTES_TO_BITS(AES_16B_KEY_SIZE),
  PSA_ERROR_NOT_SUPPORTED
 },
@@ -251,7 +252,7 @@
 #ifdef ARCH_TEST_ARC4
 {"Test psa_cipher_encrypt_setup - incompatible key ARC4\n", 10, PSA_KEY_TYPE_ARC4,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE,
+ 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, 0,
  PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE),
  PSA_ERROR_NOT_SUPPORTED
 },
@@ -259,7 +260,7 @@
 
 {"Test psa_cipher_encrypt_setup - incorrect usage\n", 11, PSA_KEY_TYPE_AES,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE,
+ 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, 0,
  PSA_KEY_USAGE_DECRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE),
  PSA_ERROR_NOT_PERMITTED
 },
@@ -269,13 +270,13 @@
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
 #ifdef ARCH_TEST_RSA_2048
 {"Test psa_cipher_encrypt_setup - RSA public key\n", 12, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
-{0}, 270,
+{0}, 270, 0,
  PSA_KEY_USAGE_ENCRYPT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 2048,
  PSA_ERROR_INVALID_ARGUMENT
 },
 
-{"Test psa_cipher_encrypt_setup - RSA keypair\n", 13, PSA_KEY_TYPE_RSA_KEYPAIR,
-{0}, 1193,
+{"Test psa_cipher_encrypt_setup - RSA keypair\n", 13, PSA_KEY_TYPE_RSA_KEY_PAIR,
+{0}, 1193, 0,
  PSA_KEY_USAGE_ENCRYPT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 2048,
  PSA_ERROR_INVALID_ARGUMENT
 },
@@ -285,7 +286,7 @@
 #ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {"Test psa_cipher_encrypt_setup - EC Public key\n", 14,
- PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), {0}, 65,
+ PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), {0}, 65, 0,
  PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, 256,
  PSA_ERROR_INVALID_ARGUMENT
 },
@@ -293,7 +294,7 @@
 
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 {"Test psa_cipher_encrypt_setup - EC keypair\n", 15,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), {0}, 28,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), {0}, 28, 0,
  PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, 224,
  PSA_ERROR_INVALID_ARGUMENT
 },
@@ -306,7 +307,7 @@
 #ifdef ARCH_TEST_AES_128
 {"Test psa_cipher_encrypt_setup negative cases\n", 16, PSA_KEY_TYPE_AES,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE,
+ 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, 0,
  PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE),
  PSA_SUCCESS
 },
diff --git a/api-tests/dev_apis/crypto/test_c032/test_entry_c032.c b/api-tests/dev_apis/crypto/test_c032/test_entry_c032.c
index 1ff8b8e..e05c81d 100644
--- a/api-tests/dev_apis/crypto/test_c032/test_entry_c032.c
+++ b/api-tests/dev_apis/crypto/test_c032/test_entry_c032.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 32)
 #define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c033/test_c033.c b/api-tests/dev_apis/crypto/test_c033/test_c033.c
index c3b6009..f1dc46d 100644
--- a/api-tests/dev_apis/crypto/test_c033/test_c033.c
+++ b/api-tests/dev_apis/crypto/test_c033/test_c033.c
@@ -35,35 +35,32 @@
 {
     int                     num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t                 i, status;
-    const uint8_t           *key_data;
-    psa_key_policy_t        policy;
+    const uint8_t          *key_data;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
 
+    /* Set the key data buffer to the input base on algorithm */
     for (i = 0; i < num_checks; i++)
     {
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
-        memset(&operation, 0, sizeof(operation));
-
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
 
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
         if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
         {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
             {
                 if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
                     key_data = rsa_384_keypair;
@@ -84,7 +81,7 @@
         }
         else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
                 key_data = ec_keypair;
             else
                 key_data = ec_keydata;
@@ -92,42 +89,40 @@
         else
             key_data = check1[i].key_data;
 
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Set the key for a multipart symmetric decryption operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation,
                     check1[i].key_handle, check1[i].key_alg);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         /* Whether setup succeeded or failed, abort must succeed.
          * Abort a cipher operation
          */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation,
                         check1[i].key_handle, check1[i].key_alg);
-            TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8));
+            TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
         }
 
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
+         /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
@@ -137,7 +132,6 @@
 {
     int                     num_checks = sizeof(check2)/sizeof(check2[0]);
     int32_t                 i, status;
-    psa_key_policy_t        policy;
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -145,20 +139,10 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-        memset(&operation, 0, sizeof(operation));
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
-
         val->print(PRINT_TEST, "[Check %d] Test psa_cipher_decrypt_setup - Invalid key handle\n",
                                                                                    g_test_count++);
         /* Set the key for a multipart symmetric decryption operation */
@@ -173,21 +157,6 @@
                     0, check2[i].key_alg);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
 
-        val->print(PRINT_TEST, "[Check %d] Test psa_cipher_decrypt_setup - Empty key handle\n",
-                                                                                   g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Set the key for a multipart symmetric decryption operation */
-        status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation,
-                    check2[i].key_handle, check2[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c033/test_c033.h b/api-tests/dev_apis/crypto/test_c033/test_c033.h
index 7a0befb..5e2aa85 100644
--- a/api-tests/dev_apis/crypto/test_c033/test_c033.h
+++ b/api-tests/dev_apis/crypto/test_c033/test_c033.h
@@ -18,9 +18,9 @@
 #define _TEST_C033_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c033)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c033)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c033/test_data.h b/api-tests/dev_apis/crypto/test_c033/test_data.h
index 82cc109..c44e8ed 100644
--- a/api-tests/dev_apis/crypto/test_c033/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c033/test_data.h
@@ -17,8 +17,6 @@
 
 #include "val_crypto.h"
 
-#define EMPTY_KEY_SLOT      31
-
 typedef struct {
     char                    test_desc[75];
     psa_key_handle_t        key_handle;
@@ -276,7 +274,7 @@
  PSA_ERROR_INVALID_ARGUMENT
 },
 
-{"Test psa_cipher_decrypt_setup - RSA keypair\n", 13, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_cipher_decrypt_setup - RSA keypair\n", 13, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 1193,
  PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 2048,
  PSA_ERROR_INVALID_ARGUMENT
@@ -295,7 +293,7 @@
 
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 {"Test psa_cipher_decrypt_setup - EC keypair\n", 15,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), {0}, 28,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), {0}, 28,
  PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT, 224,
  PSA_ERROR_INVALID_ARGUMENT
 },
diff --git a/api-tests/dev_apis/crypto/test_c033/test_entry_c033.c b/api-tests/dev_apis/crypto/test_c033/test_entry_c033.c
index a979d30..7a97fb3 100644
--- a/api-tests/dev_apis/crypto/test_c033/test_entry_c033.c
+++ b/api-tests/dev_apis/crypto/test_c033/test_entry_c033.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 33)
 #define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c034/test_c034.c b/api-tests/dev_apis/crypto/test_c034/test_c034.c
index 97c5bee..eb0f7d8 100644
--- a/api-tests/dev_apis/crypto/test_c034/test_c034.c
+++ b/api-tests/dev_apis/crypto/test_c034/test_c034.c
@@ -36,9 +36,15 @@
     uint32_t                i, j, iv_sum;
     uint8_t                 iv[32];
     size_t                  iv_length;
-    psa_key_policy_t        policy;
     psa_cipher_operation_t  operation;
     int32_t                 status;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -50,58 +56,45 @@
         val->print(PRINT_TEST, check1[i].test_desc, 0);
         memset(&operation, 0, sizeof(operation));
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Set the key for a multipart symmetric encryption operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation,
                     check1[i].key_handle, check1[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
         /* Generate an IV for a symmetric encryption operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_GENERATE_IV, &operation, iv,
                     check1[i].iv_size, &iv_length);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5));
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Abort a cipher operation */
             status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
 
             /* Destroy the key */
             status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
             continue;
         }
 
         /* Check that if generated iv length match the expected length */
-        TEST_ASSERT_EQUAL(iv_length, check1[i].expected_iv_length, TEST_CHECKPOINT_NUM(10));
+        TEST_ASSERT_EQUAL(iv_length, check1[i].expected_iv_length, TEST_CHECKPOINT_NUM(8));
 
         iv_sum = 0;
         for (j = 0; j < iv_length; j++)
@@ -109,23 +102,26 @@
             iv_sum += iv[j];
         }
 
-        /* Check that if generated iv are zero */
-        TEST_ASSERT_NOT_EQUAL(iv_sum, 0, TEST_CHECKPOINT_NUM(11));
+        /* Check that if generated iv are not zero */
+        TEST_ASSERT_NOT_EQUAL(iv_sum, 0, TEST_CHECKPOINT_NUM(9));
 
         /* Generating an IV for a symmetric encryption operation using the same operator
          * should fail
          */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_GENERATE_IV, &operation, iv,
                     check1[i].iv_size, &iv_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(12));
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(10));
 
         /* Abort a cipher operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
 
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c034/test_c034.h b/api-tests/dev_apis/crypto/test_c034/test_c034.h
index 3d1211a..7e94b95 100644
--- a/api-tests/dev_apis/crypto/test_c034/test_c034.h
+++ b/api-tests/dev_apis/crypto/test_c034/test_c034.h
@@ -18,9 +18,9 @@
 #define _TEST_C034_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c034)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c034)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c034/test_entry_c034.c b/api-tests/dev_apis/crypto/test_c034/test_entry_c034.c
index c86a67d..b568daf 100644
--- a/api-tests/dev_apis/crypto/test_c034/test_entry_c034.c
+++ b/api-tests/dev_apis/crypto/test_c034/test_entry_c034.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 34)
 #define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c035/test_c035.c b/api-tests/dev_apis/crypto/test_c035/test_c035.c
index 010b275..5d6e5c5 100644
--- a/api-tests/dev_apis/crypto/test_c035/test_c035.c
+++ b/api-tests/dev_apis/crypto/test_c035/test_c035.c
@@ -34,8 +34,14 @@
 {
     int                     num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t                 i, status;
-    psa_key_policy_t        policy;
     psa_cipher_operation_t  operation;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -47,57 +53,47 @@
         val->print(PRINT_TEST, check1[i].test_desc, 0);
         memset(&operation, 0, sizeof(operation));
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Set the key for a multipart symmetric encryption operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation,
                     check1[i].key_handle, check1[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
         /* Set an IV for a symmetric encryption operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_SET_IV, &operation, check1[i].iv,
                     check1[i].iv_size);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5));
 
         /* Setting an IV for a symmetric encryption operation using the same operator
          * should fail for both previous success and failure cases
          */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_SET_IV, &operation, check1[i].iv,
                     check1[i].iv_size);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(8));
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(6));
 
         /* Abort a cipher operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c035/test_c035.h b/api-tests/dev_apis/crypto/test_c035/test_c035.h
index d4cf6f8..aeda8b9 100644
--- a/api-tests/dev_apis/crypto/test_c035/test_c035.h
+++ b/api-tests/dev_apis/crypto/test_c035/test_c035.h
@@ -18,9 +18,9 @@
 #define _TEST_C035_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c035)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c035)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c035/test_entry_c035.c b/api-tests/dev_apis/crypto/test_c035/test_entry_c035.c
index a37200f..1c628eb 100644
--- a/api-tests/dev_apis/crypto/test_c035/test_entry_c035.c
+++ b/api-tests/dev_apis/crypto/test_c035/test_entry_c035.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 35)
 #define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c036/test_c036.c b/api-tests/dev_apis/crypto/test_c036/test_c036.c
index bf5969a..ac236f9 100644
--- a/api-tests/dev_apis/crypto/test_c036/test_c036.c
+++ b/api-tests/dev_apis/crypto/test_c036/test_c036.c
@@ -32,15 +32,20 @@
 static int                     g_test_count = 1;
 static uint8_t                 input[SIZE_32B];
 static uint8_t                 output[SIZE_32B];
-static psa_cipher_operation_t  operation;
 
 int32_t psa_cipher_update_test(security_t caller)
 {
     int                     num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t                 i, status;
     size_t                  length;
-    psa_key_policy_t        policy;
-    psa_cipher_operation_t  invalid_operation;
+    psa_cipher_operation_t  operation;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -50,91 +55,74 @@
     {
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
-
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
         memset(&operation, 0, sizeof(operation));
-        memset(&invalid_operation, 0, sizeof(invalid_operation));
 
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         if (check1[i].usage == PSA_KEY_USAGE_ENCRYPT)
         {
             /* Set the key for a multipart symmetric encryption operation */
             status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation,
                         check1[i].key_handle, check1[i].key_alg);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
         }
         else if (check1[i].usage == PSA_KEY_USAGE_DECRYPT)
         {
             status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation,
                         check1[i].key_handle, check1[i].key_alg);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
         }
 
         /* Set an IV for a symmetric encryption operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_SET_IV, &operation, check1[i].iv,
                     check1[i].iv_size);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
 
         /* Encrypt or decrypt a message fragment in an active cipher operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_UPDATE, &operation, check1[i].input,
                     check1[i].input_length, output, check1[i].output_size, &length);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7));
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Abort a cipher operation */
             status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
             /* Destroy the key */
             status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
             continue;
         }
 
         /* Check if the output length matches the expected length */
-        TEST_ASSERT_EQUAL(length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(12));
+        TEST_ASSERT_EQUAL(length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(10));
 
         /* Check if the output data matches the expected data */
-        TEST_ASSERT_MEMCMP(output, check1[i].expected_output, length, TEST_CHECKPOINT_NUM(13));
-
-        /* Encrypt or decrypt a message fragment in an invalid cipher operation should fail */
-        status = val->crypto_function(VAL_CRYPTO_CIPHER_UPDATE, &invalid_operation,
-                    check1[i].input, check1[i].input_length, output, check1[i].output_size,
-                    &length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(14));
+        TEST_ASSERT_MEMCMP(output, check1[i].expected_output, length, TEST_CHECKPOINT_NUM(11));
 
         /* Abort a cipher operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
 
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c036/test_c036.h b/api-tests/dev_apis/crypto/test_c036/test_c036.h
index 61fe7e5..583c97d 100644
--- a/api-tests/dev_apis/crypto/test_c036/test_c036.h
+++ b/api-tests/dev_apis/crypto/test_c036/test_c036.h
@@ -18,9 +18,9 @@
 #define _TEST_C036_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c036)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c036)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c036/test_entry_c036.c b/api-tests/dev_apis/crypto/test_c036/test_entry_c036.c
index f46a6b3..d7b09df 100644
--- a/api-tests/dev_apis/crypto/test_c036/test_entry_c036.c
+++ b/api-tests/dev_apis/crypto/test_c036/test_entry_c036.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 36)
 #define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c037/test_c037.c b/api-tests/dev_apis/crypto/test_c037/test_c037.c
index 8a7fdc8..01b0b34 100644
--- a/api-tests/dev_apis/crypto/test_c037/test_c037.c
+++ b/api-tests/dev_apis/crypto/test_c037/test_c037.c
@@ -38,8 +38,14 @@
     int                     num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t                 i, status;
     size_t                  update_length, finish_length;
-    psa_key_policy_t        policy;
     psa_cipher_operation_t  operation, invalid_operation;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -49,102 +55,91 @@
     {
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
-
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
         memset(&operation, 0, sizeof(operation));
-        memset(&invalid_operation, 0, sizeof(invalid_operation));
 
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         if (check1[i].usage == PSA_KEY_USAGE_ENCRYPT)
         {
             /* Set the key for a multipart symmetric encryption operation */
             status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation,
                         check1[i].key_handle, check1[i].key_alg);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
         }
         else if (check1[i].usage == PSA_KEY_USAGE_DECRYPT)
         {
             /* Set the key for a multipart symmetric decryption operation */
             status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation,
                         check1[i].key_handle, check1[i].key_alg);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
         }
 
         /* Set an IV for a symmetric encryption operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_SET_IV, &operation, check1[i].iv,
                     check1[i].iv_size);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
 
         /* Encrypt or decrypt a message fragment in an active cipher operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_UPDATE, &operation, check1[i].input,
                     check1[i].input_length, output, check1[i].output_size[SLOT_1], &update_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
         /* Finish encrypting or decrypting a message in a cipher operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_FINISH, &operation,
                     output + update_length, check1[i].output_size[SLOT_2], &finish_length);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(10));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8));
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Abort a cipher operation */
             status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
 
             /* Destroy the key */
             status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
             continue;
         }
 
         /* Check if the output length matches the expected length */
-        TEST_ASSERT_EQUAL(finish_length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(13));
+        TEST_ASSERT_EQUAL(finish_length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(11));
 
         /* Check if the output data matches the expected data */
         TEST_ASSERT_MEMCMP(output, check1[i].expected_output,
                           (update_length + finish_length),
-                           TEST_CHECKPOINT_NUM(14));
+                           TEST_CHECKPOINT_NUM(12));
 
         /* Finish encrypting or decrypting a message using an invalid operation should fail */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_FINISH, &invalid_operation, output,
                     check1[i].output_size[SLOT_2], &finish_length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(15));
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(13));
 
         /* Abort a cipher operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14));
 
         /* Abort a cipher operation */
         status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &invalid_operation);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(17));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15));
 
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(18));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c037/test_c037.h b/api-tests/dev_apis/crypto/test_c037/test_c037.h
index e7e1bda..e74afef 100644
--- a/api-tests/dev_apis/crypto/test_c037/test_c037.h
+++ b/api-tests/dev_apis/crypto/test_c037/test_c037.h
@@ -18,9 +18,9 @@
 #define _TEST_C037_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c037)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c037)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c037/test_entry_c037.c b/api-tests/dev_apis/crypto/test_c037/test_entry_c037.c
index 7732adb..7cbcab2 100644
--- a/api-tests/dev_apis/crypto/test_c037/test_entry_c037.c
+++ b/api-tests/dev_apis/crypto/test_c037/test_entry_c037.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 37)
 #define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c038/test_c038.c b/api-tests/dev_apis/crypto/test_c038/test_c038.c
index 54b4b7d..c4d6bd9 100644
--- a/api-tests/dev_apis/crypto/test_c038/test_c038.c
+++ b/api-tests/dev_apis/crypto/test_c038/test_c038.c
@@ -35,8 +35,14 @@
 {
     int                     num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t                 i, status;
-    psa_key_policy_t        policy;
     psa_cipher_operation_t  operation;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -48,32 +54,19 @@
         val->print(PRINT_TEST, check1[i].test_desc, 0);
         memset(&operation, 0, sizeof(operation));
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                        &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         if (check1[i].usage == PSA_KEY_USAGE_ENCRYPT)
         {
@@ -101,6 +94,9 @@
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
@@ -109,7 +105,6 @@
 int32_t psa_cipher_abort_before_update_test(security_t caller)
 {
     size_t                  length;
-    psa_key_policy_t        policy;
     psa_algorithm_t         key_alg = PSA_ALG_CBC_NO_PADDING;
     psa_key_usage_t         usage = PSA_KEY_USAGE_ENCRYPT;
     psa_key_handle_t        key_handle = 13;
@@ -125,6 +120,7 @@
     size_t                  input_length = sizeof(input);
     size_t                  iv_size = sizeof(iv);
     int32_t                 status;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -134,52 +130,44 @@
     val->print(PRINT_TEST, "Test psa_cipher_update after psa_cipher_abort should fail\n", 0);
     memset(&operation, 0, sizeof(operation));
 
-    /* Initialize a key policy structure to a default that forbids all
-     * usage of the key
-     */
-    val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
     /* Setting up the watchdog timer for each check */
     status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
     TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-    /* Set the standard fields of a policy structure */
-    val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, usage, key_alg);
-
-    /* Allocate a key slot for a transient key */
-    status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &key_handle);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-    /* Set the usage policy on a key slot */
-    status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, key_handle,  &policy);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+    /* Setup the attributes for the key */
+    val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, key_type);
+    val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, key_alg);
+    val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, usage);
 
     /* Import the key data into the key slot */
-    status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, key_handle,
-                key_type, key_data, key_length);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+    status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+             key_length, &key_handle);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
     /* Set the key for a multipart symmetric encryption operation */
     status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation,
                 key_handle, key_alg);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
     /* Set an IV for a symmetric encryption operation */
     status = val->crypto_function(VAL_CRYPTO_CIPHER_SET_IV, &operation, iv, iv_size);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
     /* Abort a cipher operation */
     status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
 
     /* Encrypt or decrypt a message fragment in an active cipher operation */
     status = val->crypto_function(VAL_CRYPTO_CIPHER_UPDATE, &operation, input,
                 input_length, output, SIZE_32B, &length);
-    TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9));
+    TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(7));
 
     /* Destroy the key */
     status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+
+    /* Reset the key attributes and check if psa_import_key fails */
+    val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
 
     return VAL_STATUS_SUCCESS;
 }
diff --git a/api-tests/dev_apis/crypto/test_c038/test_c038.h b/api-tests/dev_apis/crypto/test_c038/test_c038.h
index 6d6e5f0..0bbabd9 100644
--- a/api-tests/dev_apis/crypto/test_c038/test_c038.h
+++ b/api-tests/dev_apis/crypto/test_c038/test_c038.h
@@ -18,9 +18,9 @@
 #define _TEST_C038_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c038)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c038)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c038/test_entry_c038.c b/api-tests/dev_apis/crypto/test_c038/test_entry_c038.c
index d027ada..fdbbce1 100644
--- a/api-tests/dev_apis/crypto/test_c038/test_entry_c038.c
+++ b/api-tests/dev_apis/crypto/test_c038/test_entry_c038.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 38)
 #define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c039/test_c039.c b/api-tests/dev_apis/crypto/test_c039/test_c039.c
index 30a833e..d93b33c 100644
--- a/api-tests/dev_apis/crypto/test_c039/test_c039.c
+++ b/api-tests/dev_apis/crypto/test_c039/test_c039.c
@@ -48,10 +48,16 @@
 {
     int                     num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t                 i, status;
-    const uint8_t           *key_data;
-    uint8_t                 *salt;
+    const uint8_t          *key_data;
+    uint8_t                *salt;
     size_t                  length;
-    psa_key_policy_t        policy;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -62,25 +68,16 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
         memset(output, 0, sizeof(output));
 
         /* Set the key data based on key type */
         if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
         {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
             {
                 if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
                     key_data = rsa_384_keypair;
@@ -105,7 +102,7 @@
         }
         else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
                 key_data = ec_keypair;
             else
                 key_data = ec_keydata;
@@ -113,19 +110,15 @@
         else
             key_data = check1[i].key_data;
 
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         if (is_buffer_empty(check1[i].salt, check1[i].salt_length) == TRUE)
         {
@@ -139,19 +132,19 @@
         status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_ENCRYPT, check1[i].key_handle,
                     check1[i].key_alg, check1[i].input, check1[i].input_length, salt,
                     check1[i].salt_length, output, check1[i].output_size, &length);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Destroy the key */
             status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
             continue;
         }
 
         /* Check if the output length matches with the expected output length */
-        TEST_ASSERT_EQUAL(length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(8));
+        TEST_ASSERT_EQUAL(length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(6));
 
         /* We test encryption by checking that encrypt-then-decrypt gives back
          * the original plaintext because of the non-optional random
@@ -161,18 +154,21 @@
             status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_DECRYPT,
                         check1[i].key_handle, check1[i].key_alg, output, length, salt,
                         check1[i].salt_length, output, check1[i].output_size, &length);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
             /* Check if the output length matches with the input length */
-            TEST_ASSERT_EQUAL(length, check1[i].input_length, TEST_CHECKPOINT_NUM(10));
+            TEST_ASSERT_EQUAL(length, check1[i].input_length, TEST_CHECKPOINT_NUM(8));
 
             /* Check if the output matches with the given input data */
-            TEST_ASSERT_MEMCMP(output, check1[i].input, length, TEST_CHECKPOINT_NUM(11));
+            TEST_ASSERT_MEMCMP(output, check1[i].input, length, TEST_CHECKPOINT_NUM(9));
         }
 
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
@@ -182,9 +178,8 @@
 {
     int                     num_checks = sizeof(check2)/sizeof(check2[0]);
     int32_t                 i, status;
-    uint8_t                 *salt;
+    uint8_t                 *salt = NULL;
     size_t                  length;
-    psa_key_policy_t        policy;
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -192,18 +187,17 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
+        if (is_buffer_empty(check2[i].salt, check2[i].salt_length) == TRUE)
+        {
+            salt = NULL;
+            check2[i].salt_length = 0;
+        }
+        else
+            salt = check2[i].salt;
 
         val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_encrypt - Invalid key handle\n",
                                                                                  g_test_count++);
@@ -220,31 +214,6 @@
                     check2[i].key_alg, check2[i].input, check2[i].input_length, salt,
                     check2[i].salt_length, output, check2[i].output_size, &length);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_encrypt - Empty key handle\n",
-                                                                                 g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        if (is_buffer_empty(check1[i].salt, check1[i].salt_length) == TRUE)
-        {
-            salt = NULL;
-            check1[i].salt_length = 0;
-        }
-        else
-            salt = check1[i].salt;
-
-        /* Encrypt a short message with a public key */
-        status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_ENCRYPT, check2[i].key_handle,
-                    check2[i].key_alg, check2[i].input, check2[i].input_length, salt,
-                    check2[i].salt_length, output, check2[i].output_size, &length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c039/test_c039.h b/api-tests/dev_apis/crypto/test_c039/test_c039.h
index 27d7497..065918d 100644
--- a/api-tests/dev_apis/crypto/test_c039/test_c039.h
+++ b/api-tests/dev_apis/crypto/test_c039/test_c039.h
@@ -18,9 +18,9 @@
 #define _TEST_C039_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c039)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c039)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c039/test_data.h b/api-tests/dev_apis/crypto/test_c039/test_data.h
index 5bb5109..79dd42a 100644
--- a/api-tests/dev_apis/crypto/test_c039/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c039/test_data.h
@@ -158,7 +158,7 @@
 #endif
 
 #ifdef ARCH_TEST_RSA_PKCS1V15_CRYPT
-{"Test psa_asymmetric_encrypt - RSA KEYPAIR PKCS1V15\n", 4, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_encrypt - RSA KEY_PAIR PKCS1V15\n", 4, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT,
 {0}, 0,
 {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d,
@@ -167,7 +167,7 @@
  128, 1024, PSA_SUCCESS
 },
 
-{"Test psa_asymmetric_encrypt - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_encrypt - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT,
 {0}, 0,
 {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d,
@@ -227,7 +227,7 @@
 }
 
 {"Test psa_asymmetric_encrypt - ECC keypair\n", 10,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1),
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
 {0}, 97, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256),
 {0}, 0,
 {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d,
diff --git a/api-tests/dev_apis/crypto/test_c039/test_entry_c039.c b/api-tests/dev_apis/crypto/test_c039/test_entry_c039.c
index 323f173..6f638de 100644
--- a/api-tests/dev_apis/crypto/test_c039/test_entry_c039.c
+++ b/api-tests/dev_apis/crypto/test_c039/test_entry_c039.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 39)
 #define TEST_DESC "Testing crypto asymmetric APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c040/test_c040.c b/api-tests/dev_apis/crypto/test_c040/test_c040.c
index 760ab19..8dba0df 100644
--- a/api-tests/dev_apis/crypto/test_c040/test_c040.c
+++ b/api-tests/dev_apis/crypto/test_c040/test_c040.c
@@ -51,7 +51,13 @@
     const uint8_t           *key_data;
     uint8_t                 *salt;
     size_t                  length;
-    psa_key_policy_t        policy;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -62,25 +68,16 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
-        /* Setting up the watchdog timer for each check */
+         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
         memset(output, 0, sizeof(output));
 
         /* Set the key data based on key type */
         if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
         {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
             {
                 if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
                     key_data = rsa_384_keypair;
@@ -105,7 +102,7 @@
         }
         else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
                 key_data = ec_keypair;
             else
                 key_data = ec_keydata;
@@ -113,19 +110,15 @@
         else
             key_data = check1[i].key_data;
 
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         if (is_buffer_empty(check1[i].salt, check1[i].salt_length) == TRUE)
         {
@@ -159,6 +152,9 @@
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
@@ -170,7 +166,6 @@
     int32_t                 i, status;
     uint8_t                 *salt;
     size_t                  length;
-    psa_key_policy_t        policy;
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -178,18 +173,18 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
 
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
+        if (is_buffer_empty(check2[i].salt, check2[i].salt_length) == TRUE)
+        {
+            salt = NULL;
+            check2[i].salt_length = 0;
+        }
+        else
+            salt = check1[i].salt;
 
         val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_decrypt - Invalid key handle\n",
                                                                                  g_test_count++);
@@ -206,31 +201,6 @@
                     check2[i].key_alg, check2[i].input, check2[i].input_length, salt,
                     check2[i].salt_length, output, check2[i].output_size, &length);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_decrypt - Empty key handle\n",
-                                                                                 g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        if (is_buffer_empty(check1[i].salt, check1[i].salt_length) == TRUE)
-        {
-            salt = NULL;
-            check1[i].salt_length = 0;
-        }
-        else
-            salt = check1[i].salt;
-
-        /* Encrypt a short message with a public key */
-        status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_DECRYPT, check2[i].key_handle,
-                    check2[i].key_alg, check2[i].input, check2[i].input_length, salt,
-                    check2[i].salt_length, output, check2[i].output_size, &length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c040/test_c040.h b/api-tests/dev_apis/crypto/test_c040/test_c040.h
index ebb8f5b..4aa592a 100644
--- a/api-tests/dev_apis/crypto/test_c040/test_c040.h
+++ b/api-tests/dev_apis/crypto/test_c040/test_c040.h
@@ -18,9 +18,9 @@
 #define _TEST_C040_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c040)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c040)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c040/test_data.h b/api-tests/dev_apis/crypto/test_c040/test_data.h
index c6bc248..371d230 100644
--- a/api-tests/dev_apis/crypto/test_c040/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c040/test_data.h
@@ -125,7 +125,7 @@
 static test_data check1[] = {
 #ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_CRYPT
-{"Test psa_asymmetric_decrypt - RSA KEYPAIR PKCS1V15\n", 1, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_decrypt - RSA KEY_PAIR PKCS1V15\n", 1, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT,
 {0}, 0,
 {0x99, 0xff, 0xde, 0x2f, 0xcc, 0x00, 0xc9, 0xcc, 0x01, 0x97, 0x2e, 0xbf, 0xa7,
@@ -148,7 +148,7 @@
 
 #ifdef ARCH_TEST_SHA256
 #ifdef ARCH_TEST_RSA_OAEP
-{"Test psa_asymmetric_decrypt - RSA KEYPAIR OAEP SHA256\n", 2, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_decrypt - RSA KEY_PAIR OAEP SHA256\n", 2, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_OAEP(PSA_ALG_SHA_256),
 {0}, 0,
 {0x3d, 0x31, 0x46, 0xb1, 0xc9, 0x82, 0x00, 0x42, 0x73, 0xa9, 0xeb, 0xb9, 0xb0,
@@ -166,8 +166,8 @@
  0, 1024, PSA_SUCCESS
 },
 
-{"Test psa_asymmetric_decrypt - RSA KEYPAIR OAEP SHA256 with label\n", 3,
- PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_decrypt - RSA KEY_PAIR OAEP SHA256 with label\n", 3,
+ PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_OAEP(PSA_ALG_SHA_256),
 {0x74, 0x68, 0x69, 0x73, 0x00, 0x69, 0x73, 0x00, 0x61, 0x00, 0x6c, 0x61, 0x62,
  0x65, 0x6c, 0x00}, 16,
@@ -210,7 +210,7 @@
  0, 1024, PSA_ERROR_INVALID_ARGUMENT
 },
 
-{"Test psa_asymmetric_decrypt - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_decrypt - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT,
 {0}, 0,
 {0x99, 0xff, 0xde, 0x2f, 0xcc, 0x00, 0xc9, 0xcc, 0x01, 0x97, 0x2e, 0xbf, 0xa7,
@@ -232,7 +232,7 @@
 #endif
 
 #ifdef ARCH_TEST_SHA256
-{"Test psa_asymmetric_decrypt - Invalid algorithm\n", 6, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_decrypt - Invalid algorithm\n", 6, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_DECRYPT, PSA_ALG_SHA_256,
 {0}, 0,
 {0x99, 0xff, 0xde, 0x2f, 0xcc, 0x00, 0xc9, 0xcc, 0x01, 0x97, 0x2e, 0xbf, 0xa7,
@@ -279,7 +279,7 @@
 #endif
 
 #ifdef ARCH_TEST_RSA_1024
-{"Test psa_asymmetric_decrypt - Invalid usage\n", 8, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_decrypt - Invalid usage\n", 8, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT,
 {0}, 0,
 {0x99, 0xff, 0xde, 0x2f, 0xcc, 0x00, 0xc9, 0xcc, 0x01, 0x97, 0x2e, 0xbf, 0xa7,
@@ -305,7 +305,7 @@
 static test_data check2[] = {
 #ifdef ARCH_TEST_RSA_PKCS1V15_CRYPT
 #ifdef ARCH_TEST_RSA_1024
-{"Test psa_asymmetric_decrypt - Negative case\n", 1, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_decrypt - Negative case\n", 1, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT,
 {0}, 0,
 {0x99, 0xff, 0xde, 0x2f, 0xcc, 0x00, 0xc9, 0xcc, 0x01, 0x97, 0x2e, 0xbf, 0xa7,
diff --git a/api-tests/dev_apis/crypto/test_c040/test_entry_c040.c b/api-tests/dev_apis/crypto/test_c040/test_entry_c040.c
index 7b36aed..8744aca 100644
--- a/api-tests/dev_apis/crypto/test_c040/test_entry_c040.c
+++ b/api-tests/dev_apis/crypto/test_c040/test_entry_c040.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 40)
 #define TEST_DESC "Testing crypto asymmetric APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c041/test_c041.c b/api-tests/dev_apis/crypto/test_c041/test_c041.c
index 101e16a..ea343f3 100644
--- a/api-tests/dev_apis/crypto/test_c041/test_c041.c
+++ b/api-tests/dev_apis/crypto/test_c041/test_c041.c
@@ -37,7 +37,13 @@
     int32_t                 i, status;
     const uint8_t           *key_data;
     size_t                  length;
-    psa_key_policy_t        policy;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -48,25 +54,15 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
         memset(signature, 0, sizeof(signature));
 
         /* Set the key data based on key type */
         if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
         {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
             {
                 if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
                     key_data = rsa_384_keypair;
@@ -91,7 +87,7 @@
         }
         else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
                 key_data = ec_keypair;
             else
                 key_data = ec_keydata;
@@ -99,25 +95,21 @@
         else
             key_data = check1[i].key_data;
 
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Sign a hash or short message with a private key */
         status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_SIGN, check1[i].key_handle,
                     check1[i].key_alg, check1[i].input, check1[i].input_length,
                     signature, check1[i].signature_size, &length);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
@@ -129,14 +121,14 @@
         }
 
         /* Check if the output length matches with the expected length */
-        TEST_ASSERT_EQUAL(length, check1[i].expected_signature_length, TEST_CHECKPOINT_NUM(8));
+        TEST_ASSERT_EQUAL(length, check1[i].expected_signature_length, TEST_CHECKPOINT_NUM(5));
 
         /* Check if the output matches with the expected data */
-        TEST_ASSERT_MEMCMP(signature, check1[i].expected_signature, length, TEST_CHECKPOINT_NUM(9));
+        TEST_ASSERT_MEMCMP(signature, check1[i].expected_signature, length, TEST_CHECKPOINT_NUM(6));
 
         /* Destroy the key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
     }
 
     return VAL_STATUS_SUCCESS;
@@ -147,7 +139,6 @@
     int                     num_checks = sizeof(check2)/sizeof(check2[0]);
     int32_t                 i, status;
     size_t                  length;
-    psa_key_policy_t        policy;
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -155,19 +146,10 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
-
         val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_sign - Invalid key handle\n",
                                                                                 g_test_count++);
         /* Sign a hash or short message with a private key */
@@ -183,23 +165,6 @@
                     check2[i].key_alg, check2[i].input, check2[i].input_length,
                     signature, check2[i].signature_size, &length);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_sign - Empty key handle\n",
-                                                                                g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Sign a hash or short message with a private key */
-        status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_SIGN, check2[i].key_handle,
-                    check2[i].key_alg, check2[i].input, check2[i].input_length,
-                    signature, check2[i].signature_size, &length);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c041/test_c041.h b/api-tests/dev_apis/crypto/test_c041/test_c041.h
index 11f8074..326bed6 100644
--- a/api-tests/dev_apis/crypto/test_c041/test_c041.h
+++ b/api-tests/dev_apis/crypto/test_c041/test_c041.h
@@ -18,9 +18,9 @@
 #define _TEST_C041_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c041)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c041)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c041/test_data.h b/api-tests/dev_apis/crypto/test_c041/test_data.h
index cecccb6..8c596e1 100644
--- a/api-tests/dev_apis/crypto/test_c041/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c041/test_data.h
@@ -112,7 +112,7 @@
 static test_data check1[] = {
 #ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
-{"Test psa_asymmetric_sign - RSA KEYPAIR PKCS1V15 RAW\n", 1, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_sign - RSA KEY_PAIR PKCS1V15 RAW\n", 1, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
 {0x61, 0x62, 0x63}, 3, 128,
 {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d,
@@ -131,7 +131,7 @@
 
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
 #ifdef ARCH_TEST_SHA256
-{"Test psa_asymmetric_sign - RSA KEYPAIR PKCS1V15 SHA-256\n", 2, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_sign - RSA KEY_PAIR PKCS1V15 SHA-256\n", 2, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
 {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d,
  0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10,
@@ -156,7 +156,7 @@
 #ifdef ARCH_TEST_DETERMINISTIC_ECDSA
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {"Test psa_asymmetric_sign - ECDSA SECP256R1 SHA-256\n", 3,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1), {0}, 32,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), {0}, 32,
  PSA_KEY_USAGE_SIGN, PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256),
 {0x9a, 0xc4, 0x33, 0x5b, 0x46, 0x9b, 0xbd, 0x79, 0x14, 0x39, 0x24, 0x85, 0x04,
  0xdd, 0x0d, 0x49, 0xc7, 0x13, 0x49, 0xa2, 0x95, 0xfe, 0xe5, 0xa1, 0xc6, 0x85,
@@ -192,7 +192,7 @@
  128, 1024, PSA_ERROR_INVALID_ARGUMENT
 },
 
-{"Test psa_asymmetric_sign - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_sign - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
 {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d,
  0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10,
@@ -211,7 +211,7 @@
 },
 #endif
 
-{"Test psa_asymmetric_sign - Invalid algorithm\n", 6, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_sign - Invalid algorithm\n", 6, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_SIGN, PSA_ALG_SHA_256,
 {0x61, 0x62, 0x63}, 3, 128,
 {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d,
@@ -253,7 +253,7 @@
 
 #ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
-{"Test psa_asymmetric_sign - Invalid usage\n", 8, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_sign - Invalid usage\n", 8, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
 {0x61, 0x62, 0x63}, 3, 128,
 {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d,
@@ -272,7 +272,7 @@
 
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
 #ifdef ARCH_TEST_SHA256
-{"Test psa_asymmetric_sign - Wrong hash size\n", 9, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_sign - Wrong hash size\n", 9, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
 {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d,
  0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10,
@@ -297,7 +297,7 @@
 static test_data check2[] = {
 #ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
-{"Test psa_asymmetric_sign - Negative case\n", 10, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_sign - Negative case\n", 10, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
 {0x61, 0x62, 0x63}, 3, 128,
 {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d,
diff --git a/api-tests/dev_apis/crypto/test_c041/test_entry_c041.c b/api-tests/dev_apis/crypto/test_c041/test_entry_c041.c
index dd70f13..9edd9f6 100644
--- a/api-tests/dev_apis/crypto/test_c041/test_entry_c041.c
+++ b/api-tests/dev_apis/crypto/test_c041/test_entry_c041.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 41)
 #define TEST_DESC "Testing crypto asymmetric APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c042/test_c042.c b/api-tests/dev_apis/crypto/test_c042/test_c042.c
index 43ed5ec..d511f2a 100644
--- a/api-tests/dev_apis/crypto/test_c042/test_c042.c
+++ b/api-tests/dev_apis/crypto/test_c042/test_c042.c
@@ -35,7 +35,13 @@
     int                     num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t                 i, status;
     const uint8_t           *key_data;
-    psa_key_policy_t        policy;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -46,23 +52,14 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
         /* Set the key data based on key type */
         if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
         {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
             {
                 if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
                     key_data = rsa_384_keypair;
@@ -87,7 +84,7 @@
         }
         else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
                 key_data = ec_keypair;
             else
                 key_data = ec_keydata;
@@ -95,29 +92,25 @@
         else
             key_data = check1[i].key_data;
 
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Verify the signature a hash or short message using a public key */
         status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_VERIFY, check1[i].key_handle,
                     check1[i].key_alg, check1[i].input, check1[i].input_length,
                     check1[i].signature, check1[i].signature_size);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         /* Destroy a key and restore the slot to its default state */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
     }
 
     return VAL_STATUS_SUCCESS;
@@ -127,7 +120,6 @@
 {
     int                     num_checks = sizeof(check2)/sizeof(check2[0]);
     int32_t                 i, status;
-    psa_key_policy_t        policy;
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -138,21 +130,10 @@
         val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_verify - Invalid key handle\n",
                                                                                  g_test_count++);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_verify - Invalid key handle\n",
-                                                                                 g_test_count++);
         /* Verify the signature a hash or short message using a public key */
         status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_VERIFY, check2[i].key_handle,
                     check2[i].key_alg, check2[i].input, check2[i].input_length,
@@ -167,22 +148,6 @@
                     check2[i].signature, check2[i].signature_size);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
 
-        val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_verify - Empty key handle\n",
-                                                                                 g_test_count++);
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Verify the signature a hash or short message using a public key */
-        status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_VERIFY, check2[i].key_handle,
-                    check2[i].key_alg, check2[i].input, check2[i].input_length,
-                    check2[i].signature, check2[i].signature_size);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c042/test_c042.h b/api-tests/dev_apis/crypto/test_c042/test_c042.h
index b6c2f61..fb9c83a 100644
--- a/api-tests/dev_apis/crypto/test_c042/test_c042.h
+++ b/api-tests/dev_apis/crypto/test_c042/test_c042.h
@@ -18,9 +18,9 @@
 #define _TEST_C042_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c042)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c042)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
diff --git a/api-tests/dev_apis/crypto/test_c042/test_data.h b/api-tests/dev_apis/crypto/test_c042/test_data.h
index 53a4ea6..5f8592c 100644
--- a/api-tests/dev_apis/crypto/test_c042/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c042/test_data.h
@@ -117,7 +117,7 @@
 static test_data check1[] = {
 #ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
-{"Test psa_asymmetric_verify - RSA KEYPAIR PKCS1V15 RAW\n", 1, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_verify - RSA KEY_PAIR PKCS1V15 RAW\n", 1, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
 {0x61, 0x62, 0x63}, 3,
 {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d,
@@ -136,7 +136,7 @@
 
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
 #ifdef ARCH_TEST_SHA256
-{"Test psa_asymmetric_verify - RSA KEYPAIR PKCS1V15 SHA-256\n", 2, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_verify - RSA KEY_PAIR PKCS1V15 SHA-256\n", 2, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
 {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d,
  0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10,
@@ -160,8 +160,8 @@
 #ifdef ARCH_TEST_SHA256
 #ifdef ARCH_TEST_DETERMINISTIC_ECDSA
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
-{"Test psa_asymmetric_verify - ECDSA KEYPAIR SECP256R1 SHA-256\n", 3,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1), {0}, 32,
+{"Test psa_asymmetric_verify - ECDSA KEY_PAIR SECP256R1 SHA-256\n", 3,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), {0}, 32,
  PSA_KEY_USAGE_VERIFY, PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256),
 {0x9a, 0xc4, 0x33, 0x5b, 0x46, 0x9b, 0xbd, 0x79, 0x14, 0x39, 0x24, 0x85, 0x04,
  0xdd, 0x0d, 0x49, 0xc7, 0x13, 0x49, 0xa2, 0x95, 0xfe, 0xe5, 0xa1, 0xc6, 0x85,
@@ -197,7 +197,7 @@
  128, 1024, PSA_SUCCESS
 },
 
-{"Test psa_asymmetric_verify - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_verify - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
 {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d,
  0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10,
@@ -216,7 +216,7 @@
 },
 #endif
 
-{"Test psa_asymmetric_verify - Invalid algorithm\n", 6, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_verify - Invalid algorithm\n", 6, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_VERIFY, PSA_ALG_SHA_256,
 {0x61, 0x62, 0x63}, 3,
 {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d,
@@ -258,7 +258,7 @@
 
 #ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
-{"Test psa_asymmetric_verify - Invalid usage\n", 8, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_verify - Invalid usage\n", 8, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
 {0x61, 0x62, 0x63}, 3,
 {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d,
@@ -277,7 +277,7 @@
 
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
 #ifdef ARCH_TEST_SHA256
-{"Test psa_asymmetric_verify - Wrong hash size\n", 9, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_verify - Wrong hash size\n", 9, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
 {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d,
  0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10,
@@ -353,7 +353,7 @@
 static test_data check2[] = {
 #ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
-{"Test psa_asymmetric_verify - Negative case\n", 13, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_asymmetric_verify - Negative case\n", 13, PSA_KEY_TYPE_RSA_KEY_PAIR,
 {0}, 610, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
 {0x61, 0x62, 0x63}, 3,
 {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d,
diff --git a/api-tests/dev_apis/crypto/test_c042/test_entry_c042.c b/api-tests/dev_apis/crypto/test_c042/test_entry_c042.c
index 7687142..176c937 100644
--- a/api-tests/dev_apis/crypto/test_c042/test_entry_c042.c
+++ b/api-tests/dev_apis/crypto/test_c042/test_entry_c042.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 42)
 #define TEST_DESC "Testing crypto asymmetric APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c043/test_c043.c b/api-tests/dev_apis/crypto/test_c043/test_c043.c
index c61aad4..a9d16c8 100644
--- a/api-tests/dev_apis/crypto/test_c043/test_c043.c
+++ b/api-tests/dev_apis/crypto/test_c043/test_c043.c
@@ -1,4 +1,3 @@
-
 /** @file
  * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
@@ -23,21 +22,26 @@
 
 client_test_t test_c043_crypto_list[] = {
     NULL,
-    psa_key_agreement_test,
-    psa_key_agreement_negative_test,
+    psa_raw_key_agreement_test,
+    psa_raw_key_agreement_negative_test,
     NULL,
 };
 
 static int         g_test_count = 1;
 static uint8_t     output[SIZE_50B];
 
-int32_t psa_key_agreement_test(security_t caller)
+int32_t psa_raw_key_agreement_test(security_t caller)
 {
     int                     num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t                 i, status;
-    size_t                  capacity;
-    psa_key_policy_t        policy;
-    psa_crypto_generator_t  generator = {0};
+    size_t                  output_length;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -48,70 +52,37 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                    check1[i].key_type, check1[i].key_data, check1[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Set up a key agreement operation */
-        status = val->crypto_function(VAL_CRYPTO_KEY_AGREEMENT, &generator,
+        status = val->crypto_function(VAL_CRYPTO_RAW_KEY_AGREEMENT, check1[i].key_alg,
                     check1[i].key_handle, check1[i].peer_key, check1[i].peer_key_length,
-                    check1[i].key_alg);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
+                    output, check1[i].output_size, &output_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
-            /* Abort a generator */
-            status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
-
             /* Destroy a key and restore the slot to its default state */
             status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
             continue;
         }
 
-        /* Retrieve the current capacity of a generator */
-        status = val->crypto_function(VAL_CRYPTO_GET_GENERATOR_CAPACITY, &generator, &capacity);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
-
-        /* Check if the generator capacity matches with the expected capacity */
-        TEST_ASSERT_EQUAL(capacity, check1[i].expected_capacity, TEST_CHECKPOINT_NUM(10));
-
-        /* Read some data from a generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator, output,
-                    check1[i].expected_output_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
-
-         /* Check if the output matches with the expected data */
-        TEST_ASSERT_MEMCMP(output, check1[i].expected_output, check1[i].expected_output_length,
-                        TEST_CHECKPOINT_NUM(12));
-
-        /* Abort a generator */
-        status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13));
+        TEST_ASSERT_EQUAL(output_length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(6));
+        TEST_ASSERT_MEMCMP(output, check1[i].expected_output, output_length,
+        TEST_CHECKPOINT_NUM(7));
 
         /* Destroy a key and restore the slot to its default state */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
@@ -121,12 +92,11 @@
     return VAL_STATUS_SUCCESS;
 }
 
-int32_t psa_key_agreement_negative_test(security_t caller)
+int32_t psa_raw_key_agreement_negative_test(security_t caller)
 {
     int                     num_checks = sizeof(check2)/sizeof(check2[0]);
     int32_t                 i, status;
-    psa_key_policy_t        policy;
-    psa_crypto_generator_t  generator = {0};
+    size_t                  output_length;
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -134,53 +104,27 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        val->print(PRINT_TEST, "[Check %d] Test psa_key_agreement - Invalid key handle\n",
-                                                                                 g_test_count++);
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                          check2[i].key_alg);
 
-        val->print(PRINT_TEST, "[Check %d] Test psa_key_agreement - Invalid key handle\n",
+        val->print(PRINT_TEST, "[Check %d] Test psa_raw_key_agreement - Invalid key handle\n",
                                                                                  g_test_count++);
         /* Set up a key agreement operation */
-        status = val->crypto_function(VAL_CRYPTO_KEY_AGREEMENT, &generator,
+        status = val->crypto_function(VAL_CRYPTO_RAW_KEY_AGREEMENT, check2[i].key_alg,
                     check2[i].key_handle, check2[i].peer_key, check2[i].peer_key_length,
-                    check2[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_key_agreement - Zero as key handle\n",
-                                                                                 g_test_count++);
-        /* Set up a key agreement operation */
-        status = val->crypto_function(VAL_CRYPTO_KEY_AGREEMENT, &generator,
-                    0, check2[i].peer_key, check2[i].peer_key_length,
-                    check2[i].key_alg);
+                    output, check2[i].output_size, &output_length);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
 
-        val->print(PRINT_TEST, "[Check %d] Test psa_key_agreement - Empty key handle\n",
+        val->print(PRINT_TEST, "[Check %d] Test psa_raw_key_agreement - Zero as key handle\n",
                                                                                  g_test_count++);
-       /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle,
-                    &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
 
         /* Set up a key agreement operation */
-        status = val->crypto_function(VAL_CRYPTO_KEY_AGREEMENT, &generator,
-                    check2[i].key_handle, check2[i].peer_key, check2[i].peer_key_length,
-                    check2[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7));
+        status = val->crypto_function(VAL_CRYPTO_RAW_KEY_AGREEMENT, check2[i].key_alg,
+                    0, check2[i].peer_key, check2[i].peer_key_length,
+                    output, check2[i].output_size, &output_length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c043/test_c043.h b/api-tests/dev_apis/crypto/test_c043/test_c043.h
index 0192b6e..ec64a53 100644
--- a/api-tests/dev_apis/crypto/test_c043/test_c043.h
+++ b/api-tests/dev_apis/crypto/test_c043/test_c043.h
@@ -18,14 +18,14 @@
 #define _TEST_C043_CLIENT_TESTS_H_
 
 #include "val_crypto.h"
-#define test_entry CONCAT(test_entry_,c043)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_, c043)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern client_test_t test_c043_crypto_list[];
 
-int32_t psa_key_agreement_test(security_t caller);
-int32_t psa_key_agreement_negative_test(security_t caller);
+int32_t psa_raw_key_agreement_test(security_t caller);
+int32_t psa_raw_key_agreement_negative_test(security_t caller);
 #endif /* _TEST_C043_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c043/test_data.h b/api-tests/dev_apis/crypto/test_c043/test_data.h
index e2d100f..b319e22 100644
--- a/api-tests/dev_apis/crypto/test_c043/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c043/test_data.h
@@ -29,7 +29,7 @@
     size_t                  peer_key_length;
     uint8_t                 expected_output[48];
     size_t                  expected_output_length;
-    size_t                  expected_capacity;
+    size_t                  output_size;
     psa_status_t            expected_status;
 } test_data;
 
@@ -37,11 +37,11 @@
 static test_data check1[] = {
 #ifdef ARCH_TEST_ECDH
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
-{"Test psa_key_agreement - ECDH SECP256R1\n", 1,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1),
+{"Test psa_raw_key_agreement - ECDH SECP256R1\n", 1,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
 {0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2,
  0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a,
- 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH(PSA_ALG_SELECT_RAW),
+ 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH,
 {0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
  0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
  0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
@@ -52,16 +52,33 @@
  0x25, 0x65, 0x20, 0x2f, 0xef, 0x8e, 0x9e, 0xce, 0x7d, 0xce, 0x03, 0x81, 0x24,
  0x64, 0xd0, 0x4b, 0x94, 0x42, 0xde}, 32, 32, PSA_SUCCESS
 },
+
+{"Test psa_raw_key_agreement - Small buffer size\n", 1,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2,
+ 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a,
+ 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH,
+{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
+ 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
+ 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
+ 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0,
+ 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab},
+ 65,
+{0xd6, 0x84, 0x0f, 0x6b, 0x42, 0xf6, 0xed, 0xaf, 0xd1, 0x31, 0x16, 0xe0, 0xe1,
+ 0x25, 0x65, 0x20, 0x2f, 0xef, 0x8e, 0x9e, 0xce, 0x7d, 0xce, 0x03, 0x81, 0x24,
+ 0x64, 0xd0, 0x4b, 0x94, 0x42, 0xde}, 32, 10, PSA_ERROR_INVALID_ARGUMENT
+},
+
 #endif
 
 #ifdef ARCH_TEST_ECC_CURVE_SECP384R1
-{"Test psa_key_agreement - ECDH SECP384R1\n", 2,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP384R1),
+{"Test psa_raw_key_agreement - ECDH SECP384R1\n", 2,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP384R1),
 {0x09, 0x9f, 0x3c, 0x70, 0x34, 0xd4, 0xa2, 0xc6, 0x99, 0x88, 0x4d, 0x73, 0xa3,
  0x75, 0xa6, 0x7f, 0x76, 0x24, 0xef, 0x7c, 0x6b, 0x3c, 0x0f, 0x16, 0x06, 0x47,
  0xb6, 0x74, 0x14, 0xdc, 0xe6, 0x55, 0xe3, 0x5b, 0x53, 0x80, 0x41, 0xe6, 0x49,
  0xee, 0x3f, 0xae, 0xf8, 0x96, 0x78, 0x3a, 0xb1, 0x94}, 48, PSA_KEY_USAGE_DERIVE,
- PSA_ALG_ECDH(PSA_ALG_SELECT_RAW),
+ PSA_ALG_ECDH,
 {0x04, 0xe5, 0x58,
  0xdb, 0xef, 0x53, 0xee, 0xcd, 0xe3, 0xd3, 0xfc, 0xcf, 0xc1, 0xae, 0xa0, 0x8a,
  0x89, 0xa9, 0x87, 0x47, 0x5d, 0x12, 0xfd, 0x95, 0x0d, 0x83, 0xcf, 0xa4, 0x17,
@@ -79,11 +96,11 @@
 #endif
 
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
-{"Test psa_key_agreement - Invalid usage\n", 3,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1),
+{"Test psa_raw_key_agreement - Invalid usage\n", 3,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
 {0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2,
  0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a,
- 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_ECDH(PSA_ALG_SELECT_RAW),
+ 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_ECDH,
 {0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
  0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
  0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
@@ -95,11 +112,12 @@
  0x64, 0xd0, 0x4b, 0x94, 0x42, 0xde}, 32, 32, PSA_ERROR_NOT_PERMITTED
 },
 
-{"Test psa_key_agreement - Unknown KDF\n", 4,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1),
+{"Test psa_raw_key_agreement - Unknown KDF\n", 4,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
 {0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2,
  0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a,
- 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH(0),
+ 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE,
+ PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_HASH_ALG_INVALID),
 {0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
  0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
  0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
@@ -108,7 +126,7 @@
  65,
 {0xd6, 0x84, 0x0f, 0x6b, 0x42, 0xf6, 0xed, 0xaf, 0xd1, 0x31, 0x16, 0xe0, 0xe1,
  0x25, 0x65, 0x20, 0x2f, 0xef, 0x8e, 0x9e, 0xce, 0x7d, 0xce, 0x03, 0x81, 0x24,
- 0x64, 0xd0, 0x4b, 0x94, 0x42, 0xde}, 32, 32, PSA_ERROR_NOT_SUPPORTED
+ 0x64, 0xd0, 0x4b, 0x94, 0x42, 0xde}, 32, 32, PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
 #endif
@@ -116,8 +134,8 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 #ifdef ARCH_TEST_SHA256
 #ifdef ARCH_TEST_HKDF
-{"Test psa_key_agreement - Not a key agreement alg\n", 5,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1),
+{"Test psa_raw_key_agreement - Not a key agreement alg\n", 5,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
 {0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2,
  0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a,
  0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256),
@@ -135,11 +153,11 @@
 #endif
 
 #ifdef ARCH_TEST_ECDH
-{"Test psa_key_agreement - Public key on different curve\n", 6,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1),
+{"Test psa_raw_key_agreement - Public key on different curve\n", 6,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
 {0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2,
  0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a,
- 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH(PSA_ALG_SELECT_RAW),
+ 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH,
 {0x04, 0xe5, 0x58,
  0xdb, 0xef, 0x53, 0xee, 0xcd, 0xe3, 0xd3, 0xfc, 0xcf, 0xc1, 0xae, 0xa0, 0x8a,
  0x89, 0xa9, 0x87, 0x47, 0x5d, 0x12, 0xfd, 0x95, 0x0d, 0x83, 0xcf, 0xa4, 0x17,
@@ -152,14 +170,14 @@
 {0}, 0, 0, PSA_ERROR_INVALID_ARGUMENT
 },
 
-{"Test psa_key_agreement - Public key instead of private key\n", 7,
+{"Test psa_raw_key_agreement - Public key instead of private key\n", 7,
  PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
 {0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
  0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
  0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
  0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0,
  0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab},
- 65, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH(PSA_ALG_SELECT_RAW),
+ 65, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH,
 {0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
  0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
  0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
@@ -174,11 +192,11 @@
 static test_data check2[] = {
 #ifdef ARCH_TEST_ECDH
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
-{"Test psa_key_agreement - Negative case\n", 8,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1),
+{"Test psa_raw_key_agreement - Negative case\n", 8,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
 {0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2,
  0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a,
- 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH(PSA_ALG_SELECT_RAW),
+ 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH,
 {0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02,
  0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73,
  0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c,
diff --git a/api-tests/dev_apis/crypto/test_c043/test_entry_c043.c b/api-tests/dev_apis/crypto/test_c043/test_entry_c043.c
index b1ba5e3..05e493b 100644
--- a/api-tests/dev_apis/crypto/test_c043/test_entry_c043.c
+++ b/api-tests/dev_apis/crypto/test_c043/test_entry_c043.c
@@ -20,7 +20,8 @@
 #include "test_c043.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 43)
-#define TEST_DESC "Testing crypto generator APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c044/test_c044.c b/api-tests/dev_apis/crypto/test_c044/test_c044.c
index aa59789..e528d41 100644
--- a/api-tests/dev_apis/crypto/test_c044/test_c044.c
+++ b/api-tests/dev_apis/crypto/test_c044/test_c044.c
@@ -24,7 +24,6 @@
 client_test_t test_c044_crypto_list[] = {
     NULL,
     psa_copy_key_test,
-    psa_copy_key_negative_test,
     NULL,
 };
 
@@ -33,16 +32,23 @@
 
 int32_t psa_copy_key_test(security_t caller)
 {
-    uint32_t         length, i;
-    const uint8_t    *key_data;
-    psa_key_policy_t policy, target_policy, constraint;
-    psa_key_handle_t target_handle = 0;
-    psa_key_type_t   key_type, target_type;
-    psa_algorithm_t  expected_key_alg;
-    psa_key_usage_t  expected_usage;
-    size_t           bits, target_bits;
-    int              num_checks = sizeof(check1)/sizeof(check1[0]);
-    int32_t          status, export_status;
+    uint32_t              length, i;
+    const uint8_t        *key_data;
+    psa_key_handle_t      target_handle = 0;
+    psa_key_usage_t       get_key_usage_flags;
+    psa_algorithm_t       get_key_algorithm;
+    size_t                get_key_bits;
+    psa_key_type_t        get_key_type;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               status, export_status;
+    psa_key_attributes_t  source_attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_key_attributes_t  target_attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -58,14 +64,10 @@
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Initialize a key policy structure to a default that forbids all
-         * usage of the key
-         */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
 
         if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
         {
-            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR)
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
             {
                 if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
                     key_data = rsa_384_keypair;
@@ -86,7 +88,7 @@
         }
         else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
         {
-            if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type))
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
                 key_data = ec_keypair;
             else
                 key_data = ec_keydata;
@@ -94,208 +96,101 @@
         else
             key_data = check1[i].key_data;
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage,
-                                                                          check1[i].key_alg);
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &source_attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &source_attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &source_attributes, check1[i].usage);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle,
-                                check1[i].key_type, key_data, check1[i].key_length);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &source_attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Setup the attributes for the target key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &target_attributes,
+        check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &target_attributes,
+        check1[i].target_key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &target_attributes,
+        check1[i].target_usage);
+
+        /* Make a copy of a key */
+        status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check1[i].key_handle,
+                 &target_attributes, &target_handle);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
+
+        /* Destroy the source key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
-        /* Get basic metadata about a key */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle,
-                                      &key_type, &bits);
+        if (check1[i].expected_status != PSA_SUCCESS)
+        {
+            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &source_attributes);
+            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &target_attributes);
+
+            continue;
+        }
+
+        /* Check if the target key attributes is as expected */
+        status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, target_handle,
+                 &target_attributes);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
 
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &target_policy);
+        val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &target_attributes, &get_key_type);
+        TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(7));
 
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &target_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+        val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &target_attributes,
+        &get_key_usage_flags);
+        TEST_ASSERT_EQUAL(get_key_usage_flags, check1[i].expected_usage, TEST_CHECKPOINT_NUM(8));
 
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &target_policy,
-                                        check1[i].target_usage, check1[i].target_key_alg);
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &target_attributes, &get_key_algorithm);
+        TEST_ASSERT_EQUAL(get_key_algorithm, check1[i].expected_key_alg, TEST_CHECKPOINT_NUM(9));
 
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, target_handle, &target_policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
-
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &target_policy);
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &constraint);
-
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &constraint,
-                                      check1[i].constraint_usage, check1[i].constraint_key_alg);
-        /* Make a copy of a key */
-        status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check1[i].key_handle, target_handle,
-                                                                                     &constraint);
-        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9));
-
-        if (check1[i].expected_status != PSA_SUCCESS)
-            continue;
-
-        /* Destroy the source to ensure that this doesn't affect the target */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
-
-        /* Get basic metadata about a key */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, target_handle,
-                                                             &target_type, &target_bits);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
-
-        TEST_ASSERT_EQUAL(target_type, key_type, TEST_CHECKPOINT_NUM(12));
-        TEST_ASSERT_EQUAL(target_bits, bits, TEST_CHECKPOINT_NUM(13));
-
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_POLICY, target_handle, &target_policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14));
-
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_GET_USAGE, &target_policy, &expected_usage);
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_GET_ALGORITHM, &target_policy,
-                                                                            &expected_key_alg);
-
-        TEST_ASSERT_EQUAL(expected_usage, check1[i].expected_usage, TEST_CHECKPOINT_NUM(15));
-        TEST_ASSERT_EQUAL(expected_key_alg, check1[i].expected_key_alg, TEST_CHECKPOINT_NUM(16));
-
-        if (expected_usage & PSA_KEY_USAGE_EXPORT)
-            export_status = PSA_SUCCESS;
-        else
-            export_status = PSA_ERROR_NOT_PERMITTED;
+        val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &target_attributes, &get_key_bits);
+        TEST_ASSERT_EQUAL(get_key_bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(10));
 
         /* Export a key in binary format */
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, target_handle, data,
-                                      BUFFER_SIZE, &length);
-        TEST_ASSERT_EQUAL(status, export_status, TEST_CHECKPOINT_NUM(17));
+        export_status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, target_handle, data,
+                        BUFFER_SIZE, &length);
 
-        if (export_status != PSA_SUCCESS)
-            continue;
-
-        TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(18));
-
-        if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type))
+        if (!(check1[i].expected_usage & PSA_KEY_USAGE_EXPORT))
         {
-            TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(19));
-        }
-        else if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type) || PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
-        {
-            TEST_ASSERT_MEMCMP(data, key_data, length, TEST_CHECKPOINT_NUM(20));
+            export_status = PSA_ERROR_NOT_PERMITTED;
         }
         else
         {
-            return VAL_STATUS_INVALID;
+            /* Check if the target key data is same as source data */
+            export_status = PSA_SUCCESS;
+            TEST_ASSERT_EQUAL(status, export_status, TEST_CHECKPOINT_NUM(11));
+
+            TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(12));
+
+            if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type))
+            {
+                TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(13));
+            }
+            else if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)
+                  || PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
+            {
+                TEST_ASSERT_MEMCMP(data, key_data, length, TEST_CHECKPOINT_NUM(14));
+            }
+            else
+            {
+                return VAL_STATUS_INVALID;
+            }
         }
 
-        /* Destroy the key */
+        /* Destroy the target key */
         status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, target_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(21));
-    }
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15));
 
-    return VAL_STATUS_SUCCESS;
-}
+        /* Copy on a destroyed source should be an error */
+        status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check1[i].key_handle,
+                 &target_attributes, &target_handle);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(16));
 
-int32_t psa_copy_key_negative_test(security_t caller)
-{
-    int              num_checks = sizeof(check2)/sizeof(check2[0]);
-    int32_t          i, status;
-    psa_key_policy_t policy, target_policy, constraint;
-    psa_key_handle_t target_handle;
-
-    /* Initialize the PSA crypto library*/
-    status = val->crypto_function(VAL_CRYPTO_INIT);
-    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
-
-    for (i = 0; i < num_checks; i++)
-    {
-        val->print(PRINT_TEST, "[Check %d] Test psa_copy_key with unallocated target key slot\n",
-                                                                                  g_test_count++);
-
-        /* Setting up the watchdog timer for each check */
-        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
-        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
-
-        /* Allocate a key slot for a transient key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
-
-        /* Initialize a key policy structure to a default that forbids all
-        * usage of the key
-        */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy);
-        memset(&target_handle, 0xDEADDEAD, sizeof(target_handle));
-
-        /* Set the usage policy on a key slot */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage,
-                                                                                check2[i].key_alg);
-
-        /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle,
-                             check2[i].key_type, check2[i].key_data, check2[i].key_length);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
-
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &constraint);
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &constraint,
-                                      check2[i].constraint_usage, check2[i].constraint_key_alg);
-
-        /* Make a copy of a key with unallocated target handle*/
-        status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check2[i].key_handle, target_handle,
-                                                                                     &constraint);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(5));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_copy_key with target containing key material\n",
-                                                                                 g_test_count++);
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &target_policy);
-
-        /* Allocate a key slot for a target key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &target_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
-
-        /* Set the standard fields of a policy structure */
-        val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &target_policy,
-                                        check2[i].target_usage, check2[i].target_key_alg);
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, target_handle, &target_policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
-
-        /* Make a copy of a key */
-        status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check2[i].key_handle, target_handle,
-                                                                                     &constraint);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
-
-        /* Make a copy of a key in the existing target slot*/
-        status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check2[i].key_handle, target_handle,
-                                                                                     &constraint);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_ALREADY_EXISTS, TEST_CHECKPOINT_NUM(9));
-
-        val->print(PRINT_TEST, "[Check %d] Test psa_copy_key with no source handle\n",
-                                                                                 g_test_count++);
-        /* Destroy the contents of source and target slots */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
-
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, target_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
-
-        /* Allocate a key slot for a target key */
-        status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &target_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
-
-        /* Set the usage policy on a key slot */
-        status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, target_handle, &target_policy);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13));
-
-        /* Make a copy of a key with no source material*/
-        status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check2[i].key_handle, target_handle,
-                                                                                     &constraint);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(14));
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &source_attributes);
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &target_attributes);
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c044/test_c044.h b/api-tests/dev_apis/crypto/test_c044/test_c044.h
index f187d3b..ac4a474 100644
--- a/api-tests/dev_apis/crypto/test_c044/test_c044.h
+++ b/api-tests/dev_apis/crypto/test_c044/test_c044.h
@@ -27,5 +27,4 @@
 extern client_test_t test_c044_crypto_list[];
 
 int32_t psa_copy_key_test(security_t caller);
-int32_t psa_copy_key_negative_test(security_t caller);
 #endif /* _TEST_C044_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c044/test_data.h b/api-tests/dev_apis/crypto/test_c044/test_data.h
index 47786db..e5dd430 100644
--- a/api-tests/dev_apis/crypto/test_c044/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c044/test_data.h
@@ -25,11 +25,9 @@
     uint32_t                key_length;
     psa_key_usage_t         usage;
     psa_key_usage_t         target_usage;
-    psa_key_usage_t         constraint_usage;
     psa_key_usage_t         expected_usage;
     psa_algorithm_t         key_alg;
     psa_algorithm_t         target_key_alg;
-    psa_algorithm_t         constraint_key_alg;
     psa_algorithm_t         expected_key_alg;
     uint32_t                expected_bit_length;
     uint32_t                expected_key_length;
@@ -173,33 +171,46 @@
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
  0x5F, 0xC9, 0x77},
  AES_16B_KEY_SIZE,
- PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT,
- PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
  BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
 },
+
+{"Test psa_copy_key without copy usage\n", 2, PSA_KEY_TYPE_AES,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_NOT_PERMITTED
+},
 #endif
 
 #ifdef ARCH_TEST_AES_192
-{"Test psa_copy_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES,
+{"Test psa_copy_key 24 Byte AES\n", 3, PSA_KEY_TYPE_AES,
 {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
  0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05},
  AES_24B_KEY_SIZE,
- PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT,
- PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT,
- PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT,
+ PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
  BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_AES_256
-{"Test psa_copy_key 32 Byte AES\n", 3, PSA_KEY_TYPE_AES,
+{"Test psa_copy_key 32 Byte AES\n", 4, PSA_KEY_TYPE_AES,
 {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
  0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
  0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
  AES_32B_KEY_SIZE,
- PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_DECRYPT, PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT,
- PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT,
- PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_DECRYPT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
  BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
@@ -207,52 +218,56 @@
 
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
 #ifdef ARCH_TEST_RSA_2048
-{"Test psa_copy_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
+{"Test psa_copy_key 2048 RSA public key\n", 5, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
  {0},
  270,
- PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN, PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN,
- PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
  PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+ PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
  2048, 270, PSA_SUCCESS
 },
 
-{"Test psa_copy_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_copy_key with RSA 2048 keypair\n", 6, PSA_KEY_TYPE_RSA_KEY_PAIR,
  {0},
  1193,
- PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT,
- PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_VERIFY, PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_VERIFY,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
  PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+ PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
  2048, 1193, PSA_SUCCESS
 },
 
 {"Test psa_copy_key with Incompatible target policy(source and target)\n",
- 12, PSA_KEY_TYPE_RSA_KEYPAIR,
+ 7, PSA_KEY_TYPE_RSA_KEY_PAIR,
  {0},
  1193,
- PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
  PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_ANY_HASH), PSA_ALG_RSA_PSS(PSA_ALG_ANY_HASH),
- -1, -1,
+ -1,
  2048, 1193, PSA_ERROR_INVALID_ARGUMENT
 },
 
-{"Test psa_copy_key with Incompatible constraint\n", 6, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_copy_key with Incompatible constraint\n", 8, PSA_KEY_TYPE_RSA_KEY_PAIR,
  {0},
  1193,
- PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT,
- PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_ANY_HASH), PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_ANY_HASH),
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_ANY_HASH),
  PSA_ALG_RSA_PSS(PSA_ALG_ANY_HASH), -1,
  2048, 1193, PSA_ERROR_INVALID_ARGUMENT
 },
 
-{"Test psa_copy_key with unexport source key usage\n", 7, PSA_KEY_TYPE_RSA_KEYPAIR,
+{"Test psa_copy_key with unexport source key usage\n", 9, PSA_KEY_TYPE_RSA_KEY_PAIR,
  {0},
  1193,
- PSA_KEY_USAGE_SIGN, PSA_KEY_USAGE_EXPORT,
- PSA_KEY_USAGE_EXPORT, 0,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_SIGN, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY,
  PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
- PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+ PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
  2048, 1193, PSA_SUCCESS
 },
 
@@ -261,34 +276,37 @@
 
 #ifdef ARCH_TEST_CIPER_MODE_CTR
 #ifdef ARCH_TEST_DES_1KEY
-{"Test psa_copy_key with DES 64 bit key\n", 8, PSA_KEY_TYPE_DES,
+{"Test psa_copy_key with DES 64 bit key\n", 10, PSA_KEY_TYPE_DES,
  {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
  DES_8B_KEY_SIZE,
- PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT,
- PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
  BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_DES_2KEY
-{"Test psa_copy_key with Triple DES 2-Key\n", 9, PSA_KEY_TYPE_DES,
+{"Test psa_copy_key with Triple DES 2-Key\n", 11, PSA_KEY_TYPE_DES,
 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  DES3_2KEY_SIZE,
- PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT,
- PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
  BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_DES_3KEY
-{"Test psa_copy_key with Triple DES 3-Key\n", 10, PSA_KEY_TYPE_DES,
+{"Test psa_copy_key with Triple DES 3-Key\n", 12, PSA_KEY_TYPE_DES,
 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
  0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86,
  0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
  DES3_3KEY_SIZE,
- PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT,
- PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
  BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS
 },
 #endif
@@ -296,23 +314,25 @@
 
 #ifdef ARCH_TEST_ECDSA
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
-{"Test psa_copy_key with EC Public key\n", 11,
+{"Test psa_copy_key with EC Public key\n", 13,
  PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
  {0},
  65,
- PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT,
- PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY,
  256, 65, PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
-{"Test psa_copy_key with EC keypair\n", 12,
- PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1),
+{"Test psa_copy_key with EC keypair\n", 14,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
  {0},
  28,
- PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT,
- PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY,
  224, 28, PSA_SUCCESS
 },
 #endif
@@ -320,29 +340,15 @@
 
 #ifdef ARCH_TEST_CIPER_MODE_CTR
 #ifdef ARCH_TEST_AES
-{"Test psa_copy_key with Incompatible target policy\n", 13, PSA_KEY_TYPE_AES,
+{"Test psa_copy_key with Incompatible target policy\n", 15, PSA_KEY_TYPE_AES,
 {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
  0x5F, 0xC9, 0x77},
  AES_16B_KEY_SIZE,
- PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT,
- PSA_ALG_CTR, PSA_ALG_CBC_NO_PADDING, PSA_ALG_CBC_NO_PADDING, PSA_ALG_CBC_NO_PADDING,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_CTR, PSA_ALG_CBC_NO_PADDING, PSA_ALG_CBC_NO_PADDING,
  BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
 #endif
 };
-
-static test_data check2[] = {
-#ifdef ARCH_TEST_CIPER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_copy_key negative cases\n", 14, PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9, 0x77},
- AES_16B_KEY_SIZE,
- PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT,
- PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR,
- BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
-},
-#endif
-#endif
-};
diff --git a/api-tests/dev_apis/crypto/test_c044/test_entry_c044.c b/api-tests/dev_apis/crypto/test_c044/test_entry_c044.c
index 7eebc5c..64499fe 100644
--- a/api-tests/dev_apis/crypto/test_c044/test_entry_c044.c
+++ b/api-tests/dev_apis/crypto/test_c044/test_entry_c044.c
@@ -21,6 +21,7 @@
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 44)
 #define TEST_DESC "Testing crypto key management APIs\n"
+
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c045/test.cmake b/api-tests/dev_apis/crypto/test_c045/test.cmake
new file mode 100644
index 0000000..d84ebb6
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c045/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c045.c
+	test_c045.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c045/test_c045.c b/api-tests/dev_apis/crypto/test_c045/test_c045.c
new file mode 100644
index 0000000..99b0423
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c045/test_c045.c
@@ -0,0 +1,112 @@
+/** @file
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c045.h"
+#include "test_data.h"
+#include "val_crypto.h"
+
+client_test_t test_c045_crypto_list[] = {
+    NULL,
+    psa_hash_clone_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_hash_clone_test(security_t caller)
+{
+    int                     num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t                 i, status;
+    const char              *expected_hash;
+    char                    hash[HASH_64B];
+    size_t                  hash_length, hash_size = sizeof(hash);
+    psa_hash_operation_t    source_operation = PSA_HASH_OPERATION_INIT;
+    psa_hash_operation_t    target_operation = PSA_HASH_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        if (check1[i].alg == PSA_ALG_SHA_384)
+            expected_hash = sha384_hash;
+        else if (check1[i].alg == PSA_ALG_SHA_512)
+            expected_hash = sha512_hash;
+        else
+            expected_hash = check1[i].hash;
+
+        /* Start a multipart hash operation */
+        status = val->crypto_function(VAL_CRYPTO_HASH_SETUP, &source_operation, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Clone a hash operation */
+        status = val->crypto_function(VAL_CRYPTO_HASH_CLONE, &source_operation, &target_operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+
+        /* Add a message fragment to a multipart hash source_operation */
+        status = val->crypto_function(VAL_CRYPTO_HASH_UPDATE, &target_operation,
+                                      &check1[i].input, check1[i].input_length);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        /* Cloning to an active hash operation should be an error*/
+        status = val->crypto_function(VAL_CRYPTO_HASH_CLONE, &source_operation, &target_operation);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(6));
+
+        /* Finish the calculation of the hash of a message */
+        status = val->crypto_function(VAL_CRYPTO_HASH_FINISH, &target_operation, hash, hash_size,
+                                      &hash_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7));
+
+        if (check1[i].expected_status != PSA_SUCCESS)
+        {
+            continue;
+        }
+
+        TEST_ASSERT_EQUAL(hash_length, PSA_HASH_SIZE(check1[i].alg), TEST_CHECKPOINT_NUM(8));
+        TEST_ASSERT_MEMCMP(hash, expected_hash, hash_length, TEST_CHECKPOINT_NUM(9));
+
+        /*Abort the hash operation */
+        status = val->crypto_function(VAL_CRYPTO_HASH_ABORT, &source_operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+
+        status = val->crypto_function(VAL_CRYPTO_HASH_ABORT, &target_operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
+
+        /* Cloning on an aborted operator should be an error */
+        status = val->crypto_function(VAL_CRYPTO_HASH_CLONE, &source_operation, &target_operation);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(12));
+
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c045/test_c045.h b/api-tests/dev_apis/crypto/test_c045/test_c045.h
new file mode 100644
index 0000000..75f63da
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c045/test_c045.h
@@ -0,0 +1,30 @@
+/** @file
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C045_CLIENT_TESTS_H_
+#define _TEST_C045_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c045)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c045_crypto_list[];
+
+int32_t psa_hash_clone_test(security_t caller);
+#endif /* _TEST_C045_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c045/test_data.h b/api-tests/dev_apis/crypto/test_c045/test_data.h
new file mode 100644
index 0000000..55eff9f
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c045/test_data.h
@@ -0,0 +1,115 @@
+/** @file
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[50];
+    psa_algorithm_t         alg;
+    char                    input;
+    size_t                  input_length;
+    char                    hash[32];
+    size_t                  hash_length;
+    psa_status_t            expected_status;
+} test_data;
+
+static const char sha384_hash[] = {
+0x43, 0x72, 0xe3, 0x8a, 0x92, 0xa2, 0x8b, 0x5d, 0x2c, 0x39, 0x1e, 0x62,
+0x45, 0x2a, 0x86, 0xd5, 0x0e, 0x02, 0x67, 0x22, 0x8b, 0xe1, 0x76, 0xc7, 0x7d, 0x24, 0x02, 0xef,
+0xfe, 0x9f, 0xa5, 0x0d, 0xe4, 0x07, 0xbb, 0xb8, 0x51, 0xb3, 0x7d, 0x59, 0x04, 0xab, 0xa2, 0xde,
+0xde, 0x74, 0xda, 0x2a};
+
+static const char sha512_hash[] = {
+0x29, 0x6e, 0x22, 0x67, 0xd7, 0x4c, 0x27, 0x8d, 0xaa, 0xaa, 0x94, 0x0d,
+0x17, 0xb0, 0xcf, 0xb7, 0x4a, 0x50, 0x83, 0xf8, 0xe0, 0x69, 0x72, 0x6d, 0x8c, 0x84, 0x1c, 0xbe,
+0x59, 0x6e, 0x04, 0x31, 0xcb, 0x77, 0x41, 0xa5, 0xb5, 0x0f, 0x71, 0x66, 0x6c, 0xfd, 0x54, 0xba,
+0xcb, 0x7b, 0x00, 0xae, 0xa8, 0x91, 0x49, 0x9c, 0xf4, 0xef, 0x6a, 0x03, 0xc8, 0xa8, 0x3f, 0xe3,
+0x7c, 0x3f, 0x7b, 0xaf};
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_MD2
+{"Test psa_hash_clone with MD2 algorithm\n",
+ PSA_ALG_MD2, 0xbd, 1,
+ {0x8c, 0x9c, 0x17, 0x66, 0x5d, 0x25, 0xb3, 0x5f, 0xc4, 0x13, 0xc4, 0x18, 0x05, 0xc6, 0x79, 0xcf},
+ 16, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_MD4
+{"Test psa_hash_clone with MD4 algorithm\n",
+ PSA_ALG_MD4, 0xbd, 1,
+ {0x18, 0xc3, 0x3f, 0x97, 0x29, 0x7e, 0xfe, 0x5f, 0x8a, 0x73, 0x22, 0x58, 0x28, 0x9f, 0xda, 0x25},
+ 16, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_MD5
+{"Test psa_hash_clone with MD5 algorithm\n",
+ PSA_ALG_MD5, 0xbd, 1,
+ {0xab, 0xae, 0x57, 0xcb, 0x56, 0x2e, 0xcf, 0x29, 0x5b, 0x4a, 0x37, 0xa7, 0x6e, 0xfe, 0x61, 0xfb},
+ 16, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_RIPEMD160
+{"Test psa_hash_clone with RIPEMD160 algorithm\n",
+ PSA_ALG_RIPEMD160, 0xbd, 1,
+ {0x50, 0x89, 0x26, 0x5e, 0xe5, 0xd9, 0xaf, 0x75, 0xd1, 0x2d, 0xbf, 0x7e, 0xa2, 0xf2, 0x7d, 0xbd,
+  0xee, 0x43, 0x5b, 0x37},
+ 20, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_SHA1
+{"Test psa_hash_clone with SHA1 algorithm\n",
+ PSA_ALG_SHA_1, 0xbd, 1,
+ {0x90, 0x34, 0xaa, 0xf4, 0x51, 0x43, 0x99, 0x6a, 0x2b, 0x14, 0x46, 0x5c, 0x35, 0x2a, 0xb0, 0xc6,
+  0xfa, 0x26, 0xb2, 0x21},
+ 20, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_SHA224
+{"Test psa_hash_clone with SHA224 algorithm\n",
+ PSA_ALG_SHA_224, 0xbd, 1,
+ {0xb1, 0xe4, 0x6b, 0xb9, 0xef, 0xe4, 0x5a, 0xf5, 0x54, 0x36, 0x34, 0x49, 0xc6, 0x94, 0x5a, 0x0d,
+  0x61, 0x69, 0xfc, 0x3a, 0x5a, 0x39, 0x6a, 0x56, 0xcb, 0x97, 0xcb, 0x57},
+ 28, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_SHA256
+{"Test psa_hash_clone with SHA256 algorithm\n",
+ PSA_ALG_SHA_256, 0xbd, 1,
+ {0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70,
+  0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x2b},
+ 32, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_SHA384
+{"Test psa_hash_clone with SHA384 algorithm\n",
+ PSA_ALG_SHA_384, 0xbd, 1, {0}, 48, PSA_SUCCESS,
+},
+#endif
+
+#ifdef ARCH_TEST_SHA512
+{"Test psa_hash_clone with SHA512 algorithm\n",
+ PSA_ALG_SHA_512, 0xbd, 1, {0}, 64, PSA_SUCCESS,
+},
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c045/test_entry_c045.c b/api-tests/dev_apis/crypto/test_c045/test_entry_c045.c
new file mode 100644
index 0000000..091008d
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c045/test_entry_c045.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c045.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 45)
+#define TEST_DESC "Testing crypto hash functions APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c045_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c046/test.cmake b/api-tests/dev_apis/crypto/test_c046/test.cmake
new file mode 100644
index 0000000..2673710
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c046/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c046.c
+	test_c046.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c046/test_c046.c b/api-tests/dev_apis/crypto/test_c046/test_c046.c
new file mode 100644
index 0000000..e7ba526
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c046/test_c046.c
@@ -0,0 +1,108 @@
+
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c046.h"
+#include "test_data.h"
+
+client_test_t test_c046_crypto_list[] = {
+    NULL,
+    psa_mac_compute_test,
+    NULL,
+};
+
+static int           g_test_count = 1;
+static uint8_t       data[BUFFER_SIZE];
+
+int32_t psa_mac_compute_test(security_t caller)
+{
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               i, status;
+    size_t                length;
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+        memset(data, 0, sizeof(data));
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Calculate the MAC (message authentication code) of a message */
+        status = val->crypto_function(VAL_CRYPTO_MAC_COMPUTE, check1[i].key_handle,
+                 check1[i].key_alg, check1[i].data, check1[i].data_size, data,
+                 check1[i].mac_size, &length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
+
+        if (check1[i].expected_status != PSA_SUCCESS)
+        {
+            /* Destroy the key */
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+            continue;
+        }
+
+        /* Check if the MAC length matches with the expected length */
+        TEST_ASSERT_EQUAL(length, check1[i].expected_length, TEST_CHECKPOINT_NUM(6));
+
+        /* Check if the MAC data matches with the expected data */
+        TEST_ASSERT_MEMCMP(check1[i].expected_data, data, length, TEST_CHECKPOINT_NUM(7));
+
+        memset(data, 0, sizeof(data));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        status = val->crypto_function(VAL_CRYPTO_MAC_COMPUTE, check1[i].key_handle,
+                 check1[i].key_alg, check1[i].data, check1[i].data_size, data,
+                 check1[i].mac_size, &length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(9));
+
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c046/test_c046.h b/api-tests/dev_apis/crypto/test_c046/test_c046.h
new file mode 100644
index 0000000..3fbe054
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c046/test_c046.h
@@ -0,0 +1,30 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C046_CLIENT_TESTS_H_
+#define _TEST_C046_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c046)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c046_crypto_list[];
+
+int32_t psa_mac_compute_test(security_t caller);
+#endif /* _TEST_C046_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c046/test_data.h b/api-tests/dev_apis/crypto/test_c046/test_data.h
new file mode 100644
index 0000000..5ab7070
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c046/test_data.h
@@ -0,0 +1,179 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[64];
+    uint32_t                key_length;
+    uint8_t                 data[16];
+    size_t                  data_size;
+    uint8_t                 expected_data[64];
+    size_t                  mac_size;
+    size_t                  expected_length;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_HMAC
+#ifdef ARCH_TEST_SHA224
+{"Test psa_mac_compute HMAC SHA 224\n", 1, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4,
+ 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68,
+ 0x4b, 0x22}, 64, 28,
+ PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_224),
+ PSA_SUCCESS
+},
+
+{"Test psa_mac_compute - Incompactible HMAC for CMAC\n", 2, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4,
+ 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68,
+ 0x4b, 0x22}, 64, 28,
+ PSA_KEY_USAGE_SIGN, PSA_ALG_CMAC,
+ PSA_ERROR_NOT_SUPPORTED
+},
+
+{"Test psa_mac_compute - Invalid usage\n", 3, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4,
+ 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68,
+ 0x4b, 0x22}, 64, 28,
+ PSA_KEY_USAGE_EXPORT, PSA_ALG_HMAC(PSA_ALG_SHA_224),
+ PSA_ERROR_NOT_SUPPORTED
+},
+
+{"Test psa_mac_compute - truncated MAC too small\n", 4, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4,
+ 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68,
+ 0x4b, 0x22}, 64, 28,
+ PSA_KEY_USAGE_SIGN, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 1),
+ PSA_ERROR_NOT_SUPPORTED
+},
+
+{"Test psa_mac_compute - truncated MAC too large\n", 5, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4,
+ 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68,
+ 0x4b, 0x22}, 64, 28,
+ PSA_KEY_USAGE_SIGN, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 33),
+ PSA_ERROR_INVALID_ARGUMENT
+},
+
+{"Test psa_mac_compute - bad algorithm (unknown MAC algorithm)\n", 6, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4,
+ 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68,
+ 0x4b, 0x22}, 64, 28,
+ PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(0),
+ PSA_ERROR_NOT_SUPPORTED
+},
+#endif
+
+#ifdef ARCH_TEST_SHA256
+{"Test psa_mac_compute HMAC SHA 256\n", 7, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf,
+ 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9,
+ 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 64, 32,
+ PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_256),
+ PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_SHA512
+{"Test psa_mac_compute HMAC SHA 512\n", 8, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x87, 0xaa, 0x7c, 0xde, 0xa5, 0xef, 0x61, 0x9d, 0x4f, 0xf0, 0xb4, 0x24, 0x1a,
+ 0x1d, 0x6c, 0xb0, 0x23, 0x79, 0xf4, 0xe2, 0xce, 0x4e, 0xc2, 0x78, 0x7a, 0xd0,
+ 0xb3, 0x05, 0x45, 0xe1, 0x7c, 0xde, 0xda, 0xa8, 0x33, 0xb7, 0xd6, 0xb8, 0xa7,
+ 0x02, 0x03, 0x8b, 0x27, 0x4e, 0xae, 0xa3, 0xf4, 0xe4, 0xbe, 0x9d, 0x91, 0x4e,
+ 0xeb, 0x61, 0xf1, 0x70, 0x2e, 0x69, 0x6c, 0x20, 0x3a, 0x12, 0x68, 0x54}, 64, 64,
+ PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_512),
+ PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_SHA224
+{"Test psa_mac_compute HMAC SHA 224 (truncated to 8 Byte)\n", 9, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68}, 64, 8,
+ PSA_KEY_USAGE_SIGN, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_224), 8),
+ PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_CMAC
+#ifdef ARCH_TEST_AES_128
+{"Test psa_mac_compute CMAC AES 128\n", 10, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, 16,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x9A, 0x8F, 0xFF, 0x8D, 0xA3, 0x5B, 0x97, 0xCB, 0x4C, 0x95, 0xF0, 0xFA, 0x6A,
+ 0xE7, 0xE0, 0x77}, 64, 16,
+ PSA_KEY_USAGE_SIGN, PSA_ALG_CMAC,
+ PSA_SUCCESS
+},
+
+{"Test psa_mac_compute small size buffer\n", 11, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, 16,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x9A, 0x8F, 0xFF, 0x8D, 0xA3, 0x5B, 0x97, 0xCB, 0x4C, 0x95, 0xF0, 0xFA, 0x6A,
+ 0xE7, 0xE0, 0x77}, 8, 16,
+ PSA_KEY_USAGE_SIGN, PSA_ALG_CMAC,
+ PSA_ERROR_BUFFER_TOO_SMALL
+},
+#endif
+
+{"Test psa_mac_compute - Invalid key type\n", 12, PSA_KEY_TYPE_RAW_DATA,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, 16,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x9A, 0x8F, 0xFF, 0x8D, 0xA3, 0x5B, 0x97, 0xCB, 0x4C, 0x95, 0xF0, 0xFA, 0x6A,
+ 0xE7, 0xE0, 0x77}, 64, 16,
+ PSA_KEY_USAGE_SIGN, PSA_ALG_CMAC,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c046/test_entry_c046.c b/api-tests/dev_apis/crypto/test_c046/test_entry_c046.c
new file mode 100644
index 0000000..3116fd0
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c046/test_entry_c046.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c046.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 46)
+#define TEST_DESC "Testing crypto MAC APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c046_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c047/test.cmake b/api-tests/dev_apis/crypto/test_c047/test.cmake
new file mode 100644
index 0000000..aea8705
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c047/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c047.c
+	test_c047.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c047/test_c047.c b/api-tests/dev_apis/crypto/test_c047/test_c047.c
new file mode 100644
index 0000000..a28c9c6
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c047/test_c047.c
@@ -0,0 +1,90 @@
+
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c047.h"
+#include "test_data.h"
+
+client_test_t test_c047_crypto_list[] = {
+    NULL,
+    psa_mac_verify_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_mac_verify_test(security_t caller)
+{
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               i, status;
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Calculate the MAC of a message and compare it with a reference value */
+        status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY, check1[i].key_handle,
+                 check1[i].key_alg, check1[i].data, check1[i].data_size,
+                 check1[i].expected_mac, check1[i].mac_size);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        /* Calculate the MAC of a message on a destroyed key handle should be an error */
+        status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY, check1[i].key_handle,
+                 check1[i].key_alg, check1[i].data, check1[i].data_size,
+                 check1[i].expected_mac, check1[i].mac_size);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6));
+
+
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c047/test_c047.h b/api-tests/dev_apis/crypto/test_c047/test_c047.h
new file mode 100644
index 0000000..8c47a82
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c047/test_c047.h
@@ -0,0 +1,30 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C047_CLIENT_TESTS_H_
+#define _TEST_C047_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c047)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c047_crypto_list[];
+
+int32_t psa_mac_verify_test(security_t caller);
+#endif /* _TEST_C047_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c047/test_data.h b/api-tests/dev_apis/crypto/test_c047/test_data.h
new file mode 100644
index 0000000..e94b27f
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c047/test_data.h
@@ -0,0 +1,197 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[64];
+    uint32_t                key_length;
+    uint8_t                 data[16];
+    size_t                  data_size;
+    uint8_t                 expected_mac[64];
+    size_t                  mac_size;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_HMAC
+#ifdef ARCH_TEST_SHA224
+{"Test psa_mac_verify HMAC SHA 224\n", 1, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4,
+ 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68,
+ 0x4b, 0x22}, 28,
+ PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_224),
+ PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_SHA256
+{"Test psa_mac_verify HMAC SHA 256\n", 2, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf,
+ 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9,
+ 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 32,
+ PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_256),
+ PSA_SUCCESS
+},
+
+{"Test psa_mac_verify - Incompactible HMAC for CMAC\n", 3, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf,
+ 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9,
+ 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 32,
+ PSA_KEY_USAGE_VERIFY, PSA_ALG_CMAC,
+ PSA_ERROR_NOT_SUPPORTED
+},
+
+{"Test psa_mac_verify - Invalid usage\n", 4, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf,
+ 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9,
+ 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 32,
+ PSA_KEY_USAGE_EXPORT, PSA_ALG_HMAC(PSA_ALG_SHA_256),
+ PSA_ERROR_NOT_SUPPORTED
+},
+
+{"Test psa_mac_verify - Truncated MAC too large\n", 5, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf,
+ 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9,
+ 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 32,
+ PSA_KEY_USAGE_VERIFY,  PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 33),
+ PSA_ERROR_INVALID_ARGUMENT
+},
+
+{"Test psa_mac_verify - Truncated MAC too small\n", 6, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf,
+ 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9,
+ 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 32,
+ PSA_KEY_USAGE_VERIFY, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 1),
+ PSA_ERROR_NOT_SUPPORTED
+},
+
+{"Test psa_mac_verify - bad algorithm (unknown MAC algorithm)\n", 7, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf,
+ 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9,
+ 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 32,
+ PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(0),
+ PSA_ERROR_NOT_SUPPORTED
+},
+
+#endif
+
+#ifdef ARCH_TEST_SHA512
+{"Test psa_mac_verify HMAC SHA 512\n", 8, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x87, 0xaa, 0x7c, 0xde, 0xa5, 0xef, 0x61, 0x9d, 0x4f, 0xf0, 0xb4, 0x24, 0x1a,
+ 0x1d, 0x6c, 0xb0, 0x23, 0x79, 0xf4, 0xe2, 0xce, 0x4e, 0xc2, 0x78, 0x7a, 0xd0,
+ 0xb3, 0x05, 0x45, 0xe1, 0x7c, 0xde, 0xda, 0xa8, 0x33, 0xb7, 0xd6, 0xb8, 0xa7,
+ 0x02, 0x03, 0x8b, 0x27, 0x4e, 0xae, 0xa3, 0xf4, 0xe4, 0xbe, 0x9d, 0x91, 0x4e,
+ 0xeb, 0x61, 0xf1, 0x70, 0x2e, 0x69, 0x6c, 0x20, 0x3a, 0x12, 0x68, 0x54}, 64,
+ PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_512),
+ PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_SHA224
+{"Test psa_mac_verify HMAC SHA 224 (truncated to 8 Byte)\n", 9, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68}, 8,
+ PSA_KEY_USAGE_VERIFY, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_224), 8),
+ PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_AES_128
+#ifdef ARCH_TEST_CMAC
+{"Test psa_mac_verify CMAC AES 128\n", 10, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, 16,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x9A, 0x8F, 0xFF, 0x8D, 0xA3, 0x5B, 0x97, 0xCB, 0x4C, 0x95, 0xF0, 0xFA, 0x6A,
+ 0xE7, 0xE0, 0x77}, 16,
+ PSA_KEY_USAGE_VERIFY, PSA_ALG_CMAC,
+ PSA_SUCCESS
+},
+#endif
+#endif
+
+{"Test psa_mac_verify - Invalid key type\n", 11, PSA_KEY_TYPE_RAW_DATA,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, 16,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x9A, 0x8F, 0xFF, 0x8D, 0xA3, 0x5B, 0x97, 0xCB, 0x4C, 0x95, 0xF0, 0xFA, 0x6A,
+ 0xE7, 0xE0, 0x77}, 16,
+ PSA_KEY_USAGE_VERIFY, PSA_ALG_CMAC,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+
+#ifdef ARCH_TEST_HMAC
+#ifdef ARCH_TEST_SHA256
+{"Test psa_mac_verify small size buffer\n", 12, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf,
+ 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9,
+ 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 30,
+ PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_256),
+ PSA_ERROR_INVALID_SIGNATURE
+},
+#endif
+
+#ifdef ARCH_TEST_SHA224
+{"Test psa_mac_verify incorrect expected MAC\n", 13, PSA_KEY_TYPE_HMAC,
+{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20,
+{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8,
+{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4,
+ 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68,
+ 0x4b, 0x20}, 28,
+ PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_224),
+ PSA_ERROR_INVALID_SIGNATURE
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c047/test_entry_c047.c b/api-tests/dev_apis/crypto/test_c047/test_entry_c047.c
new file mode 100644
index 0000000..5ce7733
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c047/test_entry_c047.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c047.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 47)
+#define TEST_DESC "Testing crypto MAC APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c047_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c048/test.cmake b/api-tests/dev_apis/crypto/test_c048/test.cmake
new file mode 100644
index 0000000..8187923
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c048/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c048.c
+	test_c048.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c048/test_c048.c b/api-tests/dev_apis/crypto/test_c048/test_c048.c
new file mode 100644
index 0000000..8ae030b
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c048/test_c048.c
@@ -0,0 +1,100 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c048.h"
+#include "test_data.h"
+
+client_test_t test_c048_crypto_list[] = {
+    NULL,
+    psa_cipher_encrypt_test,
+    NULL,
+};
+
+static int        g_test_count = 1;
+static uint8_t    output[SIZE_32B];
+
+int32_t psa_cipher_encrypt_test(security_t caller)
+{
+    int                     num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t                 i, status;
+    size_t                  output_length;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Encrypt a message using a symmetric cipher */
+        status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT, check1[i].key_handle,
+                 check1[i].key_alg, check1[i].input, check1[i].input_length, output,
+                 check1[i].output_size, &output_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        if (check1[i].expected_status != PSA_SUCCESS)
+            continue;
+
+        /* Check if the output length matches the expected length */
+        TEST_ASSERT_EQUAL(output_length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(6));
+
+        /* Check if the output data matches the expected data */
+        TEST_ASSERT_MEMCMP(output, check1[i].expected_output, output_length,
+        TEST_CHECKPOINT_NUM(7));
+
+        /* Encrypt a message using a symmetric cipher on an aborted key handle should be an error */
+        status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT, check1[i].key_handle,
+                 check1[i].key_alg, check1[i].input, check1[i].input_length, output,
+                 check1[i].output_size, &output_length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(8));
+
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c048/test_c048.h b/api-tests/dev_apis/crypto/test_c048/test_c048.h
new file mode 100644
index 0000000..dbd289e
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c048/test_c048.h
@@ -0,0 +1,30 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C048_CLIENT_TESTS_H_
+#define _TEST_C048_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c048)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c048_crypto_list[];
+
+int32_t psa_cipher_encrypt_test(security_t caller);
+#endif /* _TEST_C048_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c048/test_data.h b/api-tests/dev_apis/crypto/test_c048/test_data.h
new file mode 100644
index 0000000..0f9abe3
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c048/test_data.h
@@ -0,0 +1,162 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[32];
+    uint32_t                key_length;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    uint8_t                 input[32];
+    size_t                  input_length;
+    size_t                  output_size;
+    uint8_t                 expected_output[32];
+    size_t                  expected_output_length;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_AES_128
+#ifdef ARCH_TEST_CBC_NO_PADDING
+{"Test psa_cipher_encrypt - Encrypt - AES CBC_NO_PADDING\n", 1, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17, 0x2a}, 16, SIZE_32B,
+{0xA0, 0x76, 0xEC, 0x9D, 0xFB, 0xE4, 0x7D, 0x52, 0xAF, 0xC3, 0x57, 0x33, 0x6F,
+ 0x20, 0x74, 0x3B}, 0, PSA_SUCCESS
+},
+
+{"Test psa_cipher_encrypt - Encrypt - AES CBC_NO_PADDING (Short input)\n", 2, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x23}, 5, 16,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x23}, 0, PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+
+#ifdef ARCH_TEST_CBC_PKCS7
+{"Test psa_cipher_encrypt - Encrypt - AES CBC_PKCS7\n", 3, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_PKCS7,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17, 0x2a}, 16, SIZE_32B,
+{0xa0, 0x76, 0xec, 0x9d, 0xfb, 0xe4, 0x7d, 0x52, 0xaf, 0xc3, 0x57, 0x33, 0x6f,
+ 0x20, 0x74, 0x3b, 0xca, 0x7e, 0x8a, 0x15, 0xdc, 0x3c, 0x77, 0x64, 0x36, 0x31,
+ 0x42, 0x93, 0x03, 0x1c, 0xd4, 0xf3}, 16, PSA_SUCCESS
+},
+
+{"Test psa_cipher_encrypt - Encrypt - AES CBC_PKCS7 (Short input)\n", 4, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_PKCS7,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17}, 15, SIZE_32B,
+{0x62, 0x79, 0xb4, 0x9d, 0x7f, 0x7a, 0x8d, 0xd8, 0x7b, 0x68, 0x51, 0x75, 0xd4,
+ 0x27, 0x6e, 0x24}, 16, PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_CIPER_MODE_CTR
+{"Test psa_cipher_encrypt - Encrypt - AES CTR\n", 5, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17, 0x2a}, 16, SIZE_32B,
+{0x8f, 0x94, 0x08, 0xfe, 0x80, 0xa8, 0x1d, 0x3e, 0x81, 0x3d, 0xa3, 0xc7, 0xb0,
+ 0xb2, 0xbd, 0x32}, 0, PSA_SUCCESS
+},
+
+{"Test psa_cipher_encrypt - Encrypt - AES CTR (short input)\n", 6, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17}, 15, SIZE_32B,
+{0x8f, 0x94, 0x08, 0xfe, 0x80, 0xa8, 0x1d, 0x3e, 0x81, 0x3d, 0xa3, 0xc7, 0xb0,
+ 0xb2, 0xbd}, 0, PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_CBC_NO_PADDING
+#ifdef ARCH_TEST_DES_1KEY
+{"Test psa_cipher_encrypt - Encrypt - DES CBC (nopad)\n", 7, PSA_KEY_TYPE_DES,
+{0x01, 0x02, 0x04, 0x07, 0x08, 0x0b, 0x0d, 0x0e}, DES_8B_KEY_SIZE,
+ PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING,
+{0xed, 0xa4, 0x01, 0x12, 0x39, 0xbc, 0x3a, 0xc9}, 8, SIZE_32B,
+{0x64, 0xf9, 0x17, 0xb0, 0x15, 0x2f, 0x8f, 0x05}, 0, PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_DES_2KEY
+{"Test psa_cipher_encrypt - Encrypt - 2-key 3DE -CBC (nopad)\n", 8, PSA_KEY_TYPE_DES,
+{0x01, 0x02, 0x04, 0x07, 0x08, 0x0b, 0x0d, 0x0e, 0xc1, 0xc2, 0xc4, 0xc7, 0xc8,
+ 0xcb, 0xcd, 0xce}, DES3_2KEY_SIZE,
+ PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING,
+{0xed, 0xa4, 0x01, 0x12, 0x39, 0xbc, 0x3a, 0xc9}, 8, SIZE_32B,
+{0x5d, 0x06, 0x52, 0x42, 0x9c, 0x5b, 0x0a, 0xc7}, 0, PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_DES_3KEY
+{"Test psa_cipher_encrypt - Encrypt - 3-key 3DE -CBC (nopad)\n", 9, PSA_KEY_TYPE_DES,
+{0x01, 0x02, 0x04, 0x07, 0x08, 0x0b, 0x0d, 0x0e, 0xc1, 0xc2, 0xc4, 0xc7, 0xc8,
+ 0xcb, 0xcd, 0xce, 0x31, 0x32, 0x34, 0x37, 0x38, 0x3b, 0x3d, 0x3e}, DES3_3KEY_SIZE,
+ PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING,
+{0xed, 0xa4, 0x01, 0x12, 0x39, 0xbc, 0x3a, 0xc9}, 8, SIZE_32B,
+{0x81, 0x7c, 0xa7, 0xd6, 0x9b, 0x80, 0xd8, 0x6a}, 0, PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_AES_128
+#ifdef ARCH_TEST_CBC_PKCS7
+{"Test psa_cipher_encrypt - small output buffer size\n", 10, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_PKCS7,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17, 0x2a}, 16, 15,
+{0xa0, 0x76, 0xec, 0x9d, 0xfb, 0xe4, 0x7d, 0x52, 0xaf, 0xc3, 0x57, 0x33, 0x6f,
+ 0x20, 0x74, 0x3b, 0xca, 0x7e, 0x8a, 0x15, 0xdc, 0x3c, 0x77, 0x64, 0x36, 0x31,
+ 0x42, 0x93, 0x03, 0x1c, 0xd4, 0xf3}, 16, PSA_ERROR_BUFFER_TOO_SMALL
+},
+#endif
+
+#ifdef ARCH_TEST_CBC_NO_PADDING
+{"Test psa_cipher_encrypt - Decrypt - AES CBC_NO_PADDING\n", 11, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_NO_PADDING,
+{0xA0, 0x76, 0xEC, 0x9D, 0xFB, 0xE4, 0x7D, 0x52, 0xAF, 0xC3, 0x57, 0x33, 0x6F,
+ 0x20, 0x74, 0x3B},
+ 16, SIZE_32B,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17, 0x2a}, 0, PSA_ERROR_NOT_PERMITTED
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c048/test_entry_c048.c b/api-tests/dev_apis/crypto/test_c048/test_entry_c048.c
new file mode 100644
index 0000000..2c04194
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c048/test_entry_c048.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c048.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 48)
+#define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c048_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c049/test.cmake b/api-tests/dev_apis/crypto/test_c049/test.cmake
new file mode 100644
index 0000000..56f787a
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c049/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c049.c
+	test_c049.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c049/test_c049.c b/api-tests/dev_apis/crypto/test_c049/test_c049.c
new file mode 100644
index 0000000..024abd5
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c049/test_c049.c
@@ -0,0 +1,99 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c049.h"
+#include "test_data.h"
+
+client_test_t test_c049_crypto_list[] = {
+    NULL,
+    psa_cipher_decrypt_test,
+    NULL,
+};
+
+static int        g_test_count = 1;
+static uint8_t    output[SIZE_32B];
+
+int32_t psa_cipher_decrypt_test(security_t caller)
+{
+    int                     num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t                 i, status;
+    size_t                  output_length;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Decrypt a message using a symmetric cipher */
+        status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT, check1[i].key_handle,
+                 check1[i].key_alg, check1[i].input, check1[i].input_length, output,
+                 check1[i].output_size, &output_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        if (check1[i].expected_status != PSA_SUCCESS)
+            continue;
+
+        /* Check if the output length matches the expected length */
+        TEST_ASSERT_EQUAL(output_length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(6));
+
+        /* Check if the output data matches the expected data */
+        TEST_ASSERT_MEMCMP(output, check1[i].expected_output, output_length,
+        TEST_CHECKPOINT_NUM(7));
+
+        status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT, check1[i].key_handle,
+                 check1[i].key_alg, check1[i].input, check1[i].input_length, output,
+                 check1[i].output_size, &output_length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(8));
+
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c049/test_c049.h b/api-tests/dev_apis/crypto/test_c049/test_c049.h
new file mode 100644
index 0000000..93eb031
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c049/test_c049.h
@@ -0,0 +1,30 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C049_CLIENT_TESTS_H_
+#define _TEST_C049_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c049)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c049_crypto_list[];
+
+int32_t psa_cipher_decrypt_test(security_t caller);
+#endif /* _TEST_C049_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c049/test_data.h b/api-tests/dev_apis/crypto/test_c049/test_data.h
new file mode 100644
index 0000000..2598395
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c049/test_data.h
@@ -0,0 +1,160 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[32];
+    uint32_t                key_length;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    uint8_t                 input[32];
+    size_t                  input_length;
+    size_t                  output_size;
+    uint8_t                 expected_output[32];
+    size_t                  expected_output_length;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_AES_128
+#ifdef ARCH_TEST_CBC_NO_PADDING
+{"Test psa_cipher_decrypt - Encrypt - AES CBC_NO_PADDING\n", 1, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17, 0x2a}, 16, SIZE_32B,
+{0xA0, 0x76, 0xEC, 0x9D, 0xFB, 0xE4, 0x7D, 0x52, 0xAF, 0xC3, 0x57, 0x33, 0x6F,
+ 0x20, 0x74, 0x3B}, 0, PSA_ERROR_NOT_PERMITTED
+},
+#endif
+
+#ifdef ARCH_TEST_CBC_NO_PADDING
+{"Test psa_cipher_decrypt - Decrypt - AES CBC_NO_PADDING\n", 11, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_NO_PADDING,
+{0xA0, 0x76, 0xEC, 0x9D, 0xFB, 0xE4, 0x7D, 0x52, 0xAF, 0xC3, 0x57, 0x33, 0x6F,
+ 0x20, 0x74, 0x3B},
+ 16, SIZE_32B,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17, 0x2a}, 0, PSA_SUCCESS
+},
+
+{"Test psa_cipher_decrypt - Decrypt - AES CBC_NO_PADDING (Short input)\n", 12, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x23}, 5, 16,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x23}, 0, PSA_ERROR_INVALID_ARGUMENT
+},
+
+{"Test psa_cipher_decrypt - Decrypt - AES CBC_NO_PADDING\n", 2, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_NO_PADDING,
+{0xA0, 0x76, 0xEC, 0x9D, 0xFB, 0xE4, 0x7D, 0x52, 0xAF, 0xC3, 0x57, 0x33, 0x6F,
+ 0x20, 0x74, 0x3B},
+ 16, 10,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17, 0x2a}, 0, PSA_ERROR_BUFFER_TOO_SMALL
+},
+
+#endif
+
+#ifdef ARCH_TEST_CBC_PKCS7
+{"Test psa_cipher_decrypt - Decrypt - AES CBC_PKCS7\n", 13, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_PKCS7,
+{0xa0, 0x76, 0xec, 0x9d, 0xfb, 0xe4, 0x7d, 0x52, 0xaf, 0xc3, 0x57, 0x33, 0x6f,
+ 0x20, 0x74, 0x3b, 0xca, 0x7e, 0x8a, 0x15, 0xdc, 0x3c, 0x77, 0x64, 0x36, 0x31,
+ 0x42, 0x93, 0x03, 0x1c, 0xd4, 0xf3}, 32, SIZE_32B,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17, 0x2a}, 0, PSA_SUCCESS
+},
+
+{"Test psa_cipher_decrypt - Decrypt - AES CBC_PKCS7 (Short input)\n", 14, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_PKCS7,
+{0x62, 0x79, 0xb4, 0x9d, 0x7f, 0x7a, 0x8d, 0xd8, 0x7b, 0x68, 0x51, 0x75, 0xd4,
+ 0x27, 0x6e, 0x24}, 16, SIZE_32B,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17}, 15, PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_CIPER_MODE_CTR
+{"Test psa_cipher_decrypt - Decrypt - AES CTR\n", 15, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_DECRYPT, PSA_ALG_CTR,
+{0x8f, 0x94, 0x08, 0xfe, 0x80, 0xa8, 0x1d, 0x3e, 0x81, 0x3d, 0xa3, 0xc7, 0xb0,
+ 0xb2, 0xbd, 0x32}, 16, SIZE_32B,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17, 0x2a},
+ 0, PSA_SUCCESS
+},
+
+{"Test psa_cipher_decrypt - Decrypt - AES CTR (short input)\n", 16, PSA_KEY_TYPE_AES,
+{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
+ 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE,
+ PSA_KEY_USAGE_DECRYPT, PSA_ALG_CTR,
+{0x8f, 0x94, 0x08, 0xfe, 0x80, 0xa8, 0x1d, 0x3e, 0x81, 0x3d, 0xa3, 0xc7, 0xb0,
+ 0xb2, 0xbd}, 15, SIZE_32B,
+{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73,
+ 0x93, 0x17}, 0, PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_CBC_NO_PADDING
+#ifdef ARCH_TEST_DES_1KEY
+{"Test psa_cipher_decrypt - Decrypt - DES CBC (nopad)\n", 17, PSA_KEY_TYPE_DES,
+{0x01, 0x02, 0x04, 0x07, 0x08, 0x0b, 0x0d, 0x0e}, DES_8B_KEY_SIZE,
+ PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_NO_PADDING,
+{0x64, 0xf9, 0x17, 0xb0, 0x15, 0x2f, 0x8f, 0x05}, 8, SIZE_32B,
+{0xed, 0xa4, 0x01, 0x12, 0x39, 0xbc, 0x3a, 0xc9}, 0, PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_DES_2KEY
+{"Test psa_cipher_decrypt - Decrypt - 2-key 3DE -CBC (nopad)\n", 18, PSA_KEY_TYPE_DES,
+{0x01, 0x02, 0x04, 0x07, 0x08, 0x0b, 0x0d, 0x0e, 0xc1, 0xc2, 0xc4, 0xc7, 0xc8,
+ 0xcb, 0xcd, 0xce}, DES3_2KEY_SIZE,
+ PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_NO_PADDING,
+{0x5d, 0x06, 0x52, 0x42, 0x9c, 0x5b, 0x0a, 0xc7}, 8, SIZE_32B,
+{0xed, 0xa4, 0x01, 0x12, 0x39, 0xbc, 0x3a, 0xc9}, 0, PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_DES_3KEY
+{"Test psa_cipher_decrypt - 3-key 3DE -CBC (nopad)\n", 19, PSA_KEY_TYPE_DES,
+{0x01, 0x02, 0x04, 0x07, 0x08, 0x0b, 0x0d, 0x0e, 0xc1, 0xc2, 0xc4, 0xc7, 0xc8,
+ 0xcb, 0xcd, 0xce, 0x31, 0x32, 0x34, 0x37, 0x38, 0x3b, 0x3d, 0x3e}, DES3_3KEY_SIZE,
+ PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_NO_PADDING,
+{0x81, 0x7c, 0xa7, 0xd6, 0x9b, 0x80, 0xd8, 0x6a}, 8, SIZE_32B,
+{0xed, 0xa4, 0x01, 0x12, 0x39, 0xbc, 0x3a, 0xc9}, 0, PSA_SUCCESS
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c049/test_entry_c049.c b/api-tests/dev_apis/crypto/test_c049/test_entry_c049.c
new file mode 100644
index 0000000..1b6073d
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c049/test_entry_c049.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c049.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 49)
+#define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c049_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c050/test.cmake b/api-tests/dev_apis/crypto/test_c050/test.cmake
new file mode 100644
index 0000000..a606ed2
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c050/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c050.c
+	test_c050.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c050/test_c050.c b/api-tests/dev_apis/crypto/test_c050/test_c050.c
new file mode 100644
index 0000000..894670a
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c050/test_c050.c
@@ -0,0 +1,241 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c050.h"
+#include "test_data.h"
+#include "val_crypto.h"
+
+client_test_t test_c050_crypto_list[] = {
+    NULL,
+    psa_open_key_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_open_key_test(security_t caller)
+{
+    int32_t               status, i = 0;
+    uint8_t               data[BUFFER_SIZE];
+    size_t                length;
+    const uint8_t        *key_data;
+    psa_key_type_t        get_key_type;
+    psa_key_usage_t       get_key_usage_flags;
+    psa_algorithm_t       get_key_algorithm;
+    psa_key_id_t          key_id;
+    psa_key_handle_t      key_handle;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_key_attributes_t  get_attributes = PSA_KEY_ATTRIBUTES_INIT;
+    boot_t                boot;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    /* Get the current boot state */
+    status = val->get_boot_flag(&boot.state);
+    TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+    /* If the boot is due to controlled reset get the Check ID */
+    if (boot.state == BOOT_EXPECTED_CONT_TEST_EXEC)
+    {
+        status = val->nvmem_read(VAL_NVMEM_OFFSET(NV_TEST_DATA1), &i, sizeof(int32_t));
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(3));
+    }
+
+    while (i < num_checks)
+    {
+        g_test_count = i + 1;
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(4));
+
+        /* Set the key data buffer to the input base on algorithm */
+        if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
+        {
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
+            {
+                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
+                    key_data = rsa_384_keypair;
+                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
+                    key_data = rsa_256_keypair;
+                else
+                    return VAL_STATUS_INVALID;
+            }
+            else
+            {
+                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
+                    key_data = rsa_384_keydata;
+                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
+                    key_data = rsa_256_keydata;
+                else
+                    return VAL_STATUS_INVALID;
+            }
+        }
+        else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
+        {
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
+                key_data = ec_keypair;
+            else
+                key_data = ec_keydata;
+        }
+        else
+            key_data = check1[i].key_data;
+
+        /* Get the cuurent boot state */
+        status = val->get_boot_flag(&boot.state);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        if (boot.state == BOOT_NOT_EXPECTED)
+        {
+            /* Setup the attributes for the key */
+            val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+            val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits);
+            val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+
+            if (check1[i].key_lifetime == PSA_KEY_LIFETIME_PERSISTENT)
+               val->crypto_function(VAL_CRYPTO_SET_KEY_ID, &attributes, check1[i].key_id);
+
+            val->crypto_function(VAL_CRYPTO_SET_KEY_LIFETIME, &attributes, check1[i].key_lifetime);
+            val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+            /* Import the key data into the key slot */
+            status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data,
+                     check1[i].key_length, &check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+
+            /* Save the details of current check, key id and key handle value in NV memory */
+            status = val->nvmem_write(VAL_NVMEM_OFFSET(NV_TEST_DATA1), &i, sizeof(int32_t));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+
+            status = val->nvmem_write(VAL_NVMEM_OFFSET(NV_TEST_DATA2), &check1[i].key_id,
+                     sizeof(psa_key_id_t));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+
+            status = val->nvmem_write(VAL_NVMEM_OFFSET(NV_TEST_DATA3), &check1[i].key_handle,
+                     sizeof(psa_key_handle_t));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+
+            /* Set the boot flag indicating controlled reset */
+            status = val->set_boot_flag(BOOT_EXPECTED_CONT_TEST_EXEC);
+            TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(10));
+
+            /* Wait for system to reset */
+            val->crypto_function(VAL_CRYPTO_RESET);
+            while (1);
+        }
+        else if (boot.state == BOOT_EXPECTED_CONT_TEST_EXEC)
+        {
+            /* Get the values of check, key id and key handle value before the system was reset */
+            status = val->nvmem_read(VAL_NVMEM_OFFSET(NV_TEST_DATA2), &key_id,
+                     sizeof(psa_key_id_t));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
+
+            status = val->nvmem_read(VAL_NVMEM_OFFSET(NV_TEST_DATA3), &key_handle,
+                     sizeof(psa_key_handle_t));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
+
+            /* Open a handle to an existing persistent key */
+            status = val->crypto_function(VAL_CRYPTO_OPEN_KEY, key_id, &key_handle);
+            TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(13));
+
+            /* If failure is expected, save and continue with the next data set */
+            if (check1[i].expected_status != PSA_SUCCESS)
+            {
+                ++i;
+                status = val->nvmem_write(VAL_NVMEM_OFFSET(NV_TEST_DATA1), &i, sizeof(int32_t));
+                TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14));
+
+                status = val->set_boot_flag(BOOT_NOT_EXPECTED);
+                TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(15));
+
+                continue;
+            }
+
+            /* Get the attributes of the imported key and check if it matches the given value */
+            status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, key_handle,
+                     &get_attributes);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16));
+
+            val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type);
+            TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(17));
+
+            if (check1[i].attr_bits != 0)
+                TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].attr_bits,
+                TEST_CHECKPOINT_NUM(18));
+            else
+                TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].expected_bit_length,
+                TEST_CHECKPOINT_NUM(19));
+
+            val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags);
+            TEST_ASSERT_EQUAL(get_key_usage_flags, check1[i].usage, TEST_CHECKPOINT_NUM(20));
+
+            val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm);
+            TEST_ASSERT_EQUAL(get_key_algorithm, check1[i].key_alg, TEST_CHECKPOINT_NUM(21));
+
+            /* Export a key in binary format */
+            status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, key_handle, data,
+                                          BUFFER_SIZE, &length);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(22));
+
+            /* Check the value of the exported key */
+            TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(23));
+
+            if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type))
+            {
+                TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(24));
+            }
+            else if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)
+                  || PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
+            {
+                TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(25));
+            }
+            else
+            {
+                return VAL_STATUS_INVALID;
+            }
+
+            /* Reset the key attributes */
+            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+            /* Save the check ID and set boot flags */
+             ++i;
+            status = val->nvmem_write(VAL_NVMEM_OFFSET(NV_TEST_DATA1), &i, sizeof(int32_t));
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(26));
+
+            status = val->set_boot_flag(BOOT_NOT_EXPECTED);
+            TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(27));
+
+        }
+        else
+            return VAL_STATUS_ERROR;
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c050/test_c050.h b/api-tests/dev_apis/crypto/test_c050/test_c050.h
new file mode 100644
index 0000000..4680a0a
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c050/test_c050.h
@@ -0,0 +1,30 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C050_CLIENT_TESTS_H_
+#define _TEST_C050_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c050)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c050_crypto_list[];
+
+int32_t psa_open_key_test(security_t caller);
+#endif /* _TEST_C050_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c050/test_data.h b/api-tests/dev_apis/crypto/test_c050/test_data.h
new file mode 100644
index 0000000..c0fdb56
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c050/test_data.h
@@ -0,0 +1,276 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    psa_key_id_t            key_id;
+    uint8_t                 key_data[34];
+    uint32_t                key_length;
+    size_t                  attr_bits;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_key_lifetime_t      key_lifetime;
+    uint32_t                expected_bit_length;
+    uint32_t                expected_key_length;
+    psa_status_t            expected_status;
+} test_data;
+
+static const uint8_t rsa_384_keypair[1];
+static const uint8_t rsa_384_keydata[1];
+
+static const uint8_t rsa_256_keypair[] = {
+ 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0,
+ 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27,
+ 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F,
+ 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE,
+ 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1,
+ 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B,
+ 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA,
+ 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63,
+ 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34,
+ 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73,
+ 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10,
+ 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4,
+ 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5,
+ 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23,
+ 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0,
+ 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63,
+ 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77,
+ 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39,
+ 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33,
+ 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5,
+ 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01,
+ 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50,
+ 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7,
+ 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79,
+ 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A,
+ 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA,
+ 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB,
+ 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A,
+ 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22,
+ 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4,
+ 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F,
+ 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64,
+ 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32,
+ 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3,
+ 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6,
+ 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9,
+ 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41,
+ 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F,
+ 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C,
+ 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A,
+ 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58,
+ 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9,
+ 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6,
+ 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC,
+ 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1,
+ 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43,
+ 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD,
+ 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C,
+ 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD,
+ 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0,
+ 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53,
+ 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D,
+ 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63,
+ 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B,
+ 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1,
+ 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B,
+ 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED,
+ 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB,
+ 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C,
+ 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3,
+ 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4,
+ 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB,
+ 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52,
+ 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA,
+ 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77,
+ 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3,
+ 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F,
+ 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22,
+ 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95,
+ 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39,
+ 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE,
+ 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41,
+ 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2,
+ 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C,
+ 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED,
+ 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE,
+ 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5,
+ 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8,
+ 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF,
+ 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC,
+ 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63,
+ 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D,
+ 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C,
+ 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A,
+ 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76,
+ 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD,
+ 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43,
+ 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC,
+ 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5,
+ 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2,
+ 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F,
+ 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0};
+
+static const uint8_t rsa_256_keydata[] = {
+ 0x30, 0x82, 0x01, 0x0A,
+ 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1,
+ 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44,
+ 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1,
+ 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1,
+ 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11,
+ 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB,
+ 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F,
+ 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49,
+ 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0,
+ 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53,
+ 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF,
+ 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE,
+ 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99,
+ 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6,
+ 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7,
+ 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89,
+ 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1,
+ 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0,
+ 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01};
+
+static const uint8_t ec_keydata[] = {
+ 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f,
+ 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0,
+ 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b,
+ 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98,
+ 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20};
+
+static const uint8_t ec_keypair[] = {
+ 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38,
+ 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42};
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_CIPER_MODE_CTR
+#ifdef ARCH_TEST_AES_128
+{"Test psa_open_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, 0x12,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9, 0x77},
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_PERSISTENT,
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_AES_192
+{"Test psa_open_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, 0x34,
+{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
+ 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05},
+ AES_24B_KEY_SIZE, BYTES_TO_BITS(AES_24B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ PSA_KEY_LIFETIME_PERSISTENT,
+ BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_AES_256
+{"Test psa_open_key 32 Byte AES\n", 3, PSA_KEY_TYPE_AES, 0x56,
+{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
+ 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
+ 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
+ AES_32B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_PERSISTENT,
+ BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
+#ifdef ARCH_TEST_RSA_2048
+{"Test psa_open_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY, 0x78,
+ {0},
+ 270, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_KEY_LIFETIME_PERSISTENT,
+ 2048, 270, PSA_SUCCESS
+},
+
+{"Test psa_open_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR, 0x89,
+ {0},
+ 1193, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_KEY_LIFETIME_PERSISTENT,
+ 2048, 1193, PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_CIPER_MODE_CTR
+#ifdef ARCH_TEST_DES_1KEY
+{"Test psa_open_key with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES, 0x90,
+ {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
+ DES_8B_KEY_SIZE, BYTES_TO_BITS(DES_8B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ PSA_KEY_LIFETIME_PERSISTENT,
+ BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_DES_2KEY
+{"Test psa_open_key with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES, 0x123,
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+ DES3_2KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_PERSISTENT,
+ BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_DES_3KEY
+{"Test psa_open_key with Triple DES 3-Key\n", 8, PSA_KEY_TYPE_DES, 0x456,
+{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
+ 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86,
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
+ DES3_3KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_PERSISTENT,
+ BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_ECDSA
+#ifdef ARCH_TEST_ECC_CURVE_SECP256R1
+{"Test psa_open_key with EC Public key\n", 9, 0x789,
+ PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+ {0},
+ 65, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, PSA_KEY_LIFETIME_PERSISTENT,
+ 256, 65, PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_ECC_CURVE_SECP224R1
+{"Test psa_open_key with EC keypair\n", 10, 0x1234,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
+ {0},
+ 28, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, PSA_KEY_LIFETIME_PERSISTENT,
+ 224, 28, PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_CIPER_MODE_CTR
+#ifdef ARCH_TEST_AES
+{"Test psa_open_key with key data greater than the algorithm size\n", 11, PSA_KEY_TYPE_AES,
+ 0x5678,
+{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
+ 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05, 0xC9, 0xED,
+ 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
+ AES_32B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_VOLATILE,
+ BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c050/test_entry_c050.c b/api-tests/dev_apis/crypto/test_c050/test_entry_c050.c
new file mode 100644
index 0000000..1af4e50
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c050/test_entry_c050.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c050.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 50)
+#define TEST_DESC "Testing crypto key management APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c050_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c051/test.cmake b/api-tests/dev_apis/crypto/test_c051/test.cmake
new file mode 100644
index 0000000..bb07510
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c051/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c051.c
+	test_c051.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c051/test_c051.c b/api-tests/dev_apis/crypto/test_c051/test_c051.c
new file mode 100644
index 0000000..e87dd92
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c051/test_c051.c
@@ -0,0 +1,177 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c051.h"
+#include "test_data.h"
+
+client_test_t test_c051_crypto_list[] = {
+    NULL,
+    psa_close_key_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_close_key_test(security_t caller)
+{
+    int32_t               i, status;
+    const uint8_t        *key_data;
+    psa_key_type_t        get_key_type;
+    psa_key_id_t          get_key_id;
+    psa_key_lifetime_t    get_key_lifetime;
+    psa_key_usage_t       get_key_usage_flags;
+    psa_algorithm_t       get_key_algorithm;
+    size_t                get_key_bits;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_key_attributes_t  set_attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    /* Set the key data buffer to the input base on algorithm */
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
+        {
+            if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR)
+            {
+                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
+                    key_data = rsa_384_keypair;
+                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
+                    key_data = rsa_256_keypair;
+                else
+                    return VAL_STATUS_INVALID;
+            }
+            else
+            {
+                if (check1[i].expected_bit_length == BYTES_TO_BITS(384))
+                    key_data = rsa_384_keydata;
+                else if (check1[i].expected_bit_length == BYTES_TO_BITS(256))
+                    key_data = rsa_256_keydata;
+                else
+                    return VAL_STATUS_INVALID;
+            }
+        }
+        else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type))
+        {
+            if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type))
+                key_data = ec_keypair;
+            else
+                key_data = ec_keydata;
+        }
+        else
+            key_data = check1[i].key_data;
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &set_attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &set_attributes, check1[i].attr_bits);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &set_attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ID, &set_attributes, check1[i].key_id);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_LIFETIME, &set_attributes, check1[i].key_lifetime);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &set_attributes, check1[i].key_alg);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &set_attributes, key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Close the key handle */
+        status = val->crypto_function(VAL_CRYPTO_CLOSE_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+
+        /* Getting the attributes of the closed key should return error */
+        status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, check1[i].key_handle,
+                 &attributes);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(5));
+
+        /* Check if all the attributes are erased */
+        val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type);
+        TEST_ASSERT_EQUAL(get_key_type, 0, TEST_CHECKPOINT_NUM(6));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ID, &attributes, &get_key_id);
+        TEST_ASSERT_EQUAL(get_key_id, 0, TEST_CHECKPOINT_NUM(7));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, &attributes, &get_key_lifetime);
+        TEST_ASSERT_EQUAL(get_key_lifetime, 0, TEST_CHECKPOINT_NUM(8));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags);
+        TEST_ASSERT_EQUAL(get_key_usage_flags, 0, TEST_CHECKPOINT_NUM(9));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm);
+        TEST_ASSERT_EQUAL(get_key_algorithm, 0, TEST_CHECKPOINT_NUM(10));
+
+        val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &attributes, &get_key_bits);
+        TEST_ASSERT_EQUAL(get_key_bits,  0, TEST_CHECKPOINT_NUM(11));
+
+        /* Closing an empty key handle should return error */
+        status = val->crypto_function(VAL_CRYPTO_CLOSE_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(12));
+
+        if (check1[i].key_lifetime == PSA_KEY_LIFETIME_PERSISTENT)
+        {
+            /* Open the key handle and retrieve the data */
+            status = val->crypto_function(VAL_CRYPTO_OPEN_KEY, check1[i].key_id,
+                     &check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13));
+
+            val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type);
+            TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(14));
+
+            val->crypto_function(VAL_CRYPTO_GET_KEY_ID, &attributes, &get_key_id);
+            TEST_ASSERT_EQUAL(get_key_id, check1[i].key_id, TEST_CHECKPOINT_NUM(15));
+
+            val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, &attributes, &get_key_lifetime);
+            TEST_ASSERT_EQUAL(get_key_lifetime, check1[i].key_lifetime, TEST_CHECKPOINT_NUM(16));
+
+            val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags);
+            TEST_ASSERT_EQUAL(get_key_usage_flags, check1[i].usage, TEST_CHECKPOINT_NUM(17));
+
+            val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm);
+            TEST_ASSERT_EQUAL(get_key_algorithm, check1[i].key_alg, TEST_CHECKPOINT_NUM(18));
+
+            val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &attributes, &get_key_bits);
+            TEST_ASSERT_EQUAL(get_key_bits,  check1[i].expected_bit_length,
+            TEST_CHECKPOINT_NUM(19));
+
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(20));
+
+            status = val->crypto_function(VAL_CRYPTO_CLOSE_KEY, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(21));
+        }
+
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c051/test_c051.h b/api-tests/dev_apis/crypto/test_c051/test_c051.h
new file mode 100644
index 0000000..552d28a
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c051/test_c051.h
@@ -0,0 +1,30 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C051_CLIENT_TESTS_H_
+#define _TEST_C051_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c051)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c051_crypto_list[];
+
+int32_t psa_close_key_test(security_t caller);
+#endif /* _TEST_C051_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c051/test_data.h b/api-tests/dev_apis/crypto/test_c051/test_data.h
new file mode 100644
index 0000000..6792a2a
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c051/test_data.h
@@ -0,0 +1,272 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[34];
+    uint32_t                key_length;
+    size_t                  attr_bits;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_key_id_t            key_id;
+    psa_key_lifetime_t      key_lifetime;
+    uint32_t                expected_bit_length;
+    psa_status_t            expected_status;
+} test_data;
+
+static const uint8_t rsa_384_keypair[1];
+static const uint8_t rsa_384_keydata[1];
+static const uint8_t rsa_256_keypair[] = {
+ 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0,
+ 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27,
+ 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F,
+ 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE,
+ 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1,
+ 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B,
+ 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA,
+ 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63,
+ 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34,
+ 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73,
+ 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10,
+ 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4,
+ 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5,
+ 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23,
+ 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0,
+ 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63,
+ 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77,
+ 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39,
+ 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33,
+ 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5,
+ 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01,
+ 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50,
+ 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7,
+ 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79,
+ 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A,
+ 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA,
+ 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB,
+ 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A,
+ 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22,
+ 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4,
+ 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F,
+ 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64,
+ 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32,
+ 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3,
+ 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6,
+ 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9,
+ 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41,
+ 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F,
+ 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C,
+ 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A,
+ 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58,
+ 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9,
+ 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6,
+ 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC,
+ 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1,
+ 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43,
+ 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD,
+ 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C,
+ 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD,
+ 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0,
+ 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53,
+ 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D,
+ 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63,
+ 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B,
+ 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1,
+ 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B,
+ 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED,
+ 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB,
+ 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C,
+ 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3,
+ 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4,
+ 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB,
+ 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52,
+ 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA,
+ 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77,
+ 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3,
+ 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F,
+ 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22,
+ 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95,
+ 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39,
+ 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE,
+ 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41,
+ 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2,
+ 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C,
+ 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED,
+ 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE,
+ 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5,
+ 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8,
+ 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF,
+ 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC,
+ 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63,
+ 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D,
+ 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C,
+ 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A,
+ 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76,
+ 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD,
+ 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43,
+ 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC,
+ 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5,
+ 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2,
+ 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F,
+ 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0};
+
+static const uint8_t rsa_256_keydata[] = {
+ 0x30, 0x82, 0x01, 0x0A,
+ 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1,
+ 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44,
+ 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1,
+ 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1,
+ 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11,
+ 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB,
+ 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F,
+ 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49,
+ 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0,
+ 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53,
+ 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF,
+ 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE,
+ 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99,
+ 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6,
+ 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7,
+ 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89,
+ 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1,
+ 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0,
+ 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01};
+
+static const uint8_t ec_keydata[] = {
+ 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f,
+ 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0,
+ 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b,
+ 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98,
+ 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20};
+
+static const uint8_t ec_keypair[] = {
+ 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38,
+ 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42};
+
+static test_data check1[] = {
+
+#ifdef ARCH_TEST_CIPER_MODE_CTR
+#ifdef ARCH_TEST_AES_128
+{"Test psa_close_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9},
+ AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ 0x12, PSA_KEY_LIFETIME_VOLATILE,
+ BYTES_TO_BITS(AES_16B_KEY_SIZE), PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_AES_192
+{"Test psa_close_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES,
+{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87,
+ 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9},
+ AES_24B_KEY_SIZE, BYTES_TO_BITS(AES_24B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ 0x34, PSA_KEY_LIFETIME_PERSISTENT,
+ BYTES_TO_BITS(AES_24B_KEY_SIZE), PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_AES_256
+{"Test psa_close_key 32 Byte AES\n", 3, PSA_KEY_TYPE_AES,
+{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2,
+ 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED,
+ 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE},
+ AES_32B_KEY_SIZE, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ 0x56, PSA_KEY_LIFETIME_VOLATILE,
+ BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
+#ifdef ARCH_TEST_RSA_2048
+{"Test psa_close_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY,
+ {0},
+ 270, 2048, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+ 0x78, PSA_KEY_LIFETIME_PERSISTENT,
+ 2048, PSA_SUCCESS
+},
+
+{"Test psa_close_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR,
+ {0},
+ 1193, 2048, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+ 0x89, PSA_KEY_LIFETIME_PERSISTENT,
+ 2048, PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_CIPER_MODE_CTR
+#ifdef ARCH_TEST_DES_1KEY
+{"Test psa_close_key with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES,
+ {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29},
+ DES_8B_KEY_SIZE, BYTES_TO_BITS(DES_8B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ 0xAB, PSA_KEY_LIFETIME_PERSISTENT,
+ BYTES_TO_BITS(DES_8B_KEY_SIZE), PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_DES_2KEY
+{"Test psa_close_key with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES,
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+ DES3_2KEY_SIZE, BYTES_TO_BITS(DES3_2KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ 0xBC, PSA_KEY_LIFETIME_PERSISTENT,
+ BYTES_TO_BITS(DES3_2KEY_SIZE), PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_DES_3KEY
+{"Test psa_close_key with Triple DES 3-Key\n", 8, PSA_KEY_TYPE_DES,
+{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
+ 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86,
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
+ DES3_3KEY_SIZE, BYTES_TO_BITS(DES3_3KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
+ 0xCD, PSA_KEY_LIFETIME_PERSISTENT,
+ BYTES_TO_BITS(DES3_3KEY_SIZE), PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_ECDSA
+#ifdef ARCH_TEST_ECC_CURVE_SECP256R1
+{"Test psa_close_key with EC Public key\n", 9,
+ PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+ {0},
+ 65, 256, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY,
+ 0xEF, PSA_KEY_LIFETIME_PERSISTENT,
+ 256, PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION
+#ifdef ARCH_TEST_ECC_CURVE_SECP224R1
+{"Test psa_close_key with EC keypair\n", 10,
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
+ {0},
+ 28, 224, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
+ 0x123, PSA_KEY_LIFETIME_PERSISTENT,
+ 224, PSA_SUCCESS
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c051/test_entry_c051.c b/api-tests/dev_apis/crypto/test_c051/test_entry_c051.c
new file mode 100644
index 0000000..7faa27d
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c051/test_entry_c051.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c051.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 51)
+#define TEST_DESC "Testing crypto key management APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c051_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c052/test.cmake b/api-tests/dev_apis/crypto/test_c052/test.cmake
new file mode 100644
index 0000000..ea2b77f
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c052/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c052.c
+	test_c052.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c052/test_c052.c b/api-tests/dev_apis/crypto/test_c052/test_c052.c
new file mode 100644
index 0000000..8e8df06
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c052/test_c052.c
@@ -0,0 +1,90 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c052.h"
+#include "test_data.h"
+
+client_test_t test_c052_crypto_list[] = {
+    NULL,
+    psa_aead_encrypt_setup_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_aead_encrypt_setup_test(security_t caller)
+{
+    int32_t               i, status;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_aead_operation_t  operation = PSA_AEAD_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Set the key for a multipart authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation,
+                 check1[i].key_handle, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        /* Setting up aead on destroyed key handle should return an error */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation,
+                 check1[i].key_handle, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        /* Abort the AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c052/test_c052.h b/api-tests/dev_apis/crypto/test_c052/test_c052.h
new file mode 100644
index 0000000..20fc744
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c052/test_c052.h
@@ -0,0 +1,31 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C052_CLIENT_TESTS_H_
+#define _TEST_C052_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c052)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c052_crypto_list[];
+
+int32_t psa_aead_encrypt_setup_test(security_t caller);
+
+#endif /* _TEST_C052_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c052/test_data.h b/api-tests/dev_apis/crypto/test_c052/test_data.h
new file mode 100644
index 0000000..efe55f5
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c052/test_data.h
@@ -0,0 +1,88 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[32];
+    uint32_t                key_length;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_algorithm_t         alg;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_encrypt_setup - AES-CCM\n", 1, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_encrypt_setup - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES,
+{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
+ 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM,
+ PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+ PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_GCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_encrypt_setup - GCM - 16B AES - 12B Nounce & 12B addi data\n", 3, PSA_KEY_TYPE_AES,
+{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60,
+ 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM,
+ PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_DES_1KEY
+{"Test psa_aead_encrypt_setup - DES Key\n", 4, PSA_KEY_TYPE_DES,
+{0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, DES_8B_KEY_SIZE,
+ PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+ PSA_ERROR_NOT_SUPPORTED
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_AES_128
+#ifdef ARCH_TEST_CIPER_MODE_CFB
+{"Test psa_aead_encrypt_setup - Unsupported Algorithm\n", 5, PSA_KEY_TYPE_AES,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CFB, PSA_ALG_CFB,
+ PSA_ERROR_NOT_SUPPORTED
+},
+#endif
+
+#ifdef ARCH_TEST_GCM
+{"Test psa_aead_encrypt_setup - Invalid key usage\n", 6, PSA_KEY_TYPE_AES,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_GCM, PSA_ALG_GCM,
+ PSA_ERROR_NOT_PERMITTED
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c052/test_entry_c052.c b/api-tests/dev_apis/crypto/test_c052/test_entry_c052.c
new file mode 100644
index 0000000..9a93bfd
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c052/test_entry_c052.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c052.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 52)
+#define TEST_DESC "Testing crypto AEAD APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c052_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c053/test.cmake b/api-tests/dev_apis/crypto/test_c053/test.cmake
new file mode 100644
index 0000000..661f1d8
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c053/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c053.c
+	test_c053.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c053/test_c053.c b/api-tests/dev_apis/crypto/test_c053/test_c053.c
new file mode 100644
index 0000000..c54b783
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c053/test_c053.c
@@ -0,0 +1,90 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c053.h"
+#include "test_data.h"
+
+client_test_t test_c053_crypto_list[] = {
+    NULL,
+    psa_aead_decrypt_setup_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_aead_decrypt_setup_test(security_t caller)
+{
+    int32_t               i, status;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_aead_operation_t  operation = PSA_AEAD_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Set the key for a multipart authenticated decryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP, &operation,
+                 check1[i].key_handle, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        /* Setting up aead on destroyed key handle should return an error */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP, &operation,
+                 check1[i].key_handle, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        /* Abort the AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c053/test_c053.h b/api-tests/dev_apis/crypto/test_c053/test_c053.h
new file mode 100644
index 0000000..23afbc1
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c053/test_c053.h
@@ -0,0 +1,31 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C053_CLIENT_TESTS_H_
+#define _TEST_C053_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c053)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c053_crypto_list[];
+
+int32_t psa_aead_decrypt_setup_test(security_t caller);
+
+#endif /* _TEST_C053_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c053/test_data.h b/api-tests/dev_apis/crypto/test_c053/test_data.h
new file mode 100644
index 0000000..1dd20fa
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c053/test_data.h
@@ -0,0 +1,88 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[32];
+    uint32_t                key_length;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_algorithm_t         alg;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_decrypt_setup - AES-CCM\n", 1, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_decrypt_setup - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES,
+{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
+ 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM,
+ PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+ PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_GCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_decrypt_setup - GCM - 16B AES - 12B Nounce & 12B addi data\n", 3, PSA_KEY_TYPE_AES,
+{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60,
+ 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_GCM, PSA_ALG_GCM,
+ PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_DES_1KEY
+{"Test psa_aead_decrypt_setup - DES Key\n", 4, PSA_KEY_TYPE_DES,
+{0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, DES_8B_KEY_SIZE,
+ PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+ PSA_ERROR_NOT_SUPPORTED
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_AES_128
+#ifdef ARCH_TEST_CIPER_MODE_CFB
+{"Test psa_aead_decrypt_setup - Unsupported Algorithm\n", 5, PSA_KEY_TYPE_AES,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CFB, PSA_ALG_CFB,
+ PSA_ERROR_NOT_SUPPORTED
+},
+#endif
+
+#ifdef ARCH_TEST_GCM
+{"Test psa_aead_decrypt_setup - Invalid key usage\n", 6, PSA_KEY_TYPE_AES,
+{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
+ 0x5F, 0xC9}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM,
+ PSA_ERROR_NOT_PERMITTED
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c053/test_entry_c053.c b/api-tests/dev_apis/crypto/test_c053/test_entry_c053.c
new file mode 100644
index 0000000..70c9719
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c053/test_entry_c053.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c053.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 53)
+#define TEST_DESC "Testing crypto AEAD APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c053_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c054/test.cmake b/api-tests/dev_apis/crypto/test_c054/test.cmake
new file mode 100644
index 0000000..6dcf140
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c054/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c054.c
+	test_c054.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c054/test_c054.c b/api-tests/dev_apis/crypto/test_c054/test_c054.c
new file mode 100644
index 0000000..c95b207
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c054/test_c054.c
@@ -0,0 +1,127 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c054.h"
+#include "test_data.h"
+
+client_test_t test_c054_crypto_list[] = {
+    NULL,
+    psa_aead_generate_nonce_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_aead_generate_nonce_test(security_t caller)
+{
+    int32_t               i, j, status, nonce_sum;
+    uint8_t               nonce[SIZE_32B];
+    size_t                nonce_length;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_aead_operation_t  operation = PSA_AEAD_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Set the key for a multipart authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation,
+                 check1[i].key_handle, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+
+        /* Generate a random nonce for an authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_GENERATE_NONCE, &operation, nonce,
+                 check1[i].nonce_size, &nonce_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5));
+
+        if (check1[i].expected_status != PSA_SUCCESS)
+        {
+            /* Abort the AEAD operation */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+
+            /* Destroy the key */
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+
+            /* Reset the key attributes */
+            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+            continue;
+        }
+
+        /* Check that if generated iv are non-zero */
+        nonce_sum = 0;
+        for (j = 0; j < nonce_length; j++)
+        {
+            nonce_sum += nonce[j];
+        }
+
+        TEST_ASSERT_NOT_EQUAL(nonce_sum, 0, TEST_CHECKPOINT_NUM(8));
+
+        /* Generate a random nonce on an ongoing operation should be an error */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_GENERATE_NONCE, &operation, nonce,
+                 check1[i].nonce_size, &nonce_length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE,  TEST_CHECKPOINT_NUM(9));
+
+        /* Abort the AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
+
+        /* Reset the key attributes */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        /* Generate a random nonce on an aborted operation should be an error */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_GENERATE_NONCE, &operation, nonce,
+                 check1[i].nonce_size, &nonce_length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE,  TEST_CHECKPOINT_NUM(12));
+
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c054/test_c054.h b/api-tests/dev_apis/crypto/test_c054/test_c054.h
new file mode 100644
index 0000000..11be08b
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c054/test_c054.h
@@ -0,0 +1,31 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C054_CLIENT_TESTS_H_
+#define _TEST_C054_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c054)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c054_crypto_list[];
+
+int32_t psa_aead_generate_nonce_test(security_t caller);
+
+#endif /* _TEST_C054_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c054/test_data.h b/api-tests/dev_apis/crypto/test_c054/test_data.h
new file mode 100644
index 0000000..7fbeb40
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c054/test_data.h
@@ -0,0 +1,68 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[32];
+    uint32_t                key_length;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_algorithm_t         alg;
+    size_t                  nonce_size;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_generate_nonce - AES-CCM\n", 1, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, SIZE_32B,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_generate_nonce - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES,
+{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
+ 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, SIZE_32B,
+ PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_generate_nonce - Small buffer size\n", 3, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, 8,
+ PSA_ERROR_BUFFER_TOO_SMALL
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_GCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_generate_nonce - GCM - 16B AES - 12B Nounce & 12B addi data\n", 4, PSA_KEY_TYPE_AES,
+{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60,
+ 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM, SIZE_32B,
+ PSA_SUCCESS
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c054/test_entry_c054.c b/api-tests/dev_apis/crypto/test_c054/test_entry_c054.c
new file mode 100644
index 0000000..0092c86
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c054/test_entry_c054.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c054.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 54)
+#define TEST_DESC "Testing crypto AEAD APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c054_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c055/test.cmake b/api-tests/dev_apis/crypto/test_c055/test.cmake
new file mode 100644
index 0000000..42bc8e6
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c055/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c055.c
+	test_c055.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c055/test_c055.c b/api-tests/dev_apis/crypto/test_c055/test_c055.c
new file mode 100644
index 0000000..d67a219
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c055/test_c055.c
@@ -0,0 +1,116 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c055.h"
+#include "test_data.h"
+
+client_test_t test_c055_crypto_list[] = {
+    NULL,
+    psa_aead_set_nonce_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_aead_set_nonce_test(security_t caller)
+{
+    int32_t               i, status;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_aead_operation_t  operation = PSA_AEAD_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Set the key for a multipart authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation,
+                 check1[i].key_handle, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+
+        /* Set the nonce for an authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce,
+                 check1[i].nonce_size);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5));
+
+        if (check1[i].expected_status != PSA_SUCCESS)
+        {
+            /* Abort the AEAD operation */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+
+            /* Destroy the key */
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+
+            /* Reset the key attributes */
+            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+            continue;
+        }
+
+        /* Setting the nonce on an ongoing operation should be an error */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce,
+                 check1[i].nonce_size);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE,  TEST_CHECKPOINT_NUM(9));
+
+        /* Abort the AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
+
+        /* Reset the key attributes */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        /* Setting the nonce on an aborted operation should be an error */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce,
+                 check1[i].nonce_size);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE,  TEST_CHECKPOINT_NUM(12));
+
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c055/test_c055.h b/api-tests/dev_apis/crypto/test_c055/test_c055.h
new file mode 100644
index 0000000..fc9c9b8
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c055/test_c055.h
@@ -0,0 +1,31 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C055_CLIENT_TESTS_H_
+#define _TEST_C055_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c055)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c055_crypto_list[];
+
+int32_t psa_aead_set_nonce_test(security_t caller);
+
+#endif /* _TEST_C055_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c055/test_data.h b/api-tests/dev_apis/crypto/test_c055/test_data.h
new file mode 100644
index 0000000..458e70b
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c055/test_data.h
@@ -0,0 +1,86 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[32];
+    uint32_t                key_length;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_algorithm_t         alg;
+    uint8_t                 nonce[32];
+    size_t                  nonce_size;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_set_nonce - AES-CCM\n", 1, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_set_nonce - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES,
+{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
+ 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM,
+ PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_set_nonce - Small nounce size\n", 3, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x00, 0x01, 0x02}, 3,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+
+{"Test psa_aead_set_nonce - Large nonce size\n", 4, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
+ 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F}, 32,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_GCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_set_nonce - GCM - 16B AES - 12B Nounce & 12B addi data\n", 6, PSA_KEY_TYPE_AES,
+{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60,
+ 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM,
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16,
+ PSA_SUCCESS
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c055/test_entry_c055.c b/api-tests/dev_apis/crypto/test_c055/test_entry_c055.c
new file mode 100644
index 0000000..d70ff1a
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c055/test_entry_c055.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c055.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 55)
+#define TEST_DESC "Testing crypto AEAD APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c055_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c056/test.cmake b/api-tests/dev_apis/crypto/test_c056/test.cmake
new file mode 100644
index 0000000..6aa55f5
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c056/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c056.c
+	test_c056.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c056/test_c056.c b/api-tests/dev_apis/crypto/test_c056/test_c056.c
new file mode 100644
index 0000000..c4356c6
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c056/test_c056.c
@@ -0,0 +1,121 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c056.h"
+#include "test_data.h"
+
+client_test_t test_c056_crypto_list[] = {
+    NULL,
+    psa_aead_set_lengths_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_aead_set_lengths_test(security_t caller)
+{
+    int32_t               i, status;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_aead_operation_t  operation = PSA_AEAD_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Set the key for a multipart authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation,
+                 check1[i].key_handle, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+
+        /* Set the nonce for an authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce,
+                 check1[i].nonce_size);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        /* Declare the lengths of the message and additional data for AEAD */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation, check1[i].ad_length,
+                 check1[i].plaintext_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
+
+        if (check1[i].expected_status != PSA_SUCCESS)
+        {
+            /* Declare the lengths of failed operation should be an error */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation,
+                     check1[i].ad_length, check1[i].plaintext_length);
+            TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(7));
+
+            /* Abort the AEAD operation */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+
+            /* Destroy the key */
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+
+            /* Reset the key attributes */
+            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+            continue;
+        }
+
+        /* Abort the AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
+
+        /* Reset the key attributes */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        /* Declare the lengths of an aborted operation should be an error */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation, check1[i].ad_length,
+                 check1[i].plaintext_length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(12));
+
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c056/test_c056.h b/api-tests/dev_apis/crypto/test_c056/test_c056.h
new file mode 100644
index 0000000..ed57bdc
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c056/test_c056.h
@@ -0,0 +1,31 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C056_CLIENT_TESTS_H_
+#define _TEST_C056_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c056)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c056_crypto_list[];
+
+int32_t psa_aead_set_lengths_test(security_t caller);
+
+#endif /* _TEST_C056_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c056/test_data.h b/api-tests/dev_apis/crypto/test_c056/test_data.h
new file mode 100644
index 0000000..8022ea9
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c056/test_data.h
@@ -0,0 +1,97 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[32];
+    uint32_t                key_length;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_algorithm_t         alg;
+    uint8_t                 nonce[32];
+    size_t                  nonce_size;
+    size_t                  ad_length;
+    size_t                  plaintext_length;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_set_lengths - AES-CCM\n", 1, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 8, 32,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_set_lengths - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES,
+{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
+ 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM,
+ PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 8, 32,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_set_lengths - Zero ad size\n", 3, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 0, 32,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+
+{"Test psa_aead_set_lengths - Zero plaintext size\n", 4, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 8, 0,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+
+{"Test psa_aead_set_lengths - Invalid lengths\n", 5, PSA_KEY_TYPE_AES,
+{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
+ 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM,
+ PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 1, 1,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_GCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_set_lengths - Vey large lengths\n", 6, PSA_KEY_TYPE_AES,
+{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60,
+ 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM,
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 1000, 1000,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c056/test_entry_c056.c b/api-tests/dev_apis/crypto/test_c056/test_entry_c056.c
new file mode 100644
index 0000000..7085f47
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c056/test_entry_c056.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c056.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 56)
+#define TEST_DESC "Testing crypto AEAD APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c056_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c057/test.cmake b/api-tests/dev_apis/crypto/test_c057/test.cmake
new file mode 100644
index 0000000..1458e52
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c057/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c057.c
+	test_c057.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c057/test_c057.c b/api-tests/dev_apis/crypto/test_c057/test_c057.c
new file mode 100644
index 0000000..81cd91d
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c057/test_c057.c
@@ -0,0 +1,126 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c057.h"
+#include "test_data.h"
+
+client_test_t test_c057_crypto_list[] = {
+    NULL,
+    psa_aead_update_ad_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_aead_update_ad_test(security_t caller)
+{
+    int32_t               i, status;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_aead_operation_t  operation = PSA_AEAD_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Set the key for a multipart authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation,
+                 check1[i].key_handle, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+
+        /* Set the nonce for an authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce,
+                 check1[i].nonce_size);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        /* Declare the lengths of the message and additional data for AEAD */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation, check1[i].ad_length,
+                 check1[i].plaintext_length);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+
+        /* Pass additional data to an active AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD, &operation,
+                 check1[i].additional_data, check1[i].ad_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7));
+
+        if (check1[i].expected_status != PSA_SUCCESS)
+        {
+            /* Pass additional data to an inactive AEAD operation should fail */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD, &operation,
+                     check1[i].additional_data, check1[i].ad_length);
+            TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(8));
+
+            /* Abort the AEAD operation */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
+
+            /* Destroy the key */
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+
+            /* Reset the key attributes */
+            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+            continue;
+        }
+
+        /* Abort the AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
+
+        /* Reset the key attributes */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        /* Pass additional data to an inactive AEAD operation should fail */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD, &operation,
+                 check1[i].additional_data, check1[i].ad_length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(13));
+
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c057/test_c057.h b/api-tests/dev_apis/crypto/test_c057/test_c057.h
new file mode 100644
index 0000000..7a26ad9
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c057/test_c057.h
@@ -0,0 +1,31 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C057_CLIENT_TESTS_H_
+#define _TEST_C057_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c057)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c057_crypto_list[];
+
+int32_t psa_aead_update_ad_test(security_t caller);
+
+#endif /* _TEST_C057_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c057/test_data.h b/api-tests/dev_apis/crypto/test_c057/test_data.h
new file mode 100644
index 0000000..68bb98c
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c057/test_data.h
@@ -0,0 +1,104 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[32];
+    uint32_t                key_length;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_algorithm_t         alg;
+    uint8_t                 additional_data[32];
+    uint8_t                 nonce[32];
+    size_t                  nonce_size;
+    size_t                  ad_length;
+    size_t                  plaintext_length;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_update_ad - AES-CCM\n", 1, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 32,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_update_ad - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES,
+{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
+ 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM,
+ PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 32,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_update_ad - Zero ad size\n", 3, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 0, 32,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+
+{"Test psa_aead_update_ad - Zero plaintext size\n", 4, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x0B, 0xE1, 0xA8, 0x8B, 0xAC, 0xE0, 0x18, 0xB1},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 8, 0,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+
+{"Test psa_aead_update_ad - Invalid lengths\n", 5, PSA_KEY_TYPE_AES,
+{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
+ 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM,
+ PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+{0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 1, 1,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_GCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_update_ad - Vey large lengths\n", 6, PSA_KEY_TYPE_AES,
+{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60,
+ 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM,
+{0x10},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 1000, 1000,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c057/test_entry_c057.c b/api-tests/dev_apis/crypto/test_c057/test_entry_c057.c
new file mode 100644
index 0000000..50d33f7
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c057/test_entry_c057.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c057.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 57)
+#define TEST_DESC "Testing crypto AEAD APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c057_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c058/test.cmake b/api-tests/dev_apis/crypto/test_c058/test.cmake
new file mode 100644
index 0000000..fc3c86d
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c058/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c058.c
+	test_c058.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c058/test_c058.c b/api-tests/dev_apis/crypto/test_c058/test_c058.c
new file mode 100644
index 0000000..5ab48c9
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c058/test_c058.c
@@ -0,0 +1,140 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c058.h"
+#include "test_data.h"
+
+client_test_t test_c058_crypto_list[] = {
+    NULL,
+    psa_aead_update_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_aead_update_test(security_t caller)
+{
+    int32_t               i, status;
+    uint8_t               output[BUFFER_SIZE];
+    size_t                length;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_aead_operation_t  operation = PSA_AEAD_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Set the key for a multipart authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation,
+                 check1[i].key_handle, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+
+        /* Set the nonce for an authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce,
+                 check1[i].nonce_size);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        /* Declare the lengths of the message and additional data for AEAD */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation, check1[i].ad_length,
+                 check1[i].input_length);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+
+        /* Pass additional data to an active AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD, &operation,
+                 check1[i].additional_data, check1[i].ad_length);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+
+        /* Encrypt or decrypt a message fragment in an active AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE, &operation,
+                 check1[i].plaintext_length,  check1[i].plaintext, output,
+                 check1[i].output_size, &length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8));
+
+        if (check1[i].expected_status != PSA_SUCCESS)
+        {
+            /* Encrypt or decrypt a message fragment in an inactive AEAD operation should fail */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE, &operation,
+                     check1[i].plaintext_length, check1[i].plaintext, output,
+                     check1[i].output_size, &length);
+            TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9));
+
+            /* Abort the AEAD operation */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+
+            /* Destroy the key */
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
+
+            /* Reset the key attributes */
+            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+            continue;
+        }
+
+        /* Compare the output and its length with the expected values */
+        TEST_ASSERT_EQUAL(length, check1[i].expected_length, TEST_CHECKPOINT_NUM(12));
+        TEST_ASSERT_MEMCMP(output, check1[i].expected_output, length, TEST_CHECKPOINT_NUM(13));
+
+        /* Abort the AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15));
+
+        /* Reset the key attributes */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        /* Encrypt or decrypt a message fragment in an inactive AEAD operation should fail */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE, &operation,
+                 check1[i].plaintext_length, check1[i].plaintext, output,
+                 check1[i].output_size, &length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(16));
+
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c058/test_c058.h b/api-tests/dev_apis/crypto/test_c058/test_c058.h
new file mode 100644
index 0000000..13f7b83
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c058/test_c058.h
@@ -0,0 +1,31 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C058_CLIENT_TESTS_H_
+#define _TEST_C058_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c058)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c058_crypto_list[];
+
+int32_t psa_aead_update_test(security_t caller);
+
+#endif /* _TEST_C058_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c058/test_data.h b/api-tests/dev_apis/crypto/test_c058/test_data.h
new file mode 100644
index 0000000..bdae86a
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c058/test_data.h
@@ -0,0 +1,132 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[32];
+    uint32_t                key_length;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_algorithm_t         alg;
+    uint8_t                 plaintext[30];
+    uint8_t                 additional_data[32];
+    uint8_t                 nonce[32];
+    size_t                  nonce_size;
+    size_t                  ad_length;
+    size_t                  plaintext_length;
+    size_t                  input_length;
+    size_t                  output_size;
+    size_t                  expected_output[45];
+    size_t                  expected_length;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_update - AES-CCM\n", 1, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8,
+ 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef},
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, BUFFER_SIZE,
+{0x26, 0xc5, 0x69, 0x61, 0xc0, 0x35, 0xa7, 0xe4, 0x52, 0xcc, 0xe6, 0x1b, 0xc6,
+ 0xee, 0x22, 0x0d, 0x77, 0xb3, 0xf9, 0x4d, 0x18, 0xfd, 0x10, 0xb6, 0xd8, 0x0e,
+ 0x8b, 0xf8, 0x0f, 0x4a, 0x46, 0xca, 0xb0, 0x6d, 0x43, 0x13, 0xf0, 0xdb, 0x9b,
+ 0xe9}, 40,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_update - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES,
+{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
+ 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM,
+ PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8,
+ 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef},
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, BUFFER_SIZE,
+{0x26, 0xc5, 0x69, 0x61, 0xc0, 0x35, 0xa7, 0xe4, 0x52, 0xcc, 0xe6, 0x1b, 0xc6,
+ 0xee, 0x22, 0x0d, 0x77, 0xb3, 0xf9, 0x4d, 0x18, 0xfd, 0x10, 0xb6, 0x64, 0x3b,
+ 0x4f, 0x39}, 28,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_update - Zero plaintext size\n", 3, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0},
+{0x0B, 0xE1, 0xA8, 0x8B, 0xAC, 0xE0, 0x18, 0xB1},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 8, 0, 0, BUFFER_SIZE, {0}, 0,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+
+{"Test psa_aead_update - Small buffer size\n", 4, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8,
+ 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef},
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, 10, {0}, 0,
+ PSA_ERROR_BUFFER_TOO_SMALL
+},
+
+{"Test psa_aead_update - Input length overflows plaintext length\n", 5, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8,
+ 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef},
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 24, 10, BUFFER_SIZE, {0}, 0,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_GCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_update - GCM - 16B AES - 12B Nounce & 12B addi data\n", 6, PSA_KEY_TYPE_AES,
+{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60,
+ 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM,
+{0x45, 0x00, 0x00, 0x1c, 0x42, 0xa2, 0x00, 0x00, 0x80, 0x01, 0x44, 0x1f, 0x40,
+ 0x67, 0x93, 0xb6, 0xe0, 0x00, 0x00, 0x02, 0x0a, 0x00, 0xf5, 0xff, 0x01, 0x02,
+ 0x02, 0x01},
+{0x42, 0xf6, 0x7e, 0x3f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x57, 0x69, 0x0e, 0x43, 0x4e, 0x28, 0x00, 0x00, 0xa2, 0xfc, 0xa1, 0xa3},
+ 12, 12, 28, 28, BUFFER_SIZE,
+{0xFB, 0xA2, 0xCA, 0x84, 0x5E, 0x5D, 0xF9, 0xF0, 0xF2, 0x2C, 0x3E, 0x6E, 0x86,
+ 0xDD, 0x83, 0x1E, 0x1F, 0xC6, 0x57, 0x92, 0xCD, 0x1A, 0xF9, 0x13, 0x0E, 0x13,
+ 0x79, 0xED, 0x36, 0x9F, 0x07, 0x1F, 0x35, 0xE0, 0x34, 0xBE, 0x95, 0xF1, 0x12,
+ 0xE4, 0xE7, 0xD0, 0x5D, 0x35}, 44,
+ PSA_SUCCESS
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c058/test_entry_c058.c b/api-tests/dev_apis/crypto/test_c058/test_entry_c058.c
new file mode 100644
index 0000000..ba70861
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c058/test_entry_c058.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c058.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 58)
+#define TEST_DESC "Testing crypto AEAD APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c058_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c059/test.cmake b/api-tests/dev_apis/crypto/test_c059/test.cmake
new file mode 100644
index 0000000..8bd61d7
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c059/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c059.c
+	test_c059.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c059/test_c059.c b/api-tests/dev_apis/crypto/test_c059/test_c059.c
new file mode 100644
index 0000000..5fb910f
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c059/test_c059.c
@@ -0,0 +1,145 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c059.h"
+#include "test_data.h"
+
+client_test_t test_c059_crypto_list[] = {
+    NULL,
+    psa_aead_finish_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_aead_finish_test(security_t caller)
+{
+    int32_t               i, status;
+    uint8_t               output[BUFFER_SIZE], tag[SIZE_128B];
+    size_t                length,  tag_length;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_aead_operation_t  operation = PSA_AEAD_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Set the key for a multipart authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation,
+                 check1[i].key_handle, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+
+        /* Set the nonce for an authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce,
+                 check1[i].nonce_size);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        /* Declare the lengths of the message and additional data for AEAD */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation, check1[i].ad_length,
+                 check1[i].input_length);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+
+        /* Pass additional data to an active AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD, &operation,
+                 check1[i].additional_data, check1[i].ad_length);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+
+        /* Encrypt or decrypt a message fragment in an active AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE, &operation,
+                 check1[i].plaintext_length, check1[i].plaintext, output,
+                 BUFFER_SIZE, &length);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+
+        /* Finish encrypting a message in an AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_FINISH, &operation, output,
+                 check1[i].output_size, &length, tag, check1[i].tag_size, &tag_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9));
+
+        if (check1[i].expected_status != PSA_SUCCESS)
+        {
+            /* Finish encrypting a message with an inactive operator should fail */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_FINISH, &operation, output,
+                 check1[i].output_size, &length, tag, check1[i].tag_size, &tag_length);
+            TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(10));
+
+            /* Abort the AEAD operation */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
+
+            /* Destroy the key */
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
+
+            /* Reset the key attributes */
+            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+            continue;
+        }
+
+        /* Compare the output and its length with the expected values */
+        TEST_ASSERT_EQUAL(length, check1[i].expected_length, TEST_CHECKPOINT_NUM(13));
+        TEST_ASSERT_MEMCMP(output, check1[i].expected_output, length, TEST_CHECKPOINT_NUM(14));
+        TEST_ASSERT_EQUAL(tag_length, check1[i].expected_tag_length, TEST_CHECKPOINT_NUM(15));
+        TEST_ASSERT_MEMCMP(tag, check1[i].expected_tag, tag_length, TEST_CHECKPOINT_NUM(16));
+
+        /* Abort the AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(17));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(18));
+
+        /* Reset the key attributes */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        /* Finish encrypting a message with an inactive operator should fail */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_FINISH, &operation, output,
+                 check1[i].output_size, &length, tag, check1[i].tag_size, &tag_length);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(19));
+
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c059/test_c059.h b/api-tests/dev_apis/crypto/test_c059/test_c059.h
new file mode 100644
index 0000000..bc4dea7
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c059/test_c059.h
@@ -0,0 +1,31 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C059_CLIENT_TESTS_H_
+#define _TEST_C059_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c059)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c059_crypto_list[];
+
+int32_t psa_aead_finish_test(security_t caller);
+
+#endif /* _TEST_C059_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c059/test_data.h b/api-tests/dev_apis/crypto/test_c059/test_data.h
new file mode 100644
index 0000000..9ea4b0e
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c059/test_data.h
@@ -0,0 +1,124 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[32];
+    uint32_t                key_length;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_algorithm_t         alg;
+    uint8_t                 plaintext[30];
+    uint8_t                 additional_data[32];
+    uint8_t                 nonce[32];
+    size_t                  nonce_size;
+    size_t                  ad_length;
+    size_t                  plaintext_length;
+    size_t                  input_length;
+    size_t                  output_size;
+    size_t                  expected_output[45];
+    size_t                  expected_length;
+    size_t                  tag_size;
+    size_t                  expected_tag[64];
+    size_t                  expected_tag_length;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_finish - AES-CCM\n", 1, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8,
+ 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef},
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, BUFFER_SIZE,
+{0x26, 0xc5, 0x69, 0x61, 0xc0, 0x35, 0xa7, 0xe4, 0x52, 0xcc, 0xe6, 0x1b, 0xc6,
+ 0xee, 0x22, 0x0d, 0x77, 0xb3, 0xf9, 0x4d, 0x18, 0xfd, 0x10, 0xb6, 0xd8, 0x0e,
+ 0x8b, 0xf8, 0x0f, 0x4a, 0x46, 0xca, 0xb0, 0x6d, 0x43, 0x13, 0xf0, 0xdb, 0x9b,
+ 0xe9}, 40, SIZE_32B, {0}, 0,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_finish - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES,
+{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
+ 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM,
+ PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8,
+ 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef},
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, BUFFER_SIZE,
+{0x26, 0xc5, 0x69, 0x61, 0xc0, 0x35, 0xa7, 0xe4, 0x52, 0xcc, 0xe6, 0x1b, 0xc6,
+ 0xee, 0x22, 0x0d, 0x77, 0xb3, 0xf9, 0x4d, 0x18, 0xfd, 0x10, 0xb6, 0x64, 0x3b,
+ 0x4f, 0x39}, 28, SIZE_32B, {0}, 0,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_finish - Small buffer size\n", 4, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8,
+ 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef},
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, 10, {0}, 0, SIZE_32B, {0}, 0,
+ PSA_ERROR_BUFFER_TOO_SMALL
+},
+
+{"Test psa_aead_finish - Input length is less than plaintext length\n", 5, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8,
+ 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef},
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 24, 30, BUFFER_SIZE, {0}, 0,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_GCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_finish - GCM - 16B AES - 12B Nounce & 12B addi data\n", 6, PSA_KEY_TYPE_AES,
+{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60,
+ 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM,
+{0x45, 0x00, 0x00, 0x1c, 0x42, 0xa2, 0x00, 0x00, 0x80, 0x01, 0x44, 0x1f, 0x40,
+ 0x67, 0x93, 0xb6, 0xe0, 0x00, 0x00, 0x02, 0x0a, 0x00, 0xf5, 0xff, 0x01, 0x02,
+ 0x02, 0x01},
+{0x42, 0xf6, 0x7e, 0x3f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x57, 0x69, 0x0e, 0x43, 0x4e, 0x28, 0x00, 0x00, 0xa2, 0xfc, 0xa1, 0xa3},
+ 12, 12, 28, 28, BUFFER_SIZE,
+{0xFB, 0xA2, 0xCA, 0x84, 0x5E, 0x5D, 0xF9, 0xF0, 0xF2, 0x2C, 0x3E, 0x6E, 0x86,
+ 0xDD, 0x83, 0x1E, 0x1F, 0xC6, 0x57, 0x92, 0xCD, 0x1A, 0xF9, 0x13, 0x0E, 0x13,
+ 0x79, 0xED, 0x36, 0x9F, 0x07, 0x1F, 0x35, 0xE0, 0x34, 0xBE, 0x95, 0xF1, 0x12,
+ 0xE4, 0xE7, 0xD0, 0x5D, 0x35}, 44,
+ PSA_SUCCESS
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c059/test_entry_c059.c b/api-tests/dev_apis/crypto/test_c059/test_entry_c059.c
new file mode 100644
index 0000000..6fe4802
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c059/test_entry_c059.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c059.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 59)
+#define TEST_DESC "Testing crypto AEAD APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c059_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c060/test.cmake b/api-tests/dev_apis/crypto/test_c060/test.cmake
new file mode 100644
index 0000000..37ad289
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c060/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c060.c
+	test_c060.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c060/test_c060.c b/api-tests/dev_apis/crypto/test_c060/test_c060.c
new file mode 100644
index 0000000..354f3b8
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c060/test_c060.c
@@ -0,0 +1,111 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c060.h"
+#include "test_data.h"
+
+client_test_t test_c060_crypto_list[] = {
+    NULL,
+    psa_aead_abort_test,
+    psa_aead_abort_init_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_aead_abort_test(security_t caller)
+{
+    int32_t               i, status;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_aead_operation_t  operation = PSA_AEAD_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Set the key for a multipart authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation,
+                 check1[i].key_handle, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        /* Abort the AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
+
+int32_t psa_aead_abort_init_test(security_t caller)
+{
+    int32_t               i, status;
+    psa_aead_operation_t  operation[] = {PSA_AEAD_OPERATION_INIT, psa_aead_operation_init(), {0} };
+    uint32_t              operation_count = sizeof(operation)/sizeof(operation[0]);
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+    val->print(PRINT_TEST, "Test psa_aead_abort with all initializations\n", 0);
+
+    for (i = 0; i < operation_count; i++)
+    {
+        /* Abort the AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation[i]);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(2));
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
+
+
diff --git a/api-tests/dev_apis/crypto/test_c060/test_c060.h b/api-tests/dev_apis/crypto/test_c060/test_c060.h
new file mode 100644
index 0000000..856e188
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c060/test_c060.h
@@ -0,0 +1,32 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C060_CLIENT_TESTS_H_
+#define _TEST_C060_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c060)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c060_crypto_list[];
+
+int32_t psa_aead_abort_test(security_t caller);
+int32_t psa_aead_abort_init_test(security_t caller);
+
+#endif /* _TEST_C060_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c060/test_data.h b/api-tests/dev_apis/crypto/test_c060/test_data.h
new file mode 100644
index 0000000..fcdef1f
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c060/test_data.h
@@ -0,0 +1,60 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[32];
+    uint32_t                key_length;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_algorithm_t         alg;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_abort - AES-CCM\n", 1, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_abort - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES,
+{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
+ 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM,
+ PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+ PSA_SUCCESS
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_GCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_abort - GCM - 16B AES - 12B Nounce & 12B addi data\n", 3, PSA_KEY_TYPE_AES,
+{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60,
+ 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM,
+ PSA_SUCCESS
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c060/test_entry_c060.c b/api-tests/dev_apis/crypto/test_c060/test_entry_c060.c
new file mode 100644
index 0000000..2f7e4c1
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c060/test_entry_c060.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c060.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 60)
+#define TEST_DESC "Testing crypto AEAD APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c060_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/test_c061/test.cmake b/api-tests/dev_apis/crypto/test_c061/test.cmake
new file mode 100644
index 0000000..5a24243
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c061/test.cmake
@@ -0,0 +1,24 @@
+#/** @file
+# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+# * SPDX-License-Identifier : Apache-2.0
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *  http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+#**/
+
+list(APPEND CC_SOURCE
+	test_entry_c061.c
+	test_c061.c
+)
+list(APPEND CC_OPTIONS )
+list(APPEND AS_SOURCE  )
+list(APPEND AS_OPTIONS )
diff --git a/api-tests/dev_apis/crypto/test_c061/test_c061.c b/api-tests/dev_apis/crypto/test_c061/test_c061.c
new file mode 100644
index 0000000..9becfed
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c061/test_c061.c
@@ -0,0 +1,145 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c061.h"
+#include "test_data.h"
+
+client_test_t test_c061_crypto_list[] = {
+    NULL,
+    psa_aead_verify_test,
+    NULL,
+};
+
+static int g_test_count = 1;
+
+int32_t psa_aead_verify_test(security_t caller)
+{
+    int32_t               i, status;
+    uint8_t               output[BUFFER_SIZE], tag[SIZE_128B];
+    size_t                length;
+    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_aead_operation_t  operation = PSA_AEAD_OPERATION_INIT;
+
+    if (num_checks == 0)
+    {
+        val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0);
+        return RESULT_SKIP(VAL_STATUS_NO_TESTS);
+    }
+
+    /* Initialize the PSA crypto library*/
+    status = val->crypto_function(VAL_CRYPTO_INIT);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
+
+    for (i = 0; i < num_checks; i++)
+    {
+        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, check1[i].test_desc, 0);
+
+        /* Setting up the watchdog timer for each check */
+        status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
+
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data,
+                 check1[i].key_length, &check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Set the key for a multipart authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP, &operation,
+                 check1[i].key_handle, check1[i].alg);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+
+        /* Set the nonce for an authenticated encryption operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce,
+                 check1[i].nonce_size);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+        /* Declare the lengths of the message and additional data for AEAD */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation, check1[i].ad_length,
+                 check1[i].input_length);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+
+        /* Pass additional data to an active AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD, &operation,
+                 check1[i].additional_data, check1[i].ad_length);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+
+        /* Encrypt or decrypt a message fragment in an active AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE, &operation,
+                 check1[i].plaintext_length, check1[i].plaintext, output,
+                 BUFFER_SIZE, &length);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
+
+        /* Finish authenticating and decrypting a message in an AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_VERIFY, &operation, output,
+                 check1[i].output_size, &length, tag, check1[i].tag_size);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9));
+
+        if (check1[i].expected_status != PSA_SUCCESS)
+        {
+            /* Finish authenticating and decrypting a msg with an inactive operator should fail */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_VERIFY, &operation, output,
+                     check1[i].output_size, &length, tag, check1[i].tag_size);
+            TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(10));
+
+            /* Abort the AEAD operation */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
+
+            /* Destroy the key */
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
+
+            /* Reset the key attributes */
+            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+            continue;
+        }
+
+        /* Compare the output and its length with the expected values */
+        TEST_ASSERT_EQUAL(length, check1[i].expected_length, TEST_CHECKPOINT_NUM(13));
+        TEST_ASSERT_MEMCMP(output, check1[i].expected_output, length, TEST_CHECKPOINT_NUM(14));
+        TEST_ASSERT_MEMCMP(tag, check1[i].expected_tag, check1[i].expected_tag_length,
+        TEST_CHECKPOINT_NUM(15));
+
+        /* Abort the AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16));
+
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(17));
+
+        /* Reset the key attributes */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+
+        /* Finish authenticating and decrypting a message with an inactive operator should fail */
+         status = val->crypto_function(VAL_CRYPTO_AEAD_VERIFY, &operation, output,
+                  check1[i].output_size, &length, tag, check1[i].tag_size);
+        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(18));
+
+    }
+
+    return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/dev_apis/crypto/test_c061/test_c061.h b/api-tests/dev_apis/crypto/test_c061/test_c061.h
new file mode 100644
index 0000000..7b52a25
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c061/test_c061.h
@@ -0,0 +1,31 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+#ifndef _TEST_C061_CLIENT_TESTS_H_
+#define _TEST_C061_CLIENT_TESTS_H_
+
+#include "val_crypto.h"
+#define test_entry CONCAT(test_entry_, c061)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
+
+extern val_api_t *val;
+extern psa_api_t *psa;
+extern client_test_t test_c061_crypto_list[];
+
+int32_t psa_aead_verify_test(security_t caller);
+
+#endif /* _TEST_C061_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c061/test_data.h b/api-tests/dev_apis/crypto/test_c061/test_data.h
new file mode 100644
index 0000000..af8e261
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c061/test_data.h
@@ -0,0 +1,124 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_crypto.h"
+
+typedef struct {
+    char                    test_desc[75];
+    psa_key_handle_t        key_handle;
+    psa_key_type_t          key_type;
+    uint8_t                 key_data[32];
+    uint32_t                key_length;
+    psa_key_usage_t         usage;
+    psa_algorithm_t         key_alg;
+    psa_algorithm_t         alg;
+    uint8_t                 plaintext[30];
+    uint8_t                 additional_data[32];
+    uint8_t                 nonce[32];
+    size_t                  nonce_size;
+    size_t                  ad_length;
+    size_t                  plaintext_length;
+    size_t                  input_length;
+    size_t                  output_size;
+    size_t                  expected_output[45];
+    size_t                  expected_length;
+    size_t                  tag_size;
+    size_t                  expected_tag[64];
+    size_t                  expected_tag_length;
+    psa_status_t            expected_status;
+} test_data;
+
+static test_data check1[] = {
+#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_verify - AES-CCM\n", 1, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8,
+ 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef},
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, BUFFER_SIZE,
+{0x26, 0xc5, 0x69, 0x61, 0xc0, 0x35, 0xa7, 0xe4, 0x52, 0xcc, 0xe6, 0x1b, 0xc6,
+ 0xee, 0x22, 0x0d, 0x77, 0xb3, 0xf9, 0x4d, 0x18, 0xfd, 0x10, 0xb6, 0xd8, 0x0e,
+ 0x8b, 0xf8, 0x0f, 0x4a, 0x46, 0xca, 0xb0, 0x6d, 0x43, 0x13, 0xf0, 0xdb, 0x9b,
+ 0xe9}, 40, SIZE_32B, {0}, 0,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_verify - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES,
+{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6,
+ 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM,
+ PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8,
+ 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef},
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, BUFFER_SIZE,
+{0x26, 0xc5, 0x69, 0x61, 0xc0, 0x35, 0xa7, 0xe4, 0x52, 0xcc, 0xe6, 0x1b, 0xc6,
+ 0xee, 0x22, 0x0d, 0x77, 0xb3, 0xf9, 0x4d, 0x18, 0xfd, 0x10, 0xb6, 0x64, 0x3b,
+ 0x4f, 0x39}, 28, SIZE_32B, {0}, 0,
+ PSA_SUCCESS
+},
+
+{"Test psa_aead_verify - Small buffer size\n", 4, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8,
+ 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef},
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, 10, {0}, 0, SIZE_32B, {0}, 0,
+ PSA_ERROR_BUFFER_TOO_SMALL
+},
+
+{"Test psa_aead_verify - Input length is less than plaintext length\n", 5, PSA_KEY_TYPE_AES,
+{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF,
+ 0x93, 0xCC, 0x6B},
+ AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, PSA_ALG_CCM,
+{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8,
+ 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef},
+{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
+{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F}, 16, 13, 24, 30, BUFFER_SIZE, {0}, 0,
+ PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+#endif
+
+#ifdef ARCH_TEST_GCM
+#ifdef ARCH_TEST_AES_128
+{"Test psa_aead_verify - GCM - 16B AES - 12B Nounce & 12B addi data\n", 6, PSA_KEY_TYPE_AES,
+{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60,
+ 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_GCM, PSA_ALG_GCM,
+{0x45, 0x00, 0x00, 0x1c, 0x42, 0xa2, 0x00, 0x00, 0x80, 0x01, 0x44, 0x1f, 0x40,
+ 0x67, 0x93, 0xb6, 0xe0, 0x00, 0x00, 0x02, 0x0a, 0x00, 0xf5, 0xff, 0x01, 0x02,
+ 0x02, 0x01},
+{0x42, 0xf6, 0x7e, 0x3f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x57, 0x69, 0x0e, 0x43, 0x4e, 0x28, 0x00, 0x00, 0xa2, 0xfc, 0xa1, 0xa3},
+ 12, 12, 28, 28, BUFFER_SIZE,
+{0xFB, 0xA2, 0xCA, 0x84, 0x5E, 0x5D, 0xF9, 0xF0, 0xF2, 0x2C, 0x3E, 0x6E, 0x86,
+ 0xDD, 0x83, 0x1E, 0x1F, 0xC6, 0x57, 0x92, 0xCD, 0x1A, 0xF9, 0x13, 0x0E, 0x13,
+ 0x79, 0xED, 0x36, 0x9F, 0x07, 0x1F, 0x35, 0xE0, 0x34, 0xBE, 0x95, 0xF1, 0x12,
+ 0xE4, 0xE7, 0xD0, 0x5D, 0x35}, 44,
+ PSA_SUCCESS
+},
+#endif
+#endif
+};
diff --git a/api-tests/dev_apis/crypto/test_c061/test_entry_c061.c b/api-tests/dev_apis/crypto/test_c061/test_entry_c061.c
new file mode 100644
index 0000000..4bc7d58
--- /dev/null
+++ b/api-tests/dev_apis/crypto/test_c061/test_entry_c061.c
@@ -0,0 +1,54 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_interfaces.h"
+#include "val_target.h"
+#include "test_c061.h"
+
+#define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 61)
+#define TEST_DESC "Testing crypto AEAD APIs\n"
+
+TEST_PUBLISH(TEST_NUM, test_entry);
+val_api_t *val = NULL;
+psa_api_t *psa = NULL;
+
+void test_entry(val_api_t *val_api, psa_api_t *psa_api)
+{
+    int32_t   status = VAL_STATUS_SUCCESS;
+
+    val = val_api;
+    psa = psa_api;
+
+    /* test init */
+    val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+    if (!IS_TEST_START(val->get_status()))
+    {
+        goto test_exit;
+    }
+
+    /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/
+    status = val->execute_non_secure_tests(TEST_NUM, test_c061_crypto_list, FALSE);
+
+    if (VAL_ERROR(status))
+    {
+        goto test_exit;
+    }
+
+test_exit:
+    val->crypto_function(VAL_CRYPTO_FREE);
+    val->test_exit();
+}
diff --git a/api-tests/dev_apis/crypto/testsuite.db b/api-tests/dev_apis/crypto/testsuite.db
index ebe6839..e857a3e 100644
--- a/api-tests/dev_apis/crypto/testsuite.db
+++ b/api-tests/dev_apis/crypto/testsuite.db
@@ -64,5 +64,22 @@
 test_c042
 test_c043
 test_c044
+test_c045
+test_c046
+test_c047
+test_c048
+test_c049
+test_c050
+test_c051
+test_c052
+test_c053
+test_c054
+test_c055
+test_c056
+test_c057
+test_c058
+test_c059
+test_c060
+test_c061
 
 (END)
diff --git a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c
index 1f6276d..222cd67 100644
--- a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c
+++ b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c
@@ -32,7 +32,9 @@
 int32_t psa_initial_attestation_get_token_test(security_t caller)
 {
     int         num_checks = sizeof(check1)/sizeof(check1[0]);
-    uint32_t    i, status, token_size;
+    uint32_t    i;
+    int32_t     status;
+    size_t      token_buffer_size, token_size;
     uint8_t     challenge[PSA_INITIAL_ATTEST_CHALLENGE_SIZE_64+1];
     uint8_t     token_buffer[TOKEN_SIZE];
 
@@ -45,14 +47,14 @@
         memset(token_buffer, 0, sizeof(token_buffer));
 
         status = val->attestation_function(VAL_INITIAL_ATTEST_GET_TOKEN_SIZE,
-                     check1[i].challenge_size, &token_size);
+                     check1[i].challenge_size, &token_buffer_size);
         if (status != PSA_SUCCESS)
         {
             if (check1[i].challenge_size != PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32 ||
                 check1[i].challenge_size != PSA_INITIAL_ATTEST_CHALLENGE_SIZE_48 ||
                 check1[i].challenge_size != PSA_INITIAL_ATTEST_CHALLENGE_SIZE_64)
             {
-                token_size = check1[i].token_size;
+                token_buffer_size = check1[i].token_size;
                 check1[i].challenge_size = check1[i].actual_challenge_size;
             }
             else
@@ -60,7 +62,7 @@
         }
 
         status = val->attestation_function(VAL_INITIAL_ATTEST_GET_TOKEN, challenge,
-                     check1[i].challenge_size, token_buffer, &token_size);
+                     check1[i].challenge_size, token_buffer, token_buffer_size, &token_size);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(1));
 
         if (check1[i].expected_status != PSA_SUCCESS)
@@ -78,7 +80,9 @@
 int32_t psa_initial_attestation_get_token_size_test(security_t caller)
 {
     int         num_checks = sizeof(check2)/sizeof(check2[0]);
-    uint32_t    i, status, token_size;
+    uint32_t    i;
+    int32_t     status;
+    size_t      token_size;
 
     for (i = 0; i < num_checks; i++)
     {
diff --git a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.h b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.h
index f4e7024..29aae08 100644
--- a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.h
+++ b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.h
@@ -18,9 +18,9 @@
 #define _TEST_A001_CLIENT_TESTS_H_
 
 #include "val_attestation.h"
-#define test_entry CONCAT(test_entry_, a001)
-#define val CONCAT(val,test_entry)
-#define psa CONCAT(psa,test_entry)
+#define test_entry CONCAT(test_entry_,  a001)
+#define val CONCAT(val, test_entry)
+#define psa CONCAT(psa, test_entry)
 
 #define TOKEN_SIZE          512
 
diff --git a/api-tests/dev_apis/initial_attestation/test_a001/test_data.h b/api-tests/dev_apis/initial_attestation/test_a001/test_data.h
index bfeba55..036aab1 100644
--- a/api-tests/dev_apis/initial_attestation/test_a001/test_data.h
+++ b/api-tests/dev_apis/initial_attestation/test_a001/test_data.h
@@ -19,9 +19,9 @@
 
 typedef struct {
     char                    test_desc[100];
-    uint32_t                challenge_size;
-    uint32_t                actual_challenge_size;
-    uint32_t                token_size;
+    size_t                  challenge_size;
+    size_t                  actual_challenge_size;
+    size_t                  token_size;
     psa_status_t            expected_status;
 } test_data;
 
@@ -40,31 +40,31 @@
 },
 
 {"Test psa_initial_attestation_get_token with zero challenge size\n",
- 0, 0, TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT
+ 0, 0, TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 
 {"Test psa_initial_attestation_get_token with small challenge size\n",
  PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1,
- TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT
+ TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 
 {"Test psa_initial_attestation_get_token with invalid challenge size\n",
  PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32+1, PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32+1,
- TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT
+ TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 
 {"Test psa_initial_attestation_get_token with large challenge size\n",
- MAX_CHALLENGE_SIZE+1,  MAX_CHALLENGE_SIZE+1, TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT
+ MAX_CHALLENGE_SIZE+1,  MAX_CHALLENGE_SIZE+1, TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 
 {"Test psa_initial_attestation_get_token with zero as token size\n",
  PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32,
- 0, PSA_ATTEST_ERR_INVALID_INPUT
+ 0, PSA_ERROR_INVALID_ARGUMENT
 },
 
 {"Test psa_initial_attestation_get_token with small token size\n",
  PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32,
- PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, PSA_ATTEST_ERR_TOKEN_BUFFER_OVERFLOW
+ PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, PSA_ERROR_BUFFER_TOO_SMALL
 },
 };
 
@@ -83,21 +83,21 @@
 
 {"Test psa_initial_attestation_get_token_size with zero challenge size\n",
  0, 0,
- TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT
+ TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 
 {"Test psa_initial_attestation_get_token_size with small challenge size\n",
  PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1,
- TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT
+ TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 
 {"Test psa_initial_attestation_get_token_size with invalid challenge size\n",
  PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32+1, PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32+1,
- TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT
+ TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 
 {"Test psa_initial_attestation_get_token_size with large challenge size\n",
  MAX_CHALLENGE_SIZE+1,  MAX_CHALLENGE_SIZE+1,
- TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT
+ TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT
 },
 };
diff --git a/api-tests/docs/psa_attestation_testlist.md b/api-tests/docs/psa_attestation_testlist.md
index 478b494..12153ad 100644
--- a/api-tests/docs/psa_attestation_testlist.md
+++ b/api-tests/docs/psa_attestation_testlist.md
@@ -2,17 +2,17 @@
 
 | Test      | Return value                         | API                                                               | Test Algorithm                                                                                                                                                  | Test Cases                                                                                                                                                                                             |
 |-----------|--------------------------------------|-------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| test_a001 | PSA_ATTEST_ERR_SUCCESS               | psa_initial_attest_get_token()<br />psa_initial_attest_get_token_size() | 1. Provide correct inputs to API with described challenge sizes  <br />2. Expect API to return this define as return value each time  <br />3. Verify the token | 1. Challenge_size = 32 <br />2. Challenge_size = 48 <br />3. Challenge_size = 64                                                                                                         |
-|           | PSA_ATTEST_ERR_INVALID_INPUT         | psa_initial_attest_get_token()<br />psa_initial_attest_get_token_size() | 1. Provide described challenge sizes to the API along with other valid parameters <br />2. Expect API to return this define as return value each time           | 1. Challenge_size is zero <br />2. Invalid challenge size between 0 and 32 <br />3. Invalid challenge size between 32 and 64  <br />4. Challenge_size is greater than MAX_CHALLENGE_SIZE |
-|           | PSA_ATTEST_ERR_TOKEN_BUFFER_OVERFLOW | psa_initial_attest_get_token()                                    | 1. Provide described taken size to the API along with other valid parameters <br />2. Expect API to return this define as return value each time                | 1. Token_size as zero<br />2. Token_size less than challenge size                                                                                                                                         |
-|           | PSA_ATTEST_ERR_INIT_FAILED           | psa_initial_attest_get_token()<br />psa_initial_attest_get_token_size() | Can't simulate. Test can't generate stimulus where attestation initialisation fails                                                                             |                                                                                                                                                                                                       |
-|           | PSA_ATTEST_ERR_CLAIM_UNAVAILABLE     | psa_initial_attest_get_token()                                    | Can't simulate. Test can't generate stimulus where claim can unavailable                                                                                        |                                                                                                                                                                                                       |
-|           | PSA_ATTEST_ERR_GENERAL               | psa_initial_attest_get_token()<br />psa_initial_attest_get_token_size() | Can't simulate. Test can't generate stimulus where unexpected error happened during API operation                                                               |                                                                                                                                                                                                       |
+| test_a001 | PSA_SUCCESS               | psa_initial_attest_get_token()<br />psa_initial_attest_get_token_size() | 1. Provide correct inputs to API with described challenge sizes  <br />2. Expect API to return this define as return value each time  <br />3. Verify the token | 1. Challenge_size = 32 <br />2. Challenge_size = 48 <br />3. Challenge_size = 64                                                                                                         |
+|           | PSA_ERROR_INVALID_ARGUMENT         | psa_initial_attest_get_token()<br />psa_initial_attest_get_token_size() | 1. Provide described challenge sizes to the API along with other valid parameters <br />2. Expect API to return this define as return value each time           | 1. Challenge_size is zero <br />2. Invalid challenge size between 0 and 32 <br />3. Invalid challenge size between 32 and 64  <br />4. Challenge_size is greater than MAX_CHALLENGE_SIZE |
+|           | PSA_ERROR_BUFFER_TOO_SMALL | psa_initial_attest_get_token()                                    | 1. Provide described taken size to the API along with other valid parameters <br />2. Expect API to return this define as return value each time                | 1. Token_size as zero<br />2. Token_size less than challenge size                                                                                                                                         |
+|           | PSA_ERROR_SERVICE_FAILURE           | psa_initial_attest_get_token()<br />psa_initial_attest_get_token_size() | Can't simulate. Test can't generate stimulus where attestation initialisation fails                                                                             |                                                                                                                                                                                                       |
+|           | PSA_ERROR_GENERIC_ERROR               | psa_initial_attest_get_token()<br />psa_initial_attest_get_token_size() | Can't simulate. Test can't generate stimulus where unexpected error happened during API operation                                                               |                                                                                                                                                                                                       |
 
 ## Note
 
-1. In verifying the token, only the data type of claims and presence of the mandatory claims are checked and the values of the claims are not checked.
-2. Checks related to token signature validation will be part of future release
+1. In verifying the token, only the data type of claims and presence of the mandatory claims are checked and the values of the claims are not checked. <br />
+2. Specify the version of underlying PSA crypto in  <psa-arch-tests>/api-tests/platform/targets/<target_name>/nspe/common/pal_config.h <br />
+3. Supported crypto versions are CRYPTO_VERSION_BETA1, CRYPTO_VERSION_BETA2 and CRYPTO_VERSION_BETA3
 
 # License
 Arm PSA test suite is distributed under Apache v2.0 License.
diff --git a/api-tests/docs/psa_crypto_testlist.md b/api-tests/docs/psa_crypto_testlist.md
index 983ba36..67aa616 100644
--- a/api-tests/docs/psa_crypto_testlist.md
+++ b/api-tests/docs/psa_crypto_testlist.md
@@ -2,626 +2,750 @@
 
 
 
-| Group                        | Test      | Function                   | Scenario                                                                                                              | Return Value                    | Steps                                                                                                            | Test Case                                                                                           |
-|------------------------------|-----------|----------------------------|-----------------------------------------------------------------------------------------------------------------------|---------------------------------|------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|
-| Basic                        | test_c001 | psa_crypto_init            | Library initialization                                                                                                | PSA_SUCCESS                     | Calling this function should return SUCCESS                                                                      |                                                                                                     |
-|                              |           |                            | Applications must call this function before calling any other function in this module.                                | PSA_SUCCESS                     | Try calling crypto operations doing a crypto_init should be successful(can be covered as part of other testcase) |                                                                                                     |
-|                              |           |                            | Applications may call this function more than once. Once a call succeeds, subsequent calls are guaranteed to succeed. | PSA_SUCCESS                     | Try calling multiple crypto init and should return SUCCESS                                                       |                                                                                                     |
-|                              |           |                            | Applications must call this function before calling any other function in this module.                                | PSA_ERROR_BAD_STATE             | Try calling crypto operations without doing a crypto_init should return FAILURE                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  |                                                                                                     |
-| Key Management               | test_c002 | psa_import_key             | Import a key in binary format.                                                                                        | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure to a default that forbids all usage of the key                              | 2. 24 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. 32 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. 2048 RSA public key                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. 2048 RSA keypair                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 6. Get basic metadata about a key                                                                                | 6. DES 64 bit key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 7. Export a key in binary format                                                                                 | 7. Triple DES 2-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 8. Check if original key data matches with the exported data                                                     | 8. Triple DES 3-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 9. EC Public key                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 10. EC keypair                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_SUPPORTED         | Calling this function with incorrect key type                                                                    | Incorrect key type                                                                                  |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      | Calling this function with invalid parameter should return this error                                            | 1. Key data greater than the algorithm size                                                         |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Incorrect key data size                                                                          |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        | Calling this function with invalid key handle should return this error                                           | 1. Destroyed key handle </br> 2. Zero as key handle</br> 3. Unallocated key handle                  |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_ALREADY_EXISTS         | Pass the key slot to store data which is already occupied                                                       | Already occupied key slot                                                                           |
-|                              | test_c003 | psa_export_key             | Export a key in binary format                                                                                         | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure to a default that forbids all usage of the key                              | 2. 24 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. 32 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. 2048 RSA public key                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. 2048 RSA keypair                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 6. Get basic metadata about a key                                                                                | 6. DES 64 bit key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 7. Export a key in binary format                                                                                 | 7. Triple DES 2-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 8. Check if original key data matches with the exported data                                                     | 8. Triple DES 3-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 9. EC Public key                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 10. EC keypair                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BUFFER_TOO_SMALL      | Calling this function with buffer size less than required                                                        | Less buffer size                                                                                    |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         | Calling this function with with key policy as verify should return this error                                    | Key policy as PSA_KEY_USAGE_VERIFY                                                                  |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        | Calling this function with invalid parameter should return this error                                            | 1. Zero key slot                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Unallocated key slot                                                                             |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Destroyed key slot                                                                               |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BAD_STATE             | Calling this function with key policy that cannot be exported                                                    | Invalid key policy usage                                                                            |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        | Calling this function with empty key slot                                                                        | Empty key slot                                                                                      |
-|                              | test_c004 | psa_export_public_key      | Export a public key or the public part of a key pair in binary format.                                                | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 2048 RSA public key                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure to a default that forbids all usage of the key                              | 2. 2048 RSA keypair                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. EC Public key                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. EC keypair                                                                                       |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Get basic metadata about a key                                                                                |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Export a key in binary format                                                                                 |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Check if original key data matches with the exported data                                                     |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BUFFER_TOO_SMALL      | Calling this function with buffer size less than required                                                        | Less buffer size                                                                                    |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      | Calling this function with invalid  parameter should return this error                                           | 1. DES 64 bit key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Triple DES 2-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Triple DES 3-Key                                                                                 |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         | Calling this function with with key policy as verify should return this error                                    | Key policy as PSA_KEY_USAGE_VERIFY                                                                  |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        | Calling this function with invalid key handle should return this error                                           | 1. Zero key slot                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Unallocated key slot                                                                             |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Destroyed key slot                                                                               |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BAD_STATE             | Calling this function with key policy that cannot be exported                                                    | Invalid key policy usage                                                                            |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        | Calling this function with empty key slot                                                                        | Empty key slot                                                                                      |
-|                              | test_c005 | psa_destroy_key            | Destroy a key and restore the slot to its default state.                                                              | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure to a default that forbids all usage of the key                              | 2. 24 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. 32 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. 2048 RSA public key                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. 2048 RSA keypair                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 6. Get basic metadata about a key                                                                                | 6. DES 64 bit key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 7. Destroy a key and restore the slot to its default state                                                       | 7. Triple DES 2-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 8. Check that if the key metadata are destroyed                                                                  | 8. Triple DES 3-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 9. EC Public key                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 10. EC keypair                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        | Calling this function with invalid parameter should return this error                                            | 1. Invalid key slot                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Zero key slot                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Empty key slot                                                                                   |
-|                              | test_c006 | psa_get_key_information    | Get basic metadata about a key.                                                                                       | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure to a default that forbids all usage of the key                              | 2. 24 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. 32 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. 2048 RSA public key                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. 2048 RSA keypair                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 6. Get basic metadata about a key                                                                                | 6. DES 64 bit key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 7. Triple DES 2-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 8. Triple DES 3-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 9. EC Public key                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 10. EC keypair                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        | Calling this function with invalid parameter should return this error                                            | 1. Zero key slot                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Unallocated key slot                                                                             |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Destroyed key slot                                                                               |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST            | Pass the key slot number which has the key type as none                                                      | Empty key slot                                                                                      |
-|                              | NO TEST   | psa_key_policy_set_usage   | Set the standard fields of a policy structure.                                                                        | void                            | Void function. Covered as part of other cases                                                                    |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  |                                                                                                     |
-| Key Policies                 | test_c007 | psa_set_key_policy         | Set the usage policy on a key slot.                                                                                   | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure to a default that forbids all usage of the key                              | 2. 24 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. 32 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. 2048 RSA public key                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. 2048 RSA keypair                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 6. Get the usage policy for a key slot                                                                           | 6. DES 64 bit key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 7. Check if the policy matches the original input                                                                | 7. Triple DES 2-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 8. Triple DES 3-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 9. EC Public key                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 10. EC keypair                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        | Calling this function with invalid parameter should return this error                                            | 1. Unallocated key slot                                                                             |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Zero key slot                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Destroyed key slot                                                                               |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_ALREADY_EXISTS        | Pass the key slot to store data which is already occupied                                                        | Already occupied key slot                                                                           |
-|                              | test_c008 | psa_get_key_policy         | Get the usage policy for a key slot                                                                                   | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure to a default that forbids all usage of the key                              | 2. 24 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. 32 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. 2048 RSA public key                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 5. Change the lifetime of a key slot                                                                             | 5. 2048 RSA keypair                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 6. Import the key data into the key slot                                                                         | 6. DES 64 bit key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 7. Get the usage policy for a key slot                                                                           | 7. Triple DES 2-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 8. Retrieve the usage field of a policy structure                                                                | 8. Triple DES 3-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 9. Retrieve the algorithm field of a policy structure                                                            | 9. EC Public key                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 | 10. Make sure they match the original value                                                                      | 10. EC keypair                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        | Calling this function with invalid parameter should return this error                                            | 1. Zero key slot                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Destroyed key slot                                                                               |
-|                              | test_c009 | psa_allocate_key           | Allocate a key slot for a transient key                                                                               | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. Volatile keys                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure to a default that forbids all usage of the key                              |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key                                                                       |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INSUFFICIENT_MEMORY   | Calling this function with multiple time                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  |                                                                                                     |
-|                              | test_c010 | psa_get_key_lifetime       | Retrieve the lifetime of a key slot.                                                                                  | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | Testing only volatile keys and persistance key types will be supported in future release            |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure to a default that forbids all usage of the key                              |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 5. Change the lifetime of a key slot                                                                             |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Get the lifetime of a key slot                                                                                |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        |                                                                                                                  | 1. Zero key slot                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Invalid key slot                                                                                 |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | 1. Invalid key policy                                                                               |
-| Message Authentication Codes | test_c011 | psa_hash_start             | Start a multipart hash operation.                                                                                     | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. MD2                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 2. Start a multipart hash operation                                                                              | 2. MD4                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. MD5                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 4. RIPEMD160                                                                                        |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 5. SHA1                                                                                             |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 6. SHA224                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 7. SHA256                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 8. SHA512                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 9. SHA512_224                                                                                       |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 10. SHA512_256                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 11. SHA3_224 1                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. SHA3_256 1                                                                                       |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. SHA3_384 1                                                                                       |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 4. SHA3_512                                                                                         |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_SUPPORTED         | Calling this function with unsupported algorithm should return error                                             | Invalid hash algorithm                                                                              |
-|                              | test_c012 | psa_hash_update            | Add a message fragment to a multipart hash operation.                                                                 | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. MD2                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 2. Start a multipart hash operation                                                                              | 2. MD4                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 3. Add a message fragment to a multipart hash operation                                                          | 3. MD5                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 4. RIPEMD160                                                                                        |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 5. SHA1                                                                                             |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 6. SHA224                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 7. SHA256                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 8. SHA384                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 9. SHA512                                                                                           |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BAD_STATE             | 1. Calling this function without calling the psa_hash_start() should return error                                | Inactive operation handle                                                                           |
-|                              |           |                            |                                                                                                                       |                                 | 2. Calling this function with completed operation handle should return error                                     | Completed operation handle                                                                          |
-|                              | test_c013 | psa_hash_verify            | Finish the calculation of the hash of a message and compare it with an expected value.                                | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. MD2                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 2. Start a multipart hash operation                                                                              | 2. MD4                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 3. Add a message fragment to a multipart hash operation                                                          | 3. MD5                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 4. Finish the calculation of the hash of a message and compare it with an expected value                         | 4. RIPEMD160                                                                                        |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 5. SHA1                                                                                             |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 6. SHA224                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 7. SHA256                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 8. SHA384                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 9. SHA512                                                                                           |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BAD_STATE             | Calling this function with inactive operation handle should return error                                         | 1. Inactive operation handle                                                                        |
-|                              |           |                            |                                                                                                                       |                                 | Calling this function with invalid operation handle should return error                                          | 2. Invalid operation handle                                                                         |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_SIGNATURE     | Calling this function with incorrect expected value should return error                                          | 1. Incorrect expected hash value                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Incorrect expected hash length                                                                   |
-|                              | test_c014 | psa_hash_finish            | Finish the calculation of the hash of a message.                                                                      | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. MD2                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 2. Start a multipart hash operation                                                                              | 2. MD4                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 3. Add a message fragment to a multipart hash operation                                                          | 3. MD5                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 4. Finish the calculation of the hash of a message                                                               | 4. RIPEMD160                                                                                        |
-|                              |           |                            |                                                                                                                       |                                 | 5. Compare it with the expected value                                                                            | 5. SHA1                                                                                             |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 6. SHA224                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 7. SHA256                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 8. SHA384                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 9. SHA512                                                                                           |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      | Calling this function with an inactive operation handle should return error                                      | Inactive operation handle                                                                           |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BUFFER_TOO_SMALL      | Calling this function with a hash buffer whose size is less than the algorithm output should return error        | Buffer size less than required                                                                      |
-|                              | test_c015 | psa_hash_abort             | Abort a hash operation.                                                                                               | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. MD2                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 2. Start a multipart hash operation                                                                              | 2. MD4                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 3. Abort a hash operation                                                                                        | 3. MD5                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 4. RIPEMD160                                                                                        |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 5. SHA1                                                                                             |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 6. SHA224                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 7. SHA256                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 8. SHA384                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 9. SHA512                                                                                           |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      | Calling psa_hash_finish after calling psa_hash_abort should return error                                         |                                                                                                     |
-| Generator                    | test_c016 | psa_generate_key           | Generate a key or key pair                                                                                            | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. AES                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. DES                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. ECC                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. RSA                                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 5. Generate a key or key pair                                                                                    |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Get basic metadata about a key                                                                                |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Check if key type and key length matches                                                                      |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Export a key in binary format                                                                                 |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 9. Check if the metadata matches                                                                                 |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        | Calling this function with unallocated key slot should return this error                                         | Unallocated key slot                                                                                |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        | Calling this function with zero as key slot should return this error                                             | Zero as key slot                                                                                    |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        | Calling this function with destroyed key slot should return this error                                           | Destroyed as key slot                                                                               |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      | Calling this function with Null extra and Non-Zero extra size should return this error                           | Null extra and Non-Zero extra size                                                                  |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_ALREADY_EXISTS        | Calling this function with pre-occupied key slot should return this error                                       | Pre-occupied key slot                                                                                |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_SUPPORTED         | Calling this function to generate only public key should return this error                                       | Key type as public key                                                                              |
-|                              | test_c017 | psa_generate_random        | Generate random bytes                                                                                                 | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte data                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 2. Generate random bytes Run several times, to ensure that every output byte will be nonzero at least once       | 2. 24 Byte data                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 3. Check that no more than bytes have been overwritten                                                           | 3. 32 Byte data                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 4. Check that every byte was changed to nonzero at least once.                                                   | 4. 64 Byte data                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 5. 128 Byte data                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 6. 256 Byte data                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 7. 512 Byte data                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 8. 1000 Byte data                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 9. 1024 Byte data                                                                                   |
-|                              | test_c018 | psa_generator_read         | Read some data from a generator                                                                                       | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte key                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. 32 Byte key                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. 8 Byte Key                                                                                       |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. SHA 256                                                                                          |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. SHA 512                                                                                          |
-|                              |           |                            |                                                                                                                       |                                 | 6. Set up a key derivation operation                                                                             | 6. SHA 1                                                                                            |
-|                              |           |                            |                                                                                                                       |                                 | 7. Generate random bytes                                                                                         | 7. Output size less than generator capacity                                                         |
-|                              |           |                            |                                                                                                                       |                                 | 8. Check that if generated data are non-zero                                                                     | 8. Output size equal to generator capacity                                                          |
-|                              |           |                            |                                                                                                                       |                                 | 9. Generate random bytes for remaining capacity                                                                  | 9. Request maximum capacity                                                                         |
-|                              |           |                            |                                                                                                                       |                                 | 10. Check that if generated data are non-zero                                                                    |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 11. Generate random bytes and check that it fails                                                                |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INSUFFICIENT_DATA     | Calling this function with output size greater than the current capacity should return this error                | Output size greater than the current capacity                                                       |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INSUFFICIENT_DATA     | Calling this function with capacity greater than the allowed capacity should return this error                   | Request maximum capacity +1                                                                         |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BAD_STATE             | Calling this function without setup should return this error                                                     |                                                                                                     |
-|                              | test_c019 | psa_get_generator_capacity | Retrieve the current capacity of a generator                                                                          | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. Output size less than generator capacity                                                         |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. Output size equal to generator capacity                                                          |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Set up a key derivation operation                                                                             |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Retrieve the current capacity of a generator                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Check that it is equal to the input capacity                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 9. Generate random bytes                                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 10. Retrieve the current capacity of a generator                                                                 |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 11. Check that it is equal to the remaining capacity                                                             |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BAD_STATE             | Calling this function without setup should return this error                                                     |                                                                                                     |
-|                              | test_c020 | psa_generator_import_key   | Create a symmetric key from data read from a generator                                                                | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. 32 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Set up a key derivation operation                                                                             |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Initialize a key policy structure for new slot                                                                |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Set the standard fields of a policy structure                                                                 |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 9. Set the usage policy on a new key slot                                                                        |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 10. Create a symmetric key from data read from a generator                                                       |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 11. Export a key in binary format                                                                                |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 12. Check that length of the key matches                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 13. Check that the key is non-zero                                                                               |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 14. Initialize a key policy structure for new slot                                                               |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 15. Set the standard fields of a policy structure                                                                |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 16. Set the usage policy on a new key slot                                                                       |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 17. Create a symmetric key from data read from a generator for the remaining size                                |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 18. Export a key in binary format                                                                                |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 19. Check that length of the key matches                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 20. Check that the key is non-zero                                                                               |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 21. Initialize a key policy structure for new slot                                                               |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 22. Set the standard fields of a policy structure                                                                |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 23. Set the usage policy on a new key slot                                                                       |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 24. Create a symmetric key from data read from a generator for the some size                                     |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | Check that it fails                                                                                              |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INSUFFICIENT_DATA | Calling this function with output greater than capacity should return this error                                 | Output greater than capacity                                                                            |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      | Calling this function with public key algorithm should return this error                                         | 1. RSA public key </br>2.Invalid key size                                                           |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        | Calling this function with invalid arguments should return this error                                            | 1. Invalid key slot                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Zero as key slot                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_ALREADY_EXISTS        | Calling this function with already occupied key slot should return this error                                    | Pre-occupied key slot                                                                               |
-|                              | test_c021 | psa_generator_abort        | Abort a generator                                                                                                     | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. Abort                                                                                            |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. Multiple                                                                                         |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. Calling generator functions after abort should fail                                              |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Set the key for a multipart symmetric encryption/decryption operation                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Abort a cipher operation                                                                                      |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Multiple abort cipher operation should return success                                                         |                                                                                                     |
-| Key derivation               | test_c022 | psa_key_derivation         | Set up a key derivation operation                                                                                     | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte data with SHA-256                                                                        |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. 32 byte data with SHA-512                                                                        |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. 32 Byte data with MD-5                                                                           |
-|                              |           |                            |                                                                                                                       |                                 | 4. Import the key data into the key slot                                                                         | 4. Salt and label provided as input                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 5. Set up a key derivation operation                                                                             |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Retrieve the current capacity of a generator                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Make sure that the capacity is same as input capacity                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_INVALID_ARGUMENT            | Calling this function with invalid argument should return this error                                             | 1. Invalid algorithm                                                                                |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Unsupported generator capacity                                                                   |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Unsupported key type                                                                             |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         | Calling this function with incorrect usage should return this error                                              | 1. Incorrect usage                                                                                  |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_SUPPORTED         | Calling this function with unsupported key derivation algorithm should return this error                         | 1. Unsupported key derivation algorithm                                                             |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        | Calling this functoin wih incorrect key handle                                                                   | 1. Invalid key handle </br>2. Zero as key slot                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        | Calling this function with empty key slot should return this error                                               | Empty key slot                                                                                      |
-| Key policies                 | test_c023 | psa_key_policy_get_usage   | Retrieve the usage field of a policy structure                                                                        | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. Encrypt                                                                                          |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. Decrypt                                                                                          |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. Export                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 | 4. Retrieve the usage field of a policy structure                                                                | 4. Sign                                                                                             |
-|                              |           |                            |                                                                                                                       |                                 | 5. Check that usage is same as input                                                                             | 5. Verify                                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 6. Derive                                                                                           |
-| AEAD                         | test_c024 | psa_aead_encrypt           | Process an authenticated encryption operation                                                                         | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. CCM - 16B AES - Nounce and additional data                                                       |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. GCM - 16B AES - NULL Nounce & addi data                                                          |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. GCM -16B AES - 12B Nounce & 12B addi data                                                        |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. CCM - 16B AES - 13B Nounce & 8B addi data                                                        |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Call aead encrypt                                                                                             |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Check if the status is expected                                                                               |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Check if the cipher text is expected length                                                                   |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_SUPPORTED         |                                                                                                                  | 1. DES key                                                                                          |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Unsupported algorithm                                                                            |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        |                                                                                                                  | Empty key slot                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        |                                                                                                                  | 1. Zero as key slot                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Invalid key slot                                                                                 |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         |                                                                                                                  | 1. Small output buffer size                                                                         |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Invalid key usage                                                                                |
-|                              | test_c025 | psa_aead_decrypt           | Process an authenticated decryption operation                                                                         | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. CCM - 16B AES - Nounce and additional data                                                       |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. GCM - 16B AES - NULL Nounce & addi data                                                          |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. GCM -16B AES - 12B Nounce & 12B addi data                                                        |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. CCM - 16B AES - 13B Nounce & 8B addi data                                                        |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Call aead decrypt                                                                                             |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Check if the status is expected                                                                               |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Check if the plain text is expected length                                                                    |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_SUPPORTED         |                                                                                                                  | 1. DES key                                                                                          |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Unsupported algorithm                                                                            |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        |                                                                                                                  | Empty key slot                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | Invalid tag length                                                                                  |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        |                                                                                                                  | 1. Zero as key slot                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Invalid key slot                                                                                 |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         |                                                                                                                  | 1. Small output buffer size                                                                         |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Invalid key usage                                                                                |
-| Message Authentication Codes | test_c026 | psa_mac_sign_setup         | Start a multipart MAC calculation operation                                                                           | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 64 Byte HMAC                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. 16 Byte AES - CMAC                                                                               |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Start a multipart MAC calculation operation                                                                   |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_SUPPORTED         |                                                                                                                  | 1. 16 Byte AES - GMAC                                                                               |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Incompatible HMAC for CMAC                                                                       |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Bad algorithm (unknown MAC algorithm)                                                            |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 4. Truncated MAC too small                                                                          |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         |                                                                                                                  | Invalid usage                                                                                       |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        |                                                                                                                  | Empty key slot                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | 1. Invalid key type                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Truncated MAC too large                                                                          |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Bad algorithm (not a MAC algorithm)                                                              |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        |                                                                                                                  | 1. Invalid key handle                                                                               |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Zero as key handle                                                                               |
-|                              | test_c027 | psa_mac_update             | Add a message fragment to a multipart MAC operation                                                                   | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1.64 Byte HMAC SHA256                                                                               |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. 16 Byte AES - CMAC                                                                               |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. 32 Byte HMAC SHA512                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Start a multipart MAC calculation operation                                                                   |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Add a message fragment to a multipart MAC operation                                                           |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Check for the expected status                                                                                 |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 9. If success, Finish the calculation of the MAC of a message                                                    |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 10. Add a message fragment to the same multipart MAC operation should fail                                       |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BAD_STATE             |                                                                                                                  | 1. Completed operation as input                                                                     |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Uninitialized operation as input                                                                 |
-|                              | test_c028 | psa_mac_sign_finish        | Finish the calculation of the MAC of a message                                                                        | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. HMAC SHA 224                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. HMAC SHA 256                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. HMAC SHA 512                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. HMAC SHA 224 (truncated to 8 Byte)                                                               |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. CMAC AES 128                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Start a multipart MAC calculation operation                                                                   |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Add a message fragment to a multipart MAC operation                                                           |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Finish the calculation of the MAC of a message                                                                |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 9. Check for the expected status                                                                                 |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 10. If success, Check if the MAC length matches with the expected length                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 11. Check if the MAC data matches with the expected data                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 12. Finish the calculation of the MAC of a message using same operation should return error                      |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BUFFER_TOO_SMALL      |                                                                                                                  | Small size buffer                                                                                   |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BAD_STATE             |                                                                                                                  | Invalid operation as input                                                                          |
-|                              | test_c029 | psa_mac_verify_setup       |                                                                                                                       | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 64 Byte HMAC                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. 16 Byte AES - CMAC                                                                               |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Start a multipart MAC verification operation                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Check for the expected status                                                                                 |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_SUPPORTED         |                                                                                                                  | 1. 16 Byte AES - GMAC                                                                               |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Incompatible HMAC for CMAC                                                                       |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Bad algorithm (unknown MAC algorithm)                                                            |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 4. Truncated MAC too small                                                                          |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         |                                                                                                                  | Invalid usage                                                                                       |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        |                                                                                                                  | Empty slot as input                                                                                 |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | 1. Invalid key type                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Truncated MAC too large                                                                          |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Bad algorithm (unknown MAC algorithm)                                                            |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        |                                                                                                                  | 1. Invalid key handle                                                                               |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Zero as key handle                                                                               |
-|                              | test_c030 | psa_mac_verify_finish      | Finish the calculation of the MAC of a message and compare it with an expected value                                  | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. HMAC SHA 224                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. HMAC SHA 256                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. HMAC SHA 512                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. HMAC SHA 224 (truncated to 8 Byte)                                                               |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. CMAC AES 128                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Start a multipart MAC calculation operation                                                                   |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Add a message fragment to a multipart MAC operation                                                           |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Finish the calculation of the MAC of a message                                                                |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 9. Check for the expected status                                                                                 |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 10. Finish the calculation of the MAC of a message using same operation should return error                      |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_SIGNATURE     |                                                                                                                  | 1. Small size buffer                                                                                |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Incorrect expected hash                                                                          |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BAD_STATE             |                                                                                                                  | Invalid operation as input                                                                          |
-|                              | test_c031 | psa_mac_abort              | Abort a MAC operation                                                                                                 | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. HMAC SHA 224                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. HMAC SHA 256                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. HMAC SHA 512                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. CMAC AES 128                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. HMAC truncated                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 6. Start a multipart MAC calculation operation                                                                   | 6. Multiple abort                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 7. Abort the MAC operation                                                                                       | 7. psa_mac_finish after psa_mac_abort should return failure                                         |
-| Symmetric Ciphers            | test_c032 | psa_cipher_encrypt_setup   | Set the key for a multipart symmetric encryption operation                                                            | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. 24 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. 32 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. DES 64 bit key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. Triple DES 2-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 6. Set the key for a multipart symmetric encryption operation                                                    | 6. Triple DES 3-Key                                                                                 |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_SUPPORTED         |                                                                                                                  | 1. 16 Byte raw data                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Unknown cipher algorithm                                                                         |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Incompatible key ARC4                                                                            |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | 1. Not a cipher algorithm                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. RSA public key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. RSA keypair                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 4. EC Public key                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 5. EC keypair                                                                                       |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        |                                                                                                                  | Empty key slot                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         |                                                                                                                  | Incorrect usage                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        |                                                                                                                  | 1. Unallocated key handle                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Zero as key handle                                                                               |
-|                              | test_c033 | psa_cipher_decrypt_setup   | Set the key for a multipart symmetric decryption operation                                                            | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. HMAC SHA 224                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. HMAC SHA 256                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. HMAC SHA 512                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. CMAC AES 128                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. HMAC truncated                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 6. Set the key for a multipart symmetric decryption operation                                                    | 6. Multiple abort                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 7. psa_mac_finish after psa_mac_abort should return failure                                         |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_SUPPORTED         |                                                                                                                  | 1. 16 Byte raw data                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Unknown cipher algorithm                                                                         |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Incompatible key ARC4                                                                            |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | 1. Not a cipher algorithm                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. RSA public key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. RSA keypair                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 4. EC Public key                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 5. EC keypair                                                                                       |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        |                                                                                                                  | 1. Unallocated key handle                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Zero as key handle                                                                               |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        |                                                                                                                  | Empty key slot                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         |                                                                                                                  | Invalid usage                                                                                       |
-|                              | test_c034 | psa_cipher_generate_iv     | Generate an IV for a symmetric encryption operation                                                                   | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. 24 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. 32 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. DES 64 bit key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. Triple DES 2-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 6. Set the key for a multipart symmetric encryption operation                                                    | 6. Triple DES 3-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 7. Generate an IV for a symmetric encryption operation                                                           | 7. AES - large iv buffer                                                                            |
-|                              |           |                            |                                                                                                                       |                                 | 8. Check that if generated iv length match the expected length                                                   | 8. DES - large iv buffer                                                                            |
-|                              |           |                            |                                                                                                                       |                                 | 9. Check that if generated iv are zero                                                                           |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 10. Generating an IV for a symmetric encryption operation using the same operator should fail                    |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BUFFER_TOO_SMALL      |                                                                                                                  | 1. AES - small iv buffer                                                                            |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. DES - small iv buffer                                                                            |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BAD_STATE             |                                                                                                                  | 1. Completed operation handle                                                                       |
-|                              | test_c035 | psa_cipher_set_iv          | Set the IV for a symmetric encryption or decryption operation                                                         | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. 24 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. 32 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. DES 64 bit key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. Triple DES 2-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 6. Set the key for a multipart symmetric encryption/decryption operation                                         | 6. Triple DES 3-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 7. Set an IV for a symmetric encryption/decryption operation                                                     |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Check that if generated iv length match the expected length                                                   |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 9. Check that if generated iv are zero                                                                           |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 10. Setting an IV for a symmetric encryption/decryption operation using the same operator should fail            |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | 1. AES - small iv buffer 2. DES - small iv buffer 3. AES - large iv buffer 4. DES - large iv buffer |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BAD_STATE             |                                                                                                                  | 1. Completed operation handle                                                                       |
-|                              | test_c036 | psa_cipher_update          | Encrypt or decrypt a message fragment in an active cipher operation                                                   | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. AES CBC_NO_PADDING                                                                               |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. AES CBC_NO_PADDING (Short input)                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. AES CBC_PKCS7                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. AES CBC_PKCS7 (Short input)                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. AES CTR                                                                                          |
-|                              |           |                            |                                                                                                                       |                                 | 6. Set the key for a multipart symmetric encryption operation                                                    | 6. DES CBC (nopad)                                                                                  |
-|                              |           |                            |                                                                                                                       |                                 | 7. Set an IV for a symmetric encryption operation                                                                | 7. 2-key 3DE -CBC (nopad)                                                                           |
-|                              |           |                            |                                                                                                                       |                                 | 8. Encrypt or decrypt a message fragment in an active cipher operation                                           | 8. 3-key 3DE -CBC (nopad)                                                                           |
-|                              |           |                            |                                                                                                                       |                                 | 9. Check if the output length matches the expected length                                                        |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 10. Check if the output data matches the expected data                                                           |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 11. Encrypt or decrypt a message fragment in an invalid cipher operation should fail                             |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BAD_STATE             | Encrypt or decrypt a message fragment in an invalid cipher operation should fail                                 | Invalid operation as input                                                                          |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BUFFER_TOO_SMALL      |                                                                                                                  | Small output buffer size                                                                            |
-|                              | test_c037 | psa_cipher_finish          | Finish encrypting or decrypting a message in a cipher operation                                                       | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. AES CBC_NO_PADDING                                                                               |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. AES CBC_NO_PADDING (Short input)                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. AES CBC_PKCS7                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. AES CBC_PKCS7 (Short input)                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. AES CTR                                                                                          |
-|                              |           |                            |                                                                                                                       |                                 | 6. Set the key for a multipart symmetric encryption operation                                                    | 6. DES CBC (nopad)                                                                                  |
-|                              |           |                            |                                                                                                                       |                                 | 7. Set an IV for a symmetric encryption operation                                                                | 7. 2-key 3DE -CBC (nopad)                                                                           |
-|                              |           |                            |                                                                                                                       |                                 | 8. Encrypt or decrypt a message fragment in an active cipher operation                                           | 8. 3-key 3DE -CBC (nopad)                                                                           |
-|                              |           |                            |                                                                                                                       |                                 | 9. Finish encrypting or decrypting a message in a cipher operation                                               |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 10. Check if the output length matches the expected length                                                       |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 11. Check if the output data matches the expected data                                                           |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 12. Finish encrypting or decrypting a message using an invalid operation should fail                             |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BAD_STATE             | Encrypt or decrypt a message fragment in an invalid cipher operation should fail                                 | Invalid operation as input                                                                          |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BUFFER_TOO_SMALL      |                                                                                                                  | Small output buffer size                                                                            |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | AES CBC_NO_PADDING (Short input)                                                                    |
-|                              | test_c038 | psa_cipher_abort           | Abort a cipher operation                                                                                              | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. Encrypt - AES CBC_NO_PADDING                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. Encrypt - AES CBC_PKCS7                                                                          |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. Encrypt - AES CTR                                                                                |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. Encrypt - DES CBC (nopad)                                                                        |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         | 5. Encrypt - 2-key 3DE -CBC (nopad)                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 6. Set the key for a multipart symmetric encryption/decryption operation                                         | 6. Encrypt - 3-key 3DE -CBC (nopad)                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 7. Abort a cipher operation                                                                                      | 7. Decrypt - AES CBC_NO_PADDING                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Multiple abort cipher operation should return success                                                         | 8. Decrypt - AES CBC_PKCS7                                                                          |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 9. Decrypt - AES CTR                                                                                |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 10. Decrypt - DES CBC (nopad)                                                                       |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 11. Decrypt - 2-key 3DE -CBC (nopad)                                                                |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 12. Decrypt - 3-key 3DE -CBC (nopad)                                                                |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 13. psa_cipher_update after psa_cipher_abort should fail                                            |
-| Asymmetric Cryptography      | test_c039 | psa_asymmetric_encrypt     | Encrypt a short message with a public key                                                                             | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. RSA PKCS1V15                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. RSA OAEP SHA256                                                                                  |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. RSA OAEP SHA256 with label                                                                       |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            | 4. RSA KEYPAIR PKCS1V15                                                                             |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Encrypt a short message with a public key                                                                     |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Check if the output length matches with the expected output length                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Decrypt the cipher text                                                                                       |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 9. Check if the output length matches with the input length                                                      |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 10. Check if the output matches with the given input data                                                        |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | 1. Invalid key type                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Invalid algorithm                                                                                |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         |                                                                                                                  | Invalid usage                                                                                       |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        |                                                                                                                  | Empty key slot                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BUFFER_TOO_SMALL      |                                                                                                                  | Small output buffer                                                                                 |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        |                                                                                                                  | 1. Unallocated key handle                                                                           |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Zero as key handle                                                                               |
-|                              | test_c040 | psa_asymmetric_decrypt     | Decrypt a short message with a private key                                                                            | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. RSA KEYPAIR PKCS1V15                                                                             |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. RSA KEYPAIR OAEP SHA256                                                                          |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. RSA KEYPAIR OAEP SHA256 with label                                                               |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Decrypt a short message with a private key                                                                    |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Check if the output length matches with the expected length                                                   |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Check if the output matches with the expected data                                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | 1. Invalid key type (RSA public key)                                                                |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Invalid algorithm                                                                                |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Invalid key type (AES Key)                                                                       |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        |                                                                                                                  | Empty key slot                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         |                                                                                                                  | Invalid usage                                                                                       |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        |                                                                                                                  | 1. Invalid key slot </br>2. Zero key slot                                                           |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BUFFER_TOO_SMALL      |                                                                                                                  | Small output buffer                                                                                 |
-|                              | test_c041 | psa_asymmetric_sign        | Sign a hash or short message with a private key                                                                       | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. RSA KEYPAIR PKCS1V15 RAW                                                                         |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. RSA KEYPAIR PKCS1V15 SHA-256                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. ECDSA KEYPAIR SECP256R1 SHA-256                                                                  |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the usage policy on a key slot                                                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 5. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Sign a hash or short message with a private key                                                               |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Check if the output length matches with the expected length                                                   |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Check if the output matches with the expected data                                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | 1. Invalid key type (RSA public key)                                                                |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Invalid algorithm                                                                                |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 3. Invalid key type (AES Key)                                                                       |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 4. Wrong hash size                                                                                  |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        |                                                                                                                  | 1. Invalid key slot </br>2. Zero key slot                                                           |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        |                                                                                                                  | Empty key slot                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         |                                                                                                                  | Invalid usage                                                                                       |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BUFFER_TOO_SMALL      |                                                                                                                  | Small output buffer                                                                                 |
-|                              | test_c042 | psa_asymmetric_verify      | Verify the signature a hash or short message using a public key                                                       | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. RSA KEYPAIR PKCS1V15 RAW                                                                         |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. RSA KEYPAIR PKCS1V15 SHA-256                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. ECDSA KEYPAIR SECP256R1 SHA-256                                                                  |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the key data based on key type                                                                            | 4. RSA public key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 5. Set the usage policy on a key slot                                                                            | 5. EC public key                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 | 6. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Verify the signature a hash or short message using a public key                                               |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | 1. Invalid algorithm                                                                                |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Wrong hash size                                                                                  |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        |                                                                                                                  | 1. Invalid key slot </br>2. Zero key slot                                                           |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_SIGNATURE     |                                                                                                                  | Wrong signature size                                                                                |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | Wrong signature                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        |                                                                                                                  | Empty key slot                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         |                                                                                                                  | Invalid usage                                                                                       |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_SUPPORTED         |                                                                                                                  | Invalid key type (AES Key)                                                                          |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_BUFFER_TOO_SMALL      |                                                                                                                  | Small output buffer                                                                                 |
-|                              | test_c043 | psa_key_agreement          |  Set up a key agreement operation                                                                                     | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. ECDH SECP256R1                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. ECDH SECP384R1                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the key data based on key type                                                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 5. Set the usage policy on a key slot                                                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 6. Import the key data into the key slot                                                                         |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 7. Set up a key agreement operation                                                                              |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 8. Retrieve the current capacity of a generator                                                                  |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 9. Check if the generator capacity matches with the expected capacity                                            |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 10. Read some data from a generator                                                                              |                                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 11. Check if the output matches with the expected data                                                           |                                                                                                     |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | 1. Not a key agreement alg                                                                          |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Public key on different curve                                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Public key instead of private key                                                                |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        |                                                                                                                  | 1. Invalid key slot </br>2. Zero key slot                                                           |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        |                                                                                                                  | Empty key slot                                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_PERMITTED         |                                                                                                                  | Invalid usage                                                                                       |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_NOT_SUPPORTED         |                                                                                                                  | Invalid key type (AES Key)                                                                          |
-|                              | test_c044 | psa_copy_key               |  Copy key material from one location to another                                                                       | PSA_SUCCESS                     | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 2. Initialize a key policy structure                                                                             | 2. 24 Byte AES                                                                                      |
-|                              |           |                            |                                                                                                                       |                                 | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure                     | 3. 32 Byte AES with constraints                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 4. Set the key data based on key type                                                                            | 4. 2048 RSA public key                                                                              |
-|                              |           |                            |                                                                                                                       |                                 | 5. Set the usage policy on a key slot                                                                            | 5. 2048 RSA key pair                                                                                |
-|                              |           |                            |                                                                                                                       |                                 | 6. Import the key data into the key slot                                                                         | 6. DES 64 bit key                                                                                   |
-|                              |           |                            |                                                                                                                       |                                 | 7. Allocate a key slot for the target key                                                                        | 7. Triple DES 2-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 8. Set the usage policy on a key slot                                                                            | 8. Triple DES 3-Key                                                                                 |
-|                              |           |                            |                                                                                                                       |                                 | 9. Make a copy of a key                                                                                          | 9. EC Public key                                                                                    |
-|                              |           |                            |                                                                                                                       |                                 | 10. Destroy the source to ensure that this doesn't affect the target                                             | 10. EC key pair                                                                                     |
-|                              |           |                            |                                                                                                                       |                                 | 11. Export a key in binary format and check if it matches with source material                                   | 11. Incompatible target polic                                                                       |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_ARGUMENT      |                                                                                                                  | 1. Incompatible target policy(source and target)                                                    |
-|                              |           |                            |                                                                                                                       |                                 |                                                                                                                  | 2. Incompatible constraint                                                                          |
-|                              |           |                            |                                                                                                                       | PSA_SUCCESS                     |                                                                                                                  | 1. Unexport source key usage                                                                        |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_INVALID_HANDLE        |                                                                                                                  | 1. Unallocated target key slot                                                                      |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_DOES_NOT_EXIST        |                                                                                                                  | Empty source handle                                                                                 |
-|                              |           |                            |                                                                                                                       | PSA_ERROR_ALREADY_EXISTS        |                                                                                                                  | Target already containing key material                                                              |
-
+| Group                        | Test      | Function                         | Scenario                                                                               | Return Value                                | Steps                                                                                                            | Test Case                                                                                |   |
+|------------------------------|-----------|----------------------------------|----------------------------------------------------------------------------------------|---------------------------------------------|------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|---|
+| Library Initialization       | test_c001 | psa_crypto_init                  | Library initialization                                                                 | PSA_SUCCESS                                 | Calling this function should return SUCCESS                                                                      |                                                                                          |   |
+|                              |           |                                  | Applications must call this function before calling any other function in this module. | PSA_SUCCESS                                 | Try calling crypto operations doing a crypto_init should be successful(can be covered as part of other testcase) |                                                                                          |   |
+|                              |           |                                  | Applications may call this function more than once. Once a call succeeds               | subsequent calls are guaranteed to succeed. | PSA_SUCCESS                                                                                                      | Try calling multiple crypto init and should return SUCCESS                               |   |
+|                              |           |                                  | Applications must call this function before calling any other function in this module. | PSA_ERROR_BAD_STATE                         | Try calling crypto operations without doing a crypto_init should return FAILURE                                  |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  |                                                                                          |   |
+| Key Management               | test_c002 | psa_import_key                   | Import a key in binary format.                                                         | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 24 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. 32 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Get basic metadata about a key                                                                                | 4. 2048 RSA public key                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Export a key in binary format                                                                                 | 5. 2048 RSA keypair                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Check if original key data matches with the exported data                                                     | 6. DES 64 bit key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Reset the key attributes                                                                                      | 7. Triple DES 2-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. Triple DES 3-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. EC Public key                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 10. EC keypair                                                                           |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     | Calling this function with incorrect key type                                                                    | Incorrect key type                                                                       |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  | Calling this function with invalid parameter should return this error                                            | 1. Key data greater than the algorithm size                                              |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Incorrect key data size                                                               |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    | Calling this function with invalid key handle should return this error                                           |                                                                                          |   |
+| Key Management               | test_c003 | psa_export_key                   | Export a key in binary format                                                          | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 24 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. 32 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Get basic metadata about a key                                                                                | 4. 2048 RSA public key                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Export a key in binary format                                                                                 | 5. 2048 RSA keypair                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Check if original key data matches with the exported data                                                     | 6. DES 64 bit key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Reset the key attributes                                                                                      | 7. Triple DES 2-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. Triple DES 3-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. EC Public key                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 10. EC keypair                                                                           |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  | Calling this function with buffer size less than required                                                        | Less buffer size                                                                         |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     | Calling this function with with key policy as verify should return this error                                    | Key policy as PSA_KEY_USAGE_VERIFY                                                       |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    | Calling this function with invalid parameter should return this error                                            | 1. Destroyed key slot                                                                    |   |
+| Key Management               | test_c004 | psa_export_public_key            | Export a public key or the public part of a key pair in binary format.                 | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 2048 RSA public key                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 2048 RSA keypair                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. EC Public key                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Get basic metadata about a key                                                                                | 4. EC keypair                                                                            |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Export a key in binary format                                                                                 |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Check if original key data matches with the exported data                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Reset the key attributes                                                                                      |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  | Calling this function with buffer size less than required                                                        | Less buffer size                                                                         |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  | Calling this function with invalid  parameter should return this error                                           | 1. DES 64 bit key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Triple DES 2-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Triple DES 3-Key                                                                      |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     | Calling this function with with key policy as verify should return this error                                    | Key usage as PSA_KEY_USAGE_VERIFY                                                        |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    | Calling this function with invalid key handle should return this error                                           | 1. Destroyed key slot                                                                    |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Calling this function with key policy that cannot be exported                                                    | Invalid key policy usage                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_DOES_NOT_EXIST                    | Calling this function with empty key slot                                                                        | Empty key slot                                                                           |   |
+| Key Management               | test_c005 | psa_destroy_key                  | Destroy a key and restore the slot to its default state.                               | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 24 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. 32 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Get basic metadata about a key                                                                                | 4. 2048 RSA public key                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Destroy a key and restore the slot to its default state                                                       | 5. 2048 RSA keypair                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Check that if the key metadata are destroyed                                                                  | 6. DES 64 bit key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. Triple DES 2-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. Triple DES 3-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. EC Public key                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 10. EC keypair                                                                           |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    | Calling this function with invalid parameter should return this error                                            | Already destroyed key slot                                                               |   |
+| Message Digests              | test_c006 | psa_hash_compute                 | Calculate the hash (digest) of a message                                               | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. MD2                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Calculate the hash (digest) of a message                                                                      | 2. MD4                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Check if it matches with the expected values                                                                  | 3. MD5                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. RIPEMD160                                                                             |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 5. SHA1                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 6. SHA224                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. SHA256                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. SHA384                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. SHA512                                                                                |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  | Calling this function with small buffer size  should return this error                                           | small buffer size                                                                        |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     | Calling this function with invalid algorithm  should return this error                                           | Invalid algorithm                                                                        |   |
+| Message Digests              | test_c007 | psa_hash_compare                 | Calculate the hash (digest) of a message and compare it with a reference value         | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. MD2                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Calculate the hash (digest) of a message and compare it with a reference value                                | 2. MD4                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. MD5                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. RIPEMD160                                                                             |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 5. SHA1                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 6. SHA224                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. SHA256                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. SHA384                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. SHA512                                                                                |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_SIGNATURE                 | Calling this function with incorrect expected hash                                                               | Incorrect expected hash                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             | Calling this function with incorrect expected hash                                                               | Incorrect expected hash length                                                           |   |
+| Key Derivation               | test_c008 | psa_key_derivation_setup         | Set up a key derivation operation.                                                     | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. ECDH + HKDF-SHA-256                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 2.  Set up a key derivation operation                                                                            |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Abort the key derivation operation                                                                            |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  | Calling this function with invalid parameter should return this error                                            | 1. Bad key derivation algorithm                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Invalid Algorithm                                                                     |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     | Calling this function with unsupported parameter should return this error                                        | ECDH, unknown KDF                                                                        |   |
+| Key Derivation               | test_c009 | psa_key_derivation_input_bytes   | Provide an input for key derivation or key agreement                                   | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. Step as Info                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Initialize a key policy structure to a default that forbids all usage of the key                              | 2. Step as salt                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Provide an input for key derivation or key agreement                                                          | 3. Step as label                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Allocate a key slot for a transient key                                                                       | 4. Step as seed                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  | Calling this function with invalid parameter should return this error                                            | 1. Step as secret                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Invalid step                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Key derivation on an aborted operation                                                                           | Aborted operation                                                                        |   |
+| Key Attributes               | test_c010 | psa_set_key_id                   | Set the attributes for the key                                                         | NA                                          | 1. Initialize the PSA crypto library                                                                             | Testing only volatile keys and persistence key types will be supported in future release |   |
+|                              |           | psa_set_key_lifetime             |                                                                                        |                                             | 2. Check if all the attributes are initialized to zero                                                           |                                                                                          |   |
+|                              |           | psa_set_key_type                 |                                                                                        |                                             | 3. Setup the attributes for the key                                                                              |                                                                                          |   |
+|                              |           | psa_set_key_bits                 |                                                                                        |                                             | 4. Check if all the attributes are as per the input                                                              |                                                                                          |   |
+|                              |           | psa_set_key_usage_flags          |                                                                                        |                                             | 5. Reset the attributes                                                                                          |                                                                                          |   |
+|                              |           | psa_set_key_algorithm            |                                                                                        |                                             | 6. Check if all the attributes are erased                                                                        |                                                                                          |   |
+|                              |           | psa_get_key_id                   | Get the attributes for the key                                                         |                                             |                                                                                                                  |                                                                                          |   |
+|                              |           | psa_get_key_lifetime             |                                                                                        |                                             |                                                                                                                  |                                                                                          |   |
+|                              |           | psa_get_key_type                 |                                                                                        |                                             |                                                                                                                  |                                                                                          |   |
+|                              |           | psa_get_key_bits                 |                                                                                        |                                             |                                                                                                                  |                                                                                          |   |
+|                              |           | psa_get_key_usage_flags          |                                                                                        |                                             |                                                                                                                  |                                                                                          |   |
+|                              |           | psa_get_key_algorithm            |                                                                                        |                                             |                                                                                                                  |                                                                                          |   |
+|                              |           | psa_reset_key_attributes         |                                                                                        |                                             |                                                                                                                  |                                                                                          |   |
+| Message Digests              | test_c011 | psa_hash_start                   | Start a multipart hash operation.                                                      | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. MD2                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Start a multipart hash operation                                                                              | 2. MD4                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Abort the hash operation                                                                                      | 3. MD5                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. RIPEMD160                                                                             |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 5. SHA1                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 6. SHA224                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. SHA256                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. SHA512                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. SHA512_224                                                                            |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 10. SHA512_256                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 11. SHA3_224 1                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. SHA3_256 1                                                                            |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. SHA3_384 1                                                                            |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. SHA3_512                                                                              |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     | Calling this function with unsupported algorithm should return error                                             | Invalid hash algorithm                                                                   |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Calling this function again after setup                                                                          | Multiple setup calls after one another                                                   |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  | Calling this function with invalid parameter should return this error                                            | 1. Invalid algorithm                                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. CTR algorithm                                                                         |   |
+| Message Digests              | test_c012 | psa_hash_update                  | Add a message fragment to a multipart hash operation.                                  | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. MD2                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Start a multipart hash operation                                                                              | 2. MD4                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Add a message fragment to a multipart hash operation                                                          | 3. MD5                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Abort the hash operation                                                                                      | 4. RIPEMD160                                                                             |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 5. SHA1                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 6. SHA224                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. SHA256                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. SHA384                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. SHA512                                                                                |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | 1. Calling this function without calling the psa_hash_setup() should return error                                | Operation handle without setup                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Calling this function with completed operation handle should return error                                     | Completed operation handle                                                               |   |
+| Message Digests              | test_c013 | psa_hash_verify                  | Finish the calculation of the hash of a message and compare it with an expected value. | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. MD2                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Start a multipart hash operation                                                                              | 2. MD4                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Add a message fragment to a multipart hash operation                                                          | 3. MD5                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Finish the calculation of the hash of a message and compare it with an expected value                         | 4. RIPEMD160                                                                             |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Abort the hash operation                                                                                      | 5. SHA1                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 6. SHA224                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. SHA256                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. SHA384                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. SHA512                                                                                |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Calling this function with inactive operation handle should return error                                         | 1. Inactive operation handle                                                             |   |
+|                              |           |                                  |                                                                                        |                                             | Calling this function with invalid operation handle should return error                                          | 2. Invalid operation handle                                                              |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_SIGNATURE                 | Calling this function with incorrect expected value should return error                                          | 1. Incorrect expected hash value                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Incorrect expected hash length                                                        |   |
+| Message Digests              | test_c014 | psa_hash_finish                  | Finish the calculation of the hash of a message.                                       | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. MD2                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Start a multipart hash operation                                                                              | 2. MD4                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Add a message fragment to a multipart hash operation                                                          | 3. MD5                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Finish the calculation of the hash of a message                                                               | 4. RIPEMD160                                                                             |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Compare it with the expected value                                                                            | 5. SHA1                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Abort the hash operation                                                                                      | 6. SHA224                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. SHA256                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. SHA384                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. SHA512                                                                                |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  | Calling this function with an inactive operation handle should return error                                      | Inactive operation handle                                                                |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  | Calling this function with a hash buffer whose size is less than the algorithm output should return error        | Buffer size less than required                                                           |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Calling this function with completed operation handle                                                            | completed operation handle                                                               |   |
+| Message Digests              | test_c015 | psa_hash_abort                   | Abort a hash operation.                                                                | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. MD2                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Start a multipart hash operation                                                                              | 2. MD4                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Abort a hash operation                                                                                        | 3. MD5                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. RIPEMD160                                                                             |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 5. SHA1                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 6. SHA224                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. SHA256                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. SHA384                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. SHA512                                                                                |   |
+| Generation                   | test_c016 | psa_generate_key                 | Generate a key or key pair                                                             | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. DES                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Generate a key or key pair                                                                                    | 3. ECC                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Get basic metadata about a key                                                                                | 4. RSA                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Check if key type and key length matches                                                                      |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Export a key in binary format                                                                                 |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Check if the metadata matches                                                                                 |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Reset and destroy the key                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  | Calling this function with invalid usage flags                                                                   | invalid usage flags                                                                      |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_ALREADY_EXISTS                    | Calling this function with pre-occupied key slot should return this error                                        | Pre-occupied key slot                                                                    |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     | Calling this function to generate only public key should return this error                                       | 1. Key type as public key                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Invalid key type                                                                      |   |
+| Generation                   | test_c017 | psa_generate_random              | Generate random bytes                                                                  | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte data                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Generate random bytes Run several times to ensure that every output byte will be nonzero at least once        | 2. 24 Byte data                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Check that no more than bytes have been overwritten                                                           | 3. 32 Byte data                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Check that every byte was changed to nonzero at least once.                                                   | 4. 64 Byte data                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 5. 128 Byte data                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 6. 256 Byte data                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. 512 Byte data                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. 1000 Byte data                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. 1024 Byte data                                                                        |   |
+| Key Derivation               | test_c018 | psa_key_derivation_input_key     | Provide an input for key derivation in the form of a key                               | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte key                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set up a key derivation operation                                                                             |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Provide an input for key derivation or key agreement                                                          |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Abort the key derivation operation                                                                            |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     | Calling this function with incorrect data                                                                        | 1. Invalid usage                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Incorrect key algorithm                                                               |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  | Calling this function with invalid parameter should return this error                                            | 1. Step as label                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Step as info                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Step as seed                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. Step as salt                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 5. Input key type as AES (not derive)                                                    |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 6. Key type a RSA public key                                                             |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. Key type as RSA Keypair                                                               |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    | Calling this function with destroyed key handle                                                                  | 1. No key in slot                                                                        |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Calling this function without setup should return this error                                                     |                                                                                          |   |
+| Key Derivation               | test_c019 | psa_key_derivation_key_agreement | Perform a key agreement and use the shared secret as input to a key derivation         | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. ECDH SECP256R1                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. ECDH SECP384R1                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set up a key agreement operation                                                                              |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Perform a key agreement                                                                                       |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Abort                                                                                                         |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  | Calling this function with invalid parameter should return this error                                            | 1. Invalid step                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Invalid usage                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. KDF instead of a key agreement algorithm                                              |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. Public key on different curve                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 5. Public key instead of private key                                                     |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | 1. Zero as key slot                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Empty key handle                                                                      |   |
+| Key Derivation               | test_c020 | psa_key_derivation_output_bytes  | Read some data from a key derivation operation                                         | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. Key                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. Info                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key if the derivation input is key                                                                 |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set up a key derivation operation                                                                             |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Set the capacity for the generator                                                                            |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Provide input as key or data depending on the step                                                            |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Read some data from a key derivation operation                                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Abort the derivation operation                                                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Calling this function with only supportive step                                                                  | 1. Salt                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Label                                                                                 |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Seed                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. Aborted operation                                                                     |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INSUFFICIENT_DATA                 | Calling this function when there are no capacity                                                                 | 1. Requesting greater capacity than available                                            |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. No data available in the operation                                                    |   |
+| Key Derivation               | test_c021 | psa_key_derivation_output_key    | Derive a key from an ongoing key derivation operation                                  | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. Key                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. Indo                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key if the derivation input is key                                                                 | 3. Label                                                                                 |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set up a key derivation operation                                                                             | 4. Seed                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Set the capacity for the generator                                                                            | 5. Salt                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Provide input as key or data depending on the step                                                            | 6. DES key export                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Setup the attributes for the new key                                                                          | 7. ECC keypair                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Derive a key from an ongoing key derivation operation                                                         | 9. RSA keypair                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 9. Abort the derivation operation                                                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INSUFFICIENT_DATA                 | Calling this function with insufficient data                                                                     | 1. Requesting greater capacity than available                                            |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. No data available in the operation                                                    |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Calling this function on an aborted operation shoukd return this error                                           | Aborted operation                                                                        |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     | Generating public key                                                                                            | 1. RSA public key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. ECC public key                                                                        |   |
+| Key Derivation               | test_c022 | psa_key_derivation_abort         | Abort a key derivation operation                                                       | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Abort the key derivation operation for the different types of initialization                                  |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Read some data from a key derivation operation with no data in the operation                                  |                                                                                          |   |
+| Key Derivation               | test_c023 | psa_key_derivation_set_capacity  | Set the maximum capacity of a key derivation operation                                 | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. Less than operation's capacity                                                        |   |
+|                              |           | psa_key_derivation_get_capacity  | Retrieve the current capacity of a key derivation operation                            |                                             | 2. Start the key derivation operation                                                                            | 2. Equal to operation's capacity                                                         |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Set the capacity for the generator                                                                            |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Get the capacity for the generator                                                                            |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Check if the capacity as per the expected value                                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Abort the operation                                                                                           |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  | Calling this function with invalid parameter should return this error                                            | More than operation's capacity                                                           |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Calling this function on an aborted operation shoukd return this error                                           | 1. Get capacity on an aborted operation                                                  |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Set capacity on an aborted operation                                                  |   |
+| AEAD                         | test_c024 | psa_aead_encrypt                 | Process an authenticated encryption operation                                          | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. CCM - 16B AES - 13B Nounce & 8B addi data                                             |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES-CCM                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. AES-CCM 24 bytes Tag length = 4                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Call aead encrypt                                                                                             | 4. GCM - 16B AES - 12B Nounce & 12B addi data                                            |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Check if the status is expected                                                                               | 5                                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Check if the cipher text and length is as expected                                                            |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Destroy and reset the key                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     |                                                                                                                  | 1. DES key                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Unsupported algorithm                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | Operation on a destroyed key handle                                                      |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | 1. Small output buffer size                                                              |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Invalid key usage                                                                     |   |
+| AEAD                         | test_c025 | psa_aead_decrypt                 | Process an authenticated decryption operation                                          | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. GCM -16B AES - 12B Nounce & 12B addi data                                             |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. CCM - 16B AES - 13B Nounce & 8B addi data                                             |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. AES CCM                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Call aead decrypt                                                                                             | 4. AES-CCM 24 bytes Tag length = 4                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Check if the status is expected                                                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Check if the cipher text and length is as expected                                                            |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Destroy and reset the key                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     |                                                                                                                  | 1. DES key                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Unsupported algorithm                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small output buffer size                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | Invalid tag length                                                                       |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | Destroyed key handle                                                                     |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Invalid key usage                                                                        |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_SIGNATURE                 |                                                                                                                  | 1. Invalid cipher text                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Invalid cipher text size                                                              |   |
+| Message Authentication Codes | test_c026 | psa_mac_sign_setup               | Start a multipart MAC calculation operation                                            | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 64 Byte HMAC                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 16 Byte AES - CMAC                                                                    |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Start a multipart MAC calculation operation                                                                   |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Abort the MAC operation                                                                                       |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Destroy the key                                                                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     |                                                                                                                  | 1. 16 Byte AES - GMAC                                                                    |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Incompatible HMAC for CMAC                                                            |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Bad algorithm (unknown MAC algorithm)                                                 |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. Truncated MAC too small                                                               |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Invalid usage                                                                            |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Invalid key type                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Truncated MAC too large                                                               |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Bad algorithm (not a MAC algorithm)                                                   |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | 1. Invalid key handle                                                                    |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Zero as key handle                                                                    |   |
+| Message Authentication Codes | test_c027 | psa_mac_update                   | Add a message fragment to a multipart MAC operation                                    | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1.64 Byte HMAC SHA256                                                                    |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 16 Byte AES - CMAC                                                                    |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. 32 Byte HMAC SHA512                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Start a multipart MAC calculation operation                                                                   |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Add a message fragment to a multipart MAC operation                                                           |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Finish the calculation of the MAC of a message                                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Abort a MAC operation                                                                                         |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Destroy the key                                                                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         |                                                                                                                  | 1. Completed operation as input                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Uninitialized operation as input                                                      |   |
+| Message Authentication Codes | test_c028 | psa_mac_sign_finish              | Finish the calculation of the MAC of a message                                         | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. HMAC SHA 224                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. HMAC SHA 256                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. HMAC SHA 512                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Start a multipart MAC calculation operation                                                                   | 4. HMAC SHA 224 (truncated to 8 Byte)                                                    |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Add a message fragment to a multipart MAC operation                                                           | 5. CMAC AES 128                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Finish the calculation of the MAC of a message                                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7.  Check if the MAC length matches with the expected length                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Check if the MAC data matches with the expected data                                                          |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small size buffer                                                                        |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Finish the calculation of the MAC of a message using same operation should return error                          | Aborted operation as input                                                               |   |
+| Message Authentication Codes | test_c029 | psa_mac_verify_setup             |                                                                                        | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 64 Byte HMAC                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 16 Byte AES - CMAC                                                                    |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Start a multipart MAC calculation operation                                                                   |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Abort the MAC operation                                                                                       |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Destroy the key                                                                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     |                                                                                                                  | 1. 16 Byte AES - GMAC                                                                    |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Incompatible HMAC for CMAC                                                            |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Bad algorithm (unknown MAC algorithm)                                                 |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. Truncated MAC too small                                                               |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Invalid usage                                                                            |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Invalid key type                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Truncated MAC too large                                                               |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Bad algorithm (unknown MAC algorithm)                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | 1. Invalid key handle                                                                    |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Zero as key handle                                                                    |   |
+| Message Authentication Codes | test_c030 | psa_mac_verify_finish            | Finish the calculation of the MAC of a message and compare it with an expected value   | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. HMAC SHA 224                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. HMAC SHA 256                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. HMAC SHA 512                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Start a multipart MAC calculation operation                                                                   | 4. HMAC SHA 224 (truncated to 8 Byte)                                                    |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Add a message fragment to a multipart MAC operation                                                           | 5. CMAC AES 128                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Finish the calculation of the MAC of a message and compare with expected value                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_SIGNATURE                 |                                                                                                                  | 1. Small size buffer                                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Incorrect expected hash                                                               |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         |                                                                                                                  | Invalid operation as input                                                               |   |
+| Message Authentication Codes | test_c031 | psa_mac_abort                    | Abort a MAC operation                                                                  | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. HMAC SHA 224                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. HMAC SHA 256                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. HMAC SHA 512                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Start a multipart MAC calculation operation                                                                   | 4. CMAC AES 128                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Abort the MAC operation                                                                                       | 5. HMAC truncated                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Destroy the key                                                                                               | 6. Multiple abort                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. psa_mac_finish after psa_mac_abort should return failure                              |   |
+| Symmetric Ciphers            | test_c032 | psa_cipher_encrypt_setup         | Set the key for a multipart symmetric encryption operation                             | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 24 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. 32 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart symmetric encryption operation                                                    | 4. DES 64 bit key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Reset and destroy the key                                                                                     | 5. Triple DES 2-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 6. Triple DES 3-Key                                                                      |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     |                                                                                                                  | 1. 16 Byte raw data                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Unknown cipher algorithm                                                              |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Incompatible key ARC4                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Not a cipher algorithm                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. RSA public key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. RSA keypair                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. EC Public key                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 5. EC keypair                                                                            |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Incorrect usage                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | 1. Unallocated key handle                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Zero as key handle                                                                    |   |
+| Symmetric Ciphers            | test_c033 | psa_cipher_decrypt_setup         | Set the key for a multipart symmetric decryption operation                             | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 24 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. 32 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart symmetric decryption operation                                                    | 4. DES 64 bit key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Reset and destroy the key                                                                                     | 5. Triple DES 2-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 6. Triple DES 3-Key                                                                      |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     |                                                                                                                  | 1. 16 Byte raw data                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Unknown cipher algorithm                                                              |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Incompatible key ARC4                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Not a cipher algorithm                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. RSA public key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. RSA keypair                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. EC Public key                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 5. EC keypair                                                                            |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | 1. Unallocated key handle                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Zero as key handle                                                                    |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Invalid usage                                                                            |   |
+| Symmetric Ciphers            | test_c034 | psa_cipher_generate_iv           | Generate an IV for a symmetric encryption operation                                    | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 24 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. 32 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart symmetric decryption operation                                                    | 4. DES 64 bit key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Generate an IV for a symmetric encryption operation                                                           | 5. Triple DES 2-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Check that if generated iv length match the expected length                                                   | 6. Triple DES 3-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Check that if generated iv are not zero                                                                       | 7. AES - large iv buffer                                                                 |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Reset and destroy the key                                                                                     | 8. DES - large iv buffer                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | 1. AES - small iv buffer                                                                 |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. DES - small iv buffer                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         |                                                                                                                  | 1. Completed operation handle                                                            |   |
+| Symmetric Ciphers            | test_c035 | psa_cipher_set_iv                | Set the IV for a symmetric encryption or decryption operation                          | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 24 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. 32 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart symmetric encryption/decryption operation                                         | 4. DES 64 bit key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Set an IV for a symmetric encryption/decryption operation                                                     | 5. Triple DES 2-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Reset and destroy the key                                                                                     | 6. Triple DES 3-Key                                                                      |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. AES - small iv buffer                                                                 |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. DES - small iv buffer                                                                 |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. AES - large iv buffer                                                                 |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. DES - large iv buffer                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Setting an IV for a symmetric encryption/decryption operation using the same operator should fail                | 1. Completed operation handle                                                            |   |
+| Symmetric Ciphers            | test_c036 | psa_cipher_update                | Encrypt or decrypt a message fragment in an active cipher operation                    | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES CBC_NO_PADDING                                                                    |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES CBC_NO_PADDING (Short input)                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. AES CBC_PKCS7                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart symmetric encryption operation                                                    | 4. AES CBC_PKCS7 (Short input)                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Set an IV for a symmetric encryption operation                                                                | 5. AES CTR                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Encrypt or decrypt a message fragment in an active cipher operation                                           | 6. DES CBC (nopad)                                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Check if the output length matches the expected length                                                        | 7. 2-key 3DE -CBC (nopad)                                                                |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Check if the output data matches the expected data                                                            | 8. 3-key 3DE -CBC (nopad)                                                                |   |
+|                              |           |                                  |                                                                                        |                                             | 9. Reset and destroy the key                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Encrypt or decrypt a message fragment in an invalid cipher operation should fail                                 | Invalid operation as input                                                               |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small output buffer size                                                                 |   |
+| Symmetric Ciphers            | test_c037 | psa_cipher_finish                | Finish encrypting or decrypting a message in a cipher operation                        | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES CBC_NO_PADDING                                                                    |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES CBC_PKCS7                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. AES CBC_PKCS7 (Short input)                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart symmetric encryption operation                                                    | 4. AES CTR                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Set an IV for a symmetric encryption operation                                                                | 5. DES CBC (nopad)                                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Encrypt or decrypt a message fragment in an active cipher operation                                           | 6. 2-key 3DE -CBC (nopad)                                                                |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Finish encrypting or decrypting a message in a cipher operation                                               | 7. 3-key 3DE -CBC (nopad)                                                                |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Check if the output length matches the expected length                                                        |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 9. Check if the output data matches the expected data                                                            |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 10. Reset and destroy the key                                                                                    |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Encrypt or decrypt a message fragment in an invalid cipher operation should fail                                 | Invalid operation as input                                                               |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small output buffer size                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | AES CBC_NO_PADDING (Short input)                                                         |   |
+| Symmetric Ciphers            | test_c038 | psa_cipher_abort                 | Abort a cipher operation                                                               | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. Encrypt - AES CBC_NO_PADDING                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. Encrypt - AES CBC_PKCS7                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. Encrypt - AES CTR                                                                     |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart symmetric encryption/decryption operation                                         | 4. Encrypt - DES CBC (nopad)                                                             |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Abort a cipher operation                                                                                      | 5. Encrypt - 2-key 3DE -CBC (nopad)                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Multiple abort cipher operation should return success                                                         | 6. Encrypt - 3-key 3DE -CBC (nopad)                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. Decrypt - AES CBC_NO_PADDING                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. Decrypt - AES CBC_PKCS7                                                               |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. Decrypt - AES CTR                                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 10. Decrypt - DES CBC (nopad)                                                            |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 11. Decrypt - 2-key 3DE -CBC (nopad)                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 12. Decrypt - 3-key 3DE -CBC (nopad)                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 13. psa_cipher_update after psa_cipher_abort should fail                                 |   |
+| Asymmetric Cryptography      | test_c039 | psa_asymmetric_encrypt           | Encrypt a short message with a public key                                              | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. RSA PKCS1V15                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. RSA OAEP SHA256                                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. RSA OAEP SHA256 with label                                                            |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Encrypt a short message with a public key                                                                     | 4. RSA KEYPAIR PKCS1V15                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Check if the output length matches with the expected output length                                            |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Decrypt the cipher text                                                                                       |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Check if the output length matches with the input length                                                      |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Check if the output matches with the given input data                                                         |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 9. Reset and destroy the key                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Invalid key type                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Invalid algorithm                                                                     |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Invalid usage                                                                            |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small output buffer                                                                      |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | 1. Invalid handle                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Zero as key handle                                                                    |   |
+| Asymmetric Cryptography      | test_c040 | psa_asymmetric_decrypt           | Decrypt a short message with a private key                                             | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. RSA KEYPAIR PKCS1V15                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. RSA KEYPAIR OAEP SHA256                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. RSA KEYPAIR OAEP SHA256 with label                                                    |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Decrypt a short message with a private key                                                                    |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Check if the output length matches with the expected length                                                   |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Check if the output matches with the expected data                                                            |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Reset and destroy the key                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT+E524             |                                                                                                                  | 1. Invalid key type (RSA public key)                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Invalid algorithm                                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Invalid key type (AES Key)                                                            |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_DOES_NOT_EXIST                    |                                                                                                                  | Empty key slot                                                                           |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Invalid usage                                                                            |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | Uninitialized key handle                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small output buffer                                                                      |   |
+| Asymmetric Cryptography      | test_c041 | psa_asymmetric_sign              | Sign a hash or short message with a private key                                        | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. RSA KEYPAIR PKCS1V15 RAW                                                              |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. RSA KEYPAIR PKCS1V15 SHA-256                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. ECDSA KEYPAIR SECP256R1 SHA-256                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Sign a hash or short message with a private key                                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Check if the output length matches with the expected length                                                   |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Check if the output matches with the expected data                                                            |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Reset and destroy the key                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Invalid key type (RSA public key)                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Invalid algorithm                                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Invalid key type (AES Key)                                                            |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. Wrong hash size                                                                       |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | Uninitialized key handle                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_DOES_NOT_EXIST                    |                                                                                                                  | Empty key slot                                                                           |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Invalid usage                                                                            |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small output buffer                                                                      |   |
+| Asymmetric Cryptography      | test_c042 | psa_asymmetric_verify            | Verify the signature a hash or short message using a public key                        | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. RSA KEYPAIR PKCS1V15 RAW                                                              |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. RSA KEYPAIR PKCS1V15 SHA-256                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. ECDSA KEYPAIR SECP256R1 SHA-256                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Verify the signature a hash or short message using a public key                                               | 4. RSA public key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Reset and destroy the key                                                                                     | 5. EC public key                                                                         |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Invalid algorithm                                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Wrong hash size                                                                       |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_SIGNATURE                 |                                                                                                                  | Wrong signature size                                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | Wrong signature                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_DOES_NOT_EXIST                    |                                                                                                                  | Empty key slot                                                                           |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Invalid usage                                                                            |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     |                                                                                                                  | Invalid key type (AES Key)                                                               |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small output buffer                                                                      |   |
+| Key Derivation               | test_c043 | psa_raw_key_agreement            | Perform a key agreement and return the raw shared secret                               | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. ECDH SECP256R1                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. ECDH SECP384R1                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set up a key agreement operation                                                                              |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Reset and destroy the key                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Not a key agreement alg                                                               |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Public key on different curve                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Public key instead of private key                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. Unknown KDF                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 5. Small size buffer                                                                     |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | Uninitialized key handle                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Invalid usage                                                                            |   |
+| Key Management               | test_c044 | psa_copy_key                     | Copy key material from one location to another                                         | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 24 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. 32 Byte AES with constraints                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Setup the attributes for the target key                                                                       | 4. 2048 RSA public key                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Make a copy of a key                                                                                          | 5. 2048 RSA key pair                                                                     |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Destroy the source to ensure that this doesn't affect the target                                              | 6. DES 64 bit key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Export a key in binary format and check if it matches with source material                                    | 7. Triple DES 2-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Reset and destroy the key                                                                                     | 8. Triple DES 3-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. EC Public key                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 10. EC key pair                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Incompatible target policy(source and target)                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Incompatible constraint                                                               |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Incompatible target policy                                                            |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. Copy on a destroyed source                                                            |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | 1. Unallocated target key slot                                                           |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Usage set as export (not copy)                                                           |   |
+| Key Management               | test_c045 | psa_hash_clone                   | Clone a hash operation.                                                                | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. MD2                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Start a multipart hash operation                                                                              | 2. MD4                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Clone a hash operation                                                                                        | 3. MD5                                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Add a message fragment to a multipart hash source_operation                                                   | 4. RIPEMD160                                                                             |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Finish the calculation of the hash of a message                                                               | 5. SHA1                                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Abort the hash operation                                                                                      | 6. SHA224                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. SHA256                                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. SHA512                                                                                |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         | Cloning to an active hash operation should be an error                                                           | 1. Active clone hash                                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Aborted operator                                                                      |   |
+| Message Authentication Codes | test_c046 | psa_mac_compute                  | Calculate the MAC (message authentication code) of a message.                          | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. HMAC SHA 224                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. CMAC AES 128                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. HMAC SHA 224 (truncated to 8 Byte                                                     |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Calculate the MAC (message authentication code) of a message                                                  | 4. HMAC SHA 512                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Check if the MAC length and data  matches with the expected  values                                           | 5. HMAC SHA 256                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Reset and destroy the key                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     | Calling this function with unsupported values                                                                    | 1. Incompactible HMAC for CMAC                                                           |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Invalid usage                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Truncated MAC too small                                                               |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. Bad algorithm (unknown MAC algorithm)                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  | Calling this function with invalid parameter should return this error                                            | 1. Invalid key type                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Truncated MAC too large                                                               |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small size buffer                                                                        |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | Destroyed key handle                                                                     |   |
+| Message Authentication Codes | test_c047 | psa_mac_verify                   | Calculate the MAC of a message and compare it with a reference value                   | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. HMAC SHA 224                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. HMAC SHA 256                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. HMAC SHA 512                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Calculate and verify MAC with reference value                                                                 | 4. HMAC SHA 224 (truncated to 8 Byte)                                                    |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Reset and destroy the key                                                                                     | 5. CMAC AES 128                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     | Calling this function with unsupported values                                                                    | 1. Incompactible HMAC for CMAC                                                           |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Invalid usage                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Truncated MAC too small                                                               |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. Bad algorithm (unknown MAC algorithm)                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_SIGNATURE                 |                                                                                                                  | 1. Small size buffer                                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Incorrect expected MAC                                                                |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Truncated MAC too large                                                               |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Invalid key type                                                                      |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | Destroyed key handle                                                                     |   |
+| Symmetric Ciphers            | test_c048 | psa_cipher_encrypt               | Encrypt a message using a symmetric cipher.                                            | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES CBC_NO_PADDING                                                                    |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES CBC_PKCS7                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. AES CBC_PKCS7 (Short input)                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Encrypt a message using a symmetric cipher                                                                    | 4. AES CTR                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Check if the output  matches the expected value                                                               | 5. AES CTR (short input)                                                                 |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Reset and destroy the key                                                                                     | 6. DES CBC (nopad)                                                                       |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. 2-key 3DE -CBC (nopad)                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. 3-key 3DE -CBC (nopad)                                                                |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Decrypt - AES CBC_NO_PADDING                                                             |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small output buffer size                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | AES CBC_NO_PADDING (Short input)                                                         |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | Aborted key handle                                                                       |   |
+| Symmetric Ciphers            | test_c049 | psa_cipher_decrypt               | Decrypt a message using a symmetric cipher.                                            | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES CBC_NO_PADDING                                                                    |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES CBC_PKCS7                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. AES CBC_PKCS7 (Short input)                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Encrypt a message using a symmetric cipher                                                                    | 4. AES CTR                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Check if the output  matches the expected value                                                               | 5. AES CTR (short input)                                                                 |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Reset and destroy the key                                                                                     | 6. DES CBC (nopad)                                                                       |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. 2-key 3DE -CBC (nopad)                                                                |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. 3-key 3DE -CBC (nopad)                                                                |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | AES CBC_NO_PADDING (Short input)                                                         |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | AES CBC_NO_PADDING                                                                       |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small output buffer size                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | Aborted key handle                                                                       |   |
+| Key Management               | test_c050 | psa_open_key                     | Open a handle to an existing persistent key                                            | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 24 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. 32 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Save the details of current check, key id and key handle value in NV memory                                   | 4. 2048 RSA public key                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Reset the system                                                                                              | 5. 2048 RSA keypair                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 6. After reset, get the values of check, key id and key handle value before the system was reset from NV         | 6. DES 64 bit key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Get the attributes of the imported key and check if it matches the given value                                | 7. Triple DES 2-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Export a key in binary format                                                                                 | 8. Triple DES 3-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 9. Check the value of the exported key                                                                           | 9. EC Public key                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             | 10. Reset and destroy the key                                                                                    | 10. EC keypair                                                                           |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | Key data greater than the algorithm size                                                 |   |
+| Key Management               | test_c051 | psa_close_key                    | Close a key handle                                                                     | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. 16 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. 24 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. 32 Byte AES                                                                           |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Close the key handle                                                                                          | 4. 2048 RSA public key                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Check if all the attributes are erased                                                                        | 5. 2048 RSA keypair                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Open the key handle and retrieve the data                                                                     | 6. DES 64 bit key                                                                        |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 7. Triple DES 2-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 8. Triple DES 3-Key                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 9. EC Public key                                                                         |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 10. EC keypair                                                                           |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | Closing an empty key handle                                                              |   |
+| AEAD                         | test_c052 | psa_aead_encrypt_setup           | Set the key for a multipart authenticated encryption operation                         | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES-CCM                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES-CCM 24 bytes Tag length = 4                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. GCM - 16B AES - 12B Nounce & 12B addi data                                            |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart authenticated encryption operation                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Destroy the key                                                                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Abort the AEAD operation                                                                                      |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     |                                                                                                                  | 1. DES Key                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Unsupported Algorithm                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Invalid key usage                                                                        |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | Destroyed key handle                                                                     |   |
+| AEAD                         | test_c053 | psa_aead_decrypt_setup           | Set the key for a multipart authenticated decryption operation                         | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES-CCM                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES-CCM 24 bytes Tag length = 4                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. GCM - 16B AES - 12B Nounce & 12B addi data                                            |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart authenticated decryption operation                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Destroy the key                                                                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Abort the AEAD operation                                                                                      |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_SUPPORTED                     |                                                                                                                  | 1. DES Key                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Unsupported Algorithm                                                                 |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_NOT_PERMITTED                     |                                                                                                                  | Invalid key usage                                                                        |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_HANDLE                    |                                                                                                                  | Destroyed key handle                                                                     |   |
+| AEAD                         | test_c054 | psa_aead_generate_nonce          | Generate a random nonce for an authenticated encryption operation                      | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES-CCM                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES-CCM 24 bytes Tag length = 4                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. GCM - 16B AES - 12B Nounce & 12B addi data                                            |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart authenticated decryption operation                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Generate a random nonce for an authenticated encryption operation                                             |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Check that if generated iv are non zero                                                                       |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Destroy the key                                                                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Reset the key attributes                                                                                      |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small buffer size                                                                        |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         |                                                                                                                  | 1. Call generate a random nonce twice                                                    |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Aborted operation                                                                     |   |
+| AEAD                         | test_c055 | psa_aead_set_nonce               | Set the nonce for an authenticated encryption or decryption operation                  | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES-CCM                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES-CCM 24 bytes Tag length = 4                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. GCM - 16B AES - 12B Nounce & 12B addi data                                            |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart authenticated decryption operation                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Set the nonce for an authenticated encryption operation                                                       |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Reset and destroy the key                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Small nounce size                                                                     |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Large nonce size                                                                      |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         |                                                                                                                  | 1. Call set nonce twice                                                                  |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Aborted operation                                                                     |   |
+| AEAD                         | test_c056 | psa_aead_set_lengths             | Declare the lengths of the message and additional data for AEAD                        | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES-CCM                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES-CCM 24 bytes Tag length = 4                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart authenticated decryption operation                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Set the nonce for an authenticated encryption operation                                                       |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Declare the lengths of the message and additional data for AEAD                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Abort the AEAD operation                                                                                      |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Reset and destroy the key                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Zero ad size                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Zero plaintext size                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Invalid lengths                                                                       |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. Vey large lengths                                                                     |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         |                                                                                                                  | 1. Failed operation                                                                      |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Aborted operation                                                                     |   |
+| AEAD                         | test_c057 | psa_aead_update_ad               | Pass additional data to an active AEAD operation                                       | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES-CCM                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES-CCM 24 bytes Tag length = 4                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart authenticated decryption operation                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Set the nonce for an authenticated encryption operation                                                       |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Declare the lengths of the message and additional data for AEAD                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Pass additional data to an active AEAD operation                                                              |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Reset and destroy the key                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Zero ad size                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Zero plaintext size                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 3. Invalid lengths                                                                       |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 4. Vey large lengths                                                                     |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         |                                                                                                                  | Inactive AEAD operation                                                                  |   |
+| AEAD                         | test_c058 | psa_aead_update                  | Encrypt or decrypt a message fragment in an active AEAD operation                      | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES-CCM                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES-CCM 24 bytes Tag length = 4                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. GCM - 16B AES - 12B Nounce & 12B addi data                                            |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart authenticated decryption operation                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Set the nonce for an authenticated encryption operation                                                       |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Declare the lengths of the message and additional data for AEAD                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Pass additional data to an active AEAD operation                                                              |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Encrypt or decrypt a message fragment in an active AEAD operation                                             |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 9. Compare the output and its length with the expected values                                                    |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 10. Abort the AEAD operation                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 11. Reset and destroy the key                                                                                    |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Zero plaintext size                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Input length overflows plaintext length                                               |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small buffer size                                                                        |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         |                                                                                                                  | Inactive AEAD operation                                                                  |   |
+| AEAD                         | test_c059 | psa_aead_finish                  | Finish encrypting a message in an AEAD operation                                       | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES-CCM                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES-CCM 24 bytes Tag length = 4                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. GCM - 16B AES - 12B Nounce & 12B addi data                                            |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart authenticated decryption operation                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Set the nonce for an authenticated encryption operation                                                       |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Declare the lengths of the message and additional data for AEAD                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Pass additional data to an active AEAD operation                                                              |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Encrypt or decrypt a message fragment in an active AEAD operation                                             |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 9. Finish encrypting a message in an AEAD operation                                                              |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 10. Compare the output and its length with the expected values                                                   |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 11. Abort the AEAD operation                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 12. Reset and destroy the key                                                                                    |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | 1. Zero plaintext size                                                                   |   |
+|                              |           |                                  |                                                                                        |                                             |                                                                                                                  | 2. Input length overflows plaintext length                                               |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small buffer size                                                                        |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         |                                                                                                                  | Inactive AEAD operation                                                                  |   |
+| AEAD                         | test_c060 | psa_aead_abort                   | Abort an AEAD operation                                                                | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES-CCM                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES-CCM 24 bytes Tag length = 4                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. GCM - 16B AES - 12B Nounce & 12B addi data                                            |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart authenticated decryption operation                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Abort the AEAD operation                                                                                      |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Reset and destroy the key                                                                                     |                                                                                          |   |
+| AEAD                         | test_c061 | psa_aead_verify                  | Finish authenticating and decrypting a message in an AEAD operation                    | PSA_SUCCESS                                 | 1. Initialize the PSA crypto library                                                                             | 1. AES-CCM                                                                               |   |
+|                              |           |                                  |                                                                                        |                                             | 2. Setup the attributes for the key                                                                              | 2. AES-CCM 24 bytes Tag length = 4                                                       |   |
+|                              |           |                                  |                                                                                        |                                             | 3. Import the key data into the key slot                                                                         | 3. GCM - 16B AES - 12B Nounce & 12B addi data                                            |   |
+|                              |           |                                  |                                                                                        |                                             | 4. Set the key for a multipart authenticated decryption operation                                                |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 5. Set the nonce for an authenticated encryption operation                                                       |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 6. Declare the lengths of the message and additional data for AEAD                                               |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 7. Pass additional data to an active AEAD operation                                                              |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 8. Encrypt or decrypt a message fragment in an active AEAD operation                                             |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 9. Finish decrypting a message in an AEAD operation                                                              |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 10. Compare the output and its length with the expected values                                                   |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 11. Abort the AEAD operation                                                                                     |                                                                                          |   |
+|                              |           |                                  |                                                                                        |                                             | 12. Reset and destroy the key                                                                                    |                                                                                          |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_INVALID_ARGUMENT                  |                                                                                                                  | Input length is less than plaintext length                                               |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BUFFER_TOO_SMALL                  |                                                                                                                  | Small buffer size                                                                        |   |
+|                              |           |                                  |                                                                                        | PSA_ERROR_BAD_STATE                         |                                                                                                                  | Inactive operator                                                                        |   |
 
 ## License
 Arm PSA test suite is distributed under Apache v2.0 License.
diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h
index 289dc5d..2871339 100644
--- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h
+++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h
@@ -40,6 +40,9 @@
 #define SP_HEAP_MEM_SUPP
 #endif /* PSA_CMAKE_BUILD */
 
+/* Version of crypto spec used in attestation */
+#define CRYPTO_VERSION_BETA2
+
 /*
  * Include of PSA defined Header files
  */
diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h
index f18a785..443e0bc 100644
--- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h
+++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h
@@ -94,13 +94,13 @@
 #error "ARCH_TEST_CTR_AES defined, but not all prerequisites"
 #endif
 
-#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\
+#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\
     (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC))
 #error "ARCH_TEST_CBC_AES defined, but not all prerequisites"
 #endif
 
 #if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\
-    (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC))
+    (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC))
 #error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites"
 #endif
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c
index 3df6aa8..fd2e055 100644
--- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c
+++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c
@@ -28,96 +28,124 @@
 **/
 int32_t pal_crypto_function(int type, va_list valist)
 {
-    int                     i;
-    size_t                  size, *length, salt_length, label_length, ciphertext_size;
-    uint8_t                 *buffer, *ciphertext;
-    const uint8_t           *salt, *label, *nonce, *additional_data;
-    uint8_t                 *plaintext;
-    uint32_t                status;
-    const void              *extra;
-    size_t                  extra_size, capacity, *gen_cap, nonce_length, additional_data_length;
-    psa_key_handle_t        handle, *key_handle, target_handle;
-    psa_key_type_t          key_type, *key_type_out;
-    psa_key_policy_t        *policy;
-    psa_key_usage_t         usage, *usage_out;
-    psa_key_lifetime_t      *lifetime_out;
-    psa_algorithm_t         alg, *alg_out;
-    psa_hash_operation_t    *hash_operation;
-    psa_mac_operation_t     *mac_operation;
-    psa_cipher_operation_t  *cipher_operation;
-    psa_crypto_generator_t  *generator;
-
+    int                              i;
+    psa_status_t                     status;
+    uint8_t                         *buffer, *ciphertext, *plaintext;
+    const uint8_t                   *nonce, *additional_data, *salt, *peer;
+    size_t                          *length, size, ciphertext_size, nonce_length;
+    size_t                           salt_length, peer_length, additional_data_length;
+    size_t                          *tag_length, plaintext_size;
+    psa_aead_operation_t            *aead_operation;
+    psa_key_attributes_t            *attributes;
+    psa_key_handle_t                *handle, key_handle;
+    psa_key_type_t                  *key_type_out, key_type;
+    psa_key_usage_t                 *usage_out, usage;
+    psa_key_id_t                    *key_id_out, key_id;
+    psa_key_lifetime_t              *key_lifetime_out, key_lifetime;
+    psa_algorithm_t                 *key_alg_out, key_alg, alg;
+    psa_hash_operation_t            *hash_operation, *target_operation;
+    psa_mac_operation_t             *mac_operation;
+    psa_cipher_operation_t          *cipher_operation;
+    psa_key_derivation_operation_t  *derive_operation;
+    psa_key_derivation_step_t        step;
     switch (type)
     {
         case PAL_CRYPTO_INIT:
             return psa_crypto_init();
         case PAL_CRYPTO_GENERATE_RANDOM:
-            buffer = va_arg(valist, uint8_t*);
+            buffer = va_arg(valist, uint8_t *);
             size = va_arg(valist, int);
             return psa_generate_random(buffer, size);
         case PAL_CRYPTO_IMPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            buffer = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            status = psa_import_key(attributes, buffer, size, handle);
+            return status;
+        case PAL_CRYPTO_SET_KEY_TYPE:
+            attributes = va_arg(valist, psa_key_attributes_t *);
             key_type = va_arg(valist, psa_key_type_t);
-            buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, int);
-            status = psa_import_key(handle, key_type, buffer, size);
-            return status;
+            psa_set_key_type(attributes, key_type);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_BITS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            size = va_arg(valist, size_t);
+            psa_set_key_bits(attributes, size);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ATTRIBUTES:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            return psa_get_key_attributes(key_handle, attributes);
+        case PAL_CRYPTO_GET_KEY_TYPE:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_type_out = va_arg(valist, psa_key_type_t *);
+            *key_type_out = psa_get_key_type(attributes);
+            return 0;
         case PAL_CRYPTO_EXPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            buffer = (uint8_t *)(va_arg(valist, uint8_t*));
-            size = va_arg(valist, int);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_export_key(handle, buffer, size, length);
-            return status;
-        case PAL_CRYPTO_EXPORT_PUBLIC_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            buffer = (uint8_t *)(va_arg(valist, uint8_t*));
-            size = va_arg(valist, int);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_export_public_key(handle, buffer, size, length);
-            return status;
-        case PAL_CRYPTO_KEY_POLICY_INIT:
-            policy = va_arg(valist, psa_key_policy_t*);
-            memset(policy, 0, sizeof(psa_key_policy_t));
-            return 0;
-        case PAL_CRYPTO_KEY_POLICY_SET_USAGE:
-            policy = va_arg(valist, psa_key_policy_t*);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            buffer = (uint8_t *)(va_arg(valist, uint8_t *));
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t *);
+            return psa_export_key(key_handle, buffer, size, length);
+        case PAL_CRYPTO_SET_KEY_USAGE_FLAGS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
             usage = va_arg(valist, psa_key_usage_t);
-            alg = va_arg(valist, psa_algorithm_t);
-            psa_key_policy_set_usage(policy, usage, alg);
+            psa_set_key_usage_flags(attributes, usage);
             return 0;
-        case PAL_CRYPTO_SET_KEY_POLICY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_set_key_policy(handle, policy);
-        case PAL_CRYPTO_DESTROY_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            status = psa_destroy_key(handle);
-            return status;
-        case PAL_CRYPTO_GET_KEY_INFORMATION:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type_out = va_arg(valist, psa_key_type_t*);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_get_key_information(handle, key_type_out, length);
-            return status;
-        case PAL_CRYPTO_GET_KEY_POLICY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_get_key_policy(handle, policy);
-        case PAL_CRYPTO_KEY_POLICY_GET_USAGE:
-            policy = va_arg(valist, psa_key_policy_t*);
-            usage_out = va_arg(valist, psa_key_usage_t*);
-            *usage_out = psa_key_policy_get_usage(policy);
+        case PAL_CRYPTO_RESET_KEY_ATTRIBUTES:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            psa_reset_key_attributes(attributes);
             return 0;
-        case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM:
-            policy = va_arg(valist, psa_key_policy_t*);
-            alg_out = va_arg(valist, psa_algorithm_t*);
-            *alg_out = psa_key_policy_get_algorithm(policy);
+        case PAL_CRYPTO_EXPORT_PUBLIC_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            buffer = (uint8_t *)(va_arg(valist, uint8_t *));
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t *);
+            return psa_export_public_key(key_handle, buffer, size, length);
+        case PAL_CRYPTO_SET_KEY_ID:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_id = va_arg(valist, psa_key_id_t);
+            psa_set_key_id(attributes, key_id);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_LIFETIME:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_lifetime = va_arg(valist, psa_key_lifetime_t);
+            psa_set_key_lifetime(attributes, key_lifetime);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_ALGORITHM:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_alg = va_arg(valist, psa_algorithm_t);
+            psa_set_key_algorithm(attributes, key_alg);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ID:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_id_out = va_arg(valist, psa_key_id_t *);
+            *key_id_out = psa_get_key_id(attributes);
             return 0;
         case PAL_CRYPTO_GET_KEY_LIFETIME:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            lifetime_out = va_arg(valist, psa_key_lifetime_t*);
-            return psa_get_key_lifetime(handle, lifetime_out);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_lifetime_out = va_arg(valist, psa_key_lifetime_t *);
+            *key_lifetime_out = psa_get_key_lifetime(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_USAGE_FLAGS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            usage_out = va_arg(valist, psa_key_usage_t *);
+            *usage_out = psa_get_key_usage_flags(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ALGORITHM:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_alg_out = va_arg(valist, psa_algorithm_t *);
+            *key_alg_out = psa_get_key_algorithm(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_BITS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            length = va_arg(valist, size_t *);
+            *length = psa_get_key_bits(attributes);
+            return 0;
+        case PAL_CRYPTO_DESTROY_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_destroy_key(key_handle);
         case PAL_CRYPTO_HASH_SETUP:
             hash_operation = va_arg(valist, psa_hash_operation_t*);
             alg = va_arg(valist, psa_algorithm_t);
@@ -141,44 +169,31 @@
         case PAL_CRYPTO_HASH_ABORT:
             hash_operation = va_arg(valist, psa_hash_operation_t*);
             return psa_hash_abort(hash_operation);
-        case PAL_CRYPTO_GENERATE_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type = va_arg(valist, psa_key_type_t);
-            size     = va_arg(valist, size_t);
-            extra    = va_arg(valist, const void*);
-            extra_size  = va_arg(valist, size_t);
-            return psa_generate_key(handle, key_type, size, extra, extra_size);
-        case PAL_CRYPTO_GENERATOR_READ:
-            generator = va_arg(valist, psa_crypto_generator_t*);
+        case PAL_CRYPTO_HASH_COMPUTE:
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
             buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, int);
-            return psa_generator_read(generator, buffer, size);
-        case PAL_CRYPTO_KEY_DERIVATION:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length);
+        case PAL_CRYPTO_HASH_COMPARE:
             alg = va_arg(valist, psa_algorithm_t);
-            salt = va_arg(valist, const uint8_t *);
-            salt_length = va_arg(valist, size_t);
-            label = va_arg(valist, const uint8_t *);
-            label_length = va_arg(valist, size_t);
-            capacity = va_arg(valist, size_t);
-            return psa_key_derivation(generator, handle, alg, salt, salt_length, label,
-                                                                  label_length, capacity);
-        case PAL_CRYPTO_GET_GENERATOR_CAPACITY:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            gen_cap   = va_arg(valist, size_t*);
-            return psa_get_generator_capacity(generator, gen_cap);
-        case PAL_CRYPTO_GENERATOR_IMPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type = va_arg(valist, psa_key_type_t);
-            size     = va_arg(valist, size_t);
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            return psa_generator_import_key(handle, key_type, size, generator);
-        case PAL_CRYPTO_GENERATOR_ABORT:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            return psa_generator_abort(generator);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size);
+        case PAL_CRYPTO_HASH_CLONE:
+            hash_operation = va_arg(valist, psa_hash_operation_t*);
+            target_operation = va_arg(valist, psa_hash_operation_t*);
+            return psa_hash_clone(hash_operation, target_operation);
+        case PAL_CRYPTO_GENERATE_KEY:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_generate_key(attributes, handle);
         case PAL_CRYPTO_AEAD_ENCRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             nonce = va_arg(valist, const uint8_t *);
             nonce_length = va_arg(valist, size_t);
@@ -189,10 +204,10 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data,
-                    additional_data_length, plaintext, size, ciphertext, ciphertext_size, length);
+            return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data,
+            additional_data_length, plaintext, size, ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_AEAD_DECRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             nonce = va_arg(valist, const uint8_t *);
             nonce_length = va_arg(valist, size_t);
@@ -203,13 +218,74 @@
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data,
-                    additional_data_length, ciphertext, ciphertext_size, plaintext, size, length);
+            return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data,
+            additional_data_length, ciphertext, ciphertext_size, plaintext, size, length);
+        case PAL_CRYPTO_AEAD_ENCRYPT_SETUP:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_aead_encrypt_setup(aead_operation, key_handle, alg);
+        case PAL_CRYPTO_AEAD_DECRYPT_SETUP:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_aead_decrypt_setup(aead_operation, key_handle, alg);
+        case PAL_CRYPTO_AEAD_GENERATE_NONCE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t*);
+            return psa_aead_generate_nonce(aead_operation, buffer, size, length);
+        case PAL_CRYPTO_AEAD_SET_NONCE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_set_nonce(aead_operation, buffer, size);
+        case PAL_CRYPTO_AEAD_SET_LENGTHS:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            size = va_arg(valist, size_t);
+            plaintext_size = va_arg(valist, size_t);
+            return psa_aead_set_lengths(aead_operation, size, plaintext_size);
+        case PAL_CRYPTO_AEAD_UPDATE_AD:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_update_ad(aead_operation, buffer, size);
+        case PAL_CRYPTO_AEAD_UPDATE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext,
+            ciphertext_size, length);
+        case PAL_CRYPTO_AEAD_FINISH:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            tag_length = (size_t *)va_arg(valist, size_t*);
+            return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer,
+            size, tag_length);
+        case PAL_CRYPTO_AEAD_VERIFY:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t*);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size);
+        case PAL_CRYPTO_AEAD_ABORT:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            return psa_aead_abort(aead_operation);
         case PAL_CRYPTO_MAC_SIGN_SETUP:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_mac_sign_setup(mac_operation, handle, alg);
+            return psa_mac_sign_setup(mac_operation, key_handle, alg);
         case PAL_CRYPTO_MAC_UPDATE:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             buffer = va_arg(valist, uint8_t*);
@@ -223,9 +299,9 @@
             return psa_mac_sign_finish(mac_operation, buffer, size, length);
         case PAL_CRYPTO_MAC_VERIFY_SETUP:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_mac_verify_setup(mac_operation, handle, alg);
+            return psa_mac_verify_setup(mac_operation, key_handle, alg);
         case PAL_CRYPTO_MAC_VERIFY_FINISH:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             buffer = va_arg(valist, uint8_t*);
@@ -234,8 +310,27 @@
         case PAL_CRYPTO_MAC_ABORT:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             return psa_mac_abort(mac_operation);
+        case PAL_CRYPTO_MAC_COMPUTE:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext,
+            ciphertext_size, length);
+        case PAL_CRYPTO_MAC_VERIFY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext,
+            ciphertext_size);
         case PAL_CRYPTO_ASYMMTERIC_ENCRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
@@ -244,10 +339,10 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length,
-                    ciphertext, ciphertext_size, length);
+            return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length,
+            ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_ASYMMTERIC_DECRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
@@ -256,18 +351,18 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length,
-                    ciphertext, ciphertext_size, length);
+            return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length,
+            ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_cipher_encrypt_setup(cipher_operation, handle, alg);
+            return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg);
         case PAL_CRYPTO_CIPHER_DECRYPT_SETUP:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_cipher_decrypt_setup(cipher_operation, handle, alg);
+            return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg);
         case PAL_CRYPTO_CIPHER_GENERATE_IV:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             buffer = va_arg(valist, uint8_t*);
@@ -287,7 +382,7 @@
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
             return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size,
-                                     length);
+            length);
         case PAL_CRYPTO_CIPHER_FINISH:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             ciphertext = va_arg(valist, uint8_t *);
@@ -297,39 +392,110 @@
         case PAL_CRYPTO_CIPHER_ABORT:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             return psa_cipher_abort(cipher_operation);
+        case PAL_CRYPTO_CIPHER_ENCRYPT:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t *);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size,
+            length);
+        case PAL_CRYPTO_CIPHER_DECRYPT:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t *);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size,
+            length);
         case PAL_CRYPTO_ASYMMTERIC_SIGN:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size,
-                                       length);
+            return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size,
+            length);
         case PAL_CRYPTO_ASYMMTERIC_VERIFY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
-            return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size);
-        case PAL_CRYPTO_KEY_AGREEMENT:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext,
+            ciphertext_size);
+        case PAL_CRYPTO_RAW_KEY_AGREEMENT:
+            alg = va_arg(valist, psa_algorithm_t);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            peer = va_arg(valist, uint8_t*);
+            peer_length = va_arg(valist, size_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
-            alg = va_arg(valist, psa_algorithm_t);
-            return psa_key_agreement(generator, handle, buffer, size, alg);
-        case PAL_CRYPTO_ALLOCATE_KEY:
-            key_handle = (psa_key_handle_t *)va_arg(valist, int*);
-            return psa_allocate_key(key_handle);
+            length = va_arg(valist, size_t*);
+            return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length);
         case PAL_CRYPTO_COPY_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            target_handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_copy_key(handle, target_handle, policy);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_copy_key(key_handle, attributes, handle);
+        case PAL_CRYPTO_KEY_DERIVATION_SETUP:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_key_derivation_setup(derive_operation, alg);
+        case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_input_bytes(derive_operation, step, buffer, size);
+        case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_key_derivation_input_key(derive_operation, step, key_handle);
+        case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            peer = va_arg(valist, uint8_t*);
+            peer_length = va_arg(valist, size_t);
+            return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer,
+            peer_length);
+        case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_output_bytes(derive_operation, buffer, size);
+        case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_key_derivation_output_key(attributes, derive_operation, handle);
+        case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_set_capacity(derive_operation, size);
+        case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            length = va_arg(valist, size_t *);
+            return psa_key_derivation_get_capacity(derive_operation, length);
+        case PAL_CRYPTO_KEY_DERIVATION_ABORT:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            return psa_key_derivation_abort(derive_operation);
+        case PAL_CRYPTO_OPEN_KEY:
+            key_id = va_arg(valist, psa_key_id_t);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_open_key(key_id, handle);
+        case PAL_CRYPTO_CLOSE_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_close_key(key_handle);
         case PAL_CRYPTO_FREE:
             for (i = 0; i < PAL_KEY_SLOT_COUNT; i++)
                 psa_destroy_key(i);
diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h
index d1dabfa..486f793 100644
--- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h
+++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h
@@ -21,55 +21,82 @@
 #include "pal_common.h"
 
 enum crypto_function_code {
-    PAL_CRYPTO_INIT                     = 0x1,
-    PAL_CRYPTO_GENERATE_RANDOM          = 0x2,
-    PAL_CRYPTO_IMPORT_KEY               = 0x3,
-    PAL_CRYPTO_EXPORT_KEY               = 0x4,
-    PAL_CRYPTO_EXPORT_PUBLIC_KEY        = 0x5,
-    PAL_CRYPTO_DESTROY_KEY              = 0x6,
-    PAL_CRYPTO_GET_KEY_INFO             = 0x7,
-    PAL_CRYPTO_KEY_POLICY_INIT          = 0x8,
-    PAL_CRYPTO_KEY_POLICY_SET_USAGE     = 0x9,
-    PAL_CRYPTO_KEY_POLICY_GET_USAGE     = 0xA,
-    PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB,
-    PAL_CRYPTO_SET_KEY_POLICY           = 0xC,
-    PAL_CRYPTO_GET_KEY_POLICY           = 0xD,
-    PAL_CRYPTO_GET_KEY_INFORMATION      = 0xE,
-    PAL_CRYPTO_GET_KEY_LIFETIME         = 0xF,
-    PAL_CRYPTO_HASH_SETUP               = 0x11,
-    PAL_CRYPTO_HASH_UPDATE              = 0x12,
-    PAL_CRYPTO_HASH_VERIFY              = 0x13,
-    PAL_CRYPTO_HASH_FINISH              = 0x14,
-    PAL_CRYPTO_HASH_ABORT               = 0x15,
-    PAL_CRYPTO_GENERATE_KEY             = 0x16,
-    PAL_CRYPTO_GENERATOR_READ           = 0x17,
-    PAL_CRYPTO_KEY_DERIVATION           = 0x18,
-    PAL_CRYPTO_GET_GENERATOR_CAPACITY   = 0x19,
-    PAL_CRYPTO_GENERATOR_IMPORT_KEY     = 0x1A,
-    PAL_CRYPTO_GENERATOR_ABORT          = 0x1B,
-    PAL_CRYPTO_AEAD_ENCRYPT             = 0x1C,
-    PAL_CRYPTO_AEAD_DECRYPT             = 0x1D,
-    PAL_CRYPTO_MAC_SIGN_SETUP           = 0x1E,
-    PAL_CRYPTO_MAC_UPDATE               = 0x1F,
-    PAL_CRYPTO_MAC_SIGN_FINISH          = 0x20,
-    PAL_CRYPTO_MAC_VERIFY_SETUP         = 0x21,
-    PAL_CRYPTO_MAC_VERIFY_FINISH        = 0x22,
-    PAL_CRYPTO_MAC_ABORT                = 0x23,
-    PAL_CRYPTO_ASYMMTERIC_ENCRYPT       = 0x24,
-    PAL_CRYPTO_ASYMMTERIC_DECRYPT       = 0x25,
-    PAL_CRYPTO_CIPHER_ENCRYPT_SETUP     = 0x26,
-    PAL_CRYPTO_CIPHER_DECRYPT_SETUP     = 0x2A,
-    PAL_CRYPTO_CIPHER_GENERATE_IV       = 0x2B,
-    PAL_CRYPTO_CIPHER_SET_IV            = 0x2C,
-    PAL_CRYPTO_CIPHER_UPDATE            = 0x2D,
-    PAL_CRYPTO_CIPHER_FINISH            = 0x2E,
-    PAL_CRYPTO_CIPHER_ABORT             = 0x2F,
-    PAL_CRYPTO_ASYMMTERIC_SIGN          = 0x30,
-    PAL_CRYPTO_ASYMMTERIC_VERIFY        = 0x31,
-    PAL_CRYPTO_KEY_AGREEMENT            = 0x32,
-    PAL_CRYPTO_ALLOCATE_KEY             = 0x33,
-    PAL_CRYPTO_COPY_KEY                 = 0x34,
-    PAL_CRYPTO_FREE                     = 0xFE,
+    PAL_CRYPTO_INIT                             = 0x1,
+    PAL_CRYPTO_GENERATE_RANDOM                  = 0x2,
+    PAL_CRYPTO_IMPORT_KEY                       = 0x3,
+    PAL_CRYPTO_EXPORT_KEY                       = 0x4,
+    PAL_CRYPTO_EXPORT_PUBLIC_KEY                = 0x5,
+    PAL_CRYPTO_DESTROY_KEY                      = 0x6,
+    PAL_CRYPTO_HASH_SETUP                       = 0x7,
+    PAL_CRYPTO_HASH_UPDATE                      = 0x8,
+    PAL_CRYPTO_HASH_VERIFY                      = 0x9,
+    PAL_CRYPTO_HASH_FINISH                      = 0xA,
+    PAL_CRYPTO_HASH_ABORT                       = 0xB,
+    PAL_CRYPTO_GENERATE_KEY                     = 0xC,
+    PAL_CRYPTO_AEAD_ENCRYPT                     = 0xD,
+    PAL_CRYPTO_AEAD_DECRYPT                     = 0xE,
+    PAL_CRYPTO_MAC_SIGN_SETUP                   = 0xF,
+    PAL_CRYPTO_MAC_UPDATE                       = 0x10,
+    PAL_CRYPTO_MAC_SIGN_FINISH                  = 0x11,
+    PAL_CRYPTO_MAC_VERIFY_SETUP                 = 0x12,
+    PAL_CRYPTO_MAC_VERIFY_FINISH                = 0x13,
+    PAL_CRYPTO_MAC_ABORT                        = 0x14,
+    PAL_CRYPTO_ASYMMTERIC_ENCRYPT               = 0x15,
+    PAL_CRYPTO_ASYMMTERIC_DECRYPT               = 0x16,
+    PAL_CRYPTO_CIPHER_ENCRYPT_SETUP             = 0x17,
+    PAL_CRYPTO_CIPHER_DECRYPT_SETUP             = 0x18,
+    PAL_CRYPTO_CIPHER_GENERATE_IV               = 0x19,
+    PAL_CRYPTO_CIPHER_SET_IV                    = 0x1A,
+    PAL_CRYPTO_CIPHER_UPDATE                    = 0x1B,
+    PAL_CRYPTO_CIPHER_FINISH                    = 0x1C,
+    PAL_CRYPTO_CIPHER_ABORT                     = 0x1D,
+    PAL_CRYPTO_ASYMMTERIC_SIGN                  = 0x1E,
+    PAL_CRYPTO_ASYMMTERIC_VERIFY                = 0x1F,
+    PAL_CRYPTO_COPY_KEY                         = 0x20,
+    PAL_CRYPTO_SET_KEY_TYPE                     = 0x21,
+    PAL_CRYPTO_SET_KEY_BITS                     = 0x22,
+    PAL_CRYPTO_GET_KEY_ATTRIBUTES               = 0x23,
+    PAL_CRYPTO_GET_KEY_TYPE                     = 0x24,
+    PAL_CRYPTO_SET_KEY_USAGE_FLAGS              = 0x25,
+    PAL_CRYPTO_RESET_KEY_ATTRIBUTES             = 0x26,
+    PAL_CRYPTO_SET_KEY_ID                       = 0x27,
+    PAL_CRYPTO_SET_KEY_LIFETIME                 = 0x28,
+    PAL_CRYPTO_SET_KEY_ALGORITHM                = 0x29,
+    PAL_CRYPTO_GET_KEY_ID                       = 0x2A,
+    PAL_CRYPTO_GET_KEY_LIFETIME                 = 0x2B,
+    PAL_CRYPTO_GET_KEY_USAGE_FLAGS              = 0x2C,
+    PAL_CRYPTO_GET_KEY_ALGORITHM                = 0x2D,
+    PAL_CRYPTO_GET_KEY_BITS                     = 0x2E,
+    PAL_CRYPTO_HASH_COMPUTE                     = 0x2F,
+    PAL_CRYPTO_HASH_COMPARE                     = 0x30,
+    PAL_CRYPTO_KEY_DERIVATION_SETUP             = 0x31,
+    PAL_CRYPTO_KEY_DERIVATION_ABORT             = 0x32,
+    PAL_CRYPTO_RAW_KEY_AGREEMENT                = 0x33,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES       = 0x34,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY         = 0x35,
+    PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT     = 0x36,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES      = 0x37,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY        = 0x38,
+    PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY      = 0x39,
+    PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY      = 0x3A,
+    PAL_CRYPTO_HASH_CLONE                       = 0x3B,
+    PAL_CRYPTO_MAC_COMPUTE                      = 0x3C,
+    PAL_CRYPTO_MAC_VERIFY                       = 0x3D,
+    PAL_CRYPTO_CIPHER_ENCRYPT                   = 0x3F,
+    PAL_CRYPTO_CIPHER_DECRYPT                   = 0x40,
+    PAL_CRYPTO_OPEN_KEY                         = 0x41,
+    PAL_CRYPTO_CLOSE_KEY                        = 0x42,
+    PAL_CRYPTO_AEAD_ENCRYPT_SETUP               = 0x43,
+    PAL_CRYPTO_AEAD_DECRYPT_SETUP               = 0x44,
+    PAL_CRYPTO_AEAD_GENERATE_NONCE              = 0x45,
+    PAL_CRYPTO_AEAD_SET_NONCE                   = 0x46,
+    PAL_CRYPTO_AEAD_SET_LENGTHS                 = 0X47,
+    PAL_CRYPTO_AEAD_UPDATE_AD                   = 0x48,
+    PAL_CRYPTO_AEAD_UPDATE                      = 0x49,
+    PAL_CRYPTO_AEAD_FINISH                      = 0x4A,
+    PAL_CRYPTO_AEAD_VERIFY                      = 0x4B,
+    PAL_CRYPTO_AEAD_ABORT                       = 0x4C,
+    PAL_CRYPTO_FREE                             = 0xFE,
 };
 
 int32_t pal_crypto_function(int type, va_list valist);
diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c
index ae2bdba..38ed283 100644
--- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c
+++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c
@@ -17,24 +17,14 @@
 
 #include "pal_attestation_crypto.h"
 
-static uint32_t  public_key_registered = 0;
-
+static uint32_t         public_key_registered;
+static psa_key_handle_t public_key_handle;
 static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf,
                                                   size_t amount)
 {
     return UsefulBuf_Head(buf, amount);
 }
 
-static uint32_t check_hash_sizes(void)
-{
-    if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256))
-    {
-        return PAL_ATTEST_HASH_FAIL;
-    }
-
-    return PAL_ATTEST_SUCCESS;
-}
-
 static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve)
 {
     psa_ecc_curve_t psa_curve;
@@ -82,130 +72,94 @@
 
 int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id)
 {
-    int32_t                          cose_ret = PAL_ATTEST_SUCCESS;
-    psa_status_t                     psa_ret;
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT;
+    psa_algorithm_t      psa_alg;
 
-    cose_ret = check_hash_sizes();
-    if (cose_ret)
-    {
-        goto error;
-    }
+    /* Map the algorithm ID */
+    psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id);
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-        goto error;
-    }
+    /* Actually do the hash set up */
+    hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg);
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
-    psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id));
+    /* Copy the PSA handle back into the context */
+    hash_ctx->context.handle = psa_hash.handle;
 
-    if (psa_ret == PAL_ATTEST_SUCCESS)
-    {
-        psa_hash_ctx->status = PAL_ATTEST_SUCCESS;
-        cose_ret = PAL_ATTEST_SUCCESS;
-    }
-    else if (psa_ret == PSA_ERROR_NOT_SUPPORTED)
-    {
-        cose_ret = PAL_ATTEST_HASH_UNSUPPORTED;
-    }
-    else
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-    }
-
-error:
-    return cose_ret;
+    /* Map errors and return */
+    return (psa_status_t)hash_ctx->status;
 }
 
 void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx,
                                  struct q_useful_buf_c data_to_hash)
 {
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash;
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
+    /* Copy the PSA handle out of the generic context */
+    psa_hash.handle = (uint32_t)hash_ctx->context.handle;
+
+    if (hash_ctx->status != PSA_SUCCESS)
+        return;
+
+    if (data_to_hash.ptr == NULL) {
+        /* No data was passed in to be hashed indicating the mode of use is
+         * the computation of the size of hash. This mode is hashing is used
+         * by t_cose when it is requested to compute the size of the signed
+         * data it might compute, which is in turn used to compute the
+         * size of a would be token. When computing the size, the size
+         * like this, there is nothing to do in update()
+         */
         return;
     }
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
+    /* Actually hash the data */
+    hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len);
 
-    if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS)
-    {
-        if (data_to_hash.ptr != NULL)
-        {
-            psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation,
-                                                   data_to_hash.ptr,
-                                                   data_to_hash.len);
-        }
-        else
-        {
-            /* Intentionally do nothing, just computing the size of the token */
-        }
-    }
+    /* Copy the PSA handle back into the context. */
+    hash_ctx->context.handle = psa_hash.handle;
 }
 
 int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx,
                                     struct q_useful_buf buffer_to_hold_result,
                                     struct q_useful_buf_c *hash_result)
 {
-    uint32_t                         cose_ret = PAL_ATTEST_SUCCESS;
-    psa_status_t                     psa_ret;
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash;
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-        goto error;
-    }
+    /* Copy the PSA handle out of the generic context */
+    psa_hash.handle = (uint32_t)hash_ctx->context.handle;
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
+    if (hash_ctx->status != PSA_SUCCESS)
+        goto Done;
 
-    if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS)
-    {
-        psa_ret = psa_hash_finish(&psa_hash_ctx->operation,
-                                  buffer_to_hold_result.ptr,
-                                  buffer_to_hold_result.len,
-                                  &(hash_result->len));
+    /* Actually finish up the hash */
+    hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr,
+                                       buffer_to_hold_result.len, &(hash_result->len));
 
-        if (psa_ret == PAL_ATTEST_SUCCESS)
-        {
-            hash_result->ptr = buffer_to_hold_result.ptr;
-            cose_ret = 0;
-        }
-        else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL)
-        {
-            cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE;
-        }
-        else
-        {
-            cose_ret = PAL_ATTEST_HASH_FAIL;
-        }
-    }
-    else
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-    }
+    hash_result->ptr = buffer_to_hold_result.ptr;
 
-error:
-    return cose_ret;
+    /* Copy the PSA handle back into the context. */
+    hash_ctx->context.handle = psa_hash.handle;
+
+Done:
+    return ((psa_status_t)hash_ctx->status);
+
 }
 
 int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash,
                       struct q_useful_buf_c *hash)
 {
-    uint32_t                      status = PAL_ATTEST_SUCCESS;
+    uint32_t                      return_value = 0;
     struct pal_cose_crypto_hash   hash_ctx;
 
-    status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY);
-    if (status)
-        return status;
+    return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY);
+    if (return_value)
+        goto Done;
 
     pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash);
-    status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash);
+    return_value = pal_cose_crypto_hash_finish(&hash_ctx,
+                                             buffer_for_hash,
+                                             hash);
 
-    return status;
+Done:
+    return return_value;
 }
 
 uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash,
@@ -223,18 +177,19 @@
     /* This builds the CBOR-format to-be-signed bytes */
     QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part);
     QCBOREncode_OpenArray(&cbor_encode_ctx);
+
     /* context */
-    QCBOREncode_AddSZString(&cbor_encode_ctx,
-                            COSE_SIG_CONTEXT_STRING_SIGNATURE1);
+    QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1);
+
     /* body_protected */
-    QCBOREncode_AddBytes(&cbor_encode_ctx,
-                         protected_headers);
-    /* sign_protected */
-    QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
+    QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers);
+
+    /* sign_protected is not used for Sign1 */
     /* external_aad */
     QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
-    /* fake payload */
-    QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
+
+    /* The short fake payload. */
+    QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload);
     QCBOREncode_CloseArray(&cbor_encode_ctx);
 
     /* Get the result and convert it to struct q_useful_buf_c representation */
@@ -242,7 +197,8 @@
     if (qcbor_result)
     {
         /* Mainly means that the protected_headers were too big
-         (which should never happen) */
+         * (which should never happen)
+         */
         status = PAL_ATTEST_ERR_SIGN_STRUCT;
         goto Done;
     }
@@ -257,90 +213,129 @@
     if (status)
         goto Done;
 
-    /* Hash the first part of the TBS. Take all but the last two
-     * bytes. The last two bytes are the fake payload from above. It
-     * is replaced by the real payload which is hashed next. The fake
-     * payload is needed so the array count is right. This is one of
-     * the main things that make it possible to implement with one
-     * buffer for the whole cose sign1.
+    /* This is hashing of the first part, all the CBOR
+     * except the payload.
      */
-    pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part,
-                                              tbs_first_part.len - 2));
+    pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len));
 
-    /* Hash the payload */
+    /* Hash the payload, the second part. */
     pal_cose_crypto_hash_update(&hash_ctx, payload);
 
     /* Finish the hash and set up to return it */
-    status = pal_cose_crypto_hash_finish(&hash_ctx,
-                                             buffer_for_hash,
-                                             hash);
+    status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash);
 
 Done:
     return status;
 }
 
-uint32_t pal_import_attest_key(int32_t alg)
+static uint32_t pal_import_attest_key(psa_algorithm_t key_alg)
 {
-    psa_key_type_t   attest_key_type;
-    size_t           public_key_size;
-    psa_status_t     status = PSA_SUCCESS;
+    psa_status_t     status             = PAL_ATTEST_ERROR;
+    psa_key_usage_t  usage              = PSA_KEY_USAGE_VERIFY;
+    psa_ecc_curve_t  psa_curve          = attest_map_elliptic_curve_type(P_256);
+    psa_key_type_t   attest_key_type    = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve);
+    size_t           public_key_size    = attest_key.pubx_key_size + attest_key.puby_key_size;
+
+#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2)
     psa_key_policy_t policy;
-    psa_ecc_curve_t  psa_curve;
-    psa_key_handle_t public_key_handle;
 
-    /* Mapping of COSE curve type to PSA curve types */
-    psa_curve = attest_map_elliptic_curve_type(P_256);
-    if (psa_curve == USHRT_MAX)
-        return PAL_ATTEST_ERROR;
+    if (!public_key_registered)
+    {
+        if (psa_curve == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
 
-    /* Setup the key policy for public key */
-    policy = psa_key_policy_init();
-    psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg);
+        /* Setup the key policy for public key */
+        policy = psa_key_policy_init();
+        psa_key_policy_set_usage(&policy, usage, key_alg);
 
-    status = psa_allocate_key(&public_key_handle);
-    if (status != PSA_SUCCESS)
-        return status;
+        status = psa_allocate_key(&public_key_handle);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
 
-    status = psa_set_key_policy(public_key_handle, &policy);
-    if (status != PSA_SUCCESS)
-        return status;
+        status = psa_set_key_policy(public_key_handle, &policy);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
 
-    attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve);
-
-    /* Register public key to crypto service */
-    public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size;
-
-    status = psa_import_key(public_key_handle,
+        /* Import the public key */
+        status = psa_import_key(public_key_handle,
                                 attest_key_type,
-                                (const uint8_t *)&attest_public_key,
+                               (const uint8_t *)&attest_public_key,
                                 public_key_size + 1);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
+
+        public_key_registered = 1;
+    }
+
+#elif defined(CRYPTO_VERSION_BETA3)
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (!public_key_registered)
+    {
+        if (psa_curve == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
+
+        /* Set the attributes for the public key */
+        psa_set_key_type(&attributes, attest_key_type);
+        psa_set_key_bits(&attributes, public_key_size + 1);
+        psa_set_key_usage_flags(&attributes, usage);
+        psa_set_key_algorithm(&attributes, key_alg);
+
+        /* Import the public key */
+        status = psa_import_key(&attributes,
+                               (const uint8_t *)&attest_public_key,
+                                public_key_size + 1,
+                                &public_key_handle);
+
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
+
+        public_key_registered = 1;
+    }
+#endif
 
     return status;
 }
 
+static uint32_t pal_destroy_attest_key(void)
+{
+    psa_status_t     status;
+
+    if (!public_key_registered)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    status =  psa_destroy_key(public_key_handle);
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    public_key_registered = 0;
+
+    return PAL_ATTEST_SUCCESS;
+}
 
 uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id,
                                    struct q_useful_buf_c token_hash,
                                    struct q_useful_buf_c signature)
 {
-    uint32_t status = PAL_ATTEST_SUCCESS;
+    int32_t status = PAL_ATTEST_ERROR;
+    psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256);
 
-    if (!public_key_registered)
-    {
-        status = pal_import_attest_key(cose_algorithm_id);
-        if (status != PAL_ATTEST_SUCCESS)
-            return status;
+    /* Register the attestation public key */
+    status = pal_import_attest_key(key_alg);
+    if (status != PAL_ATTEST_SUCCESS)
+        return status;
 
-        public_key_registered = 1;
-    }
-
-/*
- * Enable the verify function when Trusted Firmare - M Supports
-
- *  Verify the signature a hash or short message using a public key.
+    /* Verify the signature */
     status = psa_asymmetric_verify(public_key_handle,
-                                    cose_algorithm_id, token_hash.ptr, token_hash.len,
-                                    signature.ptr, signature.len);
-*/
-    return status;
+                                   key_alg, token_hash.ptr, token_hash.len,
+                                   signature.ptr, signature.len);
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_SIGNATURE_FAIL;
+
+    /* Unregister the attestation public key */
+    status = pal_destroy_attest_key();
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    return PAL_ATTEST_SUCCESS;
 }
diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h
index 2d63ad1..2175e65 100644
--- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h
+++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h
@@ -22,9 +22,9 @@
 
 typedef struct{
     uint8_t  *pubx_key;
-    uint32_t  pubx_key_size;
+    size_t    pubx_key_size;
     uint8_t  *puby_key;
-    uint32_t  puby_key_size;
+    size_t    puby_key_size;
 } ecc_key_t;
 
 struct ecc_public_key_t {
@@ -48,11 +48,11 @@
 };
 
 struct pal_cose_crypto_hash {
-    /* Can't put the actual size here without creating dependecy on
-     * actual hash implementation, so this is a fairly large and
-     * accommodating size.
-     */
-    uint8_t bytes[128];
+    union {
+        void    *ptr;
+        uint64_t handle;
+    } context;
+    int64_t status;
 };
 
 struct pal_cose_psa_crypto_hash {
@@ -95,7 +95,6 @@
 uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash,
                           struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers,
                           struct q_useful_buf_c payload);
-uint32_t pal_import_attest_key(int32_t alg);
 uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash,
                                    struct q_useful_buf_c signature);
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c
index 178fdc9..60c7164 100644
--- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c
+++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c
@@ -29,7 +29,7 @@
     QCBORError                qcbor_result;
     QCBOREncodeContext        cbor_encode_ctx;
     int32_t                   cose_curve_id = P_256;
-    struct q_useful_buf_c       encoded_key_id;
+    struct q_useful_buf_c     encoded_key_id;
 
     /* Get the public key x and y */
     /* Encode it into a COSE_Key structure */
@@ -136,26 +136,18 @@
 }
 
 static int parse_unprotected_headers(QCBORDecodeContext *decode_context,
-                                     struct q_useful_buf_c *child,
-                                     bool *loop_back)
+                                     struct q_useful_buf_c *child)
 {
     struct items_to_get_t   item_list[3];
 
     item_list[0].label = COSE_HEADER_PARAM_KID;
-    item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL;
-    item_list[2].label = 0;
-    *loop_back = false;
+    item_list[1].label = 0;
 
     if (get_items_in_map(decode_context, item_list))
     {
         return PAL_ATTEST_ERROR;
     }
 
-    if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE)
-    {
-        *loop_back = true;
-    }
-
     if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING)
     {
         return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING;
@@ -324,11 +316,10 @@
                 token_size      : Size of the token buffer
     @return   - error status
 **/
-int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size,
-                                        uint8_t *token, uint32_t token_size)
+int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size,
+                                        uint8_t *token, size_t token_size)
 {
     int32_t             status = PAL_ATTEST_SUCCESS;
-    bool                short_circuit;
     int32_t             cose_algorithm_id;
     QCBORItem           item;
     QCBORDecodeContext  decode_context;
@@ -412,8 +403,7 @@
         return status;
 
     /* Parse the unprotected headers and check the data type and value */
-    short_circuit = false;
-    status = parse_unprotected_headers(&decode_context, &kid, &short_circuit);
+    status = parse_unprotected_headers(&decode_context, &kid);
     if (status != PAL_ATTEST_SUCCESS)
         return status;
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h
index 8a0c545..e7449a0 100644
--- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h
+++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h
@@ -140,8 +140,7 @@
                                                 1 << (EAT_CBOR_ARM_RANGE_BASE                      \
                                                     - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS))
 
-#define MANDATORY_SW_COMP                      (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT      |     \
-                                                1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID)
+#define MANDATORY_SW_COMP                      (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT)
 
 #define NULL_USEFUL_BUF_C  NULLUsefulBufC
 
@@ -158,6 +157,8 @@
     PAL_ATTEST_HASH_BUFFER_SIZE,
     PAL_ATTEST_ERR_PROTECTED_HEADERS,
     PAL_ATTEST_ERR_SIGN_STRUCT,
+    PAL_ATTEST_ERR_KEY_FAIL,
+    PAL_ATTEST_ERR_SIGNATURE_FAIL,
     PAL_ATTEST_ERROR,
 };
 
@@ -166,5 +167,5 @@
     QCBORItem item;
 };
 
-int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size,
-                                        uint8_t *token, uint32_t token_size);
+int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size,
+                                        uint8_t *token, size_t token_size);
diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c
index 2d99f74..83c1ebd 100644
--- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c
+++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c
@@ -27,25 +27,27 @@
 int32_t pal_attestation_function(int type, va_list valist)
 {
     uint8_t     *challenge, *token;
-    uint32_t    challenge_size, *token_size, verify_token_size;
+    size_t       challenge_size, *token_size, verify_token_size, token_buffer_size;
 
     switch (type)
     {
         case PAL_INITIAL_ATTEST_GET_TOKEN:
             challenge = va_arg(valist, uint8_t*);
-            challenge_size = va_arg(valist, uint32_t);
+            challenge_size = va_arg(valist, size_t);
             token = va_arg(valist, uint8_t*);
-            token_size = va_arg(valist, uint32_t*);
-            return psa_initial_attest_get_token(challenge, challenge_size, token, token_size);
+            token_buffer_size = va_arg(valist, size_t);
+            token_size = va_arg(valist, size_t*);
+            return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size,
+            token_size);
         case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE:
-            challenge_size = va_arg(valist, uint32_t);
-            token_size = va_arg(valist, uint32_t*);
+            challenge_size = va_arg(valist, size_t);
+            token_size = va_arg(valist, size_t*);
             return psa_initial_attest_get_token_size(challenge_size, token_size);
         case PAL_INITIAL_ATTEST_VERIFY_TOKEN:
             challenge = va_arg(valist, uint8_t*);
-            challenge_size = va_arg(valist, uint32_t);
+            challenge_size = va_arg(valist, size_t);
             token = va_arg(valist, uint8_t*);
-            verify_token_size = va_arg(valist, uint32_t);
+            verify_token_size = va_arg(valist, size_t);
             return pal_initial_attest_verify_token(challenge, challenge_size,
                                                    token, verify_token_size);
         default:
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h
index 289dc5d..2871339 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h
@@ -40,6 +40,9 @@
 #define SP_HEAP_MEM_SUPP
 #endif /* PSA_CMAKE_BUILD */
 
+/* Version of crypto spec used in attestation */
+#define CRYPTO_VERSION_BETA2
+
 /*
  * Include of PSA defined Header files
  */
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config_check.h
index f18a785..443e0bc 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config_check.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config_check.h
@@ -94,13 +94,13 @@
 #error "ARCH_TEST_CTR_AES defined, but not all prerequisites"
 #endif
 
-#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\
+#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\
     (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC))
 #error "ARCH_TEST_CBC_AES defined, but not all prerequisites"
 #endif
 
 #if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\
-    (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC))
+    (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC))
 #error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites"
 #endif
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.c
index 3df6aa8..fd2e055 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.c
@@ -28,96 +28,124 @@
 **/
 int32_t pal_crypto_function(int type, va_list valist)
 {
-    int                     i;
-    size_t                  size, *length, salt_length, label_length, ciphertext_size;
-    uint8_t                 *buffer, *ciphertext;
-    const uint8_t           *salt, *label, *nonce, *additional_data;
-    uint8_t                 *plaintext;
-    uint32_t                status;
-    const void              *extra;
-    size_t                  extra_size, capacity, *gen_cap, nonce_length, additional_data_length;
-    psa_key_handle_t        handle, *key_handle, target_handle;
-    psa_key_type_t          key_type, *key_type_out;
-    psa_key_policy_t        *policy;
-    psa_key_usage_t         usage, *usage_out;
-    psa_key_lifetime_t      *lifetime_out;
-    psa_algorithm_t         alg, *alg_out;
-    psa_hash_operation_t    *hash_operation;
-    psa_mac_operation_t     *mac_operation;
-    psa_cipher_operation_t  *cipher_operation;
-    psa_crypto_generator_t  *generator;
-
+    int                              i;
+    psa_status_t                     status;
+    uint8_t                         *buffer, *ciphertext, *plaintext;
+    const uint8_t                   *nonce, *additional_data, *salt, *peer;
+    size_t                          *length, size, ciphertext_size, nonce_length;
+    size_t                           salt_length, peer_length, additional_data_length;
+    size_t                          *tag_length, plaintext_size;
+    psa_aead_operation_t            *aead_operation;
+    psa_key_attributes_t            *attributes;
+    psa_key_handle_t                *handle, key_handle;
+    psa_key_type_t                  *key_type_out, key_type;
+    psa_key_usage_t                 *usage_out, usage;
+    psa_key_id_t                    *key_id_out, key_id;
+    psa_key_lifetime_t              *key_lifetime_out, key_lifetime;
+    psa_algorithm_t                 *key_alg_out, key_alg, alg;
+    psa_hash_operation_t            *hash_operation, *target_operation;
+    psa_mac_operation_t             *mac_operation;
+    psa_cipher_operation_t          *cipher_operation;
+    psa_key_derivation_operation_t  *derive_operation;
+    psa_key_derivation_step_t        step;
     switch (type)
     {
         case PAL_CRYPTO_INIT:
             return psa_crypto_init();
         case PAL_CRYPTO_GENERATE_RANDOM:
-            buffer = va_arg(valist, uint8_t*);
+            buffer = va_arg(valist, uint8_t *);
             size = va_arg(valist, int);
             return psa_generate_random(buffer, size);
         case PAL_CRYPTO_IMPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            buffer = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            status = psa_import_key(attributes, buffer, size, handle);
+            return status;
+        case PAL_CRYPTO_SET_KEY_TYPE:
+            attributes = va_arg(valist, psa_key_attributes_t *);
             key_type = va_arg(valist, psa_key_type_t);
-            buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, int);
-            status = psa_import_key(handle, key_type, buffer, size);
-            return status;
+            psa_set_key_type(attributes, key_type);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_BITS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            size = va_arg(valist, size_t);
+            psa_set_key_bits(attributes, size);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ATTRIBUTES:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            return psa_get_key_attributes(key_handle, attributes);
+        case PAL_CRYPTO_GET_KEY_TYPE:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_type_out = va_arg(valist, psa_key_type_t *);
+            *key_type_out = psa_get_key_type(attributes);
+            return 0;
         case PAL_CRYPTO_EXPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            buffer = (uint8_t *)(va_arg(valist, uint8_t*));
-            size = va_arg(valist, int);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_export_key(handle, buffer, size, length);
-            return status;
-        case PAL_CRYPTO_EXPORT_PUBLIC_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            buffer = (uint8_t *)(va_arg(valist, uint8_t*));
-            size = va_arg(valist, int);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_export_public_key(handle, buffer, size, length);
-            return status;
-        case PAL_CRYPTO_KEY_POLICY_INIT:
-            policy = va_arg(valist, psa_key_policy_t*);
-            memset(policy, 0, sizeof(psa_key_policy_t));
-            return 0;
-        case PAL_CRYPTO_KEY_POLICY_SET_USAGE:
-            policy = va_arg(valist, psa_key_policy_t*);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            buffer = (uint8_t *)(va_arg(valist, uint8_t *));
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t *);
+            return psa_export_key(key_handle, buffer, size, length);
+        case PAL_CRYPTO_SET_KEY_USAGE_FLAGS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
             usage = va_arg(valist, psa_key_usage_t);
-            alg = va_arg(valist, psa_algorithm_t);
-            psa_key_policy_set_usage(policy, usage, alg);
+            psa_set_key_usage_flags(attributes, usage);
             return 0;
-        case PAL_CRYPTO_SET_KEY_POLICY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_set_key_policy(handle, policy);
-        case PAL_CRYPTO_DESTROY_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            status = psa_destroy_key(handle);
-            return status;
-        case PAL_CRYPTO_GET_KEY_INFORMATION:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type_out = va_arg(valist, psa_key_type_t*);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_get_key_information(handle, key_type_out, length);
-            return status;
-        case PAL_CRYPTO_GET_KEY_POLICY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_get_key_policy(handle, policy);
-        case PAL_CRYPTO_KEY_POLICY_GET_USAGE:
-            policy = va_arg(valist, psa_key_policy_t*);
-            usage_out = va_arg(valist, psa_key_usage_t*);
-            *usage_out = psa_key_policy_get_usage(policy);
+        case PAL_CRYPTO_RESET_KEY_ATTRIBUTES:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            psa_reset_key_attributes(attributes);
             return 0;
-        case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM:
-            policy = va_arg(valist, psa_key_policy_t*);
-            alg_out = va_arg(valist, psa_algorithm_t*);
-            *alg_out = psa_key_policy_get_algorithm(policy);
+        case PAL_CRYPTO_EXPORT_PUBLIC_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            buffer = (uint8_t *)(va_arg(valist, uint8_t *));
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t *);
+            return psa_export_public_key(key_handle, buffer, size, length);
+        case PAL_CRYPTO_SET_KEY_ID:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_id = va_arg(valist, psa_key_id_t);
+            psa_set_key_id(attributes, key_id);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_LIFETIME:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_lifetime = va_arg(valist, psa_key_lifetime_t);
+            psa_set_key_lifetime(attributes, key_lifetime);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_ALGORITHM:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_alg = va_arg(valist, psa_algorithm_t);
+            psa_set_key_algorithm(attributes, key_alg);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ID:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_id_out = va_arg(valist, psa_key_id_t *);
+            *key_id_out = psa_get_key_id(attributes);
             return 0;
         case PAL_CRYPTO_GET_KEY_LIFETIME:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            lifetime_out = va_arg(valist, psa_key_lifetime_t*);
-            return psa_get_key_lifetime(handle, lifetime_out);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_lifetime_out = va_arg(valist, psa_key_lifetime_t *);
+            *key_lifetime_out = psa_get_key_lifetime(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_USAGE_FLAGS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            usage_out = va_arg(valist, psa_key_usage_t *);
+            *usage_out = psa_get_key_usage_flags(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ALGORITHM:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_alg_out = va_arg(valist, psa_algorithm_t *);
+            *key_alg_out = psa_get_key_algorithm(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_BITS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            length = va_arg(valist, size_t *);
+            *length = psa_get_key_bits(attributes);
+            return 0;
+        case PAL_CRYPTO_DESTROY_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_destroy_key(key_handle);
         case PAL_CRYPTO_HASH_SETUP:
             hash_operation = va_arg(valist, psa_hash_operation_t*);
             alg = va_arg(valist, psa_algorithm_t);
@@ -141,44 +169,31 @@
         case PAL_CRYPTO_HASH_ABORT:
             hash_operation = va_arg(valist, psa_hash_operation_t*);
             return psa_hash_abort(hash_operation);
-        case PAL_CRYPTO_GENERATE_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type = va_arg(valist, psa_key_type_t);
-            size     = va_arg(valist, size_t);
-            extra    = va_arg(valist, const void*);
-            extra_size  = va_arg(valist, size_t);
-            return psa_generate_key(handle, key_type, size, extra, extra_size);
-        case PAL_CRYPTO_GENERATOR_READ:
-            generator = va_arg(valist, psa_crypto_generator_t*);
+        case PAL_CRYPTO_HASH_COMPUTE:
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
             buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, int);
-            return psa_generator_read(generator, buffer, size);
-        case PAL_CRYPTO_KEY_DERIVATION:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length);
+        case PAL_CRYPTO_HASH_COMPARE:
             alg = va_arg(valist, psa_algorithm_t);
-            salt = va_arg(valist, const uint8_t *);
-            salt_length = va_arg(valist, size_t);
-            label = va_arg(valist, const uint8_t *);
-            label_length = va_arg(valist, size_t);
-            capacity = va_arg(valist, size_t);
-            return psa_key_derivation(generator, handle, alg, salt, salt_length, label,
-                                                                  label_length, capacity);
-        case PAL_CRYPTO_GET_GENERATOR_CAPACITY:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            gen_cap   = va_arg(valist, size_t*);
-            return psa_get_generator_capacity(generator, gen_cap);
-        case PAL_CRYPTO_GENERATOR_IMPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type = va_arg(valist, psa_key_type_t);
-            size     = va_arg(valist, size_t);
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            return psa_generator_import_key(handle, key_type, size, generator);
-        case PAL_CRYPTO_GENERATOR_ABORT:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            return psa_generator_abort(generator);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size);
+        case PAL_CRYPTO_HASH_CLONE:
+            hash_operation = va_arg(valist, psa_hash_operation_t*);
+            target_operation = va_arg(valist, psa_hash_operation_t*);
+            return psa_hash_clone(hash_operation, target_operation);
+        case PAL_CRYPTO_GENERATE_KEY:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_generate_key(attributes, handle);
         case PAL_CRYPTO_AEAD_ENCRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             nonce = va_arg(valist, const uint8_t *);
             nonce_length = va_arg(valist, size_t);
@@ -189,10 +204,10 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data,
-                    additional_data_length, plaintext, size, ciphertext, ciphertext_size, length);
+            return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data,
+            additional_data_length, plaintext, size, ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_AEAD_DECRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             nonce = va_arg(valist, const uint8_t *);
             nonce_length = va_arg(valist, size_t);
@@ -203,13 +218,74 @@
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data,
-                    additional_data_length, ciphertext, ciphertext_size, plaintext, size, length);
+            return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data,
+            additional_data_length, ciphertext, ciphertext_size, plaintext, size, length);
+        case PAL_CRYPTO_AEAD_ENCRYPT_SETUP:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_aead_encrypt_setup(aead_operation, key_handle, alg);
+        case PAL_CRYPTO_AEAD_DECRYPT_SETUP:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_aead_decrypt_setup(aead_operation, key_handle, alg);
+        case PAL_CRYPTO_AEAD_GENERATE_NONCE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t*);
+            return psa_aead_generate_nonce(aead_operation, buffer, size, length);
+        case PAL_CRYPTO_AEAD_SET_NONCE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_set_nonce(aead_operation, buffer, size);
+        case PAL_CRYPTO_AEAD_SET_LENGTHS:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            size = va_arg(valist, size_t);
+            plaintext_size = va_arg(valist, size_t);
+            return psa_aead_set_lengths(aead_operation, size, plaintext_size);
+        case PAL_CRYPTO_AEAD_UPDATE_AD:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_update_ad(aead_operation, buffer, size);
+        case PAL_CRYPTO_AEAD_UPDATE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext,
+            ciphertext_size, length);
+        case PAL_CRYPTO_AEAD_FINISH:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            tag_length = (size_t *)va_arg(valist, size_t*);
+            return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer,
+            size, tag_length);
+        case PAL_CRYPTO_AEAD_VERIFY:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t*);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size);
+        case PAL_CRYPTO_AEAD_ABORT:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            return psa_aead_abort(aead_operation);
         case PAL_CRYPTO_MAC_SIGN_SETUP:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_mac_sign_setup(mac_operation, handle, alg);
+            return psa_mac_sign_setup(mac_operation, key_handle, alg);
         case PAL_CRYPTO_MAC_UPDATE:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             buffer = va_arg(valist, uint8_t*);
@@ -223,9 +299,9 @@
             return psa_mac_sign_finish(mac_operation, buffer, size, length);
         case PAL_CRYPTO_MAC_VERIFY_SETUP:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_mac_verify_setup(mac_operation, handle, alg);
+            return psa_mac_verify_setup(mac_operation, key_handle, alg);
         case PAL_CRYPTO_MAC_VERIFY_FINISH:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             buffer = va_arg(valist, uint8_t*);
@@ -234,8 +310,27 @@
         case PAL_CRYPTO_MAC_ABORT:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             return psa_mac_abort(mac_operation);
+        case PAL_CRYPTO_MAC_COMPUTE:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext,
+            ciphertext_size, length);
+        case PAL_CRYPTO_MAC_VERIFY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext,
+            ciphertext_size);
         case PAL_CRYPTO_ASYMMTERIC_ENCRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
@@ -244,10 +339,10 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length,
-                    ciphertext, ciphertext_size, length);
+            return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length,
+            ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_ASYMMTERIC_DECRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
@@ -256,18 +351,18 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length,
-                    ciphertext, ciphertext_size, length);
+            return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length,
+            ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_cipher_encrypt_setup(cipher_operation, handle, alg);
+            return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg);
         case PAL_CRYPTO_CIPHER_DECRYPT_SETUP:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_cipher_decrypt_setup(cipher_operation, handle, alg);
+            return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg);
         case PAL_CRYPTO_CIPHER_GENERATE_IV:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             buffer = va_arg(valist, uint8_t*);
@@ -287,7 +382,7 @@
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
             return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size,
-                                     length);
+            length);
         case PAL_CRYPTO_CIPHER_FINISH:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             ciphertext = va_arg(valist, uint8_t *);
@@ -297,39 +392,110 @@
         case PAL_CRYPTO_CIPHER_ABORT:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             return psa_cipher_abort(cipher_operation);
+        case PAL_CRYPTO_CIPHER_ENCRYPT:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t *);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size,
+            length);
+        case PAL_CRYPTO_CIPHER_DECRYPT:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t *);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size,
+            length);
         case PAL_CRYPTO_ASYMMTERIC_SIGN:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size,
-                                       length);
+            return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size,
+            length);
         case PAL_CRYPTO_ASYMMTERIC_VERIFY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
-            return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size);
-        case PAL_CRYPTO_KEY_AGREEMENT:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext,
+            ciphertext_size);
+        case PAL_CRYPTO_RAW_KEY_AGREEMENT:
+            alg = va_arg(valist, psa_algorithm_t);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            peer = va_arg(valist, uint8_t*);
+            peer_length = va_arg(valist, size_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
-            alg = va_arg(valist, psa_algorithm_t);
-            return psa_key_agreement(generator, handle, buffer, size, alg);
-        case PAL_CRYPTO_ALLOCATE_KEY:
-            key_handle = (psa_key_handle_t *)va_arg(valist, int*);
-            return psa_allocate_key(key_handle);
+            length = va_arg(valist, size_t*);
+            return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length);
         case PAL_CRYPTO_COPY_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            target_handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_copy_key(handle, target_handle, policy);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_copy_key(key_handle, attributes, handle);
+        case PAL_CRYPTO_KEY_DERIVATION_SETUP:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_key_derivation_setup(derive_operation, alg);
+        case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_input_bytes(derive_operation, step, buffer, size);
+        case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_key_derivation_input_key(derive_operation, step, key_handle);
+        case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            peer = va_arg(valist, uint8_t*);
+            peer_length = va_arg(valist, size_t);
+            return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer,
+            peer_length);
+        case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_output_bytes(derive_operation, buffer, size);
+        case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_key_derivation_output_key(attributes, derive_operation, handle);
+        case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_set_capacity(derive_operation, size);
+        case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            length = va_arg(valist, size_t *);
+            return psa_key_derivation_get_capacity(derive_operation, length);
+        case PAL_CRYPTO_KEY_DERIVATION_ABORT:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            return psa_key_derivation_abort(derive_operation);
+        case PAL_CRYPTO_OPEN_KEY:
+            key_id = va_arg(valist, psa_key_id_t);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_open_key(key_id, handle);
+        case PAL_CRYPTO_CLOSE_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_close_key(key_handle);
         case PAL_CRYPTO_FREE:
             for (i = 0; i < PAL_KEY_SLOT_COUNT; i++)
                 psa_destroy_key(i);
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.h
index d1dabfa..486f793 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.h
@@ -21,55 +21,82 @@
 #include "pal_common.h"
 
 enum crypto_function_code {
-    PAL_CRYPTO_INIT                     = 0x1,
-    PAL_CRYPTO_GENERATE_RANDOM          = 0x2,
-    PAL_CRYPTO_IMPORT_KEY               = 0x3,
-    PAL_CRYPTO_EXPORT_KEY               = 0x4,
-    PAL_CRYPTO_EXPORT_PUBLIC_KEY        = 0x5,
-    PAL_CRYPTO_DESTROY_KEY              = 0x6,
-    PAL_CRYPTO_GET_KEY_INFO             = 0x7,
-    PAL_CRYPTO_KEY_POLICY_INIT          = 0x8,
-    PAL_CRYPTO_KEY_POLICY_SET_USAGE     = 0x9,
-    PAL_CRYPTO_KEY_POLICY_GET_USAGE     = 0xA,
-    PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB,
-    PAL_CRYPTO_SET_KEY_POLICY           = 0xC,
-    PAL_CRYPTO_GET_KEY_POLICY           = 0xD,
-    PAL_CRYPTO_GET_KEY_INFORMATION      = 0xE,
-    PAL_CRYPTO_GET_KEY_LIFETIME         = 0xF,
-    PAL_CRYPTO_HASH_SETUP               = 0x11,
-    PAL_CRYPTO_HASH_UPDATE              = 0x12,
-    PAL_CRYPTO_HASH_VERIFY              = 0x13,
-    PAL_CRYPTO_HASH_FINISH              = 0x14,
-    PAL_CRYPTO_HASH_ABORT               = 0x15,
-    PAL_CRYPTO_GENERATE_KEY             = 0x16,
-    PAL_CRYPTO_GENERATOR_READ           = 0x17,
-    PAL_CRYPTO_KEY_DERIVATION           = 0x18,
-    PAL_CRYPTO_GET_GENERATOR_CAPACITY   = 0x19,
-    PAL_CRYPTO_GENERATOR_IMPORT_KEY     = 0x1A,
-    PAL_CRYPTO_GENERATOR_ABORT          = 0x1B,
-    PAL_CRYPTO_AEAD_ENCRYPT             = 0x1C,
-    PAL_CRYPTO_AEAD_DECRYPT             = 0x1D,
-    PAL_CRYPTO_MAC_SIGN_SETUP           = 0x1E,
-    PAL_CRYPTO_MAC_UPDATE               = 0x1F,
-    PAL_CRYPTO_MAC_SIGN_FINISH          = 0x20,
-    PAL_CRYPTO_MAC_VERIFY_SETUP         = 0x21,
-    PAL_CRYPTO_MAC_VERIFY_FINISH        = 0x22,
-    PAL_CRYPTO_MAC_ABORT                = 0x23,
-    PAL_CRYPTO_ASYMMTERIC_ENCRYPT       = 0x24,
-    PAL_CRYPTO_ASYMMTERIC_DECRYPT       = 0x25,
-    PAL_CRYPTO_CIPHER_ENCRYPT_SETUP     = 0x26,
-    PAL_CRYPTO_CIPHER_DECRYPT_SETUP     = 0x2A,
-    PAL_CRYPTO_CIPHER_GENERATE_IV       = 0x2B,
-    PAL_CRYPTO_CIPHER_SET_IV            = 0x2C,
-    PAL_CRYPTO_CIPHER_UPDATE            = 0x2D,
-    PAL_CRYPTO_CIPHER_FINISH            = 0x2E,
-    PAL_CRYPTO_CIPHER_ABORT             = 0x2F,
-    PAL_CRYPTO_ASYMMTERIC_SIGN          = 0x30,
-    PAL_CRYPTO_ASYMMTERIC_VERIFY        = 0x31,
-    PAL_CRYPTO_KEY_AGREEMENT            = 0x32,
-    PAL_CRYPTO_ALLOCATE_KEY             = 0x33,
-    PAL_CRYPTO_COPY_KEY                 = 0x34,
-    PAL_CRYPTO_FREE                     = 0xFE,
+    PAL_CRYPTO_INIT                             = 0x1,
+    PAL_CRYPTO_GENERATE_RANDOM                  = 0x2,
+    PAL_CRYPTO_IMPORT_KEY                       = 0x3,
+    PAL_CRYPTO_EXPORT_KEY                       = 0x4,
+    PAL_CRYPTO_EXPORT_PUBLIC_KEY                = 0x5,
+    PAL_CRYPTO_DESTROY_KEY                      = 0x6,
+    PAL_CRYPTO_HASH_SETUP                       = 0x7,
+    PAL_CRYPTO_HASH_UPDATE                      = 0x8,
+    PAL_CRYPTO_HASH_VERIFY                      = 0x9,
+    PAL_CRYPTO_HASH_FINISH                      = 0xA,
+    PAL_CRYPTO_HASH_ABORT                       = 0xB,
+    PAL_CRYPTO_GENERATE_KEY                     = 0xC,
+    PAL_CRYPTO_AEAD_ENCRYPT                     = 0xD,
+    PAL_CRYPTO_AEAD_DECRYPT                     = 0xE,
+    PAL_CRYPTO_MAC_SIGN_SETUP                   = 0xF,
+    PAL_CRYPTO_MAC_UPDATE                       = 0x10,
+    PAL_CRYPTO_MAC_SIGN_FINISH                  = 0x11,
+    PAL_CRYPTO_MAC_VERIFY_SETUP                 = 0x12,
+    PAL_CRYPTO_MAC_VERIFY_FINISH                = 0x13,
+    PAL_CRYPTO_MAC_ABORT                        = 0x14,
+    PAL_CRYPTO_ASYMMTERIC_ENCRYPT               = 0x15,
+    PAL_CRYPTO_ASYMMTERIC_DECRYPT               = 0x16,
+    PAL_CRYPTO_CIPHER_ENCRYPT_SETUP             = 0x17,
+    PAL_CRYPTO_CIPHER_DECRYPT_SETUP             = 0x18,
+    PAL_CRYPTO_CIPHER_GENERATE_IV               = 0x19,
+    PAL_CRYPTO_CIPHER_SET_IV                    = 0x1A,
+    PAL_CRYPTO_CIPHER_UPDATE                    = 0x1B,
+    PAL_CRYPTO_CIPHER_FINISH                    = 0x1C,
+    PAL_CRYPTO_CIPHER_ABORT                     = 0x1D,
+    PAL_CRYPTO_ASYMMTERIC_SIGN                  = 0x1E,
+    PAL_CRYPTO_ASYMMTERIC_VERIFY                = 0x1F,
+    PAL_CRYPTO_COPY_KEY                         = 0x20,
+    PAL_CRYPTO_SET_KEY_TYPE                     = 0x21,
+    PAL_CRYPTO_SET_KEY_BITS                     = 0x22,
+    PAL_CRYPTO_GET_KEY_ATTRIBUTES               = 0x23,
+    PAL_CRYPTO_GET_KEY_TYPE                     = 0x24,
+    PAL_CRYPTO_SET_KEY_USAGE_FLAGS              = 0x25,
+    PAL_CRYPTO_RESET_KEY_ATTRIBUTES             = 0x26,
+    PAL_CRYPTO_SET_KEY_ID                       = 0x27,
+    PAL_CRYPTO_SET_KEY_LIFETIME                 = 0x28,
+    PAL_CRYPTO_SET_KEY_ALGORITHM                = 0x29,
+    PAL_CRYPTO_GET_KEY_ID                       = 0x2A,
+    PAL_CRYPTO_GET_KEY_LIFETIME                 = 0x2B,
+    PAL_CRYPTO_GET_KEY_USAGE_FLAGS              = 0x2C,
+    PAL_CRYPTO_GET_KEY_ALGORITHM                = 0x2D,
+    PAL_CRYPTO_GET_KEY_BITS                     = 0x2E,
+    PAL_CRYPTO_HASH_COMPUTE                     = 0x2F,
+    PAL_CRYPTO_HASH_COMPARE                     = 0x30,
+    PAL_CRYPTO_KEY_DERIVATION_SETUP             = 0x31,
+    PAL_CRYPTO_KEY_DERIVATION_ABORT             = 0x32,
+    PAL_CRYPTO_RAW_KEY_AGREEMENT                = 0x33,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES       = 0x34,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY         = 0x35,
+    PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT     = 0x36,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES      = 0x37,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY        = 0x38,
+    PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY      = 0x39,
+    PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY      = 0x3A,
+    PAL_CRYPTO_HASH_CLONE                       = 0x3B,
+    PAL_CRYPTO_MAC_COMPUTE                      = 0x3C,
+    PAL_CRYPTO_MAC_VERIFY                       = 0x3D,
+    PAL_CRYPTO_CIPHER_ENCRYPT                   = 0x3F,
+    PAL_CRYPTO_CIPHER_DECRYPT                   = 0x40,
+    PAL_CRYPTO_OPEN_KEY                         = 0x41,
+    PAL_CRYPTO_CLOSE_KEY                        = 0x42,
+    PAL_CRYPTO_AEAD_ENCRYPT_SETUP               = 0x43,
+    PAL_CRYPTO_AEAD_DECRYPT_SETUP               = 0x44,
+    PAL_CRYPTO_AEAD_GENERATE_NONCE              = 0x45,
+    PAL_CRYPTO_AEAD_SET_NONCE                   = 0x46,
+    PAL_CRYPTO_AEAD_SET_LENGTHS                 = 0X47,
+    PAL_CRYPTO_AEAD_UPDATE_AD                   = 0x48,
+    PAL_CRYPTO_AEAD_UPDATE                      = 0x49,
+    PAL_CRYPTO_AEAD_FINISH                      = 0x4A,
+    PAL_CRYPTO_AEAD_VERIFY                      = 0x4B,
+    PAL_CRYPTO_AEAD_ABORT                       = 0x4C,
+    PAL_CRYPTO_FREE                             = 0xFE,
 };
 
 int32_t pal_crypto_function(int type, va_list valist);
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c
index ae2bdba..38ed283 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c
@@ -17,24 +17,14 @@
 
 #include "pal_attestation_crypto.h"
 
-static uint32_t  public_key_registered = 0;
-
+static uint32_t         public_key_registered;
+static psa_key_handle_t public_key_handle;
 static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf,
                                                   size_t amount)
 {
     return UsefulBuf_Head(buf, amount);
 }
 
-static uint32_t check_hash_sizes(void)
-{
-    if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256))
-    {
-        return PAL_ATTEST_HASH_FAIL;
-    }
-
-    return PAL_ATTEST_SUCCESS;
-}
-
 static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve)
 {
     psa_ecc_curve_t psa_curve;
@@ -82,130 +72,94 @@
 
 int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id)
 {
-    int32_t                          cose_ret = PAL_ATTEST_SUCCESS;
-    psa_status_t                     psa_ret;
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT;
+    psa_algorithm_t      psa_alg;
 
-    cose_ret = check_hash_sizes();
-    if (cose_ret)
-    {
-        goto error;
-    }
+    /* Map the algorithm ID */
+    psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id);
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-        goto error;
-    }
+    /* Actually do the hash set up */
+    hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg);
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
-    psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id));
+    /* Copy the PSA handle back into the context */
+    hash_ctx->context.handle = psa_hash.handle;
 
-    if (psa_ret == PAL_ATTEST_SUCCESS)
-    {
-        psa_hash_ctx->status = PAL_ATTEST_SUCCESS;
-        cose_ret = PAL_ATTEST_SUCCESS;
-    }
-    else if (psa_ret == PSA_ERROR_NOT_SUPPORTED)
-    {
-        cose_ret = PAL_ATTEST_HASH_UNSUPPORTED;
-    }
-    else
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-    }
-
-error:
-    return cose_ret;
+    /* Map errors and return */
+    return (psa_status_t)hash_ctx->status;
 }
 
 void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx,
                                  struct q_useful_buf_c data_to_hash)
 {
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash;
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
+    /* Copy the PSA handle out of the generic context */
+    psa_hash.handle = (uint32_t)hash_ctx->context.handle;
+
+    if (hash_ctx->status != PSA_SUCCESS)
+        return;
+
+    if (data_to_hash.ptr == NULL) {
+        /* No data was passed in to be hashed indicating the mode of use is
+         * the computation of the size of hash. This mode is hashing is used
+         * by t_cose when it is requested to compute the size of the signed
+         * data it might compute, which is in turn used to compute the
+         * size of a would be token. When computing the size, the size
+         * like this, there is nothing to do in update()
+         */
         return;
     }
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
+    /* Actually hash the data */
+    hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len);
 
-    if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS)
-    {
-        if (data_to_hash.ptr != NULL)
-        {
-            psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation,
-                                                   data_to_hash.ptr,
-                                                   data_to_hash.len);
-        }
-        else
-        {
-            /* Intentionally do nothing, just computing the size of the token */
-        }
-    }
+    /* Copy the PSA handle back into the context. */
+    hash_ctx->context.handle = psa_hash.handle;
 }
 
 int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx,
                                     struct q_useful_buf buffer_to_hold_result,
                                     struct q_useful_buf_c *hash_result)
 {
-    uint32_t                         cose_ret = PAL_ATTEST_SUCCESS;
-    psa_status_t                     psa_ret;
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash;
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-        goto error;
-    }
+    /* Copy the PSA handle out of the generic context */
+    psa_hash.handle = (uint32_t)hash_ctx->context.handle;
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
+    if (hash_ctx->status != PSA_SUCCESS)
+        goto Done;
 
-    if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS)
-    {
-        psa_ret = psa_hash_finish(&psa_hash_ctx->operation,
-                                  buffer_to_hold_result.ptr,
-                                  buffer_to_hold_result.len,
-                                  &(hash_result->len));
+    /* Actually finish up the hash */
+    hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr,
+                                       buffer_to_hold_result.len, &(hash_result->len));
 
-        if (psa_ret == PAL_ATTEST_SUCCESS)
-        {
-            hash_result->ptr = buffer_to_hold_result.ptr;
-            cose_ret = 0;
-        }
-        else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL)
-        {
-            cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE;
-        }
-        else
-        {
-            cose_ret = PAL_ATTEST_HASH_FAIL;
-        }
-    }
-    else
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-    }
+    hash_result->ptr = buffer_to_hold_result.ptr;
 
-error:
-    return cose_ret;
+    /* Copy the PSA handle back into the context. */
+    hash_ctx->context.handle = psa_hash.handle;
+
+Done:
+    return ((psa_status_t)hash_ctx->status);
+
 }
 
 int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash,
                       struct q_useful_buf_c *hash)
 {
-    uint32_t                      status = PAL_ATTEST_SUCCESS;
+    uint32_t                      return_value = 0;
     struct pal_cose_crypto_hash   hash_ctx;
 
-    status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY);
-    if (status)
-        return status;
+    return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY);
+    if (return_value)
+        goto Done;
 
     pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash);
-    status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash);
+    return_value = pal_cose_crypto_hash_finish(&hash_ctx,
+                                             buffer_for_hash,
+                                             hash);
 
-    return status;
+Done:
+    return return_value;
 }
 
 uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash,
@@ -223,18 +177,19 @@
     /* This builds the CBOR-format to-be-signed bytes */
     QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part);
     QCBOREncode_OpenArray(&cbor_encode_ctx);
+
     /* context */
-    QCBOREncode_AddSZString(&cbor_encode_ctx,
-                            COSE_SIG_CONTEXT_STRING_SIGNATURE1);
+    QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1);
+
     /* body_protected */
-    QCBOREncode_AddBytes(&cbor_encode_ctx,
-                         protected_headers);
-    /* sign_protected */
-    QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
+    QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers);
+
+    /* sign_protected is not used for Sign1 */
     /* external_aad */
     QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
-    /* fake payload */
-    QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
+
+    /* The short fake payload. */
+    QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload);
     QCBOREncode_CloseArray(&cbor_encode_ctx);
 
     /* Get the result and convert it to struct q_useful_buf_c representation */
@@ -242,7 +197,8 @@
     if (qcbor_result)
     {
         /* Mainly means that the protected_headers were too big
-         (which should never happen) */
+         * (which should never happen)
+         */
         status = PAL_ATTEST_ERR_SIGN_STRUCT;
         goto Done;
     }
@@ -257,90 +213,129 @@
     if (status)
         goto Done;
 
-    /* Hash the first part of the TBS. Take all but the last two
-     * bytes. The last two bytes are the fake payload from above. It
-     * is replaced by the real payload which is hashed next. The fake
-     * payload is needed so the array count is right. This is one of
-     * the main things that make it possible to implement with one
-     * buffer for the whole cose sign1.
+    /* This is hashing of the first part, all the CBOR
+     * except the payload.
      */
-    pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part,
-                                              tbs_first_part.len - 2));
+    pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len));
 
-    /* Hash the payload */
+    /* Hash the payload, the second part. */
     pal_cose_crypto_hash_update(&hash_ctx, payload);
 
     /* Finish the hash and set up to return it */
-    status = pal_cose_crypto_hash_finish(&hash_ctx,
-                                             buffer_for_hash,
-                                             hash);
+    status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash);
 
 Done:
     return status;
 }
 
-uint32_t pal_import_attest_key(int32_t alg)
+static uint32_t pal_import_attest_key(psa_algorithm_t key_alg)
 {
-    psa_key_type_t   attest_key_type;
-    size_t           public_key_size;
-    psa_status_t     status = PSA_SUCCESS;
+    psa_status_t     status             = PAL_ATTEST_ERROR;
+    psa_key_usage_t  usage              = PSA_KEY_USAGE_VERIFY;
+    psa_ecc_curve_t  psa_curve          = attest_map_elliptic_curve_type(P_256);
+    psa_key_type_t   attest_key_type    = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve);
+    size_t           public_key_size    = attest_key.pubx_key_size + attest_key.puby_key_size;
+
+#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2)
     psa_key_policy_t policy;
-    psa_ecc_curve_t  psa_curve;
-    psa_key_handle_t public_key_handle;
 
-    /* Mapping of COSE curve type to PSA curve types */
-    psa_curve = attest_map_elliptic_curve_type(P_256);
-    if (psa_curve == USHRT_MAX)
-        return PAL_ATTEST_ERROR;
+    if (!public_key_registered)
+    {
+        if (psa_curve == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
 
-    /* Setup the key policy for public key */
-    policy = psa_key_policy_init();
-    psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg);
+        /* Setup the key policy for public key */
+        policy = psa_key_policy_init();
+        psa_key_policy_set_usage(&policy, usage, key_alg);
 
-    status = psa_allocate_key(&public_key_handle);
-    if (status != PSA_SUCCESS)
-        return status;
+        status = psa_allocate_key(&public_key_handle);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
 
-    status = psa_set_key_policy(public_key_handle, &policy);
-    if (status != PSA_SUCCESS)
-        return status;
+        status = psa_set_key_policy(public_key_handle, &policy);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
 
-    attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve);
-
-    /* Register public key to crypto service */
-    public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size;
-
-    status = psa_import_key(public_key_handle,
+        /* Import the public key */
+        status = psa_import_key(public_key_handle,
                                 attest_key_type,
-                                (const uint8_t *)&attest_public_key,
+                               (const uint8_t *)&attest_public_key,
                                 public_key_size + 1);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
+
+        public_key_registered = 1;
+    }
+
+#elif defined(CRYPTO_VERSION_BETA3)
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (!public_key_registered)
+    {
+        if (psa_curve == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
+
+        /* Set the attributes for the public key */
+        psa_set_key_type(&attributes, attest_key_type);
+        psa_set_key_bits(&attributes, public_key_size + 1);
+        psa_set_key_usage_flags(&attributes, usage);
+        psa_set_key_algorithm(&attributes, key_alg);
+
+        /* Import the public key */
+        status = psa_import_key(&attributes,
+                               (const uint8_t *)&attest_public_key,
+                                public_key_size + 1,
+                                &public_key_handle);
+
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
+
+        public_key_registered = 1;
+    }
+#endif
 
     return status;
 }
 
+static uint32_t pal_destroy_attest_key(void)
+{
+    psa_status_t     status;
+
+    if (!public_key_registered)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    status =  psa_destroy_key(public_key_handle);
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    public_key_registered = 0;
+
+    return PAL_ATTEST_SUCCESS;
+}
 
 uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id,
                                    struct q_useful_buf_c token_hash,
                                    struct q_useful_buf_c signature)
 {
-    uint32_t status = PAL_ATTEST_SUCCESS;
+    int32_t status = PAL_ATTEST_ERROR;
+    psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256);
 
-    if (!public_key_registered)
-    {
-        status = pal_import_attest_key(cose_algorithm_id);
-        if (status != PAL_ATTEST_SUCCESS)
-            return status;
+    /* Register the attestation public key */
+    status = pal_import_attest_key(key_alg);
+    if (status != PAL_ATTEST_SUCCESS)
+        return status;
 
-        public_key_registered = 1;
-    }
-
-/*
- * Enable the verify function when Trusted Firmare - M Supports
-
- *  Verify the signature a hash or short message using a public key.
+    /* Verify the signature */
     status = psa_asymmetric_verify(public_key_handle,
-                                    cose_algorithm_id, token_hash.ptr, token_hash.len,
-                                    signature.ptr, signature.len);
-*/
-    return status;
+                                   key_alg, token_hash.ptr, token_hash.len,
+                                   signature.ptr, signature.len);
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_SIGNATURE_FAIL;
+
+    /* Unregister the attestation public key */
+    status = pal_destroy_attest_key();
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    return PAL_ATTEST_SUCCESS;
 }
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h
index 2d63ad1..2175e65 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h
@@ -22,9 +22,9 @@
 
 typedef struct{
     uint8_t  *pubx_key;
-    uint32_t  pubx_key_size;
+    size_t    pubx_key_size;
     uint8_t  *puby_key;
-    uint32_t  puby_key_size;
+    size_t    puby_key_size;
 } ecc_key_t;
 
 struct ecc_public_key_t {
@@ -48,11 +48,11 @@
 };
 
 struct pal_cose_crypto_hash {
-    /* Can't put the actual size here without creating dependecy on
-     * actual hash implementation, so this is a fairly large and
-     * accommodating size.
-     */
-    uint8_t bytes[128];
+    union {
+        void    *ptr;
+        uint64_t handle;
+    } context;
+    int64_t status;
 };
 
 struct pal_cose_psa_crypto_hash {
@@ -95,7 +95,6 @@
 uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash,
                           struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers,
                           struct q_useful_buf_c payload);
-uint32_t pal_import_attest_key(int32_t alg);
 uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash,
                                    struct q_useful_buf_c signature);
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c
index 178fdc9..60c7164 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c
@@ -29,7 +29,7 @@
     QCBORError                qcbor_result;
     QCBOREncodeContext        cbor_encode_ctx;
     int32_t                   cose_curve_id = P_256;
-    struct q_useful_buf_c       encoded_key_id;
+    struct q_useful_buf_c     encoded_key_id;
 
     /* Get the public key x and y */
     /* Encode it into a COSE_Key structure */
@@ -136,26 +136,18 @@
 }
 
 static int parse_unprotected_headers(QCBORDecodeContext *decode_context,
-                                     struct q_useful_buf_c *child,
-                                     bool *loop_back)
+                                     struct q_useful_buf_c *child)
 {
     struct items_to_get_t   item_list[3];
 
     item_list[0].label = COSE_HEADER_PARAM_KID;
-    item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL;
-    item_list[2].label = 0;
-    *loop_back = false;
+    item_list[1].label = 0;
 
     if (get_items_in_map(decode_context, item_list))
     {
         return PAL_ATTEST_ERROR;
     }
 
-    if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE)
-    {
-        *loop_back = true;
-    }
-
     if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING)
     {
         return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING;
@@ -324,11 +316,10 @@
                 token_size      : Size of the token buffer
     @return   - error status
 **/
-int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size,
-                                        uint8_t *token, uint32_t token_size)
+int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size,
+                                        uint8_t *token, size_t token_size)
 {
     int32_t             status = PAL_ATTEST_SUCCESS;
-    bool                short_circuit;
     int32_t             cose_algorithm_id;
     QCBORItem           item;
     QCBORDecodeContext  decode_context;
@@ -412,8 +403,7 @@
         return status;
 
     /* Parse the unprotected headers and check the data type and value */
-    short_circuit = false;
-    status = parse_unprotected_headers(&decode_context, &kid, &short_circuit);
+    status = parse_unprotected_headers(&decode_context, &kid);
     if (status != PAL_ATTEST_SUCCESS)
         return status;
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h
index 8a0c545..e7449a0 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h
@@ -140,8 +140,7 @@
                                                 1 << (EAT_CBOR_ARM_RANGE_BASE                      \
                                                     - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS))
 
-#define MANDATORY_SW_COMP                      (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT      |     \
-                                                1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID)
+#define MANDATORY_SW_COMP                      (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT)
 
 #define NULL_USEFUL_BUF_C  NULLUsefulBufC
 
@@ -158,6 +157,8 @@
     PAL_ATTEST_HASH_BUFFER_SIZE,
     PAL_ATTEST_ERR_PROTECTED_HEADERS,
     PAL_ATTEST_ERR_SIGN_STRUCT,
+    PAL_ATTEST_ERR_KEY_FAIL,
+    PAL_ATTEST_ERR_SIGNATURE_FAIL,
     PAL_ATTEST_ERROR,
 };
 
@@ -166,5 +167,5 @@
     QCBORItem item;
 };
 
-int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size,
-                                        uint8_t *token, uint32_t token_size);
+int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size,
+                                        uint8_t *token, size_t token_size);
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c
index 2d99f74..83c1ebd 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c
@@ -27,25 +27,27 @@
 int32_t pal_attestation_function(int type, va_list valist)
 {
     uint8_t     *challenge, *token;
-    uint32_t    challenge_size, *token_size, verify_token_size;
+    size_t       challenge_size, *token_size, verify_token_size, token_buffer_size;
 
     switch (type)
     {
         case PAL_INITIAL_ATTEST_GET_TOKEN:
             challenge = va_arg(valist, uint8_t*);
-            challenge_size = va_arg(valist, uint32_t);
+            challenge_size = va_arg(valist, size_t);
             token = va_arg(valist, uint8_t*);
-            token_size = va_arg(valist, uint32_t*);
-            return psa_initial_attest_get_token(challenge, challenge_size, token, token_size);
+            token_buffer_size = va_arg(valist, size_t);
+            token_size = va_arg(valist, size_t*);
+            return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size,
+            token_size);
         case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE:
-            challenge_size = va_arg(valist, uint32_t);
-            token_size = va_arg(valist, uint32_t*);
+            challenge_size = va_arg(valist, size_t);
+            token_size = va_arg(valist, size_t*);
             return psa_initial_attest_get_token_size(challenge_size, token_size);
         case PAL_INITIAL_ATTEST_VERIFY_TOKEN:
             challenge = va_arg(valist, uint8_t*);
-            challenge_size = va_arg(valist, uint32_t);
+            challenge_size = va_arg(valist, size_t);
             token = va_arg(valist, uint8_t*);
-            verify_token_size = va_arg(valist, uint32_t);
+            verify_token_size = va_arg(valist, size_t);
             return pal_initial_attest_verify_token(challenge, challenge_size,
                                                    token, verify_token_size);
         default:
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h
index 289dc5d..2871339 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h
@@ -40,6 +40,9 @@
 #define SP_HEAP_MEM_SUPP
 #endif /* PSA_CMAKE_BUILD */
 
+/* Version of crypto spec used in attestation */
+#define CRYPTO_VERSION_BETA2
+
 /*
  * Include of PSA defined Header files
  */
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h
index f18a785..443e0bc 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h
@@ -94,13 +94,13 @@
 #error "ARCH_TEST_CTR_AES defined, but not all prerequisites"
 #endif
 
-#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\
+#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\
     (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC))
 #error "ARCH_TEST_CBC_AES defined, but not all prerequisites"
 #endif
 
 #if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\
-    (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC))
+    (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC))
 #error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites"
 #endif
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c
index 3df6aa8..fd2e055 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c
@@ -28,96 +28,124 @@
 **/
 int32_t pal_crypto_function(int type, va_list valist)
 {
-    int                     i;
-    size_t                  size, *length, salt_length, label_length, ciphertext_size;
-    uint8_t                 *buffer, *ciphertext;
-    const uint8_t           *salt, *label, *nonce, *additional_data;
-    uint8_t                 *plaintext;
-    uint32_t                status;
-    const void              *extra;
-    size_t                  extra_size, capacity, *gen_cap, nonce_length, additional_data_length;
-    psa_key_handle_t        handle, *key_handle, target_handle;
-    psa_key_type_t          key_type, *key_type_out;
-    psa_key_policy_t        *policy;
-    psa_key_usage_t         usage, *usage_out;
-    psa_key_lifetime_t      *lifetime_out;
-    psa_algorithm_t         alg, *alg_out;
-    psa_hash_operation_t    *hash_operation;
-    psa_mac_operation_t     *mac_operation;
-    psa_cipher_operation_t  *cipher_operation;
-    psa_crypto_generator_t  *generator;
-
+    int                              i;
+    psa_status_t                     status;
+    uint8_t                         *buffer, *ciphertext, *plaintext;
+    const uint8_t                   *nonce, *additional_data, *salt, *peer;
+    size_t                          *length, size, ciphertext_size, nonce_length;
+    size_t                           salt_length, peer_length, additional_data_length;
+    size_t                          *tag_length, plaintext_size;
+    psa_aead_operation_t            *aead_operation;
+    psa_key_attributes_t            *attributes;
+    psa_key_handle_t                *handle, key_handle;
+    psa_key_type_t                  *key_type_out, key_type;
+    psa_key_usage_t                 *usage_out, usage;
+    psa_key_id_t                    *key_id_out, key_id;
+    psa_key_lifetime_t              *key_lifetime_out, key_lifetime;
+    psa_algorithm_t                 *key_alg_out, key_alg, alg;
+    psa_hash_operation_t            *hash_operation, *target_operation;
+    psa_mac_operation_t             *mac_operation;
+    psa_cipher_operation_t          *cipher_operation;
+    psa_key_derivation_operation_t  *derive_operation;
+    psa_key_derivation_step_t        step;
     switch (type)
     {
         case PAL_CRYPTO_INIT:
             return psa_crypto_init();
         case PAL_CRYPTO_GENERATE_RANDOM:
-            buffer = va_arg(valist, uint8_t*);
+            buffer = va_arg(valist, uint8_t *);
             size = va_arg(valist, int);
             return psa_generate_random(buffer, size);
         case PAL_CRYPTO_IMPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            buffer = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            status = psa_import_key(attributes, buffer, size, handle);
+            return status;
+        case PAL_CRYPTO_SET_KEY_TYPE:
+            attributes = va_arg(valist, psa_key_attributes_t *);
             key_type = va_arg(valist, psa_key_type_t);
-            buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, int);
-            status = psa_import_key(handle, key_type, buffer, size);
-            return status;
+            psa_set_key_type(attributes, key_type);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_BITS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            size = va_arg(valist, size_t);
+            psa_set_key_bits(attributes, size);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ATTRIBUTES:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            return psa_get_key_attributes(key_handle, attributes);
+        case PAL_CRYPTO_GET_KEY_TYPE:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_type_out = va_arg(valist, psa_key_type_t *);
+            *key_type_out = psa_get_key_type(attributes);
+            return 0;
         case PAL_CRYPTO_EXPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            buffer = (uint8_t *)(va_arg(valist, uint8_t*));
-            size = va_arg(valist, int);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_export_key(handle, buffer, size, length);
-            return status;
-        case PAL_CRYPTO_EXPORT_PUBLIC_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            buffer = (uint8_t *)(va_arg(valist, uint8_t*));
-            size = va_arg(valist, int);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_export_public_key(handle, buffer, size, length);
-            return status;
-        case PAL_CRYPTO_KEY_POLICY_INIT:
-            policy = va_arg(valist, psa_key_policy_t*);
-            memset(policy, 0, sizeof(psa_key_policy_t));
-            return 0;
-        case PAL_CRYPTO_KEY_POLICY_SET_USAGE:
-            policy = va_arg(valist, psa_key_policy_t*);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            buffer = (uint8_t *)(va_arg(valist, uint8_t *));
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t *);
+            return psa_export_key(key_handle, buffer, size, length);
+        case PAL_CRYPTO_SET_KEY_USAGE_FLAGS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
             usage = va_arg(valist, psa_key_usage_t);
-            alg = va_arg(valist, psa_algorithm_t);
-            psa_key_policy_set_usage(policy, usage, alg);
+            psa_set_key_usage_flags(attributes, usage);
             return 0;
-        case PAL_CRYPTO_SET_KEY_POLICY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_set_key_policy(handle, policy);
-        case PAL_CRYPTO_DESTROY_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            status = psa_destroy_key(handle);
-            return status;
-        case PAL_CRYPTO_GET_KEY_INFORMATION:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type_out = va_arg(valist, psa_key_type_t*);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_get_key_information(handle, key_type_out, length);
-            return status;
-        case PAL_CRYPTO_GET_KEY_POLICY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_get_key_policy(handle, policy);
-        case PAL_CRYPTO_KEY_POLICY_GET_USAGE:
-            policy = va_arg(valist, psa_key_policy_t*);
-            usage_out = va_arg(valist, psa_key_usage_t*);
-            *usage_out = psa_key_policy_get_usage(policy);
+        case PAL_CRYPTO_RESET_KEY_ATTRIBUTES:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            psa_reset_key_attributes(attributes);
             return 0;
-        case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM:
-            policy = va_arg(valist, psa_key_policy_t*);
-            alg_out = va_arg(valist, psa_algorithm_t*);
-            *alg_out = psa_key_policy_get_algorithm(policy);
+        case PAL_CRYPTO_EXPORT_PUBLIC_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            buffer = (uint8_t *)(va_arg(valist, uint8_t *));
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t *);
+            return psa_export_public_key(key_handle, buffer, size, length);
+        case PAL_CRYPTO_SET_KEY_ID:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_id = va_arg(valist, psa_key_id_t);
+            psa_set_key_id(attributes, key_id);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_LIFETIME:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_lifetime = va_arg(valist, psa_key_lifetime_t);
+            psa_set_key_lifetime(attributes, key_lifetime);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_ALGORITHM:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_alg = va_arg(valist, psa_algorithm_t);
+            psa_set_key_algorithm(attributes, key_alg);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ID:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_id_out = va_arg(valist, psa_key_id_t *);
+            *key_id_out = psa_get_key_id(attributes);
             return 0;
         case PAL_CRYPTO_GET_KEY_LIFETIME:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            lifetime_out = va_arg(valist, psa_key_lifetime_t*);
-            return psa_get_key_lifetime(handle, lifetime_out);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_lifetime_out = va_arg(valist, psa_key_lifetime_t *);
+            *key_lifetime_out = psa_get_key_lifetime(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_USAGE_FLAGS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            usage_out = va_arg(valist, psa_key_usage_t *);
+            *usage_out = psa_get_key_usage_flags(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ALGORITHM:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_alg_out = va_arg(valist, psa_algorithm_t *);
+            *key_alg_out = psa_get_key_algorithm(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_BITS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            length = va_arg(valist, size_t *);
+            *length = psa_get_key_bits(attributes);
+            return 0;
+        case PAL_CRYPTO_DESTROY_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_destroy_key(key_handle);
         case PAL_CRYPTO_HASH_SETUP:
             hash_operation = va_arg(valist, psa_hash_operation_t*);
             alg = va_arg(valist, psa_algorithm_t);
@@ -141,44 +169,31 @@
         case PAL_CRYPTO_HASH_ABORT:
             hash_operation = va_arg(valist, psa_hash_operation_t*);
             return psa_hash_abort(hash_operation);
-        case PAL_CRYPTO_GENERATE_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type = va_arg(valist, psa_key_type_t);
-            size     = va_arg(valist, size_t);
-            extra    = va_arg(valist, const void*);
-            extra_size  = va_arg(valist, size_t);
-            return psa_generate_key(handle, key_type, size, extra, extra_size);
-        case PAL_CRYPTO_GENERATOR_READ:
-            generator = va_arg(valist, psa_crypto_generator_t*);
+        case PAL_CRYPTO_HASH_COMPUTE:
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
             buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, int);
-            return psa_generator_read(generator, buffer, size);
-        case PAL_CRYPTO_KEY_DERIVATION:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length);
+        case PAL_CRYPTO_HASH_COMPARE:
             alg = va_arg(valist, psa_algorithm_t);
-            salt = va_arg(valist, const uint8_t *);
-            salt_length = va_arg(valist, size_t);
-            label = va_arg(valist, const uint8_t *);
-            label_length = va_arg(valist, size_t);
-            capacity = va_arg(valist, size_t);
-            return psa_key_derivation(generator, handle, alg, salt, salt_length, label,
-                                                                  label_length, capacity);
-        case PAL_CRYPTO_GET_GENERATOR_CAPACITY:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            gen_cap   = va_arg(valist, size_t*);
-            return psa_get_generator_capacity(generator, gen_cap);
-        case PAL_CRYPTO_GENERATOR_IMPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type = va_arg(valist, psa_key_type_t);
-            size     = va_arg(valist, size_t);
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            return psa_generator_import_key(handle, key_type, size, generator);
-        case PAL_CRYPTO_GENERATOR_ABORT:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            return psa_generator_abort(generator);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size);
+        case PAL_CRYPTO_HASH_CLONE:
+            hash_operation = va_arg(valist, psa_hash_operation_t*);
+            target_operation = va_arg(valist, psa_hash_operation_t*);
+            return psa_hash_clone(hash_operation, target_operation);
+        case PAL_CRYPTO_GENERATE_KEY:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_generate_key(attributes, handle);
         case PAL_CRYPTO_AEAD_ENCRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             nonce = va_arg(valist, const uint8_t *);
             nonce_length = va_arg(valist, size_t);
@@ -189,10 +204,10 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data,
-                    additional_data_length, plaintext, size, ciphertext, ciphertext_size, length);
+            return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data,
+            additional_data_length, plaintext, size, ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_AEAD_DECRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             nonce = va_arg(valist, const uint8_t *);
             nonce_length = va_arg(valist, size_t);
@@ -203,13 +218,74 @@
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data,
-                    additional_data_length, ciphertext, ciphertext_size, plaintext, size, length);
+            return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data,
+            additional_data_length, ciphertext, ciphertext_size, plaintext, size, length);
+        case PAL_CRYPTO_AEAD_ENCRYPT_SETUP:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_aead_encrypt_setup(aead_operation, key_handle, alg);
+        case PAL_CRYPTO_AEAD_DECRYPT_SETUP:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_aead_decrypt_setup(aead_operation, key_handle, alg);
+        case PAL_CRYPTO_AEAD_GENERATE_NONCE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t*);
+            return psa_aead_generate_nonce(aead_operation, buffer, size, length);
+        case PAL_CRYPTO_AEAD_SET_NONCE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_set_nonce(aead_operation, buffer, size);
+        case PAL_CRYPTO_AEAD_SET_LENGTHS:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            size = va_arg(valist, size_t);
+            plaintext_size = va_arg(valist, size_t);
+            return psa_aead_set_lengths(aead_operation, size, plaintext_size);
+        case PAL_CRYPTO_AEAD_UPDATE_AD:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_update_ad(aead_operation, buffer, size);
+        case PAL_CRYPTO_AEAD_UPDATE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext,
+            ciphertext_size, length);
+        case PAL_CRYPTO_AEAD_FINISH:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            tag_length = (size_t *)va_arg(valist, size_t*);
+            return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer,
+            size, tag_length);
+        case PAL_CRYPTO_AEAD_VERIFY:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t*);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size);
+        case PAL_CRYPTO_AEAD_ABORT:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            return psa_aead_abort(aead_operation);
         case PAL_CRYPTO_MAC_SIGN_SETUP:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_mac_sign_setup(mac_operation, handle, alg);
+            return psa_mac_sign_setup(mac_operation, key_handle, alg);
         case PAL_CRYPTO_MAC_UPDATE:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             buffer = va_arg(valist, uint8_t*);
@@ -223,9 +299,9 @@
             return psa_mac_sign_finish(mac_operation, buffer, size, length);
         case PAL_CRYPTO_MAC_VERIFY_SETUP:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_mac_verify_setup(mac_operation, handle, alg);
+            return psa_mac_verify_setup(mac_operation, key_handle, alg);
         case PAL_CRYPTO_MAC_VERIFY_FINISH:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             buffer = va_arg(valist, uint8_t*);
@@ -234,8 +310,27 @@
         case PAL_CRYPTO_MAC_ABORT:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             return psa_mac_abort(mac_operation);
+        case PAL_CRYPTO_MAC_COMPUTE:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext,
+            ciphertext_size, length);
+        case PAL_CRYPTO_MAC_VERIFY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext,
+            ciphertext_size);
         case PAL_CRYPTO_ASYMMTERIC_ENCRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
@@ -244,10 +339,10 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length,
-                    ciphertext, ciphertext_size, length);
+            return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length,
+            ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_ASYMMTERIC_DECRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
@@ -256,18 +351,18 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length,
-                    ciphertext, ciphertext_size, length);
+            return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length,
+            ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_cipher_encrypt_setup(cipher_operation, handle, alg);
+            return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg);
         case PAL_CRYPTO_CIPHER_DECRYPT_SETUP:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_cipher_decrypt_setup(cipher_operation, handle, alg);
+            return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg);
         case PAL_CRYPTO_CIPHER_GENERATE_IV:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             buffer = va_arg(valist, uint8_t*);
@@ -287,7 +382,7 @@
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
             return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size,
-                                     length);
+            length);
         case PAL_CRYPTO_CIPHER_FINISH:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             ciphertext = va_arg(valist, uint8_t *);
@@ -297,39 +392,110 @@
         case PAL_CRYPTO_CIPHER_ABORT:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             return psa_cipher_abort(cipher_operation);
+        case PAL_CRYPTO_CIPHER_ENCRYPT:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t *);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size,
+            length);
+        case PAL_CRYPTO_CIPHER_DECRYPT:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t *);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size,
+            length);
         case PAL_CRYPTO_ASYMMTERIC_SIGN:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size,
-                                       length);
+            return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size,
+            length);
         case PAL_CRYPTO_ASYMMTERIC_VERIFY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
-            return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size);
-        case PAL_CRYPTO_KEY_AGREEMENT:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext,
+            ciphertext_size);
+        case PAL_CRYPTO_RAW_KEY_AGREEMENT:
+            alg = va_arg(valist, psa_algorithm_t);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            peer = va_arg(valist, uint8_t*);
+            peer_length = va_arg(valist, size_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
-            alg = va_arg(valist, psa_algorithm_t);
-            return psa_key_agreement(generator, handle, buffer, size, alg);
-        case PAL_CRYPTO_ALLOCATE_KEY:
-            key_handle = (psa_key_handle_t *)va_arg(valist, int*);
-            return psa_allocate_key(key_handle);
+            length = va_arg(valist, size_t*);
+            return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length);
         case PAL_CRYPTO_COPY_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            target_handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_copy_key(handle, target_handle, policy);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_copy_key(key_handle, attributes, handle);
+        case PAL_CRYPTO_KEY_DERIVATION_SETUP:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_key_derivation_setup(derive_operation, alg);
+        case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_input_bytes(derive_operation, step, buffer, size);
+        case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_key_derivation_input_key(derive_operation, step, key_handle);
+        case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            peer = va_arg(valist, uint8_t*);
+            peer_length = va_arg(valist, size_t);
+            return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer,
+            peer_length);
+        case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_output_bytes(derive_operation, buffer, size);
+        case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_key_derivation_output_key(attributes, derive_operation, handle);
+        case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_set_capacity(derive_operation, size);
+        case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            length = va_arg(valist, size_t *);
+            return psa_key_derivation_get_capacity(derive_operation, length);
+        case PAL_CRYPTO_KEY_DERIVATION_ABORT:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            return psa_key_derivation_abort(derive_operation);
+        case PAL_CRYPTO_OPEN_KEY:
+            key_id = va_arg(valist, psa_key_id_t);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_open_key(key_id, handle);
+        case PAL_CRYPTO_CLOSE_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_close_key(key_handle);
         case PAL_CRYPTO_FREE:
             for (i = 0; i < PAL_KEY_SLOT_COUNT; i++)
                 psa_destroy_key(i);
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h
index d1dabfa..486f793 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h
@@ -21,55 +21,82 @@
 #include "pal_common.h"
 
 enum crypto_function_code {
-    PAL_CRYPTO_INIT                     = 0x1,
-    PAL_CRYPTO_GENERATE_RANDOM          = 0x2,
-    PAL_CRYPTO_IMPORT_KEY               = 0x3,
-    PAL_CRYPTO_EXPORT_KEY               = 0x4,
-    PAL_CRYPTO_EXPORT_PUBLIC_KEY        = 0x5,
-    PAL_CRYPTO_DESTROY_KEY              = 0x6,
-    PAL_CRYPTO_GET_KEY_INFO             = 0x7,
-    PAL_CRYPTO_KEY_POLICY_INIT          = 0x8,
-    PAL_CRYPTO_KEY_POLICY_SET_USAGE     = 0x9,
-    PAL_CRYPTO_KEY_POLICY_GET_USAGE     = 0xA,
-    PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB,
-    PAL_CRYPTO_SET_KEY_POLICY           = 0xC,
-    PAL_CRYPTO_GET_KEY_POLICY           = 0xD,
-    PAL_CRYPTO_GET_KEY_INFORMATION      = 0xE,
-    PAL_CRYPTO_GET_KEY_LIFETIME         = 0xF,
-    PAL_CRYPTO_HASH_SETUP               = 0x11,
-    PAL_CRYPTO_HASH_UPDATE              = 0x12,
-    PAL_CRYPTO_HASH_VERIFY              = 0x13,
-    PAL_CRYPTO_HASH_FINISH              = 0x14,
-    PAL_CRYPTO_HASH_ABORT               = 0x15,
-    PAL_CRYPTO_GENERATE_KEY             = 0x16,
-    PAL_CRYPTO_GENERATOR_READ           = 0x17,
-    PAL_CRYPTO_KEY_DERIVATION           = 0x18,
-    PAL_CRYPTO_GET_GENERATOR_CAPACITY   = 0x19,
-    PAL_CRYPTO_GENERATOR_IMPORT_KEY     = 0x1A,
-    PAL_CRYPTO_GENERATOR_ABORT          = 0x1B,
-    PAL_CRYPTO_AEAD_ENCRYPT             = 0x1C,
-    PAL_CRYPTO_AEAD_DECRYPT             = 0x1D,
-    PAL_CRYPTO_MAC_SIGN_SETUP           = 0x1E,
-    PAL_CRYPTO_MAC_UPDATE               = 0x1F,
-    PAL_CRYPTO_MAC_SIGN_FINISH          = 0x20,
-    PAL_CRYPTO_MAC_VERIFY_SETUP         = 0x21,
-    PAL_CRYPTO_MAC_VERIFY_FINISH        = 0x22,
-    PAL_CRYPTO_MAC_ABORT                = 0x23,
-    PAL_CRYPTO_ASYMMTERIC_ENCRYPT       = 0x24,
-    PAL_CRYPTO_ASYMMTERIC_DECRYPT       = 0x25,
-    PAL_CRYPTO_CIPHER_ENCRYPT_SETUP     = 0x26,
-    PAL_CRYPTO_CIPHER_DECRYPT_SETUP     = 0x2A,
-    PAL_CRYPTO_CIPHER_GENERATE_IV       = 0x2B,
-    PAL_CRYPTO_CIPHER_SET_IV            = 0x2C,
-    PAL_CRYPTO_CIPHER_UPDATE            = 0x2D,
-    PAL_CRYPTO_CIPHER_FINISH            = 0x2E,
-    PAL_CRYPTO_CIPHER_ABORT             = 0x2F,
-    PAL_CRYPTO_ASYMMTERIC_SIGN          = 0x30,
-    PAL_CRYPTO_ASYMMTERIC_VERIFY        = 0x31,
-    PAL_CRYPTO_KEY_AGREEMENT            = 0x32,
-    PAL_CRYPTO_ALLOCATE_KEY             = 0x33,
-    PAL_CRYPTO_COPY_KEY                 = 0x34,
-    PAL_CRYPTO_FREE                     = 0xFE,
+    PAL_CRYPTO_INIT                             = 0x1,
+    PAL_CRYPTO_GENERATE_RANDOM                  = 0x2,
+    PAL_CRYPTO_IMPORT_KEY                       = 0x3,
+    PAL_CRYPTO_EXPORT_KEY                       = 0x4,
+    PAL_CRYPTO_EXPORT_PUBLIC_KEY                = 0x5,
+    PAL_CRYPTO_DESTROY_KEY                      = 0x6,
+    PAL_CRYPTO_HASH_SETUP                       = 0x7,
+    PAL_CRYPTO_HASH_UPDATE                      = 0x8,
+    PAL_CRYPTO_HASH_VERIFY                      = 0x9,
+    PAL_CRYPTO_HASH_FINISH                      = 0xA,
+    PAL_CRYPTO_HASH_ABORT                       = 0xB,
+    PAL_CRYPTO_GENERATE_KEY                     = 0xC,
+    PAL_CRYPTO_AEAD_ENCRYPT                     = 0xD,
+    PAL_CRYPTO_AEAD_DECRYPT                     = 0xE,
+    PAL_CRYPTO_MAC_SIGN_SETUP                   = 0xF,
+    PAL_CRYPTO_MAC_UPDATE                       = 0x10,
+    PAL_CRYPTO_MAC_SIGN_FINISH                  = 0x11,
+    PAL_CRYPTO_MAC_VERIFY_SETUP                 = 0x12,
+    PAL_CRYPTO_MAC_VERIFY_FINISH                = 0x13,
+    PAL_CRYPTO_MAC_ABORT                        = 0x14,
+    PAL_CRYPTO_ASYMMTERIC_ENCRYPT               = 0x15,
+    PAL_CRYPTO_ASYMMTERIC_DECRYPT               = 0x16,
+    PAL_CRYPTO_CIPHER_ENCRYPT_SETUP             = 0x17,
+    PAL_CRYPTO_CIPHER_DECRYPT_SETUP             = 0x18,
+    PAL_CRYPTO_CIPHER_GENERATE_IV               = 0x19,
+    PAL_CRYPTO_CIPHER_SET_IV                    = 0x1A,
+    PAL_CRYPTO_CIPHER_UPDATE                    = 0x1B,
+    PAL_CRYPTO_CIPHER_FINISH                    = 0x1C,
+    PAL_CRYPTO_CIPHER_ABORT                     = 0x1D,
+    PAL_CRYPTO_ASYMMTERIC_SIGN                  = 0x1E,
+    PAL_CRYPTO_ASYMMTERIC_VERIFY                = 0x1F,
+    PAL_CRYPTO_COPY_KEY                         = 0x20,
+    PAL_CRYPTO_SET_KEY_TYPE                     = 0x21,
+    PAL_CRYPTO_SET_KEY_BITS                     = 0x22,
+    PAL_CRYPTO_GET_KEY_ATTRIBUTES               = 0x23,
+    PAL_CRYPTO_GET_KEY_TYPE                     = 0x24,
+    PAL_CRYPTO_SET_KEY_USAGE_FLAGS              = 0x25,
+    PAL_CRYPTO_RESET_KEY_ATTRIBUTES             = 0x26,
+    PAL_CRYPTO_SET_KEY_ID                       = 0x27,
+    PAL_CRYPTO_SET_KEY_LIFETIME                 = 0x28,
+    PAL_CRYPTO_SET_KEY_ALGORITHM                = 0x29,
+    PAL_CRYPTO_GET_KEY_ID                       = 0x2A,
+    PAL_CRYPTO_GET_KEY_LIFETIME                 = 0x2B,
+    PAL_CRYPTO_GET_KEY_USAGE_FLAGS              = 0x2C,
+    PAL_CRYPTO_GET_KEY_ALGORITHM                = 0x2D,
+    PAL_CRYPTO_GET_KEY_BITS                     = 0x2E,
+    PAL_CRYPTO_HASH_COMPUTE                     = 0x2F,
+    PAL_CRYPTO_HASH_COMPARE                     = 0x30,
+    PAL_CRYPTO_KEY_DERIVATION_SETUP             = 0x31,
+    PAL_CRYPTO_KEY_DERIVATION_ABORT             = 0x32,
+    PAL_CRYPTO_RAW_KEY_AGREEMENT                = 0x33,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES       = 0x34,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY         = 0x35,
+    PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT     = 0x36,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES      = 0x37,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY        = 0x38,
+    PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY      = 0x39,
+    PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY      = 0x3A,
+    PAL_CRYPTO_HASH_CLONE                       = 0x3B,
+    PAL_CRYPTO_MAC_COMPUTE                      = 0x3C,
+    PAL_CRYPTO_MAC_VERIFY                       = 0x3D,
+    PAL_CRYPTO_CIPHER_ENCRYPT                   = 0x3F,
+    PAL_CRYPTO_CIPHER_DECRYPT                   = 0x40,
+    PAL_CRYPTO_OPEN_KEY                         = 0x41,
+    PAL_CRYPTO_CLOSE_KEY                        = 0x42,
+    PAL_CRYPTO_AEAD_ENCRYPT_SETUP               = 0x43,
+    PAL_CRYPTO_AEAD_DECRYPT_SETUP               = 0x44,
+    PAL_CRYPTO_AEAD_GENERATE_NONCE              = 0x45,
+    PAL_CRYPTO_AEAD_SET_NONCE                   = 0x46,
+    PAL_CRYPTO_AEAD_SET_LENGTHS                 = 0X47,
+    PAL_CRYPTO_AEAD_UPDATE_AD                   = 0x48,
+    PAL_CRYPTO_AEAD_UPDATE                      = 0x49,
+    PAL_CRYPTO_AEAD_FINISH                      = 0x4A,
+    PAL_CRYPTO_AEAD_VERIFY                      = 0x4B,
+    PAL_CRYPTO_AEAD_ABORT                       = 0x4C,
+    PAL_CRYPTO_FREE                             = 0xFE,
 };
 
 int32_t pal_crypto_function(int type, va_list valist);
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c
index ae2bdba..38ed283 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c
@@ -17,24 +17,14 @@
 
 #include "pal_attestation_crypto.h"
 
-static uint32_t  public_key_registered = 0;
-
+static uint32_t         public_key_registered;
+static psa_key_handle_t public_key_handle;
 static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf,
                                                   size_t amount)
 {
     return UsefulBuf_Head(buf, amount);
 }
 
-static uint32_t check_hash_sizes(void)
-{
-    if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256))
-    {
-        return PAL_ATTEST_HASH_FAIL;
-    }
-
-    return PAL_ATTEST_SUCCESS;
-}
-
 static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve)
 {
     psa_ecc_curve_t psa_curve;
@@ -82,130 +72,94 @@
 
 int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id)
 {
-    int32_t                          cose_ret = PAL_ATTEST_SUCCESS;
-    psa_status_t                     psa_ret;
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT;
+    psa_algorithm_t      psa_alg;
 
-    cose_ret = check_hash_sizes();
-    if (cose_ret)
-    {
-        goto error;
-    }
+    /* Map the algorithm ID */
+    psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id);
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-        goto error;
-    }
+    /* Actually do the hash set up */
+    hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg);
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
-    psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id));
+    /* Copy the PSA handle back into the context */
+    hash_ctx->context.handle = psa_hash.handle;
 
-    if (psa_ret == PAL_ATTEST_SUCCESS)
-    {
-        psa_hash_ctx->status = PAL_ATTEST_SUCCESS;
-        cose_ret = PAL_ATTEST_SUCCESS;
-    }
-    else if (psa_ret == PSA_ERROR_NOT_SUPPORTED)
-    {
-        cose_ret = PAL_ATTEST_HASH_UNSUPPORTED;
-    }
-    else
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-    }
-
-error:
-    return cose_ret;
+    /* Map errors and return */
+    return (psa_status_t)hash_ctx->status;
 }
 
 void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx,
                                  struct q_useful_buf_c data_to_hash)
 {
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash;
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
+    /* Copy the PSA handle out of the generic context */
+    psa_hash.handle = (uint32_t)hash_ctx->context.handle;
+
+    if (hash_ctx->status != PSA_SUCCESS)
+        return;
+
+    if (data_to_hash.ptr == NULL) {
+        /* No data was passed in to be hashed indicating the mode of use is
+         * the computation of the size of hash. This mode is hashing is used
+         * by t_cose when it is requested to compute the size of the signed
+         * data it might compute, which is in turn used to compute the
+         * size of a would be token. When computing the size, the size
+         * like this, there is nothing to do in update()
+         */
         return;
     }
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
+    /* Actually hash the data */
+    hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len);
 
-    if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS)
-    {
-        if (data_to_hash.ptr != NULL)
-        {
-            psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation,
-                                                   data_to_hash.ptr,
-                                                   data_to_hash.len);
-        }
-        else
-        {
-            /* Intentionally do nothing, just computing the size of the token */
-        }
-    }
+    /* Copy the PSA handle back into the context. */
+    hash_ctx->context.handle = psa_hash.handle;
 }
 
 int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx,
                                     struct q_useful_buf buffer_to_hold_result,
                                     struct q_useful_buf_c *hash_result)
 {
-    uint32_t                         cose_ret = PAL_ATTEST_SUCCESS;
-    psa_status_t                     psa_ret;
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash;
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-        goto error;
-    }
+    /* Copy the PSA handle out of the generic context */
+    psa_hash.handle = (uint32_t)hash_ctx->context.handle;
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
+    if (hash_ctx->status != PSA_SUCCESS)
+        goto Done;
 
-    if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS)
-    {
-        psa_ret = psa_hash_finish(&psa_hash_ctx->operation,
-                                  buffer_to_hold_result.ptr,
-                                  buffer_to_hold_result.len,
-                                  &(hash_result->len));
+    /* Actually finish up the hash */
+    hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr,
+                                       buffer_to_hold_result.len, &(hash_result->len));
 
-        if (psa_ret == PAL_ATTEST_SUCCESS)
-        {
-            hash_result->ptr = buffer_to_hold_result.ptr;
-            cose_ret = 0;
-        }
-        else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL)
-        {
-            cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE;
-        }
-        else
-        {
-            cose_ret = PAL_ATTEST_HASH_FAIL;
-        }
-    }
-    else
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-    }
+    hash_result->ptr = buffer_to_hold_result.ptr;
 
-error:
-    return cose_ret;
+    /* Copy the PSA handle back into the context. */
+    hash_ctx->context.handle = psa_hash.handle;
+
+Done:
+    return ((psa_status_t)hash_ctx->status);
+
 }
 
 int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash,
                       struct q_useful_buf_c *hash)
 {
-    uint32_t                      status = PAL_ATTEST_SUCCESS;
+    uint32_t                      return_value = 0;
     struct pal_cose_crypto_hash   hash_ctx;
 
-    status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY);
-    if (status)
-        return status;
+    return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY);
+    if (return_value)
+        goto Done;
 
     pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash);
-    status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash);
+    return_value = pal_cose_crypto_hash_finish(&hash_ctx,
+                                             buffer_for_hash,
+                                             hash);
 
-    return status;
+Done:
+    return return_value;
 }
 
 uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash,
@@ -223,18 +177,19 @@
     /* This builds the CBOR-format to-be-signed bytes */
     QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part);
     QCBOREncode_OpenArray(&cbor_encode_ctx);
+
     /* context */
-    QCBOREncode_AddSZString(&cbor_encode_ctx,
-                            COSE_SIG_CONTEXT_STRING_SIGNATURE1);
+    QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1);
+
     /* body_protected */
-    QCBOREncode_AddBytes(&cbor_encode_ctx,
-                         protected_headers);
-    /* sign_protected */
-    QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
+    QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers);
+
+    /* sign_protected is not used for Sign1 */
     /* external_aad */
     QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
-    /* fake payload */
-    QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
+
+    /* The short fake payload. */
+    QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload);
     QCBOREncode_CloseArray(&cbor_encode_ctx);
 
     /* Get the result and convert it to struct q_useful_buf_c representation */
@@ -242,7 +197,8 @@
     if (qcbor_result)
     {
         /* Mainly means that the protected_headers were too big
-         (which should never happen) */
+         * (which should never happen)
+         */
         status = PAL_ATTEST_ERR_SIGN_STRUCT;
         goto Done;
     }
@@ -257,90 +213,129 @@
     if (status)
         goto Done;
 
-    /* Hash the first part of the TBS. Take all but the last two
-     * bytes. The last two bytes are the fake payload from above. It
-     * is replaced by the real payload which is hashed next. The fake
-     * payload is needed so the array count is right. This is one of
-     * the main things that make it possible to implement with one
-     * buffer for the whole cose sign1.
+    /* This is hashing of the first part, all the CBOR
+     * except the payload.
      */
-    pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part,
-                                              tbs_first_part.len - 2));
+    pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len));
 
-    /* Hash the payload */
+    /* Hash the payload, the second part. */
     pal_cose_crypto_hash_update(&hash_ctx, payload);
 
     /* Finish the hash and set up to return it */
-    status = pal_cose_crypto_hash_finish(&hash_ctx,
-                                             buffer_for_hash,
-                                             hash);
+    status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash);
 
 Done:
     return status;
 }
 
-uint32_t pal_import_attest_key(int32_t alg)
+static uint32_t pal_import_attest_key(psa_algorithm_t key_alg)
 {
-    psa_key_type_t   attest_key_type;
-    size_t           public_key_size;
-    psa_status_t     status = PSA_SUCCESS;
+    psa_status_t     status             = PAL_ATTEST_ERROR;
+    psa_key_usage_t  usage              = PSA_KEY_USAGE_VERIFY;
+    psa_ecc_curve_t  psa_curve          = attest_map_elliptic_curve_type(P_256);
+    psa_key_type_t   attest_key_type    = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve);
+    size_t           public_key_size    = attest_key.pubx_key_size + attest_key.puby_key_size;
+
+#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2)
     psa_key_policy_t policy;
-    psa_ecc_curve_t  psa_curve;
-    psa_key_handle_t public_key_handle;
 
-    /* Mapping of COSE curve type to PSA curve types */
-    psa_curve = attest_map_elliptic_curve_type(P_256);
-    if (psa_curve == USHRT_MAX)
-        return PAL_ATTEST_ERROR;
+    if (!public_key_registered)
+    {
+        if (psa_curve == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
 
-    /* Setup the key policy for public key */
-    policy = psa_key_policy_init();
-    psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg);
+        /* Setup the key policy for public key */
+        policy = psa_key_policy_init();
+        psa_key_policy_set_usage(&policy, usage, key_alg);
 
-    status = psa_allocate_key(&public_key_handle);
-    if (status != PSA_SUCCESS)
-        return status;
+        status = psa_allocate_key(&public_key_handle);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
 
-    status = psa_set_key_policy(public_key_handle, &policy);
-    if (status != PSA_SUCCESS)
-        return status;
+        status = psa_set_key_policy(public_key_handle, &policy);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
 
-    attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve);
-
-    /* Register public key to crypto service */
-    public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size;
-
-    status = psa_import_key(public_key_handle,
+        /* Import the public key */
+        status = psa_import_key(public_key_handle,
                                 attest_key_type,
-                                (const uint8_t *)&attest_public_key,
+                               (const uint8_t *)&attest_public_key,
                                 public_key_size + 1);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
+
+        public_key_registered = 1;
+    }
+
+#elif defined(CRYPTO_VERSION_BETA3)
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (!public_key_registered)
+    {
+        if (psa_curve == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
+
+        /* Set the attributes for the public key */
+        psa_set_key_type(&attributes, attest_key_type);
+        psa_set_key_bits(&attributes, public_key_size + 1);
+        psa_set_key_usage_flags(&attributes, usage);
+        psa_set_key_algorithm(&attributes, key_alg);
+
+        /* Import the public key */
+        status = psa_import_key(&attributes,
+                               (const uint8_t *)&attest_public_key,
+                                public_key_size + 1,
+                                &public_key_handle);
+
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
+
+        public_key_registered = 1;
+    }
+#endif
 
     return status;
 }
 
+static uint32_t pal_destroy_attest_key(void)
+{
+    psa_status_t     status;
+
+    if (!public_key_registered)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    status =  psa_destroy_key(public_key_handle);
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    public_key_registered = 0;
+
+    return PAL_ATTEST_SUCCESS;
+}
 
 uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id,
                                    struct q_useful_buf_c token_hash,
                                    struct q_useful_buf_c signature)
 {
-    uint32_t status = PAL_ATTEST_SUCCESS;
+    int32_t status = PAL_ATTEST_ERROR;
+    psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256);
 
-    if (!public_key_registered)
-    {
-        status = pal_import_attest_key(cose_algorithm_id);
-        if (status != PAL_ATTEST_SUCCESS)
-            return status;
+    /* Register the attestation public key */
+    status = pal_import_attest_key(key_alg);
+    if (status != PAL_ATTEST_SUCCESS)
+        return status;
 
-        public_key_registered = 1;
-    }
-
-/*
- * Enable the verify function when Trusted Firmare - M Supports
-
- *  Verify the signature a hash or short message using a public key.
+    /* Verify the signature */
     status = psa_asymmetric_verify(public_key_handle,
-                                    cose_algorithm_id, token_hash.ptr, token_hash.len,
-                                    signature.ptr, signature.len);
-*/
-    return status;
+                                   key_alg, token_hash.ptr, token_hash.len,
+                                   signature.ptr, signature.len);
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_SIGNATURE_FAIL;
+
+    /* Unregister the attestation public key */
+    status = pal_destroy_attest_key();
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    return PAL_ATTEST_SUCCESS;
 }
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h
index 2d63ad1..2175e65 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h
@@ -22,9 +22,9 @@
 
 typedef struct{
     uint8_t  *pubx_key;
-    uint32_t  pubx_key_size;
+    size_t    pubx_key_size;
     uint8_t  *puby_key;
-    uint32_t  puby_key_size;
+    size_t    puby_key_size;
 } ecc_key_t;
 
 struct ecc_public_key_t {
@@ -48,11 +48,11 @@
 };
 
 struct pal_cose_crypto_hash {
-    /* Can't put the actual size here without creating dependecy on
-     * actual hash implementation, so this is a fairly large and
-     * accommodating size.
-     */
-    uint8_t bytes[128];
+    union {
+        void    *ptr;
+        uint64_t handle;
+    } context;
+    int64_t status;
 };
 
 struct pal_cose_psa_crypto_hash {
@@ -95,7 +95,6 @@
 uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash,
                           struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers,
                           struct q_useful_buf_c payload);
-uint32_t pal_import_attest_key(int32_t alg);
 uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash,
                                    struct q_useful_buf_c signature);
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c
index 178fdc9..60c7164 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c
@@ -29,7 +29,7 @@
     QCBORError                qcbor_result;
     QCBOREncodeContext        cbor_encode_ctx;
     int32_t                   cose_curve_id = P_256;
-    struct q_useful_buf_c       encoded_key_id;
+    struct q_useful_buf_c     encoded_key_id;
 
     /* Get the public key x and y */
     /* Encode it into a COSE_Key structure */
@@ -136,26 +136,18 @@
 }
 
 static int parse_unprotected_headers(QCBORDecodeContext *decode_context,
-                                     struct q_useful_buf_c *child,
-                                     bool *loop_back)
+                                     struct q_useful_buf_c *child)
 {
     struct items_to_get_t   item_list[3];
 
     item_list[0].label = COSE_HEADER_PARAM_KID;
-    item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL;
-    item_list[2].label = 0;
-    *loop_back = false;
+    item_list[1].label = 0;
 
     if (get_items_in_map(decode_context, item_list))
     {
         return PAL_ATTEST_ERROR;
     }
 
-    if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE)
-    {
-        *loop_back = true;
-    }
-
     if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING)
     {
         return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING;
@@ -324,11 +316,10 @@
                 token_size      : Size of the token buffer
     @return   - error status
 **/
-int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size,
-                                        uint8_t *token, uint32_t token_size)
+int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size,
+                                        uint8_t *token, size_t token_size)
 {
     int32_t             status = PAL_ATTEST_SUCCESS;
-    bool                short_circuit;
     int32_t             cose_algorithm_id;
     QCBORItem           item;
     QCBORDecodeContext  decode_context;
@@ -412,8 +403,7 @@
         return status;
 
     /* Parse the unprotected headers and check the data type and value */
-    short_circuit = false;
-    status = parse_unprotected_headers(&decode_context, &kid, &short_circuit);
+    status = parse_unprotected_headers(&decode_context, &kid);
     if (status != PAL_ATTEST_SUCCESS)
         return status;
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h
index 8a0c545..e7449a0 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h
@@ -140,8 +140,7 @@
                                                 1 << (EAT_CBOR_ARM_RANGE_BASE                      \
                                                     - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS))
 
-#define MANDATORY_SW_COMP                      (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT      |     \
-                                                1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID)
+#define MANDATORY_SW_COMP                      (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT)
 
 #define NULL_USEFUL_BUF_C  NULLUsefulBufC
 
@@ -158,6 +157,8 @@
     PAL_ATTEST_HASH_BUFFER_SIZE,
     PAL_ATTEST_ERR_PROTECTED_HEADERS,
     PAL_ATTEST_ERR_SIGN_STRUCT,
+    PAL_ATTEST_ERR_KEY_FAIL,
+    PAL_ATTEST_ERR_SIGNATURE_FAIL,
     PAL_ATTEST_ERROR,
 };
 
@@ -166,5 +167,5 @@
     QCBORItem item;
 };
 
-int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size,
-                                        uint8_t *token, uint32_t token_size);
+int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size,
+                                        uint8_t *token, size_t token_size);
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c
index 2d99f74..83c1ebd 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c
@@ -27,25 +27,27 @@
 int32_t pal_attestation_function(int type, va_list valist)
 {
     uint8_t     *challenge, *token;
-    uint32_t    challenge_size, *token_size, verify_token_size;
+    size_t       challenge_size, *token_size, verify_token_size, token_buffer_size;
 
     switch (type)
     {
         case PAL_INITIAL_ATTEST_GET_TOKEN:
             challenge = va_arg(valist, uint8_t*);
-            challenge_size = va_arg(valist, uint32_t);
+            challenge_size = va_arg(valist, size_t);
             token = va_arg(valist, uint8_t*);
-            token_size = va_arg(valist, uint32_t*);
-            return psa_initial_attest_get_token(challenge, challenge_size, token, token_size);
+            token_buffer_size = va_arg(valist, size_t);
+            token_size = va_arg(valist, size_t*);
+            return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size,
+            token_size);
         case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE:
-            challenge_size = va_arg(valist, uint32_t);
-            token_size = va_arg(valist, uint32_t*);
+            challenge_size = va_arg(valist, size_t);
+            token_size = va_arg(valist, size_t*);
             return psa_initial_attest_get_token_size(challenge_size, token_size);
         case PAL_INITIAL_ATTEST_VERIFY_TOKEN:
             challenge = va_arg(valist, uint8_t*);
-            challenge_size = va_arg(valist, uint32_t);
+            challenge_size = va_arg(valist, size_t);
             token = va_arg(valist, uint8_t*);
-            verify_token_size = va_arg(valist, uint32_t);
+            verify_token_size = va_arg(valist, size_t);
             return pal_initial_attest_verify_token(challenge, challenge_size,
                                                    token, verify_token_size);
         default:
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h
index 289dc5d..2871339 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h
@@ -40,6 +40,9 @@
 #define SP_HEAP_MEM_SUPP
 #endif /* PSA_CMAKE_BUILD */
 
+/* Version of crypto spec used in attestation */
+#define CRYPTO_VERSION_BETA2
+
 /*
  * Include of PSA defined Header files
  */
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config_check.h
index f18a785..443e0bc 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config_check.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config_check.h
@@ -94,13 +94,13 @@
 #error "ARCH_TEST_CTR_AES defined, but not all prerequisites"
 #endif
 
-#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\
+#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\
     (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC))
 #error "ARCH_TEST_CBC_AES defined, but not all prerequisites"
 #endif
 
 #if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\
-    (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC))
+    (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC))
 #error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites"
 #endif
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c
index 3df6aa8..fd2e055 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c
@@ -28,96 +28,124 @@
 **/
 int32_t pal_crypto_function(int type, va_list valist)
 {
-    int                     i;
-    size_t                  size, *length, salt_length, label_length, ciphertext_size;
-    uint8_t                 *buffer, *ciphertext;
-    const uint8_t           *salt, *label, *nonce, *additional_data;
-    uint8_t                 *plaintext;
-    uint32_t                status;
-    const void              *extra;
-    size_t                  extra_size, capacity, *gen_cap, nonce_length, additional_data_length;
-    psa_key_handle_t        handle, *key_handle, target_handle;
-    psa_key_type_t          key_type, *key_type_out;
-    psa_key_policy_t        *policy;
-    psa_key_usage_t         usage, *usage_out;
-    psa_key_lifetime_t      *lifetime_out;
-    psa_algorithm_t         alg, *alg_out;
-    psa_hash_operation_t    *hash_operation;
-    psa_mac_operation_t     *mac_operation;
-    psa_cipher_operation_t  *cipher_operation;
-    psa_crypto_generator_t  *generator;
-
+    int                              i;
+    psa_status_t                     status;
+    uint8_t                         *buffer, *ciphertext, *plaintext;
+    const uint8_t                   *nonce, *additional_data, *salt, *peer;
+    size_t                          *length, size, ciphertext_size, nonce_length;
+    size_t                           salt_length, peer_length, additional_data_length;
+    size_t                          *tag_length, plaintext_size;
+    psa_aead_operation_t            *aead_operation;
+    psa_key_attributes_t            *attributes;
+    psa_key_handle_t                *handle, key_handle;
+    psa_key_type_t                  *key_type_out, key_type;
+    psa_key_usage_t                 *usage_out, usage;
+    psa_key_id_t                    *key_id_out, key_id;
+    psa_key_lifetime_t              *key_lifetime_out, key_lifetime;
+    psa_algorithm_t                 *key_alg_out, key_alg, alg;
+    psa_hash_operation_t            *hash_operation, *target_operation;
+    psa_mac_operation_t             *mac_operation;
+    psa_cipher_operation_t          *cipher_operation;
+    psa_key_derivation_operation_t  *derive_operation;
+    psa_key_derivation_step_t        step;
     switch (type)
     {
         case PAL_CRYPTO_INIT:
             return psa_crypto_init();
         case PAL_CRYPTO_GENERATE_RANDOM:
-            buffer = va_arg(valist, uint8_t*);
+            buffer = va_arg(valist, uint8_t *);
             size = va_arg(valist, int);
             return psa_generate_random(buffer, size);
         case PAL_CRYPTO_IMPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            buffer = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            status = psa_import_key(attributes, buffer, size, handle);
+            return status;
+        case PAL_CRYPTO_SET_KEY_TYPE:
+            attributes = va_arg(valist, psa_key_attributes_t *);
             key_type = va_arg(valist, psa_key_type_t);
-            buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, int);
-            status = psa_import_key(handle, key_type, buffer, size);
-            return status;
+            psa_set_key_type(attributes, key_type);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_BITS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            size = va_arg(valist, size_t);
+            psa_set_key_bits(attributes, size);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ATTRIBUTES:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            return psa_get_key_attributes(key_handle, attributes);
+        case PAL_CRYPTO_GET_KEY_TYPE:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_type_out = va_arg(valist, psa_key_type_t *);
+            *key_type_out = psa_get_key_type(attributes);
+            return 0;
         case PAL_CRYPTO_EXPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            buffer = (uint8_t *)(va_arg(valist, uint8_t*));
-            size = va_arg(valist, int);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_export_key(handle, buffer, size, length);
-            return status;
-        case PAL_CRYPTO_EXPORT_PUBLIC_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            buffer = (uint8_t *)(va_arg(valist, uint8_t*));
-            size = va_arg(valist, int);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_export_public_key(handle, buffer, size, length);
-            return status;
-        case PAL_CRYPTO_KEY_POLICY_INIT:
-            policy = va_arg(valist, psa_key_policy_t*);
-            memset(policy, 0, sizeof(psa_key_policy_t));
-            return 0;
-        case PAL_CRYPTO_KEY_POLICY_SET_USAGE:
-            policy = va_arg(valist, psa_key_policy_t*);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            buffer = (uint8_t *)(va_arg(valist, uint8_t *));
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t *);
+            return psa_export_key(key_handle, buffer, size, length);
+        case PAL_CRYPTO_SET_KEY_USAGE_FLAGS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
             usage = va_arg(valist, psa_key_usage_t);
-            alg = va_arg(valist, psa_algorithm_t);
-            psa_key_policy_set_usage(policy, usage, alg);
+            psa_set_key_usage_flags(attributes, usage);
             return 0;
-        case PAL_CRYPTO_SET_KEY_POLICY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_set_key_policy(handle, policy);
-        case PAL_CRYPTO_DESTROY_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            status = psa_destroy_key(handle);
-            return status;
-        case PAL_CRYPTO_GET_KEY_INFORMATION:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type_out = va_arg(valist, psa_key_type_t*);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_get_key_information(handle, key_type_out, length);
-            return status;
-        case PAL_CRYPTO_GET_KEY_POLICY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_get_key_policy(handle, policy);
-        case PAL_CRYPTO_KEY_POLICY_GET_USAGE:
-            policy = va_arg(valist, psa_key_policy_t*);
-            usage_out = va_arg(valist, psa_key_usage_t*);
-            *usage_out = psa_key_policy_get_usage(policy);
+        case PAL_CRYPTO_RESET_KEY_ATTRIBUTES:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            psa_reset_key_attributes(attributes);
             return 0;
-        case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM:
-            policy = va_arg(valist, psa_key_policy_t*);
-            alg_out = va_arg(valist, psa_algorithm_t*);
-            *alg_out = psa_key_policy_get_algorithm(policy);
+        case PAL_CRYPTO_EXPORT_PUBLIC_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            buffer = (uint8_t *)(va_arg(valist, uint8_t *));
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t *);
+            return psa_export_public_key(key_handle, buffer, size, length);
+        case PAL_CRYPTO_SET_KEY_ID:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_id = va_arg(valist, psa_key_id_t);
+            psa_set_key_id(attributes, key_id);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_LIFETIME:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_lifetime = va_arg(valist, psa_key_lifetime_t);
+            psa_set_key_lifetime(attributes, key_lifetime);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_ALGORITHM:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_alg = va_arg(valist, psa_algorithm_t);
+            psa_set_key_algorithm(attributes, key_alg);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ID:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_id_out = va_arg(valist, psa_key_id_t *);
+            *key_id_out = psa_get_key_id(attributes);
             return 0;
         case PAL_CRYPTO_GET_KEY_LIFETIME:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            lifetime_out = va_arg(valist, psa_key_lifetime_t*);
-            return psa_get_key_lifetime(handle, lifetime_out);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_lifetime_out = va_arg(valist, psa_key_lifetime_t *);
+            *key_lifetime_out = psa_get_key_lifetime(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_USAGE_FLAGS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            usage_out = va_arg(valist, psa_key_usage_t *);
+            *usage_out = psa_get_key_usage_flags(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ALGORITHM:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_alg_out = va_arg(valist, psa_algorithm_t *);
+            *key_alg_out = psa_get_key_algorithm(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_BITS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            length = va_arg(valist, size_t *);
+            *length = psa_get_key_bits(attributes);
+            return 0;
+        case PAL_CRYPTO_DESTROY_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_destroy_key(key_handle);
         case PAL_CRYPTO_HASH_SETUP:
             hash_operation = va_arg(valist, psa_hash_operation_t*);
             alg = va_arg(valist, psa_algorithm_t);
@@ -141,44 +169,31 @@
         case PAL_CRYPTO_HASH_ABORT:
             hash_operation = va_arg(valist, psa_hash_operation_t*);
             return psa_hash_abort(hash_operation);
-        case PAL_CRYPTO_GENERATE_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type = va_arg(valist, psa_key_type_t);
-            size     = va_arg(valist, size_t);
-            extra    = va_arg(valist, const void*);
-            extra_size  = va_arg(valist, size_t);
-            return psa_generate_key(handle, key_type, size, extra, extra_size);
-        case PAL_CRYPTO_GENERATOR_READ:
-            generator = va_arg(valist, psa_crypto_generator_t*);
+        case PAL_CRYPTO_HASH_COMPUTE:
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
             buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, int);
-            return psa_generator_read(generator, buffer, size);
-        case PAL_CRYPTO_KEY_DERIVATION:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length);
+        case PAL_CRYPTO_HASH_COMPARE:
             alg = va_arg(valist, psa_algorithm_t);
-            salt = va_arg(valist, const uint8_t *);
-            salt_length = va_arg(valist, size_t);
-            label = va_arg(valist, const uint8_t *);
-            label_length = va_arg(valist, size_t);
-            capacity = va_arg(valist, size_t);
-            return psa_key_derivation(generator, handle, alg, salt, salt_length, label,
-                                                                  label_length, capacity);
-        case PAL_CRYPTO_GET_GENERATOR_CAPACITY:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            gen_cap   = va_arg(valist, size_t*);
-            return psa_get_generator_capacity(generator, gen_cap);
-        case PAL_CRYPTO_GENERATOR_IMPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type = va_arg(valist, psa_key_type_t);
-            size     = va_arg(valist, size_t);
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            return psa_generator_import_key(handle, key_type, size, generator);
-        case PAL_CRYPTO_GENERATOR_ABORT:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            return psa_generator_abort(generator);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size);
+        case PAL_CRYPTO_HASH_CLONE:
+            hash_operation = va_arg(valist, psa_hash_operation_t*);
+            target_operation = va_arg(valist, psa_hash_operation_t*);
+            return psa_hash_clone(hash_operation, target_operation);
+        case PAL_CRYPTO_GENERATE_KEY:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_generate_key(attributes, handle);
         case PAL_CRYPTO_AEAD_ENCRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             nonce = va_arg(valist, const uint8_t *);
             nonce_length = va_arg(valist, size_t);
@@ -189,10 +204,10 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data,
-                    additional_data_length, plaintext, size, ciphertext, ciphertext_size, length);
+            return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data,
+            additional_data_length, plaintext, size, ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_AEAD_DECRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             nonce = va_arg(valist, const uint8_t *);
             nonce_length = va_arg(valist, size_t);
@@ -203,13 +218,74 @@
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data,
-                    additional_data_length, ciphertext, ciphertext_size, plaintext, size, length);
+            return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data,
+            additional_data_length, ciphertext, ciphertext_size, plaintext, size, length);
+        case PAL_CRYPTO_AEAD_ENCRYPT_SETUP:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_aead_encrypt_setup(aead_operation, key_handle, alg);
+        case PAL_CRYPTO_AEAD_DECRYPT_SETUP:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_aead_decrypt_setup(aead_operation, key_handle, alg);
+        case PAL_CRYPTO_AEAD_GENERATE_NONCE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t*);
+            return psa_aead_generate_nonce(aead_operation, buffer, size, length);
+        case PAL_CRYPTO_AEAD_SET_NONCE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_set_nonce(aead_operation, buffer, size);
+        case PAL_CRYPTO_AEAD_SET_LENGTHS:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            size = va_arg(valist, size_t);
+            plaintext_size = va_arg(valist, size_t);
+            return psa_aead_set_lengths(aead_operation, size, plaintext_size);
+        case PAL_CRYPTO_AEAD_UPDATE_AD:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_update_ad(aead_operation, buffer, size);
+        case PAL_CRYPTO_AEAD_UPDATE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext,
+            ciphertext_size, length);
+        case PAL_CRYPTO_AEAD_FINISH:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            tag_length = (size_t *)va_arg(valist, size_t*);
+            return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer,
+            size, tag_length);
+        case PAL_CRYPTO_AEAD_VERIFY:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t*);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size);
+        case PAL_CRYPTO_AEAD_ABORT:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            return psa_aead_abort(aead_operation);
         case PAL_CRYPTO_MAC_SIGN_SETUP:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_mac_sign_setup(mac_operation, handle, alg);
+            return psa_mac_sign_setup(mac_operation, key_handle, alg);
         case PAL_CRYPTO_MAC_UPDATE:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             buffer = va_arg(valist, uint8_t*);
@@ -223,9 +299,9 @@
             return psa_mac_sign_finish(mac_operation, buffer, size, length);
         case PAL_CRYPTO_MAC_VERIFY_SETUP:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_mac_verify_setup(mac_operation, handle, alg);
+            return psa_mac_verify_setup(mac_operation, key_handle, alg);
         case PAL_CRYPTO_MAC_VERIFY_FINISH:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             buffer = va_arg(valist, uint8_t*);
@@ -234,8 +310,27 @@
         case PAL_CRYPTO_MAC_ABORT:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             return psa_mac_abort(mac_operation);
+        case PAL_CRYPTO_MAC_COMPUTE:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext,
+            ciphertext_size, length);
+        case PAL_CRYPTO_MAC_VERIFY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext,
+            ciphertext_size);
         case PAL_CRYPTO_ASYMMTERIC_ENCRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
@@ -244,10 +339,10 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length,
-                    ciphertext, ciphertext_size, length);
+            return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length,
+            ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_ASYMMTERIC_DECRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
@@ -256,18 +351,18 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length,
-                    ciphertext, ciphertext_size, length);
+            return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length,
+            ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_cipher_encrypt_setup(cipher_operation, handle, alg);
+            return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg);
         case PAL_CRYPTO_CIPHER_DECRYPT_SETUP:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_cipher_decrypt_setup(cipher_operation, handle, alg);
+            return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg);
         case PAL_CRYPTO_CIPHER_GENERATE_IV:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             buffer = va_arg(valist, uint8_t*);
@@ -287,7 +382,7 @@
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
             return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size,
-                                     length);
+            length);
         case PAL_CRYPTO_CIPHER_FINISH:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             ciphertext = va_arg(valist, uint8_t *);
@@ -297,39 +392,110 @@
         case PAL_CRYPTO_CIPHER_ABORT:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             return psa_cipher_abort(cipher_operation);
+        case PAL_CRYPTO_CIPHER_ENCRYPT:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t *);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size,
+            length);
+        case PAL_CRYPTO_CIPHER_DECRYPT:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t *);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size,
+            length);
         case PAL_CRYPTO_ASYMMTERIC_SIGN:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size,
-                                       length);
+            return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size,
+            length);
         case PAL_CRYPTO_ASYMMTERIC_VERIFY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
-            return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size);
-        case PAL_CRYPTO_KEY_AGREEMENT:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext,
+            ciphertext_size);
+        case PAL_CRYPTO_RAW_KEY_AGREEMENT:
+            alg = va_arg(valist, psa_algorithm_t);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            peer = va_arg(valist, uint8_t*);
+            peer_length = va_arg(valist, size_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
-            alg = va_arg(valist, psa_algorithm_t);
-            return psa_key_agreement(generator, handle, buffer, size, alg);
-        case PAL_CRYPTO_ALLOCATE_KEY:
-            key_handle = (psa_key_handle_t *)va_arg(valist, int*);
-            return psa_allocate_key(key_handle);
+            length = va_arg(valist, size_t*);
+            return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length);
         case PAL_CRYPTO_COPY_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            target_handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_copy_key(handle, target_handle, policy);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_copy_key(key_handle, attributes, handle);
+        case PAL_CRYPTO_KEY_DERIVATION_SETUP:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_key_derivation_setup(derive_operation, alg);
+        case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_input_bytes(derive_operation, step, buffer, size);
+        case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_key_derivation_input_key(derive_operation, step, key_handle);
+        case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            peer = va_arg(valist, uint8_t*);
+            peer_length = va_arg(valist, size_t);
+            return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer,
+            peer_length);
+        case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_output_bytes(derive_operation, buffer, size);
+        case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_key_derivation_output_key(attributes, derive_operation, handle);
+        case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_set_capacity(derive_operation, size);
+        case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            length = va_arg(valist, size_t *);
+            return psa_key_derivation_get_capacity(derive_operation, length);
+        case PAL_CRYPTO_KEY_DERIVATION_ABORT:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            return psa_key_derivation_abort(derive_operation);
+        case PAL_CRYPTO_OPEN_KEY:
+            key_id = va_arg(valist, psa_key_id_t);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_open_key(key_id, handle);
+        case PAL_CRYPTO_CLOSE_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_close_key(key_handle);
         case PAL_CRYPTO_FREE:
             for (i = 0; i < PAL_KEY_SLOT_COUNT; i++)
                 psa_destroy_key(i);
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.h
index d1dabfa..486f793 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.h
@@ -21,55 +21,82 @@
 #include "pal_common.h"
 
 enum crypto_function_code {
-    PAL_CRYPTO_INIT                     = 0x1,
-    PAL_CRYPTO_GENERATE_RANDOM          = 0x2,
-    PAL_CRYPTO_IMPORT_KEY               = 0x3,
-    PAL_CRYPTO_EXPORT_KEY               = 0x4,
-    PAL_CRYPTO_EXPORT_PUBLIC_KEY        = 0x5,
-    PAL_CRYPTO_DESTROY_KEY              = 0x6,
-    PAL_CRYPTO_GET_KEY_INFO             = 0x7,
-    PAL_CRYPTO_KEY_POLICY_INIT          = 0x8,
-    PAL_CRYPTO_KEY_POLICY_SET_USAGE     = 0x9,
-    PAL_CRYPTO_KEY_POLICY_GET_USAGE     = 0xA,
-    PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB,
-    PAL_CRYPTO_SET_KEY_POLICY           = 0xC,
-    PAL_CRYPTO_GET_KEY_POLICY           = 0xD,
-    PAL_CRYPTO_GET_KEY_INFORMATION      = 0xE,
-    PAL_CRYPTO_GET_KEY_LIFETIME         = 0xF,
-    PAL_CRYPTO_HASH_SETUP               = 0x11,
-    PAL_CRYPTO_HASH_UPDATE              = 0x12,
-    PAL_CRYPTO_HASH_VERIFY              = 0x13,
-    PAL_CRYPTO_HASH_FINISH              = 0x14,
-    PAL_CRYPTO_HASH_ABORT               = 0x15,
-    PAL_CRYPTO_GENERATE_KEY             = 0x16,
-    PAL_CRYPTO_GENERATOR_READ           = 0x17,
-    PAL_CRYPTO_KEY_DERIVATION           = 0x18,
-    PAL_CRYPTO_GET_GENERATOR_CAPACITY   = 0x19,
-    PAL_CRYPTO_GENERATOR_IMPORT_KEY     = 0x1A,
-    PAL_CRYPTO_GENERATOR_ABORT          = 0x1B,
-    PAL_CRYPTO_AEAD_ENCRYPT             = 0x1C,
-    PAL_CRYPTO_AEAD_DECRYPT             = 0x1D,
-    PAL_CRYPTO_MAC_SIGN_SETUP           = 0x1E,
-    PAL_CRYPTO_MAC_UPDATE               = 0x1F,
-    PAL_CRYPTO_MAC_SIGN_FINISH          = 0x20,
-    PAL_CRYPTO_MAC_VERIFY_SETUP         = 0x21,
-    PAL_CRYPTO_MAC_VERIFY_FINISH        = 0x22,
-    PAL_CRYPTO_MAC_ABORT                = 0x23,
-    PAL_CRYPTO_ASYMMTERIC_ENCRYPT       = 0x24,
-    PAL_CRYPTO_ASYMMTERIC_DECRYPT       = 0x25,
-    PAL_CRYPTO_CIPHER_ENCRYPT_SETUP     = 0x26,
-    PAL_CRYPTO_CIPHER_DECRYPT_SETUP     = 0x2A,
-    PAL_CRYPTO_CIPHER_GENERATE_IV       = 0x2B,
-    PAL_CRYPTO_CIPHER_SET_IV            = 0x2C,
-    PAL_CRYPTO_CIPHER_UPDATE            = 0x2D,
-    PAL_CRYPTO_CIPHER_FINISH            = 0x2E,
-    PAL_CRYPTO_CIPHER_ABORT             = 0x2F,
-    PAL_CRYPTO_ASYMMTERIC_SIGN          = 0x30,
-    PAL_CRYPTO_ASYMMTERIC_VERIFY        = 0x31,
-    PAL_CRYPTO_KEY_AGREEMENT            = 0x32,
-    PAL_CRYPTO_ALLOCATE_KEY             = 0x33,
-    PAL_CRYPTO_COPY_KEY                 = 0x34,
-    PAL_CRYPTO_FREE                     = 0xFE,
+    PAL_CRYPTO_INIT                             = 0x1,
+    PAL_CRYPTO_GENERATE_RANDOM                  = 0x2,
+    PAL_CRYPTO_IMPORT_KEY                       = 0x3,
+    PAL_CRYPTO_EXPORT_KEY                       = 0x4,
+    PAL_CRYPTO_EXPORT_PUBLIC_KEY                = 0x5,
+    PAL_CRYPTO_DESTROY_KEY                      = 0x6,
+    PAL_CRYPTO_HASH_SETUP                       = 0x7,
+    PAL_CRYPTO_HASH_UPDATE                      = 0x8,
+    PAL_CRYPTO_HASH_VERIFY                      = 0x9,
+    PAL_CRYPTO_HASH_FINISH                      = 0xA,
+    PAL_CRYPTO_HASH_ABORT                       = 0xB,
+    PAL_CRYPTO_GENERATE_KEY                     = 0xC,
+    PAL_CRYPTO_AEAD_ENCRYPT                     = 0xD,
+    PAL_CRYPTO_AEAD_DECRYPT                     = 0xE,
+    PAL_CRYPTO_MAC_SIGN_SETUP                   = 0xF,
+    PAL_CRYPTO_MAC_UPDATE                       = 0x10,
+    PAL_CRYPTO_MAC_SIGN_FINISH                  = 0x11,
+    PAL_CRYPTO_MAC_VERIFY_SETUP                 = 0x12,
+    PAL_CRYPTO_MAC_VERIFY_FINISH                = 0x13,
+    PAL_CRYPTO_MAC_ABORT                        = 0x14,
+    PAL_CRYPTO_ASYMMTERIC_ENCRYPT               = 0x15,
+    PAL_CRYPTO_ASYMMTERIC_DECRYPT               = 0x16,
+    PAL_CRYPTO_CIPHER_ENCRYPT_SETUP             = 0x17,
+    PAL_CRYPTO_CIPHER_DECRYPT_SETUP             = 0x18,
+    PAL_CRYPTO_CIPHER_GENERATE_IV               = 0x19,
+    PAL_CRYPTO_CIPHER_SET_IV                    = 0x1A,
+    PAL_CRYPTO_CIPHER_UPDATE                    = 0x1B,
+    PAL_CRYPTO_CIPHER_FINISH                    = 0x1C,
+    PAL_CRYPTO_CIPHER_ABORT                     = 0x1D,
+    PAL_CRYPTO_ASYMMTERIC_SIGN                  = 0x1E,
+    PAL_CRYPTO_ASYMMTERIC_VERIFY                = 0x1F,
+    PAL_CRYPTO_COPY_KEY                         = 0x20,
+    PAL_CRYPTO_SET_KEY_TYPE                     = 0x21,
+    PAL_CRYPTO_SET_KEY_BITS                     = 0x22,
+    PAL_CRYPTO_GET_KEY_ATTRIBUTES               = 0x23,
+    PAL_CRYPTO_GET_KEY_TYPE                     = 0x24,
+    PAL_CRYPTO_SET_KEY_USAGE_FLAGS              = 0x25,
+    PAL_CRYPTO_RESET_KEY_ATTRIBUTES             = 0x26,
+    PAL_CRYPTO_SET_KEY_ID                       = 0x27,
+    PAL_CRYPTO_SET_KEY_LIFETIME                 = 0x28,
+    PAL_CRYPTO_SET_KEY_ALGORITHM                = 0x29,
+    PAL_CRYPTO_GET_KEY_ID                       = 0x2A,
+    PAL_CRYPTO_GET_KEY_LIFETIME                 = 0x2B,
+    PAL_CRYPTO_GET_KEY_USAGE_FLAGS              = 0x2C,
+    PAL_CRYPTO_GET_KEY_ALGORITHM                = 0x2D,
+    PAL_CRYPTO_GET_KEY_BITS                     = 0x2E,
+    PAL_CRYPTO_HASH_COMPUTE                     = 0x2F,
+    PAL_CRYPTO_HASH_COMPARE                     = 0x30,
+    PAL_CRYPTO_KEY_DERIVATION_SETUP             = 0x31,
+    PAL_CRYPTO_KEY_DERIVATION_ABORT             = 0x32,
+    PAL_CRYPTO_RAW_KEY_AGREEMENT                = 0x33,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES       = 0x34,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY         = 0x35,
+    PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT     = 0x36,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES      = 0x37,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY        = 0x38,
+    PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY      = 0x39,
+    PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY      = 0x3A,
+    PAL_CRYPTO_HASH_CLONE                       = 0x3B,
+    PAL_CRYPTO_MAC_COMPUTE                      = 0x3C,
+    PAL_CRYPTO_MAC_VERIFY                       = 0x3D,
+    PAL_CRYPTO_CIPHER_ENCRYPT                   = 0x3F,
+    PAL_CRYPTO_CIPHER_DECRYPT                   = 0x40,
+    PAL_CRYPTO_OPEN_KEY                         = 0x41,
+    PAL_CRYPTO_CLOSE_KEY                        = 0x42,
+    PAL_CRYPTO_AEAD_ENCRYPT_SETUP               = 0x43,
+    PAL_CRYPTO_AEAD_DECRYPT_SETUP               = 0x44,
+    PAL_CRYPTO_AEAD_GENERATE_NONCE              = 0x45,
+    PAL_CRYPTO_AEAD_SET_NONCE                   = 0x46,
+    PAL_CRYPTO_AEAD_SET_LENGTHS                 = 0X47,
+    PAL_CRYPTO_AEAD_UPDATE_AD                   = 0x48,
+    PAL_CRYPTO_AEAD_UPDATE                      = 0x49,
+    PAL_CRYPTO_AEAD_FINISH                      = 0x4A,
+    PAL_CRYPTO_AEAD_VERIFY                      = 0x4B,
+    PAL_CRYPTO_AEAD_ABORT                       = 0x4C,
+    PAL_CRYPTO_FREE                             = 0xFE,
 };
 
 int32_t pal_crypto_function(int type, va_list valist);
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c
index ae2bdba..38ed283 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c
@@ -17,24 +17,14 @@
 
 #include "pal_attestation_crypto.h"
 
-static uint32_t  public_key_registered = 0;
-
+static uint32_t         public_key_registered;
+static psa_key_handle_t public_key_handle;
 static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf,
                                                   size_t amount)
 {
     return UsefulBuf_Head(buf, amount);
 }
 
-static uint32_t check_hash_sizes(void)
-{
-    if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256))
-    {
-        return PAL_ATTEST_HASH_FAIL;
-    }
-
-    return PAL_ATTEST_SUCCESS;
-}
-
 static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve)
 {
     psa_ecc_curve_t psa_curve;
@@ -82,130 +72,94 @@
 
 int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id)
 {
-    int32_t                          cose_ret = PAL_ATTEST_SUCCESS;
-    psa_status_t                     psa_ret;
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT;
+    psa_algorithm_t      psa_alg;
 
-    cose_ret = check_hash_sizes();
-    if (cose_ret)
-    {
-        goto error;
-    }
+    /* Map the algorithm ID */
+    psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id);
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-        goto error;
-    }
+    /* Actually do the hash set up */
+    hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg);
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
-    psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id));
+    /* Copy the PSA handle back into the context */
+    hash_ctx->context.handle = psa_hash.handle;
 
-    if (psa_ret == PAL_ATTEST_SUCCESS)
-    {
-        psa_hash_ctx->status = PAL_ATTEST_SUCCESS;
-        cose_ret = PAL_ATTEST_SUCCESS;
-    }
-    else if (psa_ret == PSA_ERROR_NOT_SUPPORTED)
-    {
-        cose_ret = PAL_ATTEST_HASH_UNSUPPORTED;
-    }
-    else
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-    }
-
-error:
-    return cose_ret;
+    /* Map errors and return */
+    return (psa_status_t)hash_ctx->status;
 }
 
 void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx,
                                  struct q_useful_buf_c data_to_hash)
 {
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash;
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
+    /* Copy the PSA handle out of the generic context */
+    psa_hash.handle = (uint32_t)hash_ctx->context.handle;
+
+    if (hash_ctx->status != PSA_SUCCESS)
+        return;
+
+    if (data_to_hash.ptr == NULL) {
+        /* No data was passed in to be hashed indicating the mode of use is
+         * the computation of the size of hash. This mode is hashing is used
+         * by t_cose when it is requested to compute the size of the signed
+         * data it might compute, which is in turn used to compute the
+         * size of a would be token. When computing the size, the size
+         * like this, there is nothing to do in update()
+         */
         return;
     }
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
+    /* Actually hash the data */
+    hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len);
 
-    if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS)
-    {
-        if (data_to_hash.ptr != NULL)
-        {
-            psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation,
-                                                   data_to_hash.ptr,
-                                                   data_to_hash.len);
-        }
-        else
-        {
-            /* Intentionally do nothing, just computing the size of the token */
-        }
-    }
+    /* Copy the PSA handle back into the context. */
+    hash_ctx->context.handle = psa_hash.handle;
 }
 
 int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx,
                                     struct q_useful_buf buffer_to_hold_result,
                                     struct q_useful_buf_c *hash_result)
 {
-    uint32_t                         cose_ret = PAL_ATTEST_SUCCESS;
-    psa_status_t                     psa_ret;
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash;
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-        goto error;
-    }
+    /* Copy the PSA handle out of the generic context */
+    psa_hash.handle = (uint32_t)hash_ctx->context.handle;
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
+    if (hash_ctx->status != PSA_SUCCESS)
+        goto Done;
 
-    if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS)
-    {
-        psa_ret = psa_hash_finish(&psa_hash_ctx->operation,
-                                  buffer_to_hold_result.ptr,
-                                  buffer_to_hold_result.len,
-                                  &(hash_result->len));
+    /* Actually finish up the hash */
+    hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr,
+                                       buffer_to_hold_result.len, &(hash_result->len));
 
-        if (psa_ret == PAL_ATTEST_SUCCESS)
-        {
-            hash_result->ptr = buffer_to_hold_result.ptr;
-            cose_ret = 0;
-        }
-        else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL)
-        {
-            cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE;
-        }
-        else
-        {
-            cose_ret = PAL_ATTEST_HASH_FAIL;
-        }
-    }
-    else
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-    }
+    hash_result->ptr = buffer_to_hold_result.ptr;
 
-error:
-    return cose_ret;
+    /* Copy the PSA handle back into the context. */
+    hash_ctx->context.handle = psa_hash.handle;
+
+Done:
+    return ((psa_status_t)hash_ctx->status);
+
 }
 
 int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash,
                       struct q_useful_buf_c *hash)
 {
-    uint32_t                      status = PAL_ATTEST_SUCCESS;
+    uint32_t                      return_value = 0;
     struct pal_cose_crypto_hash   hash_ctx;
 
-    status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY);
-    if (status)
-        return status;
+    return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY);
+    if (return_value)
+        goto Done;
 
     pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash);
-    status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash);
+    return_value = pal_cose_crypto_hash_finish(&hash_ctx,
+                                             buffer_for_hash,
+                                             hash);
 
-    return status;
+Done:
+    return return_value;
 }
 
 uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash,
@@ -223,18 +177,19 @@
     /* This builds the CBOR-format to-be-signed bytes */
     QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part);
     QCBOREncode_OpenArray(&cbor_encode_ctx);
+
     /* context */
-    QCBOREncode_AddSZString(&cbor_encode_ctx,
-                            COSE_SIG_CONTEXT_STRING_SIGNATURE1);
+    QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1);
+
     /* body_protected */
-    QCBOREncode_AddBytes(&cbor_encode_ctx,
-                         protected_headers);
-    /* sign_protected */
-    QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
+    QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers);
+
+    /* sign_protected is not used for Sign1 */
     /* external_aad */
     QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
-    /* fake payload */
-    QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
+
+    /* The short fake payload. */
+    QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload);
     QCBOREncode_CloseArray(&cbor_encode_ctx);
 
     /* Get the result and convert it to struct q_useful_buf_c representation */
@@ -242,7 +197,8 @@
     if (qcbor_result)
     {
         /* Mainly means that the protected_headers were too big
-         (which should never happen) */
+         * (which should never happen)
+         */
         status = PAL_ATTEST_ERR_SIGN_STRUCT;
         goto Done;
     }
@@ -257,90 +213,129 @@
     if (status)
         goto Done;
 
-    /* Hash the first part of the TBS. Take all but the last two
-     * bytes. The last two bytes are the fake payload from above. It
-     * is replaced by the real payload which is hashed next. The fake
-     * payload is needed so the array count is right. This is one of
-     * the main things that make it possible to implement with one
-     * buffer for the whole cose sign1.
+    /* This is hashing of the first part, all the CBOR
+     * except the payload.
      */
-    pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part,
-                                              tbs_first_part.len - 2));
+    pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len));
 
-    /* Hash the payload */
+    /* Hash the payload, the second part. */
     pal_cose_crypto_hash_update(&hash_ctx, payload);
 
     /* Finish the hash and set up to return it */
-    status = pal_cose_crypto_hash_finish(&hash_ctx,
-                                             buffer_for_hash,
-                                             hash);
+    status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash);
 
 Done:
     return status;
 }
 
-uint32_t pal_import_attest_key(int32_t alg)
+static uint32_t pal_import_attest_key(psa_algorithm_t key_alg)
 {
-    psa_key_type_t   attest_key_type;
-    size_t           public_key_size;
-    psa_status_t     status = PSA_SUCCESS;
+    psa_status_t     status             = PAL_ATTEST_ERROR;
+    psa_key_usage_t  usage              = PSA_KEY_USAGE_VERIFY;
+    psa_ecc_curve_t  psa_curve          = attest_map_elliptic_curve_type(P_256);
+    psa_key_type_t   attest_key_type    = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve);
+    size_t           public_key_size    = attest_key.pubx_key_size + attest_key.puby_key_size;
+
+#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2)
     psa_key_policy_t policy;
-    psa_ecc_curve_t  psa_curve;
-    psa_key_handle_t public_key_handle;
 
-    /* Mapping of COSE curve type to PSA curve types */
-    psa_curve = attest_map_elliptic_curve_type(P_256);
-    if (psa_curve == USHRT_MAX)
-        return PAL_ATTEST_ERROR;
+    if (!public_key_registered)
+    {
+        if (psa_curve == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
 
-    /* Setup the key policy for public key */
-    policy = psa_key_policy_init();
-    psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg);
+        /* Setup the key policy for public key */
+        policy = psa_key_policy_init();
+        psa_key_policy_set_usage(&policy, usage, key_alg);
 
-    status = psa_allocate_key(&public_key_handle);
-    if (status != PSA_SUCCESS)
-        return status;
+        status = psa_allocate_key(&public_key_handle);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
 
-    status = psa_set_key_policy(public_key_handle, &policy);
-    if (status != PSA_SUCCESS)
-        return status;
+        status = psa_set_key_policy(public_key_handle, &policy);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
 
-    attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve);
-
-    /* Register public key to crypto service */
-    public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size;
-
-    status = psa_import_key(public_key_handle,
+        /* Import the public key */
+        status = psa_import_key(public_key_handle,
                                 attest_key_type,
-                                (const uint8_t *)&attest_public_key,
+                               (const uint8_t *)&attest_public_key,
                                 public_key_size + 1);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
+
+        public_key_registered = 1;
+    }
+
+#elif defined(CRYPTO_VERSION_BETA3)
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (!public_key_registered)
+    {
+        if (psa_curve == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
+
+        /* Set the attributes for the public key */
+        psa_set_key_type(&attributes, attest_key_type);
+        psa_set_key_bits(&attributes, public_key_size + 1);
+        psa_set_key_usage_flags(&attributes, usage);
+        psa_set_key_algorithm(&attributes, key_alg);
+
+        /* Import the public key */
+        status = psa_import_key(&attributes,
+                               (const uint8_t *)&attest_public_key,
+                                public_key_size + 1,
+                                &public_key_handle);
+
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
+
+        public_key_registered = 1;
+    }
+#endif
 
     return status;
 }
 
+static uint32_t pal_destroy_attest_key(void)
+{
+    psa_status_t     status;
+
+    if (!public_key_registered)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    status =  psa_destroy_key(public_key_handle);
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    public_key_registered = 0;
+
+    return PAL_ATTEST_SUCCESS;
+}
 
 uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id,
                                    struct q_useful_buf_c token_hash,
                                    struct q_useful_buf_c signature)
 {
-    uint32_t status = PAL_ATTEST_SUCCESS;
+    int32_t status = PAL_ATTEST_ERROR;
+    psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256);
 
-    if (!public_key_registered)
-    {
-        status = pal_import_attest_key(cose_algorithm_id);
-        if (status != PAL_ATTEST_SUCCESS)
-            return status;
+    /* Register the attestation public key */
+    status = pal_import_attest_key(key_alg);
+    if (status != PAL_ATTEST_SUCCESS)
+        return status;
 
-        public_key_registered = 1;
-    }
-
-/*
- * Enable the verify function when Trusted Firmare - M Supports
-
- *  Verify the signature a hash or short message using a public key.
+    /* Verify the signature */
     status = psa_asymmetric_verify(public_key_handle,
-                                    cose_algorithm_id, token_hash.ptr, token_hash.len,
-                                    signature.ptr, signature.len);
-*/
-    return status;
+                                   key_alg, token_hash.ptr, token_hash.len,
+                                   signature.ptr, signature.len);
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_SIGNATURE_FAIL;
+
+    /* Unregister the attestation public key */
+    status = pal_destroy_attest_key();
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    return PAL_ATTEST_SUCCESS;
 }
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h
index 2d63ad1..2175e65 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h
@@ -22,9 +22,9 @@
 
 typedef struct{
     uint8_t  *pubx_key;
-    uint32_t  pubx_key_size;
+    size_t    pubx_key_size;
     uint8_t  *puby_key;
-    uint32_t  puby_key_size;
+    size_t    puby_key_size;
 } ecc_key_t;
 
 struct ecc_public_key_t {
@@ -48,11 +48,11 @@
 };
 
 struct pal_cose_crypto_hash {
-    /* Can't put the actual size here without creating dependecy on
-     * actual hash implementation, so this is a fairly large and
-     * accommodating size.
-     */
-    uint8_t bytes[128];
+    union {
+        void    *ptr;
+        uint64_t handle;
+    } context;
+    int64_t status;
 };
 
 struct pal_cose_psa_crypto_hash {
@@ -95,7 +95,6 @@
 uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash,
                           struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers,
                           struct q_useful_buf_c payload);
-uint32_t pal_import_attest_key(int32_t alg);
 uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash,
                                    struct q_useful_buf_c signature);
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c
index 178fdc9..60c7164 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c
@@ -29,7 +29,7 @@
     QCBORError                qcbor_result;
     QCBOREncodeContext        cbor_encode_ctx;
     int32_t                   cose_curve_id = P_256;
-    struct q_useful_buf_c       encoded_key_id;
+    struct q_useful_buf_c     encoded_key_id;
 
     /* Get the public key x and y */
     /* Encode it into a COSE_Key structure */
@@ -136,26 +136,18 @@
 }
 
 static int parse_unprotected_headers(QCBORDecodeContext *decode_context,
-                                     struct q_useful_buf_c *child,
-                                     bool *loop_back)
+                                     struct q_useful_buf_c *child)
 {
     struct items_to_get_t   item_list[3];
 
     item_list[0].label = COSE_HEADER_PARAM_KID;
-    item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL;
-    item_list[2].label = 0;
-    *loop_back = false;
+    item_list[1].label = 0;
 
     if (get_items_in_map(decode_context, item_list))
     {
         return PAL_ATTEST_ERROR;
     }
 
-    if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE)
-    {
-        *loop_back = true;
-    }
-
     if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING)
     {
         return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING;
@@ -324,11 +316,10 @@
                 token_size      : Size of the token buffer
     @return   - error status
 **/
-int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size,
-                                        uint8_t *token, uint32_t token_size)
+int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size,
+                                        uint8_t *token, size_t token_size)
 {
     int32_t             status = PAL_ATTEST_SUCCESS;
-    bool                short_circuit;
     int32_t             cose_algorithm_id;
     QCBORItem           item;
     QCBORDecodeContext  decode_context;
@@ -412,8 +403,7 @@
         return status;
 
     /* Parse the unprotected headers and check the data type and value */
-    short_circuit = false;
-    status = parse_unprotected_headers(&decode_context, &kid, &short_circuit);
+    status = parse_unprotected_headers(&decode_context, &kid);
     if (status != PAL_ATTEST_SUCCESS)
         return status;
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h
index 8a0c545..e7449a0 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h
@@ -140,8 +140,7 @@
                                                 1 << (EAT_CBOR_ARM_RANGE_BASE                      \
                                                     - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS))
 
-#define MANDATORY_SW_COMP                      (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT      |     \
-                                                1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID)
+#define MANDATORY_SW_COMP                      (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT)
 
 #define NULL_USEFUL_BUF_C  NULLUsefulBufC
 
@@ -158,6 +157,8 @@
     PAL_ATTEST_HASH_BUFFER_SIZE,
     PAL_ATTEST_ERR_PROTECTED_HEADERS,
     PAL_ATTEST_ERR_SIGN_STRUCT,
+    PAL_ATTEST_ERR_KEY_FAIL,
+    PAL_ATTEST_ERR_SIGNATURE_FAIL,
     PAL_ATTEST_ERROR,
 };
 
@@ -166,5 +167,5 @@
     QCBORItem item;
 };
 
-int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size,
-                                        uint8_t *token, uint32_t token_size);
+int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size,
+                                        uint8_t *token, size_t token_size);
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c
index 2d99f74..83c1ebd 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c
@@ -27,25 +27,27 @@
 int32_t pal_attestation_function(int type, va_list valist)
 {
     uint8_t     *challenge, *token;
-    uint32_t    challenge_size, *token_size, verify_token_size;
+    size_t       challenge_size, *token_size, verify_token_size, token_buffer_size;
 
     switch (type)
     {
         case PAL_INITIAL_ATTEST_GET_TOKEN:
             challenge = va_arg(valist, uint8_t*);
-            challenge_size = va_arg(valist, uint32_t);
+            challenge_size = va_arg(valist, size_t);
             token = va_arg(valist, uint8_t*);
-            token_size = va_arg(valist, uint32_t*);
-            return psa_initial_attest_get_token(challenge, challenge_size, token, token_size);
+            token_buffer_size = va_arg(valist, size_t);
+            token_size = va_arg(valist, size_t*);
+            return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size,
+            token_size);
         case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE:
-            challenge_size = va_arg(valist, uint32_t);
-            token_size = va_arg(valist, uint32_t*);
+            challenge_size = va_arg(valist, size_t);
+            token_size = va_arg(valist, size_t*);
             return psa_initial_attest_get_token_size(challenge_size, token_size);
         case PAL_INITIAL_ATTEST_VERIFY_TOKEN:
             challenge = va_arg(valist, uint8_t*);
-            challenge_size = va_arg(valist, uint32_t);
+            challenge_size = va_arg(valist, size_t);
             token = va_arg(valist, uint8_t*);
-            verify_token_size = va_arg(valist, uint32_t);
+            verify_token_size = va_arg(valist, size_t);
             return pal_initial_attest_verify_token(challenge, challenge_size,
                                                    token, verify_token_size);
         default:
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h
index 289dc5d..2871339 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h
@@ -40,6 +40,9 @@
 #define SP_HEAP_MEM_SUPP
 #endif /* PSA_CMAKE_BUILD */
 
+/* Version of crypto spec used in attestation */
+#define CRYPTO_VERSION_BETA2
+
 /*
  * Include of PSA defined Header files
  */
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config_check.h
index f18a785..443e0bc 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config_check.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config_check.h
@@ -94,13 +94,13 @@
 #error "ARCH_TEST_CTR_AES defined, but not all prerequisites"
 #endif
 
-#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\
+#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\
     (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC))
 #error "ARCH_TEST_CBC_AES defined, but not all prerequisites"
 #endif
 
 #if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\
-    (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC))
+    (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC))
 #error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites"
 #endif
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c
index 3df6aa8..fd2e055 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c
@@ -28,96 +28,124 @@
 **/
 int32_t pal_crypto_function(int type, va_list valist)
 {
-    int                     i;
-    size_t                  size, *length, salt_length, label_length, ciphertext_size;
-    uint8_t                 *buffer, *ciphertext;
-    const uint8_t           *salt, *label, *nonce, *additional_data;
-    uint8_t                 *plaintext;
-    uint32_t                status;
-    const void              *extra;
-    size_t                  extra_size, capacity, *gen_cap, nonce_length, additional_data_length;
-    psa_key_handle_t        handle, *key_handle, target_handle;
-    psa_key_type_t          key_type, *key_type_out;
-    psa_key_policy_t        *policy;
-    psa_key_usage_t         usage, *usage_out;
-    psa_key_lifetime_t      *lifetime_out;
-    psa_algorithm_t         alg, *alg_out;
-    psa_hash_operation_t    *hash_operation;
-    psa_mac_operation_t     *mac_operation;
-    psa_cipher_operation_t  *cipher_operation;
-    psa_crypto_generator_t  *generator;
-
+    int                              i;
+    psa_status_t                     status;
+    uint8_t                         *buffer, *ciphertext, *plaintext;
+    const uint8_t                   *nonce, *additional_data, *salt, *peer;
+    size_t                          *length, size, ciphertext_size, nonce_length;
+    size_t                           salt_length, peer_length, additional_data_length;
+    size_t                          *tag_length, plaintext_size;
+    psa_aead_operation_t            *aead_operation;
+    psa_key_attributes_t            *attributes;
+    psa_key_handle_t                *handle, key_handle;
+    psa_key_type_t                  *key_type_out, key_type;
+    psa_key_usage_t                 *usage_out, usage;
+    psa_key_id_t                    *key_id_out, key_id;
+    psa_key_lifetime_t              *key_lifetime_out, key_lifetime;
+    psa_algorithm_t                 *key_alg_out, key_alg, alg;
+    psa_hash_operation_t            *hash_operation, *target_operation;
+    psa_mac_operation_t             *mac_operation;
+    psa_cipher_operation_t          *cipher_operation;
+    psa_key_derivation_operation_t  *derive_operation;
+    psa_key_derivation_step_t        step;
     switch (type)
     {
         case PAL_CRYPTO_INIT:
             return psa_crypto_init();
         case PAL_CRYPTO_GENERATE_RANDOM:
-            buffer = va_arg(valist, uint8_t*);
+            buffer = va_arg(valist, uint8_t *);
             size = va_arg(valist, int);
             return psa_generate_random(buffer, size);
         case PAL_CRYPTO_IMPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            buffer = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            status = psa_import_key(attributes, buffer, size, handle);
+            return status;
+        case PAL_CRYPTO_SET_KEY_TYPE:
+            attributes = va_arg(valist, psa_key_attributes_t *);
             key_type = va_arg(valist, psa_key_type_t);
-            buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, int);
-            status = psa_import_key(handle, key_type, buffer, size);
-            return status;
+            psa_set_key_type(attributes, key_type);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_BITS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            size = va_arg(valist, size_t);
+            psa_set_key_bits(attributes, size);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ATTRIBUTES:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            return psa_get_key_attributes(key_handle, attributes);
+        case PAL_CRYPTO_GET_KEY_TYPE:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_type_out = va_arg(valist, psa_key_type_t *);
+            *key_type_out = psa_get_key_type(attributes);
+            return 0;
         case PAL_CRYPTO_EXPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            buffer = (uint8_t *)(va_arg(valist, uint8_t*));
-            size = va_arg(valist, int);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_export_key(handle, buffer, size, length);
-            return status;
-        case PAL_CRYPTO_EXPORT_PUBLIC_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            buffer = (uint8_t *)(va_arg(valist, uint8_t*));
-            size = va_arg(valist, int);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_export_public_key(handle, buffer, size, length);
-            return status;
-        case PAL_CRYPTO_KEY_POLICY_INIT:
-            policy = va_arg(valist, psa_key_policy_t*);
-            memset(policy, 0, sizeof(psa_key_policy_t));
-            return 0;
-        case PAL_CRYPTO_KEY_POLICY_SET_USAGE:
-            policy = va_arg(valist, psa_key_policy_t*);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            buffer = (uint8_t *)(va_arg(valist, uint8_t *));
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t *);
+            return psa_export_key(key_handle, buffer, size, length);
+        case PAL_CRYPTO_SET_KEY_USAGE_FLAGS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
             usage = va_arg(valist, psa_key_usage_t);
-            alg = va_arg(valist, psa_algorithm_t);
-            psa_key_policy_set_usage(policy, usage, alg);
+            psa_set_key_usage_flags(attributes, usage);
             return 0;
-        case PAL_CRYPTO_SET_KEY_POLICY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_set_key_policy(handle, policy);
-        case PAL_CRYPTO_DESTROY_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            status = psa_destroy_key(handle);
-            return status;
-        case PAL_CRYPTO_GET_KEY_INFORMATION:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type_out = va_arg(valist, psa_key_type_t*);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_get_key_information(handle, key_type_out, length);
-            return status;
-        case PAL_CRYPTO_GET_KEY_POLICY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_get_key_policy(handle, policy);
-        case PAL_CRYPTO_KEY_POLICY_GET_USAGE:
-            policy = va_arg(valist, psa_key_policy_t*);
-            usage_out = va_arg(valist, psa_key_usage_t*);
-            *usage_out = psa_key_policy_get_usage(policy);
+        case PAL_CRYPTO_RESET_KEY_ATTRIBUTES:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            psa_reset_key_attributes(attributes);
             return 0;
-        case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM:
-            policy = va_arg(valist, psa_key_policy_t*);
-            alg_out = va_arg(valist, psa_algorithm_t*);
-            *alg_out = psa_key_policy_get_algorithm(policy);
+        case PAL_CRYPTO_EXPORT_PUBLIC_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            buffer = (uint8_t *)(va_arg(valist, uint8_t *));
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t *);
+            return psa_export_public_key(key_handle, buffer, size, length);
+        case PAL_CRYPTO_SET_KEY_ID:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_id = va_arg(valist, psa_key_id_t);
+            psa_set_key_id(attributes, key_id);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_LIFETIME:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_lifetime = va_arg(valist, psa_key_lifetime_t);
+            psa_set_key_lifetime(attributes, key_lifetime);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_ALGORITHM:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_alg = va_arg(valist, psa_algorithm_t);
+            psa_set_key_algorithm(attributes, key_alg);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ID:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_id_out = va_arg(valist, psa_key_id_t *);
+            *key_id_out = psa_get_key_id(attributes);
             return 0;
         case PAL_CRYPTO_GET_KEY_LIFETIME:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            lifetime_out = va_arg(valist, psa_key_lifetime_t*);
-            return psa_get_key_lifetime(handle, lifetime_out);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_lifetime_out = va_arg(valist, psa_key_lifetime_t *);
+            *key_lifetime_out = psa_get_key_lifetime(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_USAGE_FLAGS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            usage_out = va_arg(valist, psa_key_usage_t *);
+            *usage_out = psa_get_key_usage_flags(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ALGORITHM:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_alg_out = va_arg(valist, psa_algorithm_t *);
+            *key_alg_out = psa_get_key_algorithm(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_BITS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            length = va_arg(valist, size_t *);
+            *length = psa_get_key_bits(attributes);
+            return 0;
+        case PAL_CRYPTO_DESTROY_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_destroy_key(key_handle);
         case PAL_CRYPTO_HASH_SETUP:
             hash_operation = va_arg(valist, psa_hash_operation_t*);
             alg = va_arg(valist, psa_algorithm_t);
@@ -141,44 +169,31 @@
         case PAL_CRYPTO_HASH_ABORT:
             hash_operation = va_arg(valist, psa_hash_operation_t*);
             return psa_hash_abort(hash_operation);
-        case PAL_CRYPTO_GENERATE_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type = va_arg(valist, psa_key_type_t);
-            size     = va_arg(valist, size_t);
-            extra    = va_arg(valist, const void*);
-            extra_size  = va_arg(valist, size_t);
-            return psa_generate_key(handle, key_type, size, extra, extra_size);
-        case PAL_CRYPTO_GENERATOR_READ:
-            generator = va_arg(valist, psa_crypto_generator_t*);
+        case PAL_CRYPTO_HASH_COMPUTE:
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
             buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, int);
-            return psa_generator_read(generator, buffer, size);
-        case PAL_CRYPTO_KEY_DERIVATION:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length);
+        case PAL_CRYPTO_HASH_COMPARE:
             alg = va_arg(valist, psa_algorithm_t);
-            salt = va_arg(valist, const uint8_t *);
-            salt_length = va_arg(valist, size_t);
-            label = va_arg(valist, const uint8_t *);
-            label_length = va_arg(valist, size_t);
-            capacity = va_arg(valist, size_t);
-            return psa_key_derivation(generator, handle, alg, salt, salt_length, label,
-                                                                  label_length, capacity);
-        case PAL_CRYPTO_GET_GENERATOR_CAPACITY:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            gen_cap   = va_arg(valist, size_t*);
-            return psa_get_generator_capacity(generator, gen_cap);
-        case PAL_CRYPTO_GENERATOR_IMPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type = va_arg(valist, psa_key_type_t);
-            size     = va_arg(valist, size_t);
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            return psa_generator_import_key(handle, key_type, size, generator);
-        case PAL_CRYPTO_GENERATOR_ABORT:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            return psa_generator_abort(generator);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size);
+        case PAL_CRYPTO_HASH_CLONE:
+            hash_operation = va_arg(valist, psa_hash_operation_t*);
+            target_operation = va_arg(valist, psa_hash_operation_t*);
+            return psa_hash_clone(hash_operation, target_operation);
+        case PAL_CRYPTO_GENERATE_KEY:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_generate_key(attributes, handle);
         case PAL_CRYPTO_AEAD_ENCRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             nonce = va_arg(valist, const uint8_t *);
             nonce_length = va_arg(valist, size_t);
@@ -189,10 +204,10 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data,
-                    additional_data_length, plaintext, size, ciphertext, ciphertext_size, length);
+            return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data,
+            additional_data_length, plaintext, size, ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_AEAD_DECRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             nonce = va_arg(valist, const uint8_t *);
             nonce_length = va_arg(valist, size_t);
@@ -203,13 +218,74 @@
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data,
-                    additional_data_length, ciphertext, ciphertext_size, plaintext, size, length);
+            return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data,
+            additional_data_length, ciphertext, ciphertext_size, plaintext, size, length);
+        case PAL_CRYPTO_AEAD_ENCRYPT_SETUP:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_aead_encrypt_setup(aead_operation, key_handle, alg);
+        case PAL_CRYPTO_AEAD_DECRYPT_SETUP:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_aead_decrypt_setup(aead_operation, key_handle, alg);
+        case PAL_CRYPTO_AEAD_GENERATE_NONCE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t*);
+            return psa_aead_generate_nonce(aead_operation, buffer, size, length);
+        case PAL_CRYPTO_AEAD_SET_NONCE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_set_nonce(aead_operation, buffer, size);
+        case PAL_CRYPTO_AEAD_SET_LENGTHS:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            size = va_arg(valist, size_t);
+            plaintext_size = va_arg(valist, size_t);
+            return psa_aead_set_lengths(aead_operation, size, plaintext_size);
+        case PAL_CRYPTO_AEAD_UPDATE_AD:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_update_ad(aead_operation, buffer, size);
+        case PAL_CRYPTO_AEAD_UPDATE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext,
+            ciphertext_size, length);
+        case PAL_CRYPTO_AEAD_FINISH:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            tag_length = (size_t *)va_arg(valist, size_t*);
+            return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer,
+            size, tag_length);
+        case PAL_CRYPTO_AEAD_VERIFY:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t*);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size);
+        case PAL_CRYPTO_AEAD_ABORT:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            return psa_aead_abort(aead_operation);
         case PAL_CRYPTO_MAC_SIGN_SETUP:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_mac_sign_setup(mac_operation, handle, alg);
+            return psa_mac_sign_setup(mac_operation, key_handle, alg);
         case PAL_CRYPTO_MAC_UPDATE:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             buffer = va_arg(valist, uint8_t*);
@@ -223,9 +299,9 @@
             return psa_mac_sign_finish(mac_operation, buffer, size, length);
         case PAL_CRYPTO_MAC_VERIFY_SETUP:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_mac_verify_setup(mac_operation, handle, alg);
+            return psa_mac_verify_setup(mac_operation, key_handle, alg);
         case PAL_CRYPTO_MAC_VERIFY_FINISH:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             buffer = va_arg(valist, uint8_t*);
@@ -234,8 +310,27 @@
         case PAL_CRYPTO_MAC_ABORT:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             return psa_mac_abort(mac_operation);
+        case PAL_CRYPTO_MAC_COMPUTE:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext,
+            ciphertext_size, length);
+        case PAL_CRYPTO_MAC_VERIFY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext,
+            ciphertext_size);
         case PAL_CRYPTO_ASYMMTERIC_ENCRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
@@ -244,10 +339,10 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length,
-                    ciphertext, ciphertext_size, length);
+            return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length,
+            ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_ASYMMTERIC_DECRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
@@ -256,18 +351,18 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length,
-                    ciphertext, ciphertext_size, length);
+            return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length,
+            ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_cipher_encrypt_setup(cipher_operation, handle, alg);
+            return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg);
         case PAL_CRYPTO_CIPHER_DECRYPT_SETUP:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_cipher_decrypt_setup(cipher_operation, handle, alg);
+            return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg);
         case PAL_CRYPTO_CIPHER_GENERATE_IV:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             buffer = va_arg(valist, uint8_t*);
@@ -287,7 +382,7 @@
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
             return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size,
-                                     length);
+            length);
         case PAL_CRYPTO_CIPHER_FINISH:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             ciphertext = va_arg(valist, uint8_t *);
@@ -297,39 +392,110 @@
         case PAL_CRYPTO_CIPHER_ABORT:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             return psa_cipher_abort(cipher_operation);
+        case PAL_CRYPTO_CIPHER_ENCRYPT:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t *);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size,
+            length);
+        case PAL_CRYPTO_CIPHER_DECRYPT:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t *);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size,
+            length);
         case PAL_CRYPTO_ASYMMTERIC_SIGN:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size,
-                                       length);
+            return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size,
+            length);
         case PAL_CRYPTO_ASYMMTERIC_VERIFY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
-            return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size);
-        case PAL_CRYPTO_KEY_AGREEMENT:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext,
+            ciphertext_size);
+        case PAL_CRYPTO_RAW_KEY_AGREEMENT:
+            alg = va_arg(valist, psa_algorithm_t);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            peer = va_arg(valist, uint8_t*);
+            peer_length = va_arg(valist, size_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
-            alg = va_arg(valist, psa_algorithm_t);
-            return psa_key_agreement(generator, handle, buffer, size, alg);
-        case PAL_CRYPTO_ALLOCATE_KEY:
-            key_handle = (psa_key_handle_t *)va_arg(valist, int*);
-            return psa_allocate_key(key_handle);
+            length = va_arg(valist, size_t*);
+            return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length);
         case PAL_CRYPTO_COPY_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            target_handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_copy_key(handle, target_handle, policy);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_copy_key(key_handle, attributes, handle);
+        case PAL_CRYPTO_KEY_DERIVATION_SETUP:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_key_derivation_setup(derive_operation, alg);
+        case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_input_bytes(derive_operation, step, buffer, size);
+        case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_key_derivation_input_key(derive_operation, step, key_handle);
+        case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            peer = va_arg(valist, uint8_t*);
+            peer_length = va_arg(valist, size_t);
+            return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer,
+            peer_length);
+        case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_output_bytes(derive_operation, buffer, size);
+        case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_key_derivation_output_key(attributes, derive_operation, handle);
+        case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_set_capacity(derive_operation, size);
+        case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            length = va_arg(valist, size_t *);
+            return psa_key_derivation_get_capacity(derive_operation, length);
+        case PAL_CRYPTO_KEY_DERIVATION_ABORT:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            return psa_key_derivation_abort(derive_operation);
+        case PAL_CRYPTO_OPEN_KEY:
+            key_id = va_arg(valist, psa_key_id_t);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_open_key(key_id, handle);
+        case PAL_CRYPTO_CLOSE_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_close_key(key_handle);
         case PAL_CRYPTO_FREE:
             for (i = 0; i < PAL_KEY_SLOT_COUNT; i++)
                 psa_destroy_key(i);
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h
index d1dabfa..486f793 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h
@@ -21,55 +21,82 @@
 #include "pal_common.h"
 
 enum crypto_function_code {
-    PAL_CRYPTO_INIT                     = 0x1,
-    PAL_CRYPTO_GENERATE_RANDOM          = 0x2,
-    PAL_CRYPTO_IMPORT_KEY               = 0x3,
-    PAL_CRYPTO_EXPORT_KEY               = 0x4,
-    PAL_CRYPTO_EXPORT_PUBLIC_KEY        = 0x5,
-    PAL_CRYPTO_DESTROY_KEY              = 0x6,
-    PAL_CRYPTO_GET_KEY_INFO             = 0x7,
-    PAL_CRYPTO_KEY_POLICY_INIT          = 0x8,
-    PAL_CRYPTO_KEY_POLICY_SET_USAGE     = 0x9,
-    PAL_CRYPTO_KEY_POLICY_GET_USAGE     = 0xA,
-    PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB,
-    PAL_CRYPTO_SET_KEY_POLICY           = 0xC,
-    PAL_CRYPTO_GET_KEY_POLICY           = 0xD,
-    PAL_CRYPTO_GET_KEY_INFORMATION      = 0xE,
-    PAL_CRYPTO_GET_KEY_LIFETIME         = 0xF,
-    PAL_CRYPTO_HASH_SETUP               = 0x11,
-    PAL_CRYPTO_HASH_UPDATE              = 0x12,
-    PAL_CRYPTO_HASH_VERIFY              = 0x13,
-    PAL_CRYPTO_HASH_FINISH              = 0x14,
-    PAL_CRYPTO_HASH_ABORT               = 0x15,
-    PAL_CRYPTO_GENERATE_KEY             = 0x16,
-    PAL_CRYPTO_GENERATOR_READ           = 0x17,
-    PAL_CRYPTO_KEY_DERIVATION           = 0x18,
-    PAL_CRYPTO_GET_GENERATOR_CAPACITY   = 0x19,
-    PAL_CRYPTO_GENERATOR_IMPORT_KEY     = 0x1A,
-    PAL_CRYPTO_GENERATOR_ABORT          = 0x1B,
-    PAL_CRYPTO_AEAD_ENCRYPT             = 0x1C,
-    PAL_CRYPTO_AEAD_DECRYPT             = 0x1D,
-    PAL_CRYPTO_MAC_SIGN_SETUP           = 0x1E,
-    PAL_CRYPTO_MAC_UPDATE               = 0x1F,
-    PAL_CRYPTO_MAC_SIGN_FINISH          = 0x20,
-    PAL_CRYPTO_MAC_VERIFY_SETUP         = 0x21,
-    PAL_CRYPTO_MAC_VERIFY_FINISH        = 0x22,
-    PAL_CRYPTO_MAC_ABORT                = 0x23,
-    PAL_CRYPTO_ASYMMTERIC_ENCRYPT       = 0x24,
-    PAL_CRYPTO_ASYMMTERIC_DECRYPT       = 0x25,
-    PAL_CRYPTO_CIPHER_ENCRYPT_SETUP     = 0x26,
-    PAL_CRYPTO_CIPHER_DECRYPT_SETUP     = 0x2A,
-    PAL_CRYPTO_CIPHER_GENERATE_IV       = 0x2B,
-    PAL_CRYPTO_CIPHER_SET_IV            = 0x2C,
-    PAL_CRYPTO_CIPHER_UPDATE            = 0x2D,
-    PAL_CRYPTO_CIPHER_FINISH            = 0x2E,
-    PAL_CRYPTO_CIPHER_ABORT             = 0x2F,
-    PAL_CRYPTO_ASYMMTERIC_SIGN          = 0x30,
-    PAL_CRYPTO_ASYMMTERIC_VERIFY        = 0x31,
-    PAL_CRYPTO_KEY_AGREEMENT            = 0x32,
-    PAL_CRYPTO_ALLOCATE_KEY             = 0x33,
-    PAL_CRYPTO_COPY_KEY                 = 0x34,
-    PAL_CRYPTO_FREE                     = 0xFE,
+    PAL_CRYPTO_INIT                             = 0x1,
+    PAL_CRYPTO_GENERATE_RANDOM                  = 0x2,
+    PAL_CRYPTO_IMPORT_KEY                       = 0x3,
+    PAL_CRYPTO_EXPORT_KEY                       = 0x4,
+    PAL_CRYPTO_EXPORT_PUBLIC_KEY                = 0x5,
+    PAL_CRYPTO_DESTROY_KEY                      = 0x6,
+    PAL_CRYPTO_HASH_SETUP                       = 0x7,
+    PAL_CRYPTO_HASH_UPDATE                      = 0x8,
+    PAL_CRYPTO_HASH_VERIFY                      = 0x9,
+    PAL_CRYPTO_HASH_FINISH                      = 0xA,
+    PAL_CRYPTO_HASH_ABORT                       = 0xB,
+    PAL_CRYPTO_GENERATE_KEY                     = 0xC,
+    PAL_CRYPTO_AEAD_ENCRYPT                     = 0xD,
+    PAL_CRYPTO_AEAD_DECRYPT                     = 0xE,
+    PAL_CRYPTO_MAC_SIGN_SETUP                   = 0xF,
+    PAL_CRYPTO_MAC_UPDATE                       = 0x10,
+    PAL_CRYPTO_MAC_SIGN_FINISH                  = 0x11,
+    PAL_CRYPTO_MAC_VERIFY_SETUP                 = 0x12,
+    PAL_CRYPTO_MAC_VERIFY_FINISH                = 0x13,
+    PAL_CRYPTO_MAC_ABORT                        = 0x14,
+    PAL_CRYPTO_ASYMMTERIC_ENCRYPT               = 0x15,
+    PAL_CRYPTO_ASYMMTERIC_DECRYPT               = 0x16,
+    PAL_CRYPTO_CIPHER_ENCRYPT_SETUP             = 0x17,
+    PAL_CRYPTO_CIPHER_DECRYPT_SETUP             = 0x18,
+    PAL_CRYPTO_CIPHER_GENERATE_IV               = 0x19,
+    PAL_CRYPTO_CIPHER_SET_IV                    = 0x1A,
+    PAL_CRYPTO_CIPHER_UPDATE                    = 0x1B,
+    PAL_CRYPTO_CIPHER_FINISH                    = 0x1C,
+    PAL_CRYPTO_CIPHER_ABORT                     = 0x1D,
+    PAL_CRYPTO_ASYMMTERIC_SIGN                  = 0x1E,
+    PAL_CRYPTO_ASYMMTERIC_VERIFY                = 0x1F,
+    PAL_CRYPTO_COPY_KEY                         = 0x20,
+    PAL_CRYPTO_SET_KEY_TYPE                     = 0x21,
+    PAL_CRYPTO_SET_KEY_BITS                     = 0x22,
+    PAL_CRYPTO_GET_KEY_ATTRIBUTES               = 0x23,
+    PAL_CRYPTO_GET_KEY_TYPE                     = 0x24,
+    PAL_CRYPTO_SET_KEY_USAGE_FLAGS              = 0x25,
+    PAL_CRYPTO_RESET_KEY_ATTRIBUTES             = 0x26,
+    PAL_CRYPTO_SET_KEY_ID                       = 0x27,
+    PAL_CRYPTO_SET_KEY_LIFETIME                 = 0x28,
+    PAL_CRYPTO_SET_KEY_ALGORITHM                = 0x29,
+    PAL_CRYPTO_GET_KEY_ID                       = 0x2A,
+    PAL_CRYPTO_GET_KEY_LIFETIME                 = 0x2B,
+    PAL_CRYPTO_GET_KEY_USAGE_FLAGS              = 0x2C,
+    PAL_CRYPTO_GET_KEY_ALGORITHM                = 0x2D,
+    PAL_CRYPTO_GET_KEY_BITS                     = 0x2E,
+    PAL_CRYPTO_HASH_COMPUTE                     = 0x2F,
+    PAL_CRYPTO_HASH_COMPARE                     = 0x30,
+    PAL_CRYPTO_KEY_DERIVATION_SETUP             = 0x31,
+    PAL_CRYPTO_KEY_DERIVATION_ABORT             = 0x32,
+    PAL_CRYPTO_RAW_KEY_AGREEMENT                = 0x33,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES       = 0x34,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY         = 0x35,
+    PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT     = 0x36,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES      = 0x37,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY        = 0x38,
+    PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY      = 0x39,
+    PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY      = 0x3A,
+    PAL_CRYPTO_HASH_CLONE                       = 0x3B,
+    PAL_CRYPTO_MAC_COMPUTE                      = 0x3C,
+    PAL_CRYPTO_MAC_VERIFY                       = 0x3D,
+    PAL_CRYPTO_CIPHER_ENCRYPT                   = 0x3F,
+    PAL_CRYPTO_CIPHER_DECRYPT                   = 0x40,
+    PAL_CRYPTO_OPEN_KEY                         = 0x41,
+    PAL_CRYPTO_CLOSE_KEY                        = 0x42,
+    PAL_CRYPTO_AEAD_ENCRYPT_SETUP               = 0x43,
+    PAL_CRYPTO_AEAD_DECRYPT_SETUP               = 0x44,
+    PAL_CRYPTO_AEAD_GENERATE_NONCE              = 0x45,
+    PAL_CRYPTO_AEAD_SET_NONCE                   = 0x46,
+    PAL_CRYPTO_AEAD_SET_LENGTHS                 = 0X47,
+    PAL_CRYPTO_AEAD_UPDATE_AD                   = 0x48,
+    PAL_CRYPTO_AEAD_UPDATE                      = 0x49,
+    PAL_CRYPTO_AEAD_FINISH                      = 0x4A,
+    PAL_CRYPTO_AEAD_VERIFY                      = 0x4B,
+    PAL_CRYPTO_AEAD_ABORT                       = 0x4C,
+    PAL_CRYPTO_FREE                             = 0xFE,
 };
 
 int32_t pal_crypto_function(int type, va_list valist);
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c
index ae2bdba..38ed283 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c
@@ -17,24 +17,14 @@
 
 #include "pal_attestation_crypto.h"
 
-static uint32_t  public_key_registered = 0;
-
+static uint32_t         public_key_registered;
+static psa_key_handle_t public_key_handle;
 static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf,
                                                   size_t amount)
 {
     return UsefulBuf_Head(buf, amount);
 }
 
-static uint32_t check_hash_sizes(void)
-{
-    if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256))
-    {
-        return PAL_ATTEST_HASH_FAIL;
-    }
-
-    return PAL_ATTEST_SUCCESS;
-}
-
 static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve)
 {
     psa_ecc_curve_t psa_curve;
@@ -82,130 +72,94 @@
 
 int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id)
 {
-    int32_t                          cose_ret = PAL_ATTEST_SUCCESS;
-    psa_status_t                     psa_ret;
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT;
+    psa_algorithm_t      psa_alg;
 
-    cose_ret = check_hash_sizes();
-    if (cose_ret)
-    {
-        goto error;
-    }
+    /* Map the algorithm ID */
+    psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id);
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-        goto error;
-    }
+    /* Actually do the hash set up */
+    hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg);
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
-    psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id));
+    /* Copy the PSA handle back into the context */
+    hash_ctx->context.handle = psa_hash.handle;
 
-    if (psa_ret == PAL_ATTEST_SUCCESS)
-    {
-        psa_hash_ctx->status = PAL_ATTEST_SUCCESS;
-        cose_ret = PAL_ATTEST_SUCCESS;
-    }
-    else if (psa_ret == PSA_ERROR_NOT_SUPPORTED)
-    {
-        cose_ret = PAL_ATTEST_HASH_UNSUPPORTED;
-    }
-    else
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-    }
-
-error:
-    return cose_ret;
+    /* Map errors and return */
+    return (psa_status_t)hash_ctx->status;
 }
 
 void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx,
                                  struct q_useful_buf_c data_to_hash)
 {
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash;
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
+    /* Copy the PSA handle out of the generic context */
+    psa_hash.handle = (uint32_t)hash_ctx->context.handle;
+
+    if (hash_ctx->status != PSA_SUCCESS)
+        return;
+
+    if (data_to_hash.ptr == NULL) {
+        /* No data was passed in to be hashed indicating the mode of use is
+         * the computation of the size of hash. This mode is hashing is used
+         * by t_cose when it is requested to compute the size of the signed
+         * data it might compute, which is in turn used to compute the
+         * size of a would be token. When computing the size, the size
+         * like this, there is nothing to do in update()
+         */
         return;
     }
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
+    /* Actually hash the data */
+    hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len);
 
-    if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS)
-    {
-        if (data_to_hash.ptr != NULL)
-        {
-            psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation,
-                                                   data_to_hash.ptr,
-                                                   data_to_hash.len);
-        }
-        else
-        {
-            /* Intentionally do nothing, just computing the size of the token */
-        }
-    }
+    /* Copy the PSA handle back into the context. */
+    hash_ctx->context.handle = psa_hash.handle;
 }
 
 int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx,
                                     struct q_useful_buf buffer_to_hold_result,
                                     struct q_useful_buf_c *hash_result)
 {
-    uint32_t                         cose_ret = PAL_ATTEST_SUCCESS;
-    psa_status_t                     psa_ret;
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash;
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-        goto error;
-    }
+    /* Copy the PSA handle out of the generic context */
+    psa_hash.handle = (uint32_t)hash_ctx->context.handle;
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
+    if (hash_ctx->status != PSA_SUCCESS)
+        goto Done;
 
-    if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS)
-    {
-        psa_ret = psa_hash_finish(&psa_hash_ctx->operation,
-                                  buffer_to_hold_result.ptr,
-                                  buffer_to_hold_result.len,
-                                  &(hash_result->len));
+    /* Actually finish up the hash */
+    hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr,
+                                       buffer_to_hold_result.len, &(hash_result->len));
 
-        if (psa_ret == PAL_ATTEST_SUCCESS)
-        {
-            hash_result->ptr = buffer_to_hold_result.ptr;
-            cose_ret = 0;
-        }
-        else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL)
-        {
-            cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE;
-        }
-        else
-        {
-            cose_ret = PAL_ATTEST_HASH_FAIL;
-        }
-    }
-    else
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-    }
+    hash_result->ptr = buffer_to_hold_result.ptr;
 
-error:
-    return cose_ret;
+    /* Copy the PSA handle back into the context. */
+    hash_ctx->context.handle = psa_hash.handle;
+
+Done:
+    return ((psa_status_t)hash_ctx->status);
+
 }
 
 int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash,
                       struct q_useful_buf_c *hash)
 {
-    uint32_t                      status = PAL_ATTEST_SUCCESS;
+    uint32_t                      return_value = 0;
     struct pal_cose_crypto_hash   hash_ctx;
 
-    status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY);
-    if (status)
-        return status;
+    return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY);
+    if (return_value)
+        goto Done;
 
     pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash);
-    status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash);
+    return_value = pal_cose_crypto_hash_finish(&hash_ctx,
+                                             buffer_for_hash,
+                                             hash);
 
-    return status;
+Done:
+    return return_value;
 }
 
 uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash,
@@ -223,18 +177,19 @@
     /* This builds the CBOR-format to-be-signed bytes */
     QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part);
     QCBOREncode_OpenArray(&cbor_encode_ctx);
+
     /* context */
-    QCBOREncode_AddSZString(&cbor_encode_ctx,
-                            COSE_SIG_CONTEXT_STRING_SIGNATURE1);
+    QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1);
+
     /* body_protected */
-    QCBOREncode_AddBytes(&cbor_encode_ctx,
-                         protected_headers);
-    /* sign_protected */
-    QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
+    QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers);
+
+    /* sign_protected is not used for Sign1 */
     /* external_aad */
     QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
-    /* fake payload */
-    QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
+
+    /* The short fake payload. */
+    QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload);
     QCBOREncode_CloseArray(&cbor_encode_ctx);
 
     /* Get the result and convert it to struct q_useful_buf_c representation */
@@ -242,7 +197,8 @@
     if (qcbor_result)
     {
         /* Mainly means that the protected_headers were too big
-         (which should never happen) */
+         * (which should never happen)
+         */
         status = PAL_ATTEST_ERR_SIGN_STRUCT;
         goto Done;
     }
@@ -257,90 +213,129 @@
     if (status)
         goto Done;
 
-    /* Hash the first part of the TBS. Take all but the last two
-     * bytes. The last two bytes are the fake payload from above. It
-     * is replaced by the real payload which is hashed next. The fake
-     * payload is needed so the array count is right. This is one of
-     * the main things that make it possible to implement with one
-     * buffer for the whole cose sign1.
+    /* This is hashing of the first part, all the CBOR
+     * except the payload.
      */
-    pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part,
-                                              tbs_first_part.len - 2));
+    pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len));
 
-    /* Hash the payload */
+    /* Hash the payload, the second part. */
     pal_cose_crypto_hash_update(&hash_ctx, payload);
 
     /* Finish the hash and set up to return it */
-    status = pal_cose_crypto_hash_finish(&hash_ctx,
-                                             buffer_for_hash,
-                                             hash);
+    status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash);
 
 Done:
     return status;
 }
 
-uint32_t pal_import_attest_key(int32_t alg)
+static uint32_t pal_import_attest_key(psa_algorithm_t key_alg)
 {
-    psa_key_type_t   attest_key_type;
-    size_t           public_key_size;
-    psa_status_t     status = PSA_SUCCESS;
+    psa_status_t     status             = PAL_ATTEST_ERROR;
+    psa_key_usage_t  usage              = PSA_KEY_USAGE_VERIFY;
+    psa_ecc_curve_t  psa_curve          = attest_map_elliptic_curve_type(P_256);
+    psa_key_type_t   attest_key_type    = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve);
+    size_t           public_key_size    = attest_key.pubx_key_size + attest_key.puby_key_size;
+
+#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2)
     psa_key_policy_t policy;
-    psa_ecc_curve_t  psa_curve;
-    psa_key_handle_t public_key_handle;
 
-    /* Mapping of COSE curve type to PSA curve types */
-    psa_curve = attest_map_elliptic_curve_type(P_256);
-    if (psa_curve == USHRT_MAX)
-        return PAL_ATTEST_ERROR;
+    if (!public_key_registered)
+    {
+        if (psa_curve == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
 
-    /* Setup the key policy for public key */
-    policy = psa_key_policy_init();
-    psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg);
+        /* Setup the key policy for public key */
+        policy = psa_key_policy_init();
+        psa_key_policy_set_usage(&policy, usage, key_alg);
 
-    status = psa_allocate_key(&public_key_handle);
-    if (status != PSA_SUCCESS)
-        return status;
+        status = psa_allocate_key(&public_key_handle);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
 
-    status = psa_set_key_policy(public_key_handle, &policy);
-    if (status != PSA_SUCCESS)
-        return status;
+        status = psa_set_key_policy(public_key_handle, &policy);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
 
-    attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve);
-
-    /* Register public key to crypto service */
-    public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size;
-
-    status = psa_import_key(public_key_handle,
+        /* Import the public key */
+        status = psa_import_key(public_key_handle,
                                 attest_key_type,
-                                (const uint8_t *)&attest_public_key,
+                               (const uint8_t *)&attest_public_key,
                                 public_key_size + 1);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
+
+        public_key_registered = 1;
+    }
+
+#elif defined(CRYPTO_VERSION_BETA3)
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (!public_key_registered)
+    {
+        if (psa_curve == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
+
+        /* Set the attributes for the public key */
+        psa_set_key_type(&attributes, attest_key_type);
+        psa_set_key_bits(&attributes, public_key_size + 1);
+        psa_set_key_usage_flags(&attributes, usage);
+        psa_set_key_algorithm(&attributes, key_alg);
+
+        /* Import the public key */
+        status = psa_import_key(&attributes,
+                               (const uint8_t *)&attest_public_key,
+                                public_key_size + 1,
+                                &public_key_handle);
+
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
+
+        public_key_registered = 1;
+    }
+#endif
 
     return status;
 }
 
+static uint32_t pal_destroy_attest_key(void)
+{
+    psa_status_t     status;
+
+    if (!public_key_registered)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    status =  psa_destroy_key(public_key_handle);
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    public_key_registered = 0;
+
+    return PAL_ATTEST_SUCCESS;
+}
 
 uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id,
                                    struct q_useful_buf_c token_hash,
                                    struct q_useful_buf_c signature)
 {
-    uint32_t status = PAL_ATTEST_SUCCESS;
+    int32_t status = PAL_ATTEST_ERROR;
+    psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256);
 
-    if (!public_key_registered)
-    {
-        status = pal_import_attest_key(cose_algorithm_id);
-        if (status != PAL_ATTEST_SUCCESS)
-            return status;
+    /* Register the attestation public key */
+    status = pal_import_attest_key(key_alg);
+    if (status != PAL_ATTEST_SUCCESS)
+        return status;
 
-        public_key_registered = 1;
-    }
-
-/*
- * Enable the verify function when Trusted Firmare - M Supports
-
- *  Verify the signature a hash or short message using a public key.
+    /* Verify the signature */
     status = psa_asymmetric_verify(public_key_handle,
-                                    cose_algorithm_id, token_hash.ptr, token_hash.len,
-                                    signature.ptr, signature.len);
-*/
-    return status;
+                                   key_alg, token_hash.ptr, token_hash.len,
+                                   signature.ptr, signature.len);
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_SIGNATURE_FAIL;
+
+    /* Unregister the attestation public key */
+    status = pal_destroy_attest_key();
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    return PAL_ATTEST_SUCCESS;
 }
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h
index 2d63ad1..2175e65 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h
@@ -22,9 +22,9 @@
 
 typedef struct{
     uint8_t  *pubx_key;
-    uint32_t  pubx_key_size;
+    size_t    pubx_key_size;
     uint8_t  *puby_key;
-    uint32_t  puby_key_size;
+    size_t    puby_key_size;
 } ecc_key_t;
 
 struct ecc_public_key_t {
@@ -48,11 +48,11 @@
 };
 
 struct pal_cose_crypto_hash {
-    /* Can't put the actual size here without creating dependecy on
-     * actual hash implementation, so this is a fairly large and
-     * accommodating size.
-     */
-    uint8_t bytes[128];
+    union {
+        void    *ptr;
+        uint64_t handle;
+    } context;
+    int64_t status;
 };
 
 struct pal_cose_psa_crypto_hash {
@@ -95,7 +95,6 @@
 uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash,
                           struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers,
                           struct q_useful_buf_c payload);
-uint32_t pal_import_attest_key(int32_t alg);
 uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash,
                                    struct q_useful_buf_c signature);
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c
index 178fdc9..60c7164 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c
@@ -29,7 +29,7 @@
     QCBORError                qcbor_result;
     QCBOREncodeContext        cbor_encode_ctx;
     int32_t                   cose_curve_id = P_256;
-    struct q_useful_buf_c       encoded_key_id;
+    struct q_useful_buf_c     encoded_key_id;
 
     /* Get the public key x and y */
     /* Encode it into a COSE_Key structure */
@@ -136,26 +136,18 @@
 }
 
 static int parse_unprotected_headers(QCBORDecodeContext *decode_context,
-                                     struct q_useful_buf_c *child,
-                                     bool *loop_back)
+                                     struct q_useful_buf_c *child)
 {
     struct items_to_get_t   item_list[3];
 
     item_list[0].label = COSE_HEADER_PARAM_KID;
-    item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL;
-    item_list[2].label = 0;
-    *loop_back = false;
+    item_list[1].label = 0;
 
     if (get_items_in_map(decode_context, item_list))
     {
         return PAL_ATTEST_ERROR;
     }
 
-    if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE)
-    {
-        *loop_back = true;
-    }
-
     if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING)
     {
         return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING;
@@ -324,11 +316,10 @@
                 token_size      : Size of the token buffer
     @return   - error status
 **/
-int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size,
-                                        uint8_t *token, uint32_t token_size)
+int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size,
+                                        uint8_t *token, size_t token_size)
 {
     int32_t             status = PAL_ATTEST_SUCCESS;
-    bool                short_circuit;
     int32_t             cose_algorithm_id;
     QCBORItem           item;
     QCBORDecodeContext  decode_context;
@@ -412,8 +403,7 @@
         return status;
 
     /* Parse the unprotected headers and check the data type and value */
-    short_circuit = false;
-    status = parse_unprotected_headers(&decode_context, &kid, &short_circuit);
+    status = parse_unprotected_headers(&decode_context, &kid);
     if (status != PAL_ATTEST_SUCCESS)
         return status;
 
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h
index 8a0c545..e7449a0 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h
@@ -140,8 +140,7 @@
                                                 1 << (EAT_CBOR_ARM_RANGE_BASE                      \
                                                     - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS))
 
-#define MANDATORY_SW_COMP                      (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT      |     \
-                                                1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID)
+#define MANDATORY_SW_COMP                      (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT)
 
 #define NULL_USEFUL_BUF_C  NULLUsefulBufC
 
@@ -158,6 +157,8 @@
     PAL_ATTEST_HASH_BUFFER_SIZE,
     PAL_ATTEST_ERR_PROTECTED_HEADERS,
     PAL_ATTEST_ERR_SIGN_STRUCT,
+    PAL_ATTEST_ERR_KEY_FAIL,
+    PAL_ATTEST_ERR_SIGNATURE_FAIL,
     PAL_ATTEST_ERROR,
 };
 
@@ -166,5 +167,5 @@
     QCBORItem item;
 };
 
-int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size,
-                                        uint8_t *token, uint32_t token_size);
+int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size,
+                                        uint8_t *token, size_t token_size);
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c
index 2d99f74..83c1ebd 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c
@@ -27,25 +27,27 @@
 int32_t pal_attestation_function(int type, va_list valist)
 {
     uint8_t     *challenge, *token;
-    uint32_t    challenge_size, *token_size, verify_token_size;
+    size_t       challenge_size, *token_size, verify_token_size, token_buffer_size;
 
     switch (type)
     {
         case PAL_INITIAL_ATTEST_GET_TOKEN:
             challenge = va_arg(valist, uint8_t*);
-            challenge_size = va_arg(valist, uint32_t);
+            challenge_size = va_arg(valist, size_t);
             token = va_arg(valist, uint8_t*);
-            token_size = va_arg(valist, uint32_t*);
-            return psa_initial_attest_get_token(challenge, challenge_size, token, token_size);
+            token_buffer_size = va_arg(valist, size_t);
+            token_size = va_arg(valist, size_t*);
+            return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size,
+            token_size);
         case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE:
-            challenge_size = va_arg(valist, uint32_t);
-            token_size = va_arg(valist, uint32_t*);
+            challenge_size = va_arg(valist, size_t);
+            token_size = va_arg(valist, size_t*);
             return psa_initial_attest_get_token_size(challenge_size, token_size);
         case PAL_INITIAL_ATTEST_VERIFY_TOKEN:
             challenge = va_arg(valist, uint8_t*);
-            challenge_size = va_arg(valist, uint32_t);
+            challenge_size = va_arg(valist, size_t);
             token = va_arg(valist, uint8_t*);
-            verify_token_size = va_arg(valist, uint32_t);
+            verify_token_size = va_arg(valist, size_t);
             return pal_initial_attest_verify_token(challenge, challenge_size,
                                                    token, verify_token_size);
         default:
diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h
index 289dc5d..2871339 100644
--- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h
+++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h
@@ -40,6 +40,9 @@
 #define SP_HEAP_MEM_SUPP
 #endif /* PSA_CMAKE_BUILD */
 
+/* Version of crypto spec used in attestation */
+#define CRYPTO_VERSION_BETA2
+
 /*
  * Include of PSA defined Header files
  */
diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h
index f18a785..443e0bc 100644
--- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h
+++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h
@@ -94,13 +94,13 @@
 #error "ARCH_TEST_CTR_AES defined, but not all prerequisites"
 #endif
 
-#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\
+#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\
     (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC))
 #error "ARCH_TEST_CBC_AES defined, but not all prerequisites"
 #endif
 
 #if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\
-    (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC))
+    (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC))
 #error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites"
 #endif
 
diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c
index 3df6aa8..fd2e055 100644
--- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c
+++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c
@@ -28,96 +28,124 @@
 **/
 int32_t pal_crypto_function(int type, va_list valist)
 {
-    int                     i;
-    size_t                  size, *length, salt_length, label_length, ciphertext_size;
-    uint8_t                 *buffer, *ciphertext;
-    const uint8_t           *salt, *label, *nonce, *additional_data;
-    uint8_t                 *plaintext;
-    uint32_t                status;
-    const void              *extra;
-    size_t                  extra_size, capacity, *gen_cap, nonce_length, additional_data_length;
-    psa_key_handle_t        handle, *key_handle, target_handle;
-    psa_key_type_t          key_type, *key_type_out;
-    psa_key_policy_t        *policy;
-    psa_key_usage_t         usage, *usage_out;
-    psa_key_lifetime_t      *lifetime_out;
-    psa_algorithm_t         alg, *alg_out;
-    psa_hash_operation_t    *hash_operation;
-    psa_mac_operation_t     *mac_operation;
-    psa_cipher_operation_t  *cipher_operation;
-    psa_crypto_generator_t  *generator;
-
+    int                              i;
+    psa_status_t                     status;
+    uint8_t                         *buffer, *ciphertext, *plaintext;
+    const uint8_t                   *nonce, *additional_data, *salt, *peer;
+    size_t                          *length, size, ciphertext_size, nonce_length;
+    size_t                           salt_length, peer_length, additional_data_length;
+    size_t                          *tag_length, plaintext_size;
+    psa_aead_operation_t            *aead_operation;
+    psa_key_attributes_t            *attributes;
+    psa_key_handle_t                *handle, key_handle;
+    psa_key_type_t                  *key_type_out, key_type;
+    psa_key_usage_t                 *usage_out, usage;
+    psa_key_id_t                    *key_id_out, key_id;
+    psa_key_lifetime_t              *key_lifetime_out, key_lifetime;
+    psa_algorithm_t                 *key_alg_out, key_alg, alg;
+    psa_hash_operation_t            *hash_operation, *target_operation;
+    psa_mac_operation_t             *mac_operation;
+    psa_cipher_operation_t          *cipher_operation;
+    psa_key_derivation_operation_t  *derive_operation;
+    psa_key_derivation_step_t        step;
     switch (type)
     {
         case PAL_CRYPTO_INIT:
             return psa_crypto_init();
         case PAL_CRYPTO_GENERATE_RANDOM:
-            buffer = va_arg(valist, uint8_t*);
+            buffer = va_arg(valist, uint8_t *);
             size = va_arg(valist, int);
             return psa_generate_random(buffer, size);
         case PAL_CRYPTO_IMPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            buffer = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            status = psa_import_key(attributes, buffer, size, handle);
+            return status;
+        case PAL_CRYPTO_SET_KEY_TYPE:
+            attributes = va_arg(valist, psa_key_attributes_t *);
             key_type = va_arg(valist, psa_key_type_t);
-            buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, int);
-            status = psa_import_key(handle, key_type, buffer, size);
-            return status;
+            psa_set_key_type(attributes, key_type);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_BITS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            size = va_arg(valist, size_t);
+            psa_set_key_bits(attributes, size);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ATTRIBUTES:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            return psa_get_key_attributes(key_handle, attributes);
+        case PAL_CRYPTO_GET_KEY_TYPE:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_type_out = va_arg(valist, psa_key_type_t *);
+            *key_type_out = psa_get_key_type(attributes);
+            return 0;
         case PAL_CRYPTO_EXPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            buffer = (uint8_t *)(va_arg(valist, uint8_t*));
-            size = va_arg(valist, int);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_export_key(handle, buffer, size, length);
-            return status;
-        case PAL_CRYPTO_EXPORT_PUBLIC_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            buffer = (uint8_t *)(va_arg(valist, uint8_t*));
-            size = va_arg(valist, int);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_export_public_key(handle, buffer, size, length);
-            return status;
-        case PAL_CRYPTO_KEY_POLICY_INIT:
-            policy = va_arg(valist, psa_key_policy_t*);
-            memset(policy, 0, sizeof(psa_key_policy_t));
-            return 0;
-        case PAL_CRYPTO_KEY_POLICY_SET_USAGE:
-            policy = va_arg(valist, psa_key_policy_t*);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            buffer = (uint8_t *)(va_arg(valist, uint8_t *));
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t *);
+            return psa_export_key(key_handle, buffer, size, length);
+        case PAL_CRYPTO_SET_KEY_USAGE_FLAGS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
             usage = va_arg(valist, psa_key_usage_t);
-            alg = va_arg(valist, psa_algorithm_t);
-            psa_key_policy_set_usage(policy, usage, alg);
+            psa_set_key_usage_flags(attributes, usage);
             return 0;
-        case PAL_CRYPTO_SET_KEY_POLICY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_set_key_policy(handle, policy);
-        case PAL_CRYPTO_DESTROY_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            status = psa_destroy_key(handle);
-            return status;
-        case PAL_CRYPTO_GET_KEY_INFORMATION:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type_out = va_arg(valist, psa_key_type_t*);
-            length = (size_t *)va_arg(valist, size_t*);
-            status = psa_get_key_information(handle, key_type_out, length);
-            return status;
-        case PAL_CRYPTO_GET_KEY_POLICY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_get_key_policy(handle, policy);
-        case PAL_CRYPTO_KEY_POLICY_GET_USAGE:
-            policy = va_arg(valist, psa_key_policy_t*);
-            usage_out = va_arg(valist, psa_key_usage_t*);
-            *usage_out = psa_key_policy_get_usage(policy);
+        case PAL_CRYPTO_RESET_KEY_ATTRIBUTES:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            psa_reset_key_attributes(attributes);
             return 0;
-        case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM:
-            policy = va_arg(valist, psa_key_policy_t*);
-            alg_out = va_arg(valist, psa_algorithm_t*);
-            *alg_out = psa_key_policy_get_algorithm(policy);
+        case PAL_CRYPTO_EXPORT_PUBLIC_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            buffer = (uint8_t *)(va_arg(valist, uint8_t *));
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t *);
+            return psa_export_public_key(key_handle, buffer, size, length);
+        case PAL_CRYPTO_SET_KEY_ID:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_id = va_arg(valist, psa_key_id_t);
+            psa_set_key_id(attributes, key_id);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_LIFETIME:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_lifetime = va_arg(valist, psa_key_lifetime_t);
+            psa_set_key_lifetime(attributes, key_lifetime);
+            return 0;
+        case PAL_CRYPTO_SET_KEY_ALGORITHM:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_alg = va_arg(valist, psa_algorithm_t);
+            psa_set_key_algorithm(attributes, key_alg);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ID:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_id_out = va_arg(valist, psa_key_id_t *);
+            *key_id_out = psa_get_key_id(attributes);
             return 0;
         case PAL_CRYPTO_GET_KEY_LIFETIME:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            lifetime_out = va_arg(valist, psa_key_lifetime_t*);
-            return psa_get_key_lifetime(handle, lifetime_out);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_lifetime_out = va_arg(valist, psa_key_lifetime_t *);
+            *key_lifetime_out = psa_get_key_lifetime(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_USAGE_FLAGS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            usage_out = va_arg(valist, psa_key_usage_t *);
+            *usage_out = psa_get_key_usage_flags(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_ALGORITHM:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            key_alg_out = va_arg(valist, psa_algorithm_t *);
+            *key_alg_out = psa_get_key_algorithm(attributes);
+            return 0;
+        case PAL_CRYPTO_GET_KEY_BITS:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            length = va_arg(valist, size_t *);
+            *length = psa_get_key_bits(attributes);
+            return 0;
+        case PAL_CRYPTO_DESTROY_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_destroy_key(key_handle);
         case PAL_CRYPTO_HASH_SETUP:
             hash_operation = va_arg(valist, psa_hash_operation_t*);
             alg = va_arg(valist, psa_algorithm_t);
@@ -141,44 +169,31 @@
         case PAL_CRYPTO_HASH_ABORT:
             hash_operation = va_arg(valist, psa_hash_operation_t*);
             return psa_hash_abort(hash_operation);
-        case PAL_CRYPTO_GENERATE_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type = va_arg(valist, psa_key_type_t);
-            size     = va_arg(valist, size_t);
-            extra    = va_arg(valist, const void*);
-            extra_size  = va_arg(valist, size_t);
-            return psa_generate_key(handle, key_type, size, extra, extra_size);
-        case PAL_CRYPTO_GENERATOR_READ:
-            generator = va_arg(valist, psa_crypto_generator_t*);
+        case PAL_CRYPTO_HASH_COMPUTE:
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
             buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, int);
-            return psa_generator_read(generator, buffer, size);
-        case PAL_CRYPTO_KEY_DERIVATION:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length);
+        case PAL_CRYPTO_HASH_COMPARE:
             alg = va_arg(valist, psa_algorithm_t);
-            salt = va_arg(valist, const uint8_t *);
-            salt_length = va_arg(valist, size_t);
-            label = va_arg(valist, const uint8_t *);
-            label_length = va_arg(valist, size_t);
-            capacity = va_arg(valist, size_t);
-            return psa_key_derivation(generator, handle, alg, salt, salt_length, label,
-                                                                  label_length, capacity);
-        case PAL_CRYPTO_GET_GENERATOR_CAPACITY:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            gen_cap   = va_arg(valist, size_t*);
-            return psa_get_generator_capacity(generator, gen_cap);
-        case PAL_CRYPTO_GENERATOR_IMPORT_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            key_type = va_arg(valist, psa_key_type_t);
-            size     = va_arg(valist, size_t);
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            return psa_generator_import_key(handle, key_type, size, generator);
-        case PAL_CRYPTO_GENERATOR_ABORT:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            return psa_generator_abort(generator);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size);
+        case PAL_CRYPTO_HASH_CLONE:
+            hash_operation = va_arg(valist, psa_hash_operation_t*);
+            target_operation = va_arg(valist, psa_hash_operation_t*);
+            return psa_hash_clone(hash_operation, target_operation);
+        case PAL_CRYPTO_GENERATE_KEY:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_generate_key(attributes, handle);
         case PAL_CRYPTO_AEAD_ENCRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             nonce = va_arg(valist, const uint8_t *);
             nonce_length = va_arg(valist, size_t);
@@ -189,10 +204,10 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data,
-                    additional_data_length, plaintext, size, ciphertext, ciphertext_size, length);
+            return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data,
+            additional_data_length, plaintext, size, ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_AEAD_DECRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             nonce = va_arg(valist, const uint8_t *);
             nonce_length = va_arg(valist, size_t);
@@ -203,13 +218,74 @@
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data,
-                    additional_data_length, ciphertext, ciphertext_size, plaintext, size, length);
+            return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data,
+            additional_data_length, ciphertext, ciphertext_size, plaintext, size, length);
+        case PAL_CRYPTO_AEAD_ENCRYPT_SETUP:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_aead_encrypt_setup(aead_operation, key_handle, alg);
+        case PAL_CRYPTO_AEAD_DECRYPT_SETUP:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_aead_decrypt_setup(aead_operation, key_handle, alg);
+        case PAL_CRYPTO_AEAD_GENERATE_NONCE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t*);
+            return psa_aead_generate_nonce(aead_operation, buffer, size, length);
+        case PAL_CRYPTO_AEAD_SET_NONCE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_set_nonce(aead_operation, buffer, size);
+        case PAL_CRYPTO_AEAD_SET_LENGTHS:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            size = va_arg(valist, size_t);
+            plaintext_size = va_arg(valist, size_t);
+            return psa_aead_set_lengths(aead_operation, size, plaintext_size);
+        case PAL_CRYPTO_AEAD_UPDATE_AD:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_update_ad(aead_operation, buffer, size);
+        case PAL_CRYPTO_AEAD_UPDATE:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext,
+            ciphertext_size, length);
+        case PAL_CRYPTO_AEAD_FINISH:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            tag_length = (size_t *)va_arg(valist, size_t*);
+            return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer,
+            size, tag_length);
+        case PAL_CRYPTO_AEAD_VERIFY:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            length = (size_t *)va_arg(valist, size_t*);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size);
+        case PAL_CRYPTO_AEAD_ABORT:
+            aead_operation = va_arg(valist, psa_aead_operation_t *);
+            return psa_aead_abort(aead_operation);
         case PAL_CRYPTO_MAC_SIGN_SETUP:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_mac_sign_setup(mac_operation, handle, alg);
+            return psa_mac_sign_setup(mac_operation, key_handle, alg);
         case PAL_CRYPTO_MAC_UPDATE:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             buffer = va_arg(valist, uint8_t*);
@@ -223,9 +299,9 @@
             return psa_mac_sign_finish(mac_operation, buffer, size, length);
         case PAL_CRYPTO_MAC_VERIFY_SETUP:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_mac_verify_setup(mac_operation, handle, alg);
+            return psa_mac_verify_setup(mac_operation, key_handle, alg);
         case PAL_CRYPTO_MAC_VERIFY_FINISH:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             buffer = va_arg(valist, uint8_t*);
@@ -234,8 +310,27 @@
         case PAL_CRYPTO_MAC_ABORT:
             mac_operation = va_arg(valist, psa_mac_operation_t*);
             return psa_mac_abort(mac_operation);
+        case PAL_CRYPTO_MAC_COMPUTE:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext,
+            ciphertext_size, length);
+        case PAL_CRYPTO_MAC_VERIFY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t*);
+            plaintext_size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t*);
+            ciphertext_size = va_arg(valist, size_t);
+            return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext,
+            ciphertext_size);
         case PAL_CRYPTO_ASYMMTERIC_ENCRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
@@ -244,10 +339,10 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length,
-                    ciphertext, ciphertext_size, length);
+            return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length,
+            ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_ASYMMTERIC_DECRYPT:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             plaintext = va_arg(valist, uint8_t *);
             size = va_arg(valist, size_t);
@@ -256,18 +351,18 @@
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length,
-                    ciphertext, ciphertext_size, length);
+            return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length,
+            ciphertext, ciphertext_size, length);
         case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_cipher_encrypt_setup(cipher_operation, handle, alg);
+            return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg);
         case PAL_CRYPTO_CIPHER_DECRYPT_SETUP:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
-            return psa_cipher_decrypt_setup(cipher_operation, handle, alg);
+            return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg);
         case PAL_CRYPTO_CIPHER_GENERATE_IV:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             buffer = va_arg(valist, uint8_t*);
@@ -287,7 +382,7 @@
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
             return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size,
-                                     length);
+            length);
         case PAL_CRYPTO_CIPHER_FINISH:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             ciphertext = va_arg(valist, uint8_t *);
@@ -297,39 +392,110 @@
         case PAL_CRYPTO_CIPHER_ABORT:
             cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
             return psa_cipher_abort(cipher_operation);
+        case PAL_CRYPTO_CIPHER_ENCRYPT:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t *);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size,
+            length);
+        case PAL_CRYPTO_CIPHER_DECRYPT:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            alg = va_arg(valist, psa_algorithm_t);
+            plaintext = va_arg(valist, uint8_t *);
+            size = va_arg(valist, size_t);
+            ciphertext = va_arg(valist, uint8_t *);
+            ciphertext_size = va_arg(valist, size_t);
+            length = va_arg(valist, size_t*);
+            return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size,
+            length);
         case PAL_CRYPTO_ASYMMTERIC_SIGN:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
             length = va_arg(valist, size_t*);
-            return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size,
-                                       length);
+            return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size,
+            length);
         case PAL_CRYPTO_ASYMMTERIC_VERIFY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
             alg = va_arg(valist, psa_algorithm_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
             ciphertext = va_arg(valist, uint8_t *);
             ciphertext_size = va_arg(valist, size_t);
-            return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size);
-        case PAL_CRYPTO_KEY_AGREEMENT:
-            generator = va_arg(valist, psa_crypto_generator_t*);
-            handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext,
+            ciphertext_size);
+        case PAL_CRYPTO_RAW_KEY_AGREEMENT:
+            alg = va_arg(valist, psa_algorithm_t);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            peer = va_arg(valist, uint8_t*);
+            peer_length = va_arg(valist, size_t);
             buffer = va_arg(valist, uint8_t*);
             size = va_arg(valist, size_t);
-            alg = va_arg(valist, psa_algorithm_t);
-            return psa_key_agreement(generator, handle, buffer, size, alg);
-        case PAL_CRYPTO_ALLOCATE_KEY:
-            key_handle = (psa_key_handle_t *)va_arg(valist, int*);
-            return psa_allocate_key(key_handle);
+            length = va_arg(valist, size_t*);
+            return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length);
         case PAL_CRYPTO_COPY_KEY:
-            handle = (psa_key_handle_t)va_arg(valist, int);
-            target_handle = (psa_key_handle_t)va_arg(valist, int);
-            policy = va_arg(valist, psa_key_policy_t*);
-            return psa_copy_key(handle, target_handle, policy);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_copy_key(key_handle, attributes, handle);
+        case PAL_CRYPTO_KEY_DERIVATION_SETUP:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            alg = va_arg(valist, psa_algorithm_t);
+            return psa_key_derivation_setup(derive_operation, alg);
+        case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_input_bytes(derive_operation, step, buffer, size);
+        case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_key_derivation_input_key(derive_operation, step, key_handle);
+        case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            step = (psa_key_derivation_step_t)va_arg(valist, int);
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            peer = va_arg(valist, uint8_t*);
+            peer_length = va_arg(valist, size_t);
+            return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer,
+            peer_length);
+        case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            buffer = va_arg(valist, uint8_t*);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_output_bytes(derive_operation, buffer, size);
+        case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY:
+            attributes = va_arg(valist, psa_key_attributes_t *);
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_key_derivation_output_key(attributes, derive_operation, handle);
+        case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            size = va_arg(valist, size_t);
+            return psa_key_derivation_set_capacity(derive_operation, size);
+        case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            length = va_arg(valist, size_t *);
+            return psa_key_derivation_get_capacity(derive_operation, length);
+        case PAL_CRYPTO_KEY_DERIVATION_ABORT:
+            derive_operation = va_arg(valist, psa_key_derivation_operation_t *);
+            return psa_key_derivation_abort(derive_operation);
+        case PAL_CRYPTO_OPEN_KEY:
+            key_id = va_arg(valist, psa_key_id_t);
+            handle = (psa_key_handle_t *)va_arg(valist, int *);
+            return psa_open_key(key_id, handle);
+        case PAL_CRYPTO_CLOSE_KEY:
+            key_handle = (psa_key_handle_t)va_arg(valist, int);
+            return psa_close_key(key_handle);
         case PAL_CRYPTO_FREE:
             for (i = 0; i < PAL_KEY_SLOT_COUNT; i++)
                 psa_destroy_key(i);
diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h
index d1dabfa..486f793 100644
--- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h
+++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h
@@ -21,55 +21,82 @@
 #include "pal_common.h"
 
 enum crypto_function_code {
-    PAL_CRYPTO_INIT                     = 0x1,
-    PAL_CRYPTO_GENERATE_RANDOM          = 0x2,
-    PAL_CRYPTO_IMPORT_KEY               = 0x3,
-    PAL_CRYPTO_EXPORT_KEY               = 0x4,
-    PAL_CRYPTO_EXPORT_PUBLIC_KEY        = 0x5,
-    PAL_CRYPTO_DESTROY_KEY              = 0x6,
-    PAL_CRYPTO_GET_KEY_INFO             = 0x7,
-    PAL_CRYPTO_KEY_POLICY_INIT          = 0x8,
-    PAL_CRYPTO_KEY_POLICY_SET_USAGE     = 0x9,
-    PAL_CRYPTO_KEY_POLICY_GET_USAGE     = 0xA,
-    PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB,
-    PAL_CRYPTO_SET_KEY_POLICY           = 0xC,
-    PAL_CRYPTO_GET_KEY_POLICY           = 0xD,
-    PAL_CRYPTO_GET_KEY_INFORMATION      = 0xE,
-    PAL_CRYPTO_GET_KEY_LIFETIME         = 0xF,
-    PAL_CRYPTO_HASH_SETUP               = 0x11,
-    PAL_CRYPTO_HASH_UPDATE              = 0x12,
-    PAL_CRYPTO_HASH_VERIFY              = 0x13,
-    PAL_CRYPTO_HASH_FINISH              = 0x14,
-    PAL_CRYPTO_HASH_ABORT               = 0x15,
-    PAL_CRYPTO_GENERATE_KEY             = 0x16,
-    PAL_CRYPTO_GENERATOR_READ           = 0x17,
-    PAL_CRYPTO_KEY_DERIVATION           = 0x18,
-    PAL_CRYPTO_GET_GENERATOR_CAPACITY   = 0x19,
-    PAL_CRYPTO_GENERATOR_IMPORT_KEY     = 0x1A,
-    PAL_CRYPTO_GENERATOR_ABORT          = 0x1B,
-    PAL_CRYPTO_AEAD_ENCRYPT             = 0x1C,
-    PAL_CRYPTO_AEAD_DECRYPT             = 0x1D,
-    PAL_CRYPTO_MAC_SIGN_SETUP           = 0x1E,
-    PAL_CRYPTO_MAC_UPDATE               = 0x1F,
-    PAL_CRYPTO_MAC_SIGN_FINISH          = 0x20,
-    PAL_CRYPTO_MAC_VERIFY_SETUP         = 0x21,
-    PAL_CRYPTO_MAC_VERIFY_FINISH        = 0x22,
-    PAL_CRYPTO_MAC_ABORT                = 0x23,
-    PAL_CRYPTO_ASYMMTERIC_ENCRYPT       = 0x24,
-    PAL_CRYPTO_ASYMMTERIC_DECRYPT       = 0x25,
-    PAL_CRYPTO_CIPHER_ENCRYPT_SETUP     = 0x26,
-    PAL_CRYPTO_CIPHER_DECRYPT_SETUP     = 0x2A,
-    PAL_CRYPTO_CIPHER_GENERATE_IV       = 0x2B,
-    PAL_CRYPTO_CIPHER_SET_IV            = 0x2C,
-    PAL_CRYPTO_CIPHER_UPDATE            = 0x2D,
-    PAL_CRYPTO_CIPHER_FINISH            = 0x2E,
-    PAL_CRYPTO_CIPHER_ABORT             = 0x2F,
-    PAL_CRYPTO_ASYMMTERIC_SIGN          = 0x30,
-    PAL_CRYPTO_ASYMMTERIC_VERIFY        = 0x31,
-    PAL_CRYPTO_KEY_AGREEMENT            = 0x32,
-    PAL_CRYPTO_ALLOCATE_KEY             = 0x33,
-    PAL_CRYPTO_COPY_KEY                 = 0x34,
-    PAL_CRYPTO_FREE                     = 0xFE,
+    PAL_CRYPTO_INIT                             = 0x1,
+    PAL_CRYPTO_GENERATE_RANDOM                  = 0x2,
+    PAL_CRYPTO_IMPORT_KEY                       = 0x3,
+    PAL_CRYPTO_EXPORT_KEY                       = 0x4,
+    PAL_CRYPTO_EXPORT_PUBLIC_KEY                = 0x5,
+    PAL_CRYPTO_DESTROY_KEY                      = 0x6,
+    PAL_CRYPTO_HASH_SETUP                       = 0x7,
+    PAL_CRYPTO_HASH_UPDATE                      = 0x8,
+    PAL_CRYPTO_HASH_VERIFY                      = 0x9,
+    PAL_CRYPTO_HASH_FINISH                      = 0xA,
+    PAL_CRYPTO_HASH_ABORT                       = 0xB,
+    PAL_CRYPTO_GENERATE_KEY                     = 0xC,
+    PAL_CRYPTO_AEAD_ENCRYPT                     = 0xD,
+    PAL_CRYPTO_AEAD_DECRYPT                     = 0xE,
+    PAL_CRYPTO_MAC_SIGN_SETUP                   = 0xF,
+    PAL_CRYPTO_MAC_UPDATE                       = 0x10,
+    PAL_CRYPTO_MAC_SIGN_FINISH                  = 0x11,
+    PAL_CRYPTO_MAC_VERIFY_SETUP                 = 0x12,
+    PAL_CRYPTO_MAC_VERIFY_FINISH                = 0x13,
+    PAL_CRYPTO_MAC_ABORT                        = 0x14,
+    PAL_CRYPTO_ASYMMTERIC_ENCRYPT               = 0x15,
+    PAL_CRYPTO_ASYMMTERIC_DECRYPT               = 0x16,
+    PAL_CRYPTO_CIPHER_ENCRYPT_SETUP             = 0x17,
+    PAL_CRYPTO_CIPHER_DECRYPT_SETUP             = 0x18,
+    PAL_CRYPTO_CIPHER_GENERATE_IV               = 0x19,
+    PAL_CRYPTO_CIPHER_SET_IV                    = 0x1A,
+    PAL_CRYPTO_CIPHER_UPDATE                    = 0x1B,
+    PAL_CRYPTO_CIPHER_FINISH                    = 0x1C,
+    PAL_CRYPTO_CIPHER_ABORT                     = 0x1D,
+    PAL_CRYPTO_ASYMMTERIC_SIGN                  = 0x1E,
+    PAL_CRYPTO_ASYMMTERIC_VERIFY                = 0x1F,
+    PAL_CRYPTO_COPY_KEY                         = 0x20,
+    PAL_CRYPTO_SET_KEY_TYPE                     = 0x21,
+    PAL_CRYPTO_SET_KEY_BITS                     = 0x22,
+    PAL_CRYPTO_GET_KEY_ATTRIBUTES               = 0x23,
+    PAL_CRYPTO_GET_KEY_TYPE                     = 0x24,
+    PAL_CRYPTO_SET_KEY_USAGE_FLAGS              = 0x25,
+    PAL_CRYPTO_RESET_KEY_ATTRIBUTES             = 0x26,
+    PAL_CRYPTO_SET_KEY_ID                       = 0x27,
+    PAL_CRYPTO_SET_KEY_LIFETIME                 = 0x28,
+    PAL_CRYPTO_SET_KEY_ALGORITHM                = 0x29,
+    PAL_CRYPTO_GET_KEY_ID                       = 0x2A,
+    PAL_CRYPTO_GET_KEY_LIFETIME                 = 0x2B,
+    PAL_CRYPTO_GET_KEY_USAGE_FLAGS              = 0x2C,
+    PAL_CRYPTO_GET_KEY_ALGORITHM                = 0x2D,
+    PAL_CRYPTO_GET_KEY_BITS                     = 0x2E,
+    PAL_CRYPTO_HASH_COMPUTE                     = 0x2F,
+    PAL_CRYPTO_HASH_COMPARE                     = 0x30,
+    PAL_CRYPTO_KEY_DERIVATION_SETUP             = 0x31,
+    PAL_CRYPTO_KEY_DERIVATION_ABORT             = 0x32,
+    PAL_CRYPTO_RAW_KEY_AGREEMENT                = 0x33,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES       = 0x34,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY         = 0x35,
+    PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT     = 0x36,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES      = 0x37,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY        = 0x38,
+    PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY      = 0x39,
+    PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY      = 0x3A,
+    PAL_CRYPTO_HASH_CLONE                       = 0x3B,
+    PAL_CRYPTO_MAC_COMPUTE                      = 0x3C,
+    PAL_CRYPTO_MAC_VERIFY                       = 0x3D,
+    PAL_CRYPTO_CIPHER_ENCRYPT                   = 0x3F,
+    PAL_CRYPTO_CIPHER_DECRYPT                   = 0x40,
+    PAL_CRYPTO_OPEN_KEY                         = 0x41,
+    PAL_CRYPTO_CLOSE_KEY                        = 0x42,
+    PAL_CRYPTO_AEAD_ENCRYPT_SETUP               = 0x43,
+    PAL_CRYPTO_AEAD_DECRYPT_SETUP               = 0x44,
+    PAL_CRYPTO_AEAD_GENERATE_NONCE              = 0x45,
+    PAL_CRYPTO_AEAD_SET_NONCE                   = 0x46,
+    PAL_CRYPTO_AEAD_SET_LENGTHS                 = 0X47,
+    PAL_CRYPTO_AEAD_UPDATE_AD                   = 0x48,
+    PAL_CRYPTO_AEAD_UPDATE                      = 0x49,
+    PAL_CRYPTO_AEAD_FINISH                      = 0x4A,
+    PAL_CRYPTO_AEAD_VERIFY                      = 0x4B,
+    PAL_CRYPTO_AEAD_ABORT                       = 0x4C,
+    PAL_CRYPTO_FREE                             = 0xFE,
 };
 
 int32_t pal_crypto_function(int type, va_list valist);
diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c
index ae2bdba..38ed283 100644
--- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c
+++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c
@@ -17,24 +17,14 @@
 
 #include "pal_attestation_crypto.h"
 
-static uint32_t  public_key_registered = 0;
-
+static uint32_t         public_key_registered;
+static psa_key_handle_t public_key_handle;
 static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf,
                                                   size_t amount)
 {
     return UsefulBuf_Head(buf, amount);
 }
 
-static uint32_t check_hash_sizes(void)
-{
-    if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256))
-    {
-        return PAL_ATTEST_HASH_FAIL;
-    }
-
-    return PAL_ATTEST_SUCCESS;
-}
-
 static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve)
 {
     psa_ecc_curve_t psa_curve;
@@ -82,130 +72,94 @@
 
 int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id)
 {
-    int32_t                          cose_ret = PAL_ATTEST_SUCCESS;
-    psa_status_t                     psa_ret;
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT;
+    psa_algorithm_t      psa_alg;
 
-    cose_ret = check_hash_sizes();
-    if (cose_ret)
-    {
-        goto error;
-    }
+    /* Map the algorithm ID */
+    psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id);
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-        goto error;
-    }
+    /* Actually do the hash set up */
+    hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg);
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
-    psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id));
+    /* Copy the PSA handle back into the context */
+    hash_ctx->context.handle = psa_hash.handle;
 
-    if (psa_ret == PAL_ATTEST_SUCCESS)
-    {
-        psa_hash_ctx->status = PAL_ATTEST_SUCCESS;
-        cose_ret = PAL_ATTEST_SUCCESS;
-    }
-    else if (psa_ret == PSA_ERROR_NOT_SUPPORTED)
-    {
-        cose_ret = PAL_ATTEST_HASH_UNSUPPORTED;
-    }
-    else
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-    }
-
-error:
-    return cose_ret;
+    /* Map errors and return */
+    return (psa_status_t)hash_ctx->status;
 }
 
 void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx,
                                  struct q_useful_buf_c data_to_hash)
 {
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash;
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
+    /* Copy the PSA handle out of the generic context */
+    psa_hash.handle = (uint32_t)hash_ctx->context.handle;
+
+    if (hash_ctx->status != PSA_SUCCESS)
+        return;
+
+    if (data_to_hash.ptr == NULL) {
+        /* No data was passed in to be hashed indicating the mode of use is
+         * the computation of the size of hash. This mode is hashing is used
+         * by t_cose when it is requested to compute the size of the signed
+         * data it might compute, which is in turn used to compute the
+         * size of a would be token. When computing the size, the size
+         * like this, there is nothing to do in update()
+         */
         return;
     }
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
+    /* Actually hash the data */
+    hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len);
 
-    if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS)
-    {
-        if (data_to_hash.ptr != NULL)
-        {
-            psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation,
-                                                   data_to_hash.ptr,
-                                                   data_to_hash.len);
-        }
-        else
-        {
-            /* Intentionally do nothing, just computing the size of the token */
-        }
-    }
+    /* Copy the PSA handle back into the context. */
+    hash_ctx->context.handle = psa_hash.handle;
 }
 
 int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx,
                                     struct q_useful_buf buffer_to_hold_result,
                                     struct q_useful_buf_c *hash_result)
 {
-    uint32_t                         cose_ret = PAL_ATTEST_SUCCESS;
-    psa_status_t                     psa_ret;
-    struct pal_cose_psa_crypto_hash *psa_hash_ctx;
+    psa_hash_operation_t psa_hash;
 
-    if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash))
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-        goto error;
-    }
+    /* Copy the PSA handle out of the generic context */
+    psa_hash.handle = (uint32_t)hash_ctx->context.handle;
 
-    psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx;
+    if (hash_ctx->status != PSA_SUCCESS)
+        goto Done;
 
-    if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS)
-    {
-        psa_ret = psa_hash_finish(&psa_hash_ctx->operation,
-                                  buffer_to_hold_result.ptr,
-                                  buffer_to_hold_result.len,
-                                  &(hash_result->len));
+    /* Actually finish up the hash */
+    hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr,
+                                       buffer_to_hold_result.len, &(hash_result->len));
 
-        if (psa_ret == PAL_ATTEST_SUCCESS)
-        {
-            hash_result->ptr = buffer_to_hold_result.ptr;
-            cose_ret = 0;
-        }
-        else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL)
-        {
-            cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE;
-        }
-        else
-        {
-            cose_ret = PAL_ATTEST_HASH_FAIL;
-        }
-    }
-    else
-    {
-        cose_ret = PAL_ATTEST_HASH_FAIL;
-    }
+    hash_result->ptr = buffer_to_hold_result.ptr;
 
-error:
-    return cose_ret;
+    /* Copy the PSA handle back into the context. */
+    hash_ctx->context.handle = psa_hash.handle;
+
+Done:
+    return ((psa_status_t)hash_ctx->status);
+
 }
 
 int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash,
                       struct q_useful_buf_c *hash)
 {
-    uint32_t                      status = PAL_ATTEST_SUCCESS;
+    uint32_t                      return_value = 0;
     struct pal_cose_crypto_hash   hash_ctx;
 
-    status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY);
-    if (status)
-        return status;
+    return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY);
+    if (return_value)
+        goto Done;
 
     pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash);
-    status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash);
+    return_value = pal_cose_crypto_hash_finish(&hash_ctx,
+                                             buffer_for_hash,
+                                             hash);
 
-    return status;
+Done:
+    return return_value;
 }
 
 uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash,
@@ -223,18 +177,19 @@
     /* This builds the CBOR-format to-be-signed bytes */
     QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part);
     QCBOREncode_OpenArray(&cbor_encode_ctx);
+
     /* context */
-    QCBOREncode_AddSZString(&cbor_encode_ctx,
-                            COSE_SIG_CONTEXT_STRING_SIGNATURE1);
+    QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1);
+
     /* body_protected */
-    QCBOREncode_AddBytes(&cbor_encode_ctx,
-                         protected_headers);
-    /* sign_protected */
-    QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
+    QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers);
+
+    /* sign_protected is not used for Sign1 */
     /* external_aad */
     QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
-    /* fake payload */
-    QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C);
+
+    /* The short fake payload. */
+    QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload);
     QCBOREncode_CloseArray(&cbor_encode_ctx);
 
     /* Get the result and convert it to struct q_useful_buf_c representation */
@@ -242,7 +197,8 @@
     if (qcbor_result)
     {
         /* Mainly means that the protected_headers were too big
-         (which should never happen) */
+         * (which should never happen)
+         */
         status = PAL_ATTEST_ERR_SIGN_STRUCT;
         goto Done;
     }
@@ -257,90 +213,129 @@
     if (status)
         goto Done;
 
-    /* Hash the first part of the TBS. Take all but the last two
-     * bytes. The last two bytes are the fake payload from above. It
-     * is replaced by the real payload which is hashed next. The fake
-     * payload is needed so the array count is right. This is one of
-     * the main things that make it possible to implement with one
-     * buffer for the whole cose sign1.
+    /* This is hashing of the first part, all the CBOR
+     * except the payload.
      */
-    pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part,
-                                              tbs_first_part.len - 2));
+    pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len));
 
-    /* Hash the payload */
+    /* Hash the payload, the second part. */
     pal_cose_crypto_hash_update(&hash_ctx, payload);
 
     /* Finish the hash and set up to return it */
-    status = pal_cose_crypto_hash_finish(&hash_ctx,
-                                             buffer_for_hash,
-                                             hash);
+    status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash);
 
 Done:
     return status;
 }
 
-uint32_t pal_import_attest_key(int32_t alg)
+static uint32_t pal_import_attest_key(psa_algorithm_t key_alg)
 {
-    psa_key_type_t   attest_key_type;
-    size_t           public_key_size;
-    psa_status_t     status = PSA_SUCCESS;
+    psa_status_t     status             = PAL_ATTEST_ERROR;
+    psa_key_usage_t  usage              = PSA_KEY_USAGE_VERIFY;
+    psa_ecc_curve_t  psa_curve          = attest_map_elliptic_curve_type(P_256);
+    psa_key_type_t   attest_key_type    = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve);
+    size_t           public_key_size    = attest_key.pubx_key_size + attest_key.puby_key_size;
+
+#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2)
     psa_key_policy_t policy;
-    psa_ecc_curve_t  psa_curve;
-    psa_key_handle_t public_key_handle;
 
-    /* Mapping of COSE curve type to PSA curve types */
-    psa_curve = attest_map_elliptic_curve_type(P_256);
-    if (psa_curve == USHRT_MAX)
-        return PAL_ATTEST_ERROR;
+    if (!public_key_registered)
+    {
+        if (psa_curve == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
 
-    /* Setup the key policy for public key */
-    policy = psa_key_policy_init();
-    psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg);
+        /* Setup the key policy for public key */
+        policy = psa_key_policy_init();
+        psa_key_policy_set_usage(&policy, usage, key_alg);
 
-    status = psa_allocate_key(&public_key_handle);
-    if (status != PSA_SUCCESS)
-        return status;
+        status = psa_allocate_key(&public_key_handle);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
 
-    status = psa_set_key_policy(public_key_handle, &policy);
-    if (status != PSA_SUCCESS)
-        return status;
+        status = psa_set_key_policy(public_key_handle, &policy);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
 
-    attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve);
-
-    /* Register public key to crypto service */
-    public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size;
-
-    status = psa_import_key(public_key_handle,
+        /* Import the public key */
+        status = psa_import_key(public_key_handle,
                                 attest_key_type,
-                                (const uint8_t *)&attest_public_key,
+                               (const uint8_t *)&attest_public_key,
                                 public_key_size + 1);
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
+
+        public_key_registered = 1;
+    }
+
+#elif defined(CRYPTO_VERSION_BETA3)
+    psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
+
+    if (!public_key_registered)
+    {
+        if (psa_curve == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
+
+        /* Set the attributes for the public key */
+        psa_set_key_type(&attributes, attest_key_type);
+        psa_set_key_bits(&attributes, public_key_size + 1);
+        psa_set_key_usage_flags(&attributes, usage);
+        psa_set_key_algorithm(&attributes, key_alg);
+
+        /* Import the public key */
+        status = psa_import_key(&attributes,
+                               (const uint8_t *)&attest_public_key,
+                                public_key_size + 1,
+                                &public_key_handle);
+
+        if (status != PSA_SUCCESS)
+            return PAL_ATTEST_ERR_KEY_FAIL;
+
+        public_key_registered = 1;
+    }
+#endif
 
     return status;
 }
 
+static uint32_t pal_destroy_attest_key(void)
+{
+    psa_status_t     status;
+
+    if (!public_key_registered)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    status =  psa_destroy_key(public_key_handle);
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    public_key_registered = 0;
+
+    return PAL_ATTEST_SUCCESS;
+}
 
 uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id,
                                    struct q_useful_buf_c token_hash,
                                    struct q_useful_buf_c signature)
 {
-    uint32_t status = PAL_ATTEST_SUCCESS;
+    int32_t status = PAL_ATTEST_ERROR;
+    psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256);
 
-    if (!public_key_registered)
-    {
-        status = pal_import_attest_key(cose_algorithm_id);
-        if (status != PAL_ATTEST_SUCCESS)
-            return status;
+    /* Register the attestation public key */
+    status = pal_import_attest_key(key_alg);
+    if (status != PAL_ATTEST_SUCCESS)
+        return status;
 
-        public_key_registered = 1;
-    }
-
-/*
- * Enable the verify function when Trusted Firmare - M Supports
-
- *  Verify the signature a hash or short message using a public key.
+    /* Verify the signature */
     status = psa_asymmetric_verify(public_key_handle,
-                                    cose_algorithm_id, token_hash.ptr, token_hash.len,
-                                    signature.ptr, signature.len);
-*/
-    return status;
+                                   key_alg, token_hash.ptr, token_hash.len,
+                                   signature.ptr, signature.len);
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_SIGNATURE_FAIL;
+
+    /* Unregister the attestation public key */
+    status = pal_destroy_attest_key();
+    if (status != PSA_SUCCESS)
+        return PAL_ATTEST_ERR_KEY_FAIL;
+
+    return PAL_ATTEST_SUCCESS;
 }
diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h
index 2d63ad1..2175e65 100644
--- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h
+++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h
@@ -22,9 +22,9 @@
 
 typedef struct{
     uint8_t  *pubx_key;
-    uint32_t  pubx_key_size;
+    size_t    pubx_key_size;
     uint8_t  *puby_key;
-    uint32_t  puby_key_size;
+    size_t    puby_key_size;
 } ecc_key_t;
 
 struct ecc_public_key_t {
@@ -48,11 +48,11 @@
 };
 
 struct pal_cose_crypto_hash {
-    /* Can't put the actual size here without creating dependecy on
-     * actual hash implementation, so this is a fairly large and
-     * accommodating size.
-     */
-    uint8_t bytes[128];
+    union {
+        void    *ptr;
+        uint64_t handle;
+    } context;
+    int64_t status;
 };
 
 struct pal_cose_psa_crypto_hash {
@@ -95,7 +95,6 @@
 uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash,
                           struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers,
                           struct q_useful_buf_c payload);
-uint32_t pal_import_attest_key(int32_t alg);
 uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash,
                                    struct q_useful_buf_c signature);
 
diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c
index 178fdc9..60c7164 100644
--- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c
+++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c
@@ -29,7 +29,7 @@
     QCBORError                qcbor_result;
     QCBOREncodeContext        cbor_encode_ctx;
     int32_t                   cose_curve_id = P_256;
-    struct q_useful_buf_c       encoded_key_id;
+    struct q_useful_buf_c     encoded_key_id;
 
     /* Get the public key x and y */
     /* Encode it into a COSE_Key structure */
@@ -136,26 +136,18 @@
 }
 
 static int parse_unprotected_headers(QCBORDecodeContext *decode_context,
-                                     struct q_useful_buf_c *child,
-                                     bool *loop_back)
+                                     struct q_useful_buf_c *child)
 {
     struct items_to_get_t   item_list[3];
 
     item_list[0].label = COSE_HEADER_PARAM_KID;
-    item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL;
-    item_list[2].label = 0;
-    *loop_back = false;
+    item_list[1].label = 0;
 
     if (get_items_in_map(decode_context, item_list))
     {
         return PAL_ATTEST_ERROR;
     }
 
-    if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE)
-    {
-        *loop_back = true;
-    }
-
     if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING)
     {
         return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING;
@@ -324,11 +316,10 @@
                 token_size      : Size of the token buffer
     @return   - error status
 **/
-int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size,
-                                        uint8_t *token, uint32_t token_size)
+int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size,
+                                        uint8_t *token, size_t token_size)
 {
     int32_t             status = PAL_ATTEST_SUCCESS;
-    bool                short_circuit;
     int32_t             cose_algorithm_id;
     QCBORItem           item;
     QCBORDecodeContext  decode_context;
@@ -412,8 +403,7 @@
         return status;
 
     /* Parse the unprotected headers and check the data type and value */
-    short_circuit = false;
-    status = parse_unprotected_headers(&decode_context, &kid, &short_circuit);
+    status = parse_unprotected_headers(&decode_context, &kid);
     if (status != PAL_ATTEST_SUCCESS)
         return status;
 
diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h
index 8a0c545..e7449a0 100644
--- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h
+++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h
@@ -140,8 +140,7 @@
                                                 1 << (EAT_CBOR_ARM_RANGE_BASE                      \
                                                     - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS))
 
-#define MANDATORY_SW_COMP                      (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT      |     \
-                                                1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID)
+#define MANDATORY_SW_COMP                      (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT)
 
 #define NULL_USEFUL_BUF_C  NULLUsefulBufC
 
@@ -158,6 +157,8 @@
     PAL_ATTEST_HASH_BUFFER_SIZE,
     PAL_ATTEST_ERR_PROTECTED_HEADERS,
     PAL_ATTEST_ERR_SIGN_STRUCT,
+    PAL_ATTEST_ERR_KEY_FAIL,
+    PAL_ATTEST_ERR_SIGNATURE_FAIL,
     PAL_ATTEST_ERROR,
 };
 
@@ -166,5 +167,5 @@
     QCBORItem item;
 };
 
-int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size,
-                                        uint8_t *token, uint32_t token_size);
+int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size,
+                                        uint8_t *token, size_t token_size);
diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c
index 2d99f74..83c1ebd 100644
--- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c
+++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c
@@ -27,25 +27,27 @@
 int32_t pal_attestation_function(int type, va_list valist)
 {
     uint8_t     *challenge, *token;
-    uint32_t    challenge_size, *token_size, verify_token_size;
+    size_t       challenge_size, *token_size, verify_token_size, token_buffer_size;
 
     switch (type)
     {
         case PAL_INITIAL_ATTEST_GET_TOKEN:
             challenge = va_arg(valist, uint8_t*);
-            challenge_size = va_arg(valist, uint32_t);
+            challenge_size = va_arg(valist, size_t);
             token = va_arg(valist, uint8_t*);
-            token_size = va_arg(valist, uint32_t*);
-            return psa_initial_attest_get_token(challenge, challenge_size, token, token_size);
+            token_buffer_size = va_arg(valist, size_t);
+            token_size = va_arg(valist, size_t*);
+            return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size,
+            token_size);
         case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE:
-            challenge_size = va_arg(valist, uint32_t);
-            token_size = va_arg(valist, uint32_t*);
+            challenge_size = va_arg(valist, size_t);
+            token_size = va_arg(valist, size_t*);
             return psa_initial_attest_get_token_size(challenge_size, token_size);
         case PAL_INITIAL_ATTEST_VERIFY_TOKEN:
             challenge = va_arg(valist, uint8_t*);
-            challenge_size = va_arg(valist, uint32_t);
+            challenge_size = va_arg(valist, size_t);
             token = va_arg(valist, uint8_t*);
-            verify_token_size = va_arg(valist, uint32_t);
+            verify_token_size = va_arg(valist, size_t);
             return pal_initial_attest_verify_token(challenge, challenge_size,
                                                    token, verify_token_size);
         default:
diff --git a/api-tests/val/common/val.h b/api-tests/val/common/val.h
index 2af2858..3b1a713 100644
--- a/api-tests/val/common/val.h
+++ b/api-tests/val/common/val.h
@@ -186,10 +186,16 @@
     BOOT_EXPECTED_NS                   = 0x3,
     /* Test performs panic check for secure test run and expect reboot */
     BOOT_EXPECTED_S                    = 0x4,
-    /* Test expected reboot but it didn't happen */
+    /* Test expects reboot but it didn't happen */
     BOOT_EXPECTED_BUT_FAILED           = 0x5,
-    /* Test expect reboot for secure/non-secure test run. If reboot happens, re-enter same test */
+    /* Test expects reboot for secure/non-secure test run. If reboot happens,
+     * re-enter the same test and execute the next check function
+     */
     BOOT_EXPECTED_REENTER_TEST         = 0x6,
+    /* Test expect reboot for the test run. If reboot happens,
+     * re-enter the same test and continue executing the same check function
+     */
+    BOOT_EXPECTED_CONT_TEST_EXEC       = 0x7,
 } boot_state_t;
 
 typedef enum {
@@ -197,6 +203,9 @@
     NV_TEST_ID_PREVIOUS = 0x1,
     NV_TEST_ID_CURRENT  = 0x2,
     NV_TEST_CNT         = 0x3,
+    NV_TEST_DATA1       = 0x4,
+    NV_TEST_DATA2       = 0x5,
+    NV_TEST_DATA3       = 0x6,
 } nvmem_index_t;
 
 /* enums to report test sub-state */
@@ -231,6 +240,7 @@
   VAL_STATUS_HEAP_NOT_AVAILABLE          = 0x2A,
   VAL_STATUS_UNSUPPORTED                 = 0x2B,
   VAL_STATUS_DRIVER_FN_FAILED            = 0x2C,
+  VAL_STATUS_NO_TESTS                    = 0X2D,
   VAL_STATUS_ERROR_MAX                   = INT_MAX,
 } val_status_t;
 
diff --git a/api-tests/val/nspe/val_crypto.h b/api-tests/val/nspe/val_crypto.h
index 6fc3f56..8956d56 100644
--- a/api-tests/val/nspe/val_crypto.h
+++ b/api-tests/val/nspe/val_crypto.h
@@ -50,57 +50,86 @@
 #define PSA_KEY_USAGE_INVALID           0xFFFFFFFF
 #define PSA_HASH_ALG_INVALID            0x01FFFFFF
 #define PSA_ALG_INVALID                 0xFFFFFFFF
+#define PSA_KEY_DERIVATION_STEP_INVALID 0x0000FFFF
 
 enum crypto_function_code {
-    VAL_CRYPTO_INIT                     = 0x1,
-    VAL_CRYPTO_GENERATE_RANDOM          = 0x2,
-    VAL_CRYPTO_IMPORT_KEY               = 0x3,
-    VAL_CRYPTO_EXPORT_KEY               = 0x4,
-    VAL_CRYPTO_EXPORT_PUBLIC_KEY        = 0x5,
-    VAL_CRYPTO_DESTROY_KEY              = 0x6,
-    VAL_CRYPTO_GET_KEY_INFO             = 0x7,
-    VAL_CRYPTO_KEY_POLICY_INIT          = 0x8,
-    VAL_CRYPTO_KEY_POLICY_SET_USAGE     = 0x9,
-    VAL_CRYPTO_KEY_POLICY_GET_USAGE     = 0xA,
-    VAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB,
-    VAL_CRYPTO_SET_KEY_POLICY           = 0xC,
-    VAL_CRYPTO_GET_KEY_POLICY           = 0xD,
-    VAL_CRYPTO_GET_KEY_INFORMATION      = 0xE,
-    VAL_CRYPTO_GET_KEY_LIFETIME         = 0xF,
-    VAL_CRYPTO_HASH_SETUP               = 0x11,
-    VAL_CRYPTO_HASH_UPDATE              = 0x12,
-    VAL_CRYPTO_HASH_VERIFY              = 0x13,
-    VAL_CRYPTO_HASH_FINISH              = 0x14,
-    VAL_CRYPTO_HASH_ABORT               = 0x15,
-    VAL_CRYPTO_GENERATE_KEY             = 0x16,
-    VAL_CRYPTO_GENERATOR_READ           = 0x17,
-    VAL_CRYPTO_KEY_DERIVATION           = 0x18,
-    VAL_CRYPTO_GET_GENERATOR_CAPACITY   = 0x19,
-    VAL_CRYPTO_GENERATOR_IMPORT_KEY     = 0x1A,
-    VAL_CRYPTO_GENERATOR_ABORT          = 0x1B,
-    VAL_CRYPTO_AEAD_ENCRYPT             = 0x1C,
-    VAL_CRYPTO_AEAD_DECRYPT             = 0x1D,
-    VAL_CRYPTO_MAC_SIGN_SETUP           = 0x1E,
-    VAL_CRYPTO_MAC_UPDATE               = 0x1F,
-    VAL_CRYPTO_MAC_SIGN_FINISH          = 0x20,
-    VAL_CRYPTO_MAC_VERIFY_SETUP         = 0x21,
-    VAL_CRYPTO_MAC_VERIFY_FINISH        = 0x22,
-    VAL_CRYPTO_MAC_ABORT                = 0x23,
-    VAL_CRYPTO_ASYMMTERIC_ENCRYPT       = 0x24,
-    VAL_CRYPTO_ASYMMTERIC_DECRYPT       = 0x25,
-    VAL_CRYPTO_CIPHER_ENCRYPT_SETUP     = 0x26,
-    VAL_CRYPTO_CIPHER_DECRYPT_SETUP     = 0x2A,
-    VAL_CRYPTO_CIPHER_GENERATE_IV       = 0x2B,
-    VAL_CRYPTO_CIPHER_SET_IV            = 0x2C,
-    VAL_CRYPTO_CIPHER_UPDATE            = 0x2D,
-    VAL_CRYPTO_CIPHER_FINISH            = 0x2E,
-    VAL_CRYPTO_CIPHER_ABORT             = 0x2F,
-    VAL_CRYPTO_ASYMMTERIC_SIGN          = 0x30,
-    VAL_CRYPTO_ASYMMTERIC_VERIFY        = 0x31,
-    VAL_CRYPTO_KEY_AGREEMENT            = 0x32,
-    VAL_CRYPTO_ALLOCATE_KEY             = 0x33,
-    VAL_CRYPTO_COPY_KEY                 = 0x34,
-    VAL_CRYPTO_FREE                     = 0xFE,
+    VAL_CRYPTO_INIT                          = 0x1,
+    VAL_CRYPTO_GENERATE_RANDOM               = 0x2,
+    VAL_CRYPTO_IMPORT_KEY                    = 0x3,
+    VAL_CRYPTO_EXPORT_KEY                    = 0x4,
+    VAL_CRYPTO_EXPORT_PUBLIC_KEY             = 0x5,
+    VAL_CRYPTO_DESTROY_KEY                   = 0x6,
+    VAL_CRYPTO_HASH_SETUP                    = 0x7,
+    VAL_CRYPTO_HASH_UPDATE                   = 0x8,
+    VAL_CRYPTO_HASH_VERIFY                   = 0x9,
+    VAL_CRYPTO_HASH_FINISH                   = 0xA,
+    VAL_CRYPTO_HASH_ABORT                    = 0xB,
+    VAL_CRYPTO_GENERATE_KEY                  = 0xC,
+    VAL_CRYPTO_AEAD_ENCRYPT                  = 0xD,
+    VAL_CRYPTO_AEAD_DECRYPT                  = 0xE,
+    VAL_CRYPTO_MAC_SIGN_SETUP                = 0xF,
+    VAL_CRYPTO_MAC_UPDATE                    = 0x10,
+    VAL_CRYPTO_MAC_SIGN_FINISH               = 0x11,
+    VAL_CRYPTO_MAC_VERIFY_SETUP              = 0x12,
+    VAL_CRYPTO_MAC_VERIFY_FINISH             = 0x13,
+    VAL_CRYPTO_MAC_ABORT                     = 0x14,
+    VAL_CRYPTO_ASYMMTERIC_ENCRYPT            = 0x15,
+    VAL_CRYPTO_ASYMMTERIC_DECRYPT            = 0x16,
+    VAL_CRYPTO_CIPHER_ENCRYPT_SETUP          = 0x17,
+    VAL_CRYPTO_CIPHER_DECRYPT_SETUP          = 0x18,
+    VAL_CRYPTO_CIPHER_GENERATE_IV            = 0x19,
+    VAL_CRYPTO_CIPHER_SET_IV                 = 0x1A,
+    VAL_CRYPTO_CIPHER_UPDATE                 = 0x1B,
+    VAL_CRYPTO_CIPHER_FINISH                 = 0x1C,
+    VAL_CRYPTO_CIPHER_ABORT                  = 0x1D,
+    VAL_CRYPTO_ASYMMTERIC_SIGN               = 0x1E,
+    VAL_CRYPTO_ASYMMTERIC_VERIFY             = 0x1F,
+    VAL_CRYPTO_COPY_KEY                      = 0x20,
+    VAL_CRYPTO_SET_KEY_TYPE                  = 0x21,
+    VAL_CRYPTO_SET_KEY_BITS                  = 0x22,
+    VAL_CRYPTO_GET_KEY_ATTRIBUTES            = 0x23,
+    VAL_CRYPTO_GET_KEY_TYPE                  = 0x24,
+    VAL_CRYPTO_SET_KEY_USAGE_FLAGS           = 0x25,
+    VAL_CRYPTO_RESET_KEY_ATTRIBUTES          = 0x26,
+    VAL_CRYPTO_SET_KEY_ID                    = 0x27,
+    VAL_CRYPTO_SET_KEY_LIFETIME              = 0x28,
+    VAL_CRYPTO_SET_KEY_ALGORITHM             = 0x29,
+    VAL_CRYPTO_GET_KEY_ID                    = 0x2A,
+    VAL_CRYPTO_GET_KEY_LIFETIME              = 0x2B,
+    VAL_CRYPTO_GET_KEY_USAGE_FLAGS           = 0x2C,
+    VAL_CRYPTO_GET_KEY_ALGORITHM             = 0x2D,
+    VAL_CRYPTO_GET_KEY_BITS                  = 0x2E,
+    VAL_CRYPTO_HASH_COMPUTE                  = 0x2F,
+    VAL_CRYPTO_HASH_COMPARE                  = 0x30,
+    VAL_CRYPTO_KEY_DERIVATION_SETUP          = 0x31,
+    VAL_CRYPTO_KEY_DERIVATION_ABORT          = 0x32,
+    VAL_CRYPTO_RAW_KEY_AGREEMENT             = 0x33,
+    VAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES    = 0x34,
+    VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY      = 0x35,
+    VAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT  = 0x36,
+    VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES   = 0x37,
+    VAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY     = 0x38,
+    VAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY   = 0x39,
+    VAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY   = 0x3A,
+    VAL_CRYPTO_HASH_CLONE                    = 0x3B,
+    VAL_CRYPTO_MAC_COMPUTE                   = 0x3C,
+    VAL_CRYPTO_MAC_VERIFY                    = 0x3D,
+    VAL_CRYPTO_CIPHER_ENCRYPT                = 0x3F,
+    VAL_CRYPTO_CIPHER_DECRYPT                = 0x40,
+    VAL_CRYPTO_OPEN_KEY                      = 0x41,
+    VAL_CRYPTO_CLOSE_KEY                     = 0x42,
+    VAL_CRYPTO_AEAD_ENCRYPT_SETUP            = 0x43,
+    VAL_CRYPTO_AEAD_DECRYPT_SETUP            = 0x44,
+    VAL_CRYPTO_AEAD_GENERATE_NONCE           = 0x45,
+    VAL_CRYPTO_AEAD_SET_NONCE                = 0x46,
+    VAL_CRYPTO_AEAD_SET_LENGTHS              = 0x47,
+    VAL_CRYPTO_AEAD_UPDATE_AD                = 0x48,
+    VAL_CRYPTO_AEAD_UPDATE                   = 0x49,
+    VAL_CRYPTO_AEAD_FINISH                   = 0x4A,
+    VAL_CRYPTO_AEAD_VERIFY                   = 0x4B,
+    VAL_CRYPTO_AEAD_ABORT                    = 0x4C,
+    VAL_CRYPTO_RESET                         = 0xFD,
+    VAL_CRYPTO_FREE                          = 0xFE,
 };
 
 int32_t val_crypto_function(int type, ...);
diff --git a/api-tests/val/nspe/val_framework.c b/api-tests/val/nspe/val_framework.c
index dad52d6..19f8356 100644
--- a/api-tests/val/nspe/val_framework.c
+++ b/api-tests/val/nspe/val_framework.c
@@ -111,7 +111,8 @@
        return status;
     }
 
-    if (boot.state == BOOT_NOT_EXPECTED || boot.state == BOOT_EXPECTED_REENTER_TEST)
+    if (boot.state == BOOT_NOT_EXPECTED || boot.state == BOOT_EXPECTED_REENTER_TEST
+        || boot.state == BOOT_EXPECTED_CONT_TEST_EXEC)
     {
         while (tests_list[i] != NULL)
         {
@@ -127,10 +128,13 @@
                 continue;
             }
 
-            status = val_set_boot_flag(BOOT_NOT_EXPECTED);
-            if (VAL_ERROR(status))
+            if (boot.state != BOOT_EXPECTED_CONT_TEST_EXEC)
             {
-                return status;
+                status = val_set_boot_flag(BOOT_NOT_EXPECTED);
+                if (VAL_ERROR(status))
+                {
+                    return status;
+                }
             }
 
             if (i == 1)
@@ -556,7 +560,8 @@
                                     BOOT_EXPECTED_NS,
                                     BOOT_EXPECTED_S,
                                     BOOT_EXPECTED_BUT_FAILED,
-                                    BOOT_EXPECTED_REENTER_TEST
+                                    BOOT_EXPECTED_REENTER_TEST,
+                                    BOOT_EXPECTED_CONT_TEST_EXEC
                                     };
 
     status = val_get_boot_flag(&boot.state);
