diff --git a/api-tests/CMakeLists.txt b/api-tests/CMakeLists.txt
index 34aa48a..4588472 100644
--- a/api-tests/CMakeLists.txt
+++ b/api-tests/CMakeLists.txt
@@ -1,5 +1,5 @@
 #/** @file
-# * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+# * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
 # * SPDX-License-Identifier : Apache-2.0
 # *
 # * Licensed under the Apache License, Version 2.0 (the "License");
@@ -131,6 +131,27 @@
 list(APPEND PLATFORM_PSA_ISOLATION_LEVEL_OPTIONS 1 2 3)
 endif()
 
+# list of available spec version
+if("${SUITE}" STREQUAL "STORAGE" OR ${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE" OR ${SUITE} STREQUAL "PROTECTED_STORAGE")
+list(APPEND PSA_SPEC_VERSION
+	1.0-BETA2
+	1.0
+)
+elseif("${SUITE}" STREQUAL "CRYPTO")
+list(APPEND PSA_SPEC_VERSION
+        1.0-BETA1
+        1.0-BETA2
+        1.0-BETA3
+)
+elseif("${SUITE}" STREQUAL "INITIAL_ATTESTATION")
+list(APPEND PSA_SPEC_VERSION
+        1.0-BETA0
+        1.0.0
+        1.0.1
+        1.0.2
+)
+endif()
+
 message(STATUS "[PSA] : ----------Process input arguments- start-------------")
 
 # Check for TARGET command line argument
@@ -182,9 +203,9 @@
 set(PSA_TARGET_PAL_NSPE_LIB		pal_nspe)
 set(PSA_TARGET_VAL_NSPE_LIB		val_nspe)
 set(PSA_TARGET_TEST_COMBINE_LIB		test_combine)
-set(PSA_TARGET_DRIVER_PARTITION_LIB	driver_partition)
-set(PSA_TARGET_CLIENT_PARTITION_LIB	client_partition)
-set(PSA_TARGET_SERVER_PARTITION_LIB	server_partition)
+set(PSA_TARGET_DRIVER_PARTITION_LIB	tfm_psa_rot_partition_driver_partition)
+set(PSA_TARGET_CLIENT_PARTITION_LIB	tfm_app_rot_partition_client_partition)
+set(PSA_TARGET_SERVER_PARTITION_LIB	tfm_app_rot_partition_server_partition)
 if(${SUITE} STREQUAL "IPC")
 	set(PSA_SUITE_DIR		${PSA_ROOT_DIR}/ff/${SUITE_LOWER})
 	set(PSA_SUITE_OUT_DIR		${CMAKE_CURRENT_BINARY_DIR}/ff/${SUITE_LOWER})
@@ -203,12 +224,53 @@
 set(DATABASE_TABLE_NAME			target_database)
 set(DATABASE_TABLE_SECTION_NAME		"NOSECTION")
 set(TARGET_HEADER_GEN_INCLUDE_PATHS     "${PSA_ROOT_DIR}/val/nspe|${PSA_ROOT_DIR}/val/common|${PSA_ROOT_DIR}/platform/targets/common/nspe|${PSA_ROOT_DIR}/platform/targets/common/nspe/crypto|${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe")
-if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE")
-	set(TESTSUITE_DB			${PSA_SUITE_DIR}/its_testsuite.db)
-elseif((${SUITE} STREQUAL "PROTECTED_STORAGE") OR (${SUITE} STREQUAL "STORAGE"))
-	set(TESTSUITE_DB			${PSA_SUITE_DIR}/ps_testsuite.db)
+if(NOT DEFINED SPEC_VERSION)
+	if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE")
+		set(TESTSUITE_DB			${PSA_SUITE_DIR}/its_testsuite.db)
+	elseif((${SUITE} STREQUAL "PROTECTED_STORAGE") OR (${SUITE} STREQUAL "STORAGE"))
+		set(TESTSUITE_DB			${PSA_SUITE_DIR}/ps_testsuite.db)
+	else()
+		set(TESTSUITE_DB			${PSA_SUITE_DIR}/testsuite.db)
+	endif()
 else()
-	set(TESTSUITE_DB			${PSA_SUITE_DIR}/testsuite.db)
+	if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE")
+		if(${SPEC_VERSION} STREQUAL "1.0-BETA2")
+                	set(TESTSUITE_DB                        ${PSA_SUITE_DIR}/its_1.0-beta2_testsuite.db)
+	        endif()
+		if(${SPEC_VERSION} STREQUAL "1.0")
+                	set(TESTSUITE_DB                        ${PSA_SUITE_DIR}/its_1.0_testsuite.db)
+	        endif()
+	elseif((${SUITE} STREQUAL "PROTECTED_STORAGE") OR (${SUITE} STREQUAL "STORAGE"))
+		if(${SPEC_VERSION} STREQUAL "1.0-BETA2")
+                        set(TESTSUITE_DB                        ${PSA_SUITE_DIR}/ps_1.0-beta2_testsuite.db)
+                endif()
+                if(${SPEC_VERSION} STREQUAL "1.0")
+                        set(TESTSUITE_DB                        ${PSA_SUITE_DIR}/ps_1.0_testsuite.db)
+                endif()
+	elseif(${SUITE} STREQUAL "CRYPTO")
+                if(${SPEC_VERSION} STREQUAL "1.0-BETA1")
+                        set(TESTSUITE_DB                        ${PSA_SUITE_DIR}/1.0-beta1_testsuite.db)
+                endif()
+                if(${SPEC_VERSION} STREQUAL "1.0-BETA2")
+                        set(TESTSUITE_DB                        ${PSA_SUITE_DIR}/1.0-beta2_testsuite.db)
+                endif()
+                if(${SPEC_VERSION} STREQUAL "1.0-BETA3")
+                        set(TESTSUITE_DB                        ${PSA_SUITE_DIR}/1.0-beta3_testsuite.db)
+                endif()
+        elseif(${SUITE} STREQUAL "INITIAL_ATTESTATION")
+                if(${SPEC_VERSION} STREQUAL "1.0-BETA0")
+                        set(TESTSUITE_DB                        ${PSA_SUITE_DIR}/1.0-beta0_testsuite.db)
+                endif()
+                if(${SPEC_VERSION} STREQUAL "1.0.0")
+                        set(TESTSUITE_DB                        ${PSA_SUITE_DIR}/1.0.0_testsuite.db)
+                endif()
+                if(${SPEC_VERSION} STREQUAL "1.0.1")
+                        set(TESTSUITE_DB                        ${PSA_SUITE_DIR}/1.0.1_testsuite.db)
+                endif()
+                if(${SPEC_VERSION} STREQUAL "1.0.2")
+                        set(TESTSUITE_DB                        ${PSA_SUITE_DIR}/1.0.2_testsuite.db)
+                endif()
+        endif()
 endif()
 set(PSA_TESTLIST_FILE			${CMAKE_CURRENT_BINARY_DIR}/${SUITE_LOWER}_testlist.txt)
 set(PSA_TEST_ENTRY_LIST_INC		${CMAKE_CURRENT_BINARY_DIR}/test_entry_list.inc)
@@ -345,6 +407,16 @@
 	endif()
 endif()
 
+if(NOT DEFINED SPEC_VERSION)
+	message(STATUS "[PSA] : Default spec version")
+else()
+	if(NOT ${SPEC_VERSION} IN_LIST PSA_SPEC_VERSION)
+                message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DSPEC_VERSION=${SPEC_VERSION}, supported values are : ${PSA_SPEC_VERSION} for ${SUITE}")
+	else()
+		message(STATUS "[PSA] : Testing ${SUITE} for spec version ${SPEC_VERSION}")
+	endif()
+endif()
+
 message(STATUS "[PSA] : ----------Process input arguments- complete-------------")
 
 
@@ -443,10 +515,12 @@
 
 # Check for supported toolchain/s
 if(${TOOLCHAIN} IN_LIST PSA_TOOLCHAIN_SUPPORT)
-        if(CROSS_COMPILE AND NOT (${TOOLCHAIN} IN_LIST CROSS_COMPILE_TOOLCHAIN_SUPPORT))
+	if (DEFINED CROSS_COMPILE)
+	    if(${CROSS_COMPILE} AND NOT (${TOOLCHAIN} IN_LIST CROSS_COMPILE_TOOLCHAIN_SUPPORT))
                 message(FATAL_ERROR "[PSA] : Error: CROSS_COMPILE not supported for this toolchain, supported toolchain are : ${CROSS_COMPILE_TOOLCHAIN_SUPPORT}")
-        endif()
-        include(${PSA_ROOT_DIR}/tools/cmake/compiler/${TOOLCHAIN}.cmake)
+            endif()
+	endif()
+    include(${PSA_ROOT_DIR}/tools/cmake/compiler/${TOOLCHAIN}.cmake)
 else()
         message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DTOOLCHAIN=${TOOLCHAIN}, supported toolchain are : ${PSA_TOOLCHAIN_SUPPORT}")
 endif()
diff --git a/api-tests/dev_apis/README.md b/api-tests/dev_apis/README.md
index e554d7d..180295d 100644
--- a/api-tests/dev_apis/README.md
+++ b/api-tests/dev_apis/README.md
@@ -71,6 +71,9 @@
 -   -DWATCHDOG_AVAILABLE=<0|1>: Test harness may require to access watchdog timer to recover system hang. 0 means skip watchdog programming in the test suite and 1 means program the watchdog. Default is 1. Note, watchdog must be available for the tests which check the PSA API behaviour on the system reset.
 -   -DSUITE_TEST_RANGE="<test_start_number>;<test_end_number>" is to select range of tests for build. All tests under -DSUITE are considered by default if not specified.
 -   -DTFM_PROFILE=<profile_small/profile_medium> is to work with TFM defined Pofile Small/Medium definitions. Supported values are profile_small and profile_medium. Unless specified Default Profile is used.
+-   -DSPEC_VERSION=<spec_version> is test suite specification version. Which will build for given specified spec_version. Supported values for CRYPTO test suite are 1.0-BETA1, 1.0-BETA2, 1.0-BETA3 , for INITIAL_ATTESATATION test suite are 1.0-BETA0, 1.0.0, 1.0.1, 1.0.2, for STORAGE, INTERNAL_TRUSTED_STORAGE, PROTECTED_STORAGE test suite are 1.0-BETA2, 1.0 . Default is empty. <br/>
+     If -DSPEC_VERSION option is not given it will build for latest version of testsuite.
+     For every spec version corresponds test list will be in spec_version_testsuite.db file in api-tests/dev_apis/test_suite_name/ folder.
 -   -DPSA_INCLUDE_PATHS="<include_path1>;<include_path2>;...;<include_pathn>" is an additional directory to be included into the compiler search path.You must provide Functional APIs header files implementation to the test suite build system using this option. For example, to compile Crypto tests, the include path must point to the path where **psa/crypto.h** is located in your build system. Bydefault, PSA_INCLUDE_PATHS accepts absolute path. However, relative path can be provided using below format:<br />
 ```
     -DPSA_INCLUDE_PATHS=`readlink -f <relative_include_path>`
@@ -123,4 +126,4 @@
 
 --------------
 
-*Copyright (c) 2018-2020, Arm Limited and Contributors. All rights reserved.*
+*Copyright (c) 2018-2021, Arm Limited and Contributors. All rights reserved.*
diff --git a/api-tests/dev_apis/crypto/1.0-beta1_testsuite.db b/api-tests/dev_apis/crypto/1.0-beta1_testsuite.db
new file mode 100644
index 0000000..ebaae99
--- /dev/null
+++ b/api-tests/dev_apis/crypto/1.0-beta1_testsuite.db
@@ -0,0 +1,85 @@
+#/** @file
+# * Copyright (c) 2021, 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 of tests to be compiled and run as part of crypto suite
+
+(START)
+
+test_c001
+test_c002
+test_c003
+test_c004
+test_c005
+test_c006
+test_c007
+test_c008
+test_c009
+test_c010
+test_c011
+test_c012
+test_c013
+test_c014
+test_c015
+test_c016
+test_c017
+test_c018
+test_c019
+test_c020
+test_c021
+test_c022
+test_c023
+test_c024
+test_c025
+test_c026
+test_c027
+test_c028
+test_c029
+test_c030
+test_c031
+test_c032
+test_c033
+test_c034
+test_c035
+test_c036
+test_c037
+test_c038
+test_c039
+test_c040
+test_c041
+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/crypto/1.0-beta2_testsuite.db b/api-tests/dev_apis/crypto/1.0-beta2_testsuite.db
new file mode 100644
index 0000000..ebaae99
--- /dev/null
+++ b/api-tests/dev_apis/crypto/1.0-beta2_testsuite.db
@@ -0,0 +1,85 @@
+#/** @file
+# * Copyright (c) 2021, 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 of tests to be compiled and run as part of crypto suite
+
+(START)
+
+test_c001
+test_c002
+test_c003
+test_c004
+test_c005
+test_c006
+test_c007
+test_c008
+test_c009
+test_c010
+test_c011
+test_c012
+test_c013
+test_c014
+test_c015
+test_c016
+test_c017
+test_c018
+test_c019
+test_c020
+test_c021
+test_c022
+test_c023
+test_c024
+test_c025
+test_c026
+test_c027
+test_c028
+test_c029
+test_c030
+test_c031
+test_c032
+test_c033
+test_c034
+test_c035
+test_c036
+test_c037
+test_c038
+test_c039
+test_c040
+test_c041
+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/crypto/1.0-beta3_testsuite.db b/api-tests/dev_apis/crypto/1.0-beta3_testsuite.db
new file mode 100644
index 0000000..ebaae99
--- /dev/null
+++ b/api-tests/dev_apis/crypto/1.0-beta3_testsuite.db
@@ -0,0 +1,85 @@
+#/** @file
+# * Copyright (c) 2021, 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 of tests to be compiled and run as part of crypto suite
+
+(START)
+
+test_c001
+test_c002
+test_c003
+test_c004
+test_c005
+test_c006
+test_c007
+test_c008
+test_c009
+test_c010
+test_c011
+test_c012
+test_c013
+test_c014
+test_c015
+test_c016
+test_c017
+test_c018
+test_c019
+test_c020
+test_c021
+test_c022
+test_c023
+test_c024
+test_c025
+test_c026
+test_c027
+test_c028
+test_c029
+test_c030
+test_c031
+test_c032
+test_c033
+test_c034
+test_c035
+test_c036
+test_c037
+test_c038
+test_c039
+test_c040
+test_c041
+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/crypto/common/test_crypto_common.c b/api-tests/dev_apis/crypto/common/test_crypto_common.c
index 579f3ac..a97b7df 100644
--- a/api-tests/dev_apis/crypto/common/test_crypto_common.c
+++ b/api-tests/dev_apis/crypto/common/test_crypto_common.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2020-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -24,6 +24,10 @@
  0x01, 0x03, 0x0E, 0x0F, 0x1F, 0x3F, 0xEF, 0XFF,
  0x02, 0x0A, 0x2A, 0xAA, 0x04, 0x24, 0x88, 0x03,
  0x33, 0x77, 0xFF, 0x80, 0xC0, 0xE0, 0xF0, 0xF8,
+ 0xFC, 0xFE, 0xFF, 0xC0, 0xF0, 0xFC, 0xE0, 0xEE,
+ 0x01, 0x03, 0x0E, 0x0F, 0x1F, 0x3F, 0xEF, 0XFF,
+ 0x02, 0x0A, 0x2A, 0xAA, 0x04, 0x24, 0x88, 0x03,
+ 0x33, 0x77, 0xFF, 0x80, 0xC0, 0xE0, 0xF0, 0xF8,
  0xFC, 0xFE, 0xFF, 0xC0, 0xF0, 0xFC, 0xE0, 0xEE};
 
 const uint8_t rsa_128_key_pair[] = {
@@ -421,6 +425,53 @@
  0xD6, 0xFE, 0x52, 0x4C, 0xD3, 0x78, 0xEB, 0xE2, 0xC2, 0xAF, 0x80, 0xF6, 0xAF, 0xFC, 0x0F, 0xB0,
  0x4B, 0xEA, 0x36, 0x0C, 0x92, 0xE5, 0x64, 0x4A, 0x60, 0x41, 0xB2, 0xF4, 0x53, 0x49, 0xD4, 0x22};
 
+const uint8_t signature_4[] = {
+ 0x42, 0x4A, 0xC6, 0x17, 0x69, 0x09, 0x5F, 0xD5, 0x31, 0x89, 0xF8, 0x33, 0x6E, 0x03, 0x66, 0x1B,
+ 0x24, 0x3F, 0xE8, 0xBA, 0x84, 0x61, 0x07, 0x3F, 0xF1, 0x2E, 0x6C, 0x53, 0xF2, 0x3F, 0x0F, 0x14,
+ 0xFC, 0xD6, 0x38, 0x93, 0x01, 0x8A, 0x8A, 0x96, 0xF6, 0x92, 0xE7, 0x8D, 0x25, 0x6C, 0xD5, 0x4D,
+ 0xD1, 0xCC, 0x86, 0xBD, 0x1D, 0xD4, 0xFC, 0xB2, 0xC3, 0x39, 0x7E, 0x9C, 0x4C, 0xDC, 0x99, 0x18,
+ 0x5C, 0xCE, 0x7D, 0xF7, 0x1A, 0xE3, 0x31, 0x95, 0xE1, 0x50, 0xFF, 0x13, 0xB1, 0x68, 0x9B, 0x0B,
+ 0x4A, 0x5C, 0x1F, 0x13, 0x2A, 0x29, 0x53, 0x86, 0x5E, 0xE4, 0x5F, 0xC6, 0x1C, 0xD4, 0x22, 0xF7,
+ 0x1F, 0x25, 0x4A, 0xDA, 0x31, 0xB9, 0xFF, 0x70, 0x35, 0x08, 0x3C, 0x40, 0x5B, 0xED, 0x10, 0xAC,
+ 0x2A, 0x85, 0xBE, 0x64, 0x33, 0xEC, 0xC5, 0x3C, 0x2D, 0x6E, 0xEA, 0xE5, 0x18, 0xD0, 0xB7, 0x6A};
+
+const uint8_t signature_4_invalid[] = {
+ 0x42, 0x4A, 0xC6, 0x17, 0x69, 0x09, 0x5F, 0xD5, 0x31, 0x89, 0xF8, 0x33, 0x6E, 0x03, 0x66, 0x1B,
+ 0x24, 0x3F, 0xE8, 0xBA, 0x84, 0x63, 0x07, 0x3F, 0xF1, 0x2E, 0x6C, 0x53, 0xF2, 0x3F, 0x0F, 0x14,
+ 0xFC, 0xD6, 0x38, 0x93, 0x01, 0x8A, 0x8A, 0x96, 0xF6, 0x92, 0xE7, 0x8D, 0x25, 0x6C, 0xD5, 0x4D,
+ 0xD1, 0xCC, 0x86, 0xBD, 0x1D, 0xD4, 0xFC, 0xB2, 0xC3, 0x39, 0x7E, 0x9C, 0x4C, 0xDC, 0x99, 0x18,
+ 0x5C, 0xCE, 0x7D, 0xF7, 0x1A, 0xE3, 0x31, 0x95, 0xE1, 0x50, 0xFF, 0x13, 0xB1, 0x68, 0x9B, 0x0B,
+ 0x4A, 0x5C, 0x1F, 0x13, 0x2A, 0x29, 0x53, 0x86, 0x5E, 0xE4, 0x5F, 0xC6, 0x1C, 0xD4, 0x22, 0xF7,
+ 0x1F, 0x25, 0x4A, 0xDA, 0x31, 0xB9, 0xFF, 0x70, 0x35, 0x08, 0x3C, 0x40, 0x5B, 0xED, 0x10, 0xAC,
+ 0x2A, 0x85, 0xBE, 0x64, 0x33, 0xEC, 0xC5, 0x3C, 0x2D, 0x6E, 0xEA, 0xE5, 0x18, 0xD0, 0xB7, 0x6A};
+
+const uint8_t signature_5[] = {
+ 0xA8, 0x86, 0x15, 0x1A, 0x0A, 0xB6, 0xCF, 0x29, 0x9C, 0xE7, 0x11, 0x67, 0x91, 0xF3, 0x87, 0x6D,
+ 0x40, 0x88, 0x37, 0x14, 0x9B, 0xC0, 0x1F, 0x75, 0x77, 0xD3, 0xA7, 0x3A, 0xCF, 0x9C, 0xBE, 0x30,
+ 0xC2, 0xE2, 0x19, 0xF8, 0xAD, 0xF8, 0x6F, 0x7D, 0xC6, 0x4C, 0xA8, 0x03, 0xBC, 0x18, 0x5B, 0x4E,
+ 0x60, 0xD0, 0xB9, 0xFC, 0x23, 0xB0, 0x20, 0x7A, 0x84, 0x83, 0x38, 0xB8, 0xA1, 0x15, 0x81, 0xA1};
+
+const uint8_t hmac_sha224[] = {
+ 0x2D, 0x39, 0x37, 0x90, 0xE1, 0xDA, 0x9A, 0x86, 0xEC, 0x0D, 0x1B, 0x17, 0x59, 0xC1, 0x23, 0xF9,
+ 0xBA, 0xA4, 0x38, 0xF9, 0x11, 0xA7, 0x3F, 0xEA, 0x1E, 0x9E, 0xA1, 0x7D};
+
+const uint8_t hmac_sha224_invalid[] = {
+ 0x2D, 0x39, 0x37, 0x90, 0xE1, 0xDA, 0x9A, 0x86, 0xEC, 0x0D, 0x1B, 0x17, 0x59, 0xC1, 0x23, 0xF9,
+ 0xBA, 0xA4, 0x38, 0xF9, 0x11, 0xA5, 0x3F, 0xEA, 0x1E, 0x9E, 0xA1, 0x7D};
+
+const uint8_t hmac_sha256[] = {
+ 0xFA, 0xEB, 0x2B, 0x64, 0x77, 0x79, 0xEE, 0x1B, 0x5C, 0x97, 0x0B, 0xBC, 0x28, 0x0E, 0xE5, 0x1D,
+ 0xE9, 0x79, 0x22, 0x9D, 0xE8, 0x4A, 0x94, 0xA1, 0xA4, 0x2C, 0x84, 0x76, 0xD1, 0xBF, 0xE9, 0x3F};
+
+const uint8_t hmac_sha512[] = {
+ 0x46, 0x31, 0x33, 0x41, 0x39, 0xCB, 0x97, 0x3A, 0xCD, 0x7C, 0xF2, 0x2C, 0xA0, 0x89, 0x1B, 0x55,
+ 0x0F, 0x58, 0x76, 0x25, 0x9E, 0x72, 0x7C, 0x91, 0xF7, 0xEC, 0x78, 0x75, 0x2A, 0xF9, 0x52, 0x13,
+ 0x91, 0xD1, 0x35, 0x52, 0x7F, 0xF2, 0xC3, 0x67, 0x43, 0x99, 0xDC, 0x20, 0x2A, 0xC4, 0x77, 0xB4,
+ 0x4C, 0x51, 0xD0, 0xFE, 0x1D, 0xB6, 0xC8, 0x28, 0x34, 0x02, 0x6A, 0x6D, 0x8D, 0xD3, 0x20, 0xDB};
+
+const uint8_t cmac_aes_128[] = {
+};
+
 /* test inputs */
 const uint8_t hash_input                               = 0xbd;
 const uint8_t input_bytes_data[INPUT_BYTES_DATA_LEN]   = "abcdefghijklmnop";
diff --git a/api-tests/dev_apis/crypto/common/test_crypto_common.h b/api-tests/dev_apis/crypto/common/test_crypto_common.h
index 6f12ccc..c213b7d 100644
--- a/api-tests/dev_apis/crypto/common/test_crypto_common.h
+++ b/api-tests/dev_apis/crypto/common/test_crypto_common.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2020-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -101,6 +101,15 @@
 extern const uint8_t signature_2[];
 extern const uint8_t signature_2_invalid[];
 extern const uint8_t signature_3[];
+extern const uint8_t signature_4[];
+extern const uint8_t signature_4_invalid[];
+extern const uint8_t signature_5[];
+
+extern const uint8_t hmac_sha224[];
+extern const uint8_t hmac_sha224_invalid[];
+extern const uint8_t hmac_sha256[];
+extern const uint8_t hmac_sha512[];
+extern const uint8_t cmac_aes_128[];
 
 extern uint8_t expected_output[BUFFER_SIZE];
 
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 e784417..103d6ee 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c001.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 1)
-#define TEST_DESC "Testing psa_crypto_init API: Basic\n"
+#define TEST_DESC "Testing crypto key management APIs | UT:  psa_crypto_init\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 83e1740..ec0a565 100644
--- a/api-tests/dev_apis/crypto/test_c002/test_c002.c
+++ b/api-tests/dev_apis/crypto/test_c002/test_c002.c
@@ -34,7 +34,7 @@
     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;
-    psa_key_handle_t      key_handle;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -63,7 +63,7 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                 check1[i].data_length, &key_handle);
+                 check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3));
 
         /* If failure is expected, continue with the next data set */
@@ -71,7 +71,7 @@
             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,
+        status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, key,
                  &get_attributes);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
@@ -84,14 +84,14 @@
         /* Reset the key attributes and check if psa_import_key fails */
         val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
 
-        val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                 check1[i].data_length, &key_handle);
+                 check1[i].data_length, &key);
         TEST_ASSERT_NOT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
-        TEST_ASSERT_EQUAL(key_handle, 0, TEST_CHECKPOINT_NUM(9));
+        TEST_ASSERT_EQUAL(key, 0, TEST_CHECKPOINT_NUM(9));
     }
 
     return VAL_STATUS_SUCCESS;
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 b7a1fb1..0c9830f 100644
--- a/api-tests/dev_apis/crypto/test_c002/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c002/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,6 +28,7 @@
 } test_data;
 
 static const test_data check1[] = {
+#ifdef ARCH_TEST_CIPHER_MODE_CTR
 #ifdef ARCH_TEST_AES_128
 {
     .test_desc       = "Test psa_import_key 16 bytes AES\n",
@@ -64,6 +65,7 @@
     .expected_status = PSA_SUCCESS
 },
 #endif
+#endif
 
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
 #ifdef ARCH_TEST_RSA_2048
@@ -131,7 +133,7 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {
     .test_desc       = "Test psa_import_key with EC Public key\n",
-    .type            = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+    .type            = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
     .data            = ec_key_data,
     .data_length     = 65,
     .bits            = 256,
@@ -143,7 +145,7 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 {
     .test_desc       = "Test psa_import_key with EC keypair\n",
-    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
+    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data            = ec_key_pair,
     .data_length     = 28,
     .bits            = 224,
@@ -153,6 +155,7 @@
 #endif
 #endif
 
+#ifdef ARCH_TEST_CIPHER_MODE_CTR
 #ifdef ARCH_TEST_AES
 {
     .test_desc       = "Test psa_import_key 16 bytes AES with invalid bits\n",
@@ -194,4 +197,6 @@
     .usage_flags     = PSA_KEY_USAGE_EXPORT,
     .expected_status = PSA_ERROR_NOT_SUPPORTED
 },
+
+#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 3dda5ab..c69a206 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c002.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 2)
-#define TEST_DESC "Testing crypto key management APIs\n"
+#define TEST_DESC "Testing crypto key management APIs | UT: psa_import_key\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 37fb89a..8c2ec47 100644
--- a/api-tests/dev_apis/crypto/test_c003/test_c003.c
+++ b/api-tests/dev_apis/crypto/test_c003/test_c003.c
@@ -32,7 +32,7 @@
     size_t                expected_data_length;
     int                   num_checks = sizeof(check1)/sizeof(check1[0]);
     psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t      key_handle;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -62,13 +62,18 @@
         val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage_flags);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                 check1[i].data_length, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes, check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Export a key in binary format */
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, key_handle, check1[i].expected_data,
-                                      check1[i].data_size, &expected_data_length);
+        status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY,
+                                      key,
+                                      check1[i].expected_data,
+                                      check1[i].data_size,
+                                      &expected_data_length);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         /* If failure is expected, continue with the next data set */
@@ -83,11 +88,14 @@
                                                      TEST_CHECKPOINT_NUM(6));
 
         /* Destroy the key handle and check if export key fails */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, key_handle, check1[i].expected_data,
-                                      check1[i].data_size, &expected_data_length);
+        status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY,
+                                      key,
+                                      check1[i].expected_data,
+                                      check1[i].data_size,
+                                      &expected_data_length);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(8));
     }
 
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 32241a7..d6314c8 100644
--- a/api-tests/dev_apis/crypto/test_c003/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c003/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -31,6 +31,7 @@
 } test_data;
 
 static const test_data check1[] = {
+#ifdef ARCH_TEST_CIPHER_MODE_CTR
 #ifdef ARCH_TEST_AES_128
 {
     .test_desc            = "Test psa_export_key 16 Byte AES\n",
@@ -75,6 +76,7 @@
     .expected_status      = PSA_SUCCESS
 },
 #endif
+#endif
 
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
 #ifdef ARCH_TEST_RSA_2048
@@ -106,6 +108,7 @@
 #endif
 #endif
 
+#ifdef ARCH_TEST_CIPHER_MODE_CTR
 #ifdef ARCH_TEST_DES_1KEY
 {
     .test_desc            = "Test psa_export_key with DES 64 bit key\n",
@@ -150,12 +153,13 @@
     .expected_status      = PSA_SUCCESS
 },
 #endif
+#endif
 
 #ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {
     .test_desc            = "Test psa_export_key with EC Public key\n",
-    .type                 = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+    .type                 = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
     .data                 = ec_key_data,
     .data_length          = 65,
     .bits                 = 256,
@@ -170,7 +174,7 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 {
     .test_desc            = "Test psa_export_key with EC keypair\n",
-    .type                 = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
+    .type                 = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data                 = ec_key_pair,
     .data_length          = 28,
     .bits                 = BYTES_TO_BITS(28),
@@ -183,19 +187,22 @@
 #endif
 #endif
 
+#ifdef ARCH_TEST_CIPHER_MODE_CTR
 #ifdef ARCH_TEST_AES_128
+#ifdef CRYPTO_1_0
 {
     .test_desc            = "Test psa_export_key with key policy verify\n",
     .type                 = PSA_KEY_TYPE_AES,
     .data                 = key_data,
     .data_length          = AES_16B_KEY_SIZE,
     .bits                 = BYTES_TO_BITS(AES_16B_KEY_SIZE),
-    .usage_flags          = PSA_KEY_USAGE_VERIFY,
+    .usage_flags          = PSA_KEY_USAGE_VERIFY_MESSAGE,
     .expected_data        = expected_output,
     .data_size            = BUFFER_SIZE,
     .expected_data_length = AES_16B_KEY_SIZE,
     .expected_status      = PSA_ERROR_NOT_PERMITTED
 },
+#endif
 
 {
     .test_desc            = "Test psa_export_key with less buffer size\n",
@@ -210,4 +217,5 @@
     .expected_status      = PSA_ERROR_BUFFER_TOO_SMALL
 },
 #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 0b1ed9c..432239c 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c003.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 3)
-#define TEST_DESC "Testing crypto key management APIs\n"
+#define TEST_DESC "Testing crypto key management APIs | UT: psa_export_key\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 dc821bf..e4eea02 100644
--- a/api-tests/dev_apis/crypto/test_c004/test_c004.c
+++ b/api-tests/dev_apis/crypto/test_c004/test_c004.c
@@ -33,7 +33,7 @@
     const uint8_t        *data;
     int                   num_checks = sizeof(check1)/sizeof(check1[0]);
     psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t      key_handle;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -58,18 +58,23 @@
         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].type);
-        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].bits);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,        &attributes, check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS,        &attributes, check1[i].bits);
         val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage_flags);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                 check1[i].data_length, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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, key_handle,
-                                      check1[i].expected_data, check1[i].data_size,
+        status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY,
+                                      key,
+                                      check1[i].expected_data,
+                                      check1[i].data_size,
                                       &expected_data_length);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
@@ -91,11 +96,13 @@
                            TEST_CHECKPOINT_NUM(6));
 
         /* Destroy the key handle and check if export key fails */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY, key_handle,
-                                      check1[i].expected_data, check1[i].data_size,
+        status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY,
+                                      key,
+                                      check1[i].expected_data,
+                                      check1[i].data_size,
                                       &expected_data_length);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(9));
     }
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 51ab1d1..9c27436 100644
--- a/api-tests/dev_apis/crypto/test_c004/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c004/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -63,6 +63,7 @@
 
 static const test_data check1[] = {
 
+#ifdef ARCH_TEST_CIPHER_MODE_CTR
 #ifdef ARCH_TEST_AES_128
 {
     .test_desc            = "Test psa_export_public_key 16 Byte AES\n",
@@ -107,6 +108,7 @@
     .expected_status      = PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
+#endif
 
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
 #ifdef ARCH_TEST_RSA_2048
@@ -138,6 +140,7 @@
 #endif
 #endif
 
+#ifdef ARCH_TEST_CIPHER_MODE_CTR
 #ifdef ARCH_TEST_DES_1KEY
 {
     .test_desc            = "Test psa_export_public_key with DES 64 bit key\n",
@@ -182,12 +185,13 @@
     .expected_status      = PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
+#endif
 
 #ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {
     .test_desc            = "Test psa_export_public_key with EC Public key\n",
-    .type                 = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+    .type                 = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
     .data                 = ec_key_data,
     .data_length          = 65,
     .bits                 = 256,
@@ -202,7 +206,7 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 {
     .test_desc            = "Test psa_export_public_key with EC keypair\n",
-    .type                 = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
+    .type                 = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data                 = ec_key_pair,
     .data_length          = 28,
     .bits                 = BYTES_TO_BITS(28),
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 f4638b9..33c7de9 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c004.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 4)
-#define TEST_DESC "Testing crypto key management APIs\n"
+#define TEST_DESC "Testing crypto key management APIs | UT: psa_export_public_key\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 ef405ee..9ca9182 100644
--- a/api-tests/dev_apis/crypto/test_c005/test_c005.c
+++ b/api-tests/dev_apis/crypto/test_c005/test_c005.c
@@ -26,6 +26,8 @@
     NULL,
 };
 
+extern uint32_t g_test_count;
+static int32_t  valid_test_input_index = -1;
 int32_t psa_destroy_key_test(caller_security_t caller __UNUSED)
 {
     int32_t               i, status;
@@ -38,7 +40,7 @@
     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;
-    psa_key_handle_t      key_handle;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -53,7 +55,7 @@
     /* Set the key data buffer to the input base on algorithm */
     for (i = 0; i < num_checks; i++)
     {
-        val->print(PRINT_TEST, "[Check %d] ", 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 */
@@ -61,81 +63,122 @@
         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,
-                             &set_attributes,
-                             check1[i].type);
-        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS,
-                             &set_attributes,
-                             check1[i].bits);
-        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
-                             &set_attributes,
-                             check1[i].usage_flags);
-        val->crypto_function(VAL_CRYPTO_SET_KEY_ID,
-                             &set_attributes,
-                             check1[i].id);
-        val->crypto_function(VAL_CRYPTO_SET_KEY_LIFETIME,
-                             &set_attributes,
-                             check1[i].lifetime);
-        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
-                             &set_attributes,
-                             check1[i].alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,        &set_attributes, check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_BITS,        &set_attributes, check1[i].bits);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &set_attributes,
+                                                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ID, &set_attributes, check1[i].id);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_LIFETIME,    &set_attributes, check1[i].lifetime);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,   &set_attributes, check1[i].alg);
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
                                       &set_attributes,
                                       check1[i].data,
                                       check1[i].data_length,
-                                      &key_handle);
+                                      &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Destroy the key handle */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
-                                      key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         /* Getting the attributes of the destroyed key should return error */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES,
-                                      key_handle,
-                                      &attributes);
+        status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, key, &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_type);
+        val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_type);
         TEST_ASSERT_EQUAL(get_type, 0, TEST_CHECKPOINT_NUM(6));
 
-        val->crypto_function(VAL_CRYPTO_GET_KEY_ID,
-                             &attributes,
-                             &get_id);
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ID, &attributes, &get_id);
         TEST_ASSERT_EQUAL(get_id, 0, TEST_CHECKPOINT_NUM(7));
 
-        val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME,
-                             &attributes,
-                             &get_lifetime);
+        val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, &attributes, &get_lifetime);
         TEST_ASSERT_EQUAL(get_lifetime, 0, TEST_CHECKPOINT_NUM(8));
 
-        val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS,
-                             &attributes,
-                             &get_usage_flags);
+        val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_usage_flags);
         TEST_ASSERT_EQUAL(get_usage_flags, 0, TEST_CHECKPOINT_NUM(9));
 
-        val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM,
-                             &attributes,
-                             &get_alg);
+        val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_alg);
         TEST_ASSERT_EQUAL(get_alg, 0, TEST_CHECKPOINT_NUM(10));
 
-        val->crypto_function(VAL_CRYPTO_GET_KEY_BITS,
-                             &attributes,
-                             &get_bits);
+        val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &attributes, &get_bits);
         TEST_ASSERT_EQUAL(get_bits,  0, TEST_CHECKPOINT_NUM(11));
 
         /* Destroying an empty key handle should return error */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
-                                      key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(12));
 
+        if (valid_test_input_index < 0)
+            valid_test_input_index = i;
     }
 
     return VAL_STATUS_SUCCESS;
 }
+
+int32_t psa_destroy_key_test_invalid_key_identifier(caller_security_t caller __UNUSED)
+{
+    int32_t               status;
+    psa_key_attributes_t  set_attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_key_id_t          key;
+
+    if (valid_test_input_index < 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));
+
+    val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+    val->print(PRINT_TEST, "Test psa_destroy_key with invalid key identifier\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));
+
+    /* Setup the attributes for the key */
+    val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                         &set_attributes,
+                         check1[valid_test_input_index].type);
+    val->crypto_function(VAL_CRYPTO_SET_KEY_BITS,
+                         &set_attributes,
+                         check1[valid_test_input_index].bits);
+    val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                         &set_attributes,
+                         check1[valid_test_input_index].usage_flags);
+    val->crypto_function(VAL_CRYPTO_SET_KEY_ID,
+                         &set_attributes,
+                         check1[valid_test_input_index].id);
+    val->crypto_function(VAL_CRYPTO_SET_KEY_LIFETIME,
+                         &set_attributes,
+                         check1[valid_test_input_index].lifetime);
+    val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                         &set_attributes,
+                         check1[valid_test_input_index].alg);
+
+    /* Import the key data into the key slot */
+    status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                  &set_attributes,
+                                  check1[valid_test_input_index].data,
+                                  check1[valid_test_input_index].data_length,
+                                  &key);
+    TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+    /* Destroy the key handle - with PSA_KEY_ID_NULL */
+    status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, PSA_KEY_ID_NULL);
+    TEST_ASSERT_EQUAL(status, check1[valid_test_input_index].expected_status,
+                      TEST_CHECKPOINT_NUM(4));
+
+    /* Destroy the key handle */
+    status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
+    TEST_ASSERT_EQUAL(status, check1[valid_test_input_index].expected_status,
+                      TEST_CHECKPOINT_NUM(5));
+
+    /* Destroy the key handle */
+    status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, PSA_KEY_ID_NULL);
+    TEST_ASSERT_EQUAL(status, check1[valid_test_input_index].expected_status,
+                      TEST_CHECKPOINT_NUM(6));
+
+    return VAL_STATUS_SUCCESS;
+}
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 ff7aa1c..67d4823 100644
--- a/api-tests/dev_apis/crypto/test_c005/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c005/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -32,8 +32,7 @@
 
 static const test_data check1[] = {
 
-#ifdef ARCH_TEST_AES
-#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_CIPHER_MODE_CTR
 #ifdef ARCH_TEST_AES_128
 {
     .test_desc       = "Test psa_destroy_key 16 Byte AES\n",
@@ -42,7 +41,7 @@
     .data_length     = AES_16B_KEY_SIZE,
     .bits            = BYTES_TO_BITS(AES_16B_KEY_SIZE),
     .usage_flags     = PSA_KEY_USAGE_EXPORT,
-    .alg             = PSA_ALG_CCM,
+    .alg             = PSA_ALG_CTR,
     .id              = 0x12,
     .lifetime        = PSA_KEY_LIFETIME_VOLATILE,
     .expected_status = PSA_SUCCESS
@@ -57,7 +56,7 @@
     .data_length     = AES_24B_KEY_SIZE,
     .bits            = BYTES_TO_BITS(AES_24B_KEY_SIZE),
     .usage_flags     = PSA_KEY_USAGE_EXPORT,
-    .alg             = PSA_ALG_CCM,
+    .alg             = PSA_ALG_CTR,
     .id              = 0x34,
     .lifetime        = PSA_KEY_LIFETIME_VOLATILE,
     .expected_status = PSA_SUCCESS
@@ -72,14 +71,13 @@
     .data_length      = AES_32B_KEY_SIZE,
     .bits             = BYTES_TO_BITS(AES_32B_KEY_SIZE),
     .usage_flags      = PSA_KEY_USAGE_EXPORT,
-    .alg              = PSA_ALG_CCM,
+    .alg              = PSA_ALG_CTR,
     .id               = 0x56,
     .lifetime         = PSA_KEY_LIFETIME_VOLATILE,
     .expected_status  = PSA_SUCCESS
 },
 #endif
 #endif
-#endif
 
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
 #ifdef ARCH_TEST_RSA_2048
@@ -162,7 +160,7 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {
     .test_desc        = "Test psa_destroy_key with EC Public key\n",
-    .type             = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+    .type             = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
     .data             = ec_key_data,
     .data_length      = 65,
     .bits             = 256,
@@ -179,12 +177,12 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 {
     .test_desc        = "Test psa_destroy_key with EC keypair\n",
-    .type             = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
+    .type             = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data             = ec_key_pair,
     .data_length      = 28,
     .bits             = BYTES_TO_BITS(28),
     .usage_flags      = PSA_KEY_USAGE_EXPORT,
-    .alg              = PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
+    .alg              = PSA_ALG_ECDSA_ANY,
     .id               = 0x123,
     .lifetime         = PSA_KEY_LIFETIME_VOLATILE,
     .expected_status  = PSA_SUCCESS
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 275f534..558eab5 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c005.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 5)
-#define TEST_DESC "Testing crypto key management APIs\n"
+#define TEST_DESC "Testing crypto key management APIs | UT: psa_destroy_key\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
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 0df4fed..6da03eb 100644
--- a/api-tests/dev_apis/crypto/test_c006/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c006/test_data.h
@@ -154,20 +154,21 @@
     .expected_hash_length = 64,
     .expected_status      = PSA_SUCCESS,
 },
-#endif
 
-#ifdef ARCH_TEST_SHA256
+#ifdef ARCH_TEST_SHA512
 {
     .test_desc            = "Test psa_hash_compute with small buffer size\n",
-    .alg                  = PSA_ALG_SHA_256,
+    .alg                  = PSA_ALG_SHA_512,
     .input                = &hash_input,
     .input_length         = sizeof(hash_input),
     .hash                 = expected_output,
-    .hash_size            = 30,
-    .expected_hash        = sha_256_hash,
-    .expected_hash_length = 32,
+    .hash_size            = 60,
+    .expected_hash        = expected_output,
+    .expected_hash_length = 64,
     .expected_status      = PSA_ERROR_BUFFER_TOO_SMALL,
 },
+#endif
+#endif
 
 {
     .test_desc            = "Test psa_hash_compute with invalid algorithm\n",
@@ -176,9 +177,8 @@
     .input_length         = sizeof(hash_input),
     .hash                 = expected_output,
     .hash_size            = BUFFER_SIZE,
-    .expected_hash        = sha_256_hash,
-    .expected_hash_length = 32,
+    .expected_hash        = sha_512_hash,
+    .expected_hash_length = 64,
     .expected_status      = PSA_ERROR_NOT_SUPPORTED,
 },
-#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 b62ecdf..3a1bded 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c006.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 06)
-#define TEST_DESC "Testing crypto hash functions APIs\n"
+#define TEST_DESC "Testing crypto hash functions APIs | UT: psa_hash_compute\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
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 7028099..45c5d34 100644
--- a/api-tests/dev_apis/crypto/test_c007/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c007/test_data.h
@@ -23,14 +23,14 @@
     const uint8_t          *input;
     size_t                  input_length;
     const uint8_t          *hash;
-    const size_t            hash_length;
+    size_t                  hash_length;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
 #ifdef ARCH_TEST_MD2
 {
-    .test_desc       = "Test psa_hash_compare - MD2 algorithm\n",
+    .test_desc       = "Test psa_hash_compare with MD2 algorithm\n",
     .alg             = PSA_ALG_MD2,
     .input           = &hash_input,
     .input_length    = sizeof(hash_input),
@@ -42,7 +42,7 @@
 
 #ifdef ARCH_TEST_MD4
 {
-    .test_desc       = "Test psa_hash_compare - MD4 algorithm\n",
+    .test_desc       = "Test psa_hash_compare with MD4 algorithm\n",
     .alg             = PSA_ALG_MD4,
     .input           = &hash_input,
     .input_length    = sizeof(hash_input),
@@ -54,7 +54,7 @@
 
 #ifdef ARCH_TEST_MD5
 {
-    .test_desc       = "Test psa_hash_compare - MD5 algorithm\n",
+    .test_desc       = "Test psa_hash_compare with MD5 algorithm\n",
     .alg             = PSA_ALG_MD5,
     .input           = &hash_input,
     .input_length    = sizeof(hash_input),
@@ -66,7 +66,7 @@
 
 #ifdef ARCH_TEST_RIPEMD160
 {
-    .test_desc       = "Test psa_hash_compare - RIPEMD160 algorithm\n",
+    .test_desc       = "Test psa_hash_compare with RIPEMD160 algorithm\n",
     .alg             = PSA_ALG_RIPEMD160,
     .input           = &hash_input,
     .input_length    = sizeof(hash_input),
@@ -78,7 +78,7 @@
 
 #ifdef ARCH_TEST_SHA1
 {
-    .test_desc       = "Test psa_hash_compare - SHA1 algorithm\n",
+    .test_desc       = "Test psa_hash_compare with SHA1 algorithm\n",
     .alg             = PSA_ALG_SHA_1,
     .input           = &hash_input,
     .input_length    = sizeof(hash_input),
@@ -90,7 +90,7 @@
 
 #ifdef ARCH_TEST_SHA224
 {
-    .test_desc       = "Test psa_hash_compare - SHA224 algorithm\n",
+    .test_desc       = "Test psa_hash_compare with SHA224 algorithm\n",
     .alg             = PSA_ALG_SHA_224,
     .input           = &hash_input,
     .input_length    = sizeof(hash_input),
@@ -102,7 +102,7 @@
 
 #ifdef ARCH_TEST_SHA256
 {
-    .test_desc       = "Test psa_hash_compare - SHA256 algorithm\n",
+    .test_desc       = "Test psa_hash_compare with SHA256 algorithm\n",
     .alg             = PSA_ALG_SHA_256,
     .input           = &hash_input,
     .input_length    = sizeof(hash_input),
@@ -114,7 +114,7 @@
 
 #ifdef ARCH_TEST_SHA384
 {
-    .test_desc       = "Test psa_hash_compare - SHA384 algorithm\n",
+    .test_desc       = "Test psa_hash_compare with SHA384 algorithm\n",
     .alg             = PSA_ALG_SHA_384,
     .input           = &hash_input,
     .input_length    = sizeof(hash_input),
@@ -126,7 +126,7 @@
 
 #ifdef ARCH_TEST_SHA512
 {
-    .test_desc       = "Test psa_hash_compare - SHA512 algorithm\n",
+    .test_desc       = "Test psa_hash_compare with SHA512 algorithm\n",
     .alg             = PSA_ALG_SHA_512,
     .input           = &hash_input,
     .input_length    = sizeof(hash_input),
@@ -138,7 +138,7 @@
 
 #ifdef ARCH_TEST_SHA256
 {
-    .test_desc       = "Test psa_hash_compare - incorrect hash\n",
+    .test_desc       = "Test psa_hash_compare with incorrect hash\n",
     .alg             = PSA_ALG_SHA_256,
     .input           = &hash_input,
     .input_length    = sizeof(hash_input),
@@ -148,7 +148,7 @@
 },
 
 {
-    .test_desc       = "Test psa_hash_compare - incorrect hash length\n",
+    .test_desc       = "Test psa_hash_compare with incorrect hash length\n",
     .alg             = PSA_ALG_SHA_256,
     .input           = &hash_input,
     .input_length    = sizeof(hash_input)/sizeof(uint8_t),
@@ -158,7 +158,7 @@
 },
 
 {
-    .test_desc       = "Test psa_hash_compare - invalid algorithm\n",
+    .test_desc       = "Test psa_hash_compare with invalid algorithm\n",
     .alg             = PSA_HASH_ALG_INVALID,
     .input           = &hash_input,
     .input_length    = sizeof(hash_input),
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 3992711..090b28f 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c007.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 07)
-#define TEST_DESC "Testing crypto hash functions APIs\n"
+#define TEST_DESC "Testing crypto hash functions APIs | UT: psa_hash_compare\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
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 594e384..872e9ea 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c008.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 8)
-#define TEST_DESC "Testing crypto key derivation APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs | UT: psa_key_derivation_setup\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
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 bf04626..48e7f73 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c009.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 9)
-#define TEST_DESC "Testing crypto key derivation APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs | UT: psa_key_derivation_input_bytes\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
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 4b88665..0199de4 100644
--- a/api-tests/dev_apis/crypto/test_c010/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c010/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -29,7 +29,7 @@
 
 static const test_data check1[] = {
 {
-    .test_desc   = "Test set/get key attributes\n",
+    .test_desc   = "Test psa_key_attributes_set_get key attributes\n",
     .type        = PSA_KEY_TYPE_AES,
     .bits        = BYTES_TO_BITS(AES_16B_KEY_SIZE),
     .usage_flags = PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT,
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 311a99a..d6cd9f0 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c010.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 10)
-#define TEST_DESC "Testing crypto key attributes APIs\n"
+#define TEST_DESC "Testing crypto key attributes APIs | UT: psa_key_attributes_set_get\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 d0ae92b..8f008e6 100644
--- a/api-tests/dev_apis/crypto/test_c011/test_c011.c
+++ b/api-tests/dev_apis/crypto/test_c011/test_c011.c
@@ -53,17 +53,22 @@
         TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
         /* Start a multipart hash operation */
-        status = val->crypto_function(VAL_CRYPTO_HASH_SETUP, &operation, check1[i].alg);
+        status = val->crypto_function(VAL_CRYPTO_HASH_SETUP,
+                                      &operation,
+                                      check1[i].alg);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3));
 
         if (check1[i].expected_status == PSA_SUCCESS)
         {
             /* Start a multipart hash operation */
-            status = val->crypto_function(VAL_CRYPTO_HASH_SETUP, &operation, check1[i].alg);
+            status = val->crypto_function(VAL_CRYPTO_HASH_SETUP,
+                                          &operation,
+                                          check1[i].alg);
             TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(4));
 
             /*Abort the hash operation */
-            status = val->crypto_function(VAL_CRYPTO_HASH_ABORT, &operation);
+            status = val->crypto_function(VAL_CRYPTO_HASH_ABORT,
+                                          &operation);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
         }
     }
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 5b3b48c..647e11a 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c011.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 11)
-#define TEST_DESC "Testing crypto hash functions APIs\n"
+#define TEST_DESC "Testing crypto hash functions APIs | UT: psa_hash_setup\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 b7ce6f7..d588d45 100644
--- a/api-tests/dev_apis/crypto/test_c012/test_c012.c
+++ b/api-tests/dev_apis/crypto/test_c012/test_c012.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
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 bbd47c8..a52c2d9 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c012.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 12)
-#define TEST_DESC "Testing crypto hash functions APIs\n"
+#define TEST_DESC "Testing crypto hash functions APIs | UT: psa_hash_update\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
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 d746370..7de76a5 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c013.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 13)
-#define TEST_DESC "Testing crypto hash functions APIs\n"
+#define TEST_DESC "Testing crypto hash functions APIs | UT: psa_hash_verify\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 968f33a..84845ae 100644
--- a/api-tests/dev_apis/crypto/test_c014/test_c014.c
+++ b/api-tests/dev_apis/crypto/test_c014/test_c014.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
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 f58bf45..9342aa9 100644
--- a/api-tests/dev_apis/crypto/test_c014/test_c014.h
+++ b/api-tests/dev_apis/crypto/test_c014/test_c014.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -30,5 +30,4 @@
 int32_t psa_hash_finish_inactive_operation_handle(caller_security_t caller);
 int32_t psa_hash_finish_invalid_hash_buffer_size(caller_security_t caller);
 extern void crypto_common_exit_action(void);
-
 #endif /* _TEST_C014_CLIENT_TESTS_H_ */
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 a7bd954..a00512c 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c014.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 14)
-#define TEST_DESC "Testing crypto hash functions APIs\n"
+#define TEST_DESC "Testing crypto hash functions APIs | UT: psa_hash_finish\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 88c708f..8d6fbff 100644
--- a/api-tests/dev_apis/crypto/test_c015/test_c015.c
+++ b/api-tests/dev_apis/crypto/test_c015/test_c015.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
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 667bd67..f7d3df2 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c015.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 15)
-#define TEST_DESC "Testing crypto hash functions APIs\n"
+#define TEST_DESC "Testing crypto hash functions APIs | UT: psa_hash_abort\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 eeca485..cde0940 100644
--- a/api-tests/dev_apis/crypto/test_c016/test_c016.c
+++ b/api-tests/dev_apis/crypto/test_c016/test_c016.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,7 +37,7 @@
     int32_t               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;
-    psa_key_handle_t      key_handle;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -66,14 +66,14 @@
         val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,   &attributes, check1[i].alg);
 
         /* Generate the key */
-        status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, &attributes, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, &attributes, &key);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3));
 
         if (check1[i].expected_status != PSA_SUCCESS)
             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,
+        status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, key,
                  &get_attributes);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
@@ -90,7 +90,7 @@
         TEST_ASSERT_EQUAL(get_alg, check1[i].alg, TEST_CHECKPOINT_NUM(8));
 
         /* Export a key in binary format */
-        status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, key_handle, expected_output,
+        status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, key, expected_output,
                                       BUFFER_SIZE, &expected_data_length);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
 
@@ -103,7 +103,7 @@
         val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &get_attributes);
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
     }
 
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 287a8da..5a9b92e 100644
--- a/api-tests/dev_apis/crypto/test_c016/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c016/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,8 +28,7 @@
 } test_data;
 
 static const test_data check1[] = {
-#ifdef ARCH_TEST_AES
-#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_CIPHER_MODE_CTR
 #ifdef ARCH_TEST_AES_128
 {
     .test_desc       = "Test psa_generate_key 16 Byte AES\n",
@@ -65,10 +64,7 @@
     .expected_status = PSA_SUCCESS
 },
 #endif
-#endif
-#endif
 
-#ifdef ARCH_TEST_CIPHER_MODE_CTR
 #ifdef ARCH_TEST_DES_1KEY
 {
     .test_desc       = "Test psa_generate_key with DES 64 bit key\n",
@@ -112,7 +108,7 @@
 {
     .test_desc       = "Test psa_generate_key with RSA 2048 Keypair\n",
     .type            = PSA_KEY_TYPE_RSA_KEY_PAIR,
-    .usage_flags     = PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN | PSA_KEY_USAGE_VERIFY,
+    .usage_flags     = PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH,
     .alg             = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
     .bits            = 2048,
     .expected_range  = {1190, 1194},
@@ -126,9 +122,9 @@
 #ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION
 {
     .test_desc       = "Test psa_generate_key with ECC KeyPair\n",
-    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
+    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .usage_flags     = PSA_KEY_USAGE_EXPORT,
-    .alg             = PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
+    .alg             = PSA_ALG_ECDSA_ANY,
     .bits            = 224,
     .expected_range  = {28, 28},
     .expected_status = PSA_SUCCESS
@@ -141,7 +137,7 @@
 {
     .test_desc       = "Test psa_generate_key with RSA 2048 Public key\n",
     .type            = PSA_KEY_TYPE_RSA_PUBLIC_KEY,
-    .usage_flags     = PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN | PSA_KEY_USAGE_VERIFY,
+    .usage_flags     = PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH,
     .alg             = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
     .bits            = 2048,
     .expected_range  = {1190, 1194},
@@ -150,14 +146,11 @@
 #endif
 #endif
 
-#ifdef ARCH_TEST_AES
-#ifdef ARCH_TEST_CCM
-#ifdef ARCH_TEST_AES_128
 {
     .test_desc       = "Test psa_generate_key with invalid key type\n",
     .type            = 0,
     .usage_flags     = PSA_KEY_USAGE_EXPORT,
-    .alg             = PSA_ALG_CCM,
+    .alg             = PSA_ALG_CTR,
     .bits            = BYTES_TO_BITS(AES_16B_KEY_SIZE),
     .expected_range  = {AES_16B_KEY_SIZE, AES_16B_KEY_SIZE},
     .expected_status = PSA_ERROR_NOT_SUPPORTED
@@ -167,12 +160,9 @@
     .test_desc       = "Test psa_generate_key with invalid usage flags\n",
     .type            = PSA_KEY_TYPE_AES,
     .usage_flags     = PSA_KEY_USAGE_INVALID,
-    .alg             = PSA_ALG_CCM,
+    .alg             = PSA_ALG_CTR,
     .bits            = BYTES_TO_BITS(AES_16B_KEY_SIZE),
     .expected_range  = {AES_16B_KEY_SIZE, AES_16B_KEY_SIZE},
     .expected_status = PSA_ERROR_INVALID_ARGUMENT
 },
-#endif
-#endif
-#endif
 };
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 346048d..13809e1 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) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c016.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 16)
-#define TEST_DESC "Testing crypto generator functions APIs\n"
+#define TEST_DESC "Testing crypto generator functions APIs | UT: psa_generate_key\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
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 7e585b3..a3af265 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) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c017.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 17)
-#define TEST_DESC "Testing crypto generation APIs\n"
+#define TEST_DESC "Testing crypto generation APIs | UT: psa_generate_random\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 d4477c8..39eaacd 100644
--- a/api-tests/dev_apis/crypto/test_c018/test_c018.c
+++ b/api-tests/dev_apis/crypto/test_c018/test_c018.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,7 +37,7 @@
     int32_t                        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;
-    psa_key_handle_t               key_handle;
+    psa_key_id_t                   key;
 
     if (num_checks == 0)
     {
@@ -67,7 +67,7 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                 check1[i].data_length, &key_handle);
+                 check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         if (check1[i].expected_status == PSA_SUCCESS)
@@ -76,7 +76,7 @@
              * failure.
              */
             status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation,
-                     check1[i].step, key_handle);
+                     check1[i].step, key);
             TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(4));
         }
 
@@ -87,7 +87,7 @@
 
         /* Provide an input for key derivation or key agreement */
         status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation,
-                 check1[i].step, key_handle);
+                 check1[i].step, key);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
 
         if (check1[i].expected_status != PSA_SUCCESS)
@@ -99,12 +99,12 @@
             continue;
         }
 
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         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, key_handle);
+                 check1[i].step, key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(9));
 
         /* Abort the key derivation operation */
@@ -114,7 +114,7 @@
         /* 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_IMPORT_KEY, &attributes, check1[i].data,
-                 check1[i].data_length, &key_handle);
+                 check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_NOT_SUPPORTED, TEST_CHECKPOINT_NUM(11));
 
         if (valid_test_input_index < 0)
@@ -128,7 +128,7 @@
 {
     int32_t                        status;
     psa_key_derivation_operation_t operation;
-    psa_key_handle_t               key_handle = 11;
+    psa_key_id_t                   key = 11;
 
     if (valid_test_input_index < 0)
         return RESULT_SKIP(VAL_STATUS_NO_TESTS);
@@ -153,7 +153,7 @@
 
     /* Provide an input for key derivation or key agreement */
     status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation,
-             check1[valid_test_input_index].step, key_handle);
+             check1[valid_test_input_index].step, key);
     TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
 
     /* Abort the key derivation operation */
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 a03a215..f5617df 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) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c018.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 18)
-#define TEST_DESC "Testing crypto key derivation APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs | UT: psa_key_derivation_input_key\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
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 62bdf65..d47630a 100644
--- a/api-tests/dev_apis/crypto/test_c019/test_c019.c
+++ b/api-tests/dev_apis/crypto/test_c019/test_c019.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,7 +37,7 @@
     int32_t                         i, status;
     psa_key_attributes_t            attributes = PSA_KEY_ATTRIBUTES_INIT;
     psa_key_derivation_operation_t  operation  = PSA_KEY_DERIVATION_OPERATION_INIT;
-    psa_key_handle_t                key_handle;
+    psa_key_id_t                    key;
 
     if (num_checks == 0)
     {
@@ -65,7 +65,7 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                 check1[i].data_length, &key_handle);
+                 check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Set up a key agreement operation */
@@ -76,7 +76,7 @@
         status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT,
                                       &operation,
                                       check1[i].step,
-                                      key_handle,
+                                      key,
                                       check1[i].peer_key,
                                       check1[i].peer_key_length);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5));
@@ -88,8 +88,11 @@
         /* 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;
+
         /* Destroy a key and restore the slot to its default state */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
         if (valid_test_input_index < 0)
@@ -102,8 +105,8 @@
 int32_t psa_key_derivation_key_agreement_negative_test(caller_security_t caller __UNUSED)
 {
     int32_t                         status;
-    psa_key_derivation_operation_t  operation = PSA_KEY_DERIVATION_OPERATION_INIT;
-    psa_key_handle_t                key_handle = 8;
+    psa_key_derivation_operation_t  operation;
+    psa_key_id_t                    key = 8;
 
     if (valid_test_input_index < 0)
         return RESULT_SKIP(VAL_STATUS_NO_TESTS);
@@ -127,7 +130,7 @@
     status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT,
                                   &operation,
                                   check1[valid_test_input_index].step,
-                                  key_handle,
+                                  key,
                                   check1[valid_test_input_index].peer_key,
                                   check1[valid_test_input_index].peer_key_length);
     TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4));
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 7d32078..99f2bb3 100644
--- a/api-tests/dev_apis/crypto/test_c019/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c019/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -36,7 +36,7 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {
     .test_desc       = "Test psa_key_derivation_key_agreement - ECDH SECP256R1\n",
-    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data            = ecdh_secp_256_r1_prv_key,
     .data_length     = ECDH_SECP_256_R1_PRV_KEY_LEN,
     .usage_flags     = PSA_KEY_USAGE_DERIVE,
@@ -49,7 +49,7 @@
 
 {
     .test_desc       = "Test psa_key_derivation_key_agreement - Invalid step\n",
-    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data            = ecdh_secp_256_r1_prv_key,
     .data_length     = ECDH_SECP_256_R1_PRV_KEY_LEN,
     .usage_flags     = PSA_KEY_USAGE_DERIVE,
@@ -65,7 +65,7 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP384R1
 {
     .test_desc       = "Test psa_key_derivation_key_agreement - ECDH SECP384R1\n",
-    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP384R1),
+    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data            = ecdh_secp_384_r1_prv_key,
     .data_length     = ECDH_SECP_384_R1_PRV_KEY_LEN,
     .usage_flags     = PSA_KEY_USAGE_DERIVE,
@@ -80,7 +80,7 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {
     .test_desc       = "Test psa_key_derivation_key_agreement - Invalid usage\n",
-    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data            = ecdh_secp_256_r1_prv_key,
     .data_length     = ECDH_SECP_256_R1_PRV_KEY_LEN,
     .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
@@ -98,7 +98,7 @@
 #ifdef ARCH_TEST_HKDF
 {
     .test_desc       = "Test psa_key_derivation_key_agreement - KDF not a key agreement alg\n",
-    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data            = ecdh_secp_256_r1_prv_key,
     .data_length     = ECDH_SECP_256_R1_PRV_KEY_LEN,
     .usage_flags     = PSA_KEY_USAGE_DERIVE,
@@ -114,7 +114,7 @@
 #ifdef ARCH_TEST_ECDH
 {
     .test_desc       = "Test psa_key_derivation_key_agreement - Public key of different curve\n",
-    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data            = ecdh_secp_256_r1_prv_key,
     .data_length     = ECDH_SECP_256_R1_PRV_KEY_LEN,
     .usage_flags     = PSA_KEY_USAGE_DERIVE,
@@ -127,7 +127,7 @@
 
 {
     .test_desc       = "Test psa_key_derivation_key_agreement - Pub key instead of Prv key\n",
-    .type            = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data            = ecdh_secp_256_r1_pub_key,
     .data_length     = ECDH_SECP_256_R1_PUB_KEY_LEN,
     .usage_flags     = PSA_KEY_USAGE_DERIVE,
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 7c9deb6..0e2a56e 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c019.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 19)
-#define TEST_DESC "Testing crypto key derivation APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs | UT: psa_key_derivation_key_agreement\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
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 12c2bfc..6145d40 100644
--- a/api-tests/dev_apis/crypto/test_c020/test_c020.c
+++ b/api-tests/dev_apis/crypto/test_c020/test_c020.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -33,7 +33,7 @@
     int32_t                         num_checks = sizeof(check1)/sizeof(check1[0]);
     psa_key_attributes_t            attributes = PSA_KEY_ATTRIBUTES_INIT;
     psa_key_derivation_operation_t  operation;
-    psa_key_handle_t                handle;
+    psa_key_id_t                    key;
 
     if (num_checks == 0)
     {
@@ -62,7 +62,7 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Start the key derivation operation */
@@ -79,14 +79,14 @@
         for (inIdx = 0; inIdx < DERIVATION_INPUT_CNT; inIdx++)
         {
             if ((check1[i].derv_inputs[inIdx].step        == 0) &&
-               (check1[i].derv_inputs[inIdx].data        == NULL) &&
-               (check1[i].derv_inputs[inIdx].data_length == 0))
+                (check1[i].derv_inputs[inIdx].data        == NULL) &&
+                (check1[i].derv_inputs[inIdx].data_length == 0))
                 continue;
 
             if (check1[i].derv_inputs[inIdx].step == PSA_KEY_DERIVATION_INPUT_SECRET)
             {
                 status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation,
-                                              check1[i].derv_inputs[inIdx].step, handle);
+                                              check1[i].derv_inputs[inIdx].step, key);
                 TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
             } else {
                 status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES, &operation,
@@ -102,7 +102,7 @@
                                       check1[i].output, check1[i].output_length);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8));
 
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
 
         /* Reset the key attributes */
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 a70c09c..e295265 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c020.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 20)
-#define TEST_DESC "Testing crypto key derivation APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs | UT: psa_key_derivation_output_bytes\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 1c3421e..ef6ace2 100644
--- a/api-tests/dev_apis/crypto/test_c021/test_c021.c
+++ b/api-tests/dev_apis/crypto/test_c021/test_c021.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -39,11 +39,11 @@
     int32_t                         status;
     int                             i;
     int                             num_checks = sizeof(check1)/sizeof(check1[0]);
-    psa_key_handle_t                key_handle[2];
+    psa_key_id_t                    keys[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;
-    psa_key_handle_t                tdata_key_handle;
+    psa_key_id_t                    key;
 
     if (num_checks == 0)
     {
@@ -74,7 +74,7 @@
         {
             /* 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, &tdata_key_handle);
+                     check1[i].key_length, &key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
         }
 
@@ -93,7 +93,7 @@
         {
             /* Provide an input for key derivation or key agreement */
             status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation,
-                     check1[i].step, tdata_key_handle);
+                     check1[i].step, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
         }
         else
@@ -113,12 +113,12 @@
 
         /*  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]);
+                 &operation, &keys[SLOT_1]);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8));
 
         if (check1[i].step == PSA_KEY_DERIVATION_INPUT_SECRET)
         {
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, tdata_key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
 
         }
@@ -133,7 +133,7 @@
 
         /* 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]);
+                 &operation, &keys[SLOT_2]);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INSUFFICIENT_DATA, TEST_CHECKPOINT_NUM(11));
 
         /* Abort the derivation operation */
@@ -142,7 +142,7 @@
 
         /* 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]);
+                 &operation, &keys[SLOT_2]);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(13));
     }
 
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 706f8e3..17bc455 100644
--- a/api-tests/dev_apis/crypto/test_c021/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c021/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -97,8 +97,8 @@
  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_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
+ PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1), 256, PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_ECDSA_ANY,
  PSA_ERROR_NOT_SUPPORTED
 },
 
@@ -108,8 +108,8 @@
  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_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1), 224, PSA_KEY_USAGE_EXPORT,
+ PSA_ALG_ECDSA_ANY,
  PSA_SUCCESS
 },
 
@@ -130,7 +130,7 @@
  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_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1), 2046, PSA_KEY_USAGE_EXPORT,
  PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
  PSA_SUCCESS
 },
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 ee4fcfd..900bedb 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c021.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 21)
-#define TEST_DESC "Testing crypto key derivation APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs | UT: psa_key_derivation_output_key\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
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 5de2354..0c97c60 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c022.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 22)
-#define TEST_DESC "Testing crypto key derivation APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs | UT: psa_key_derivation_abort\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
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 2f9becc..e743ed5 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c023.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 23)
-#define TEST_DESC "Testing crypto key derivation APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs | UT: psa_key_derivation_set_get_capacity\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 120269a..853027b 100644
--- a/api-tests/dev_apis/crypto/test_c024/test_c024.c
+++ b/api-tests/dev_apis/crypto/test_c024/test_c024.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -32,7 +32,7 @@
     size_t                get_ciphertext_length;
     int                   num_checks = sizeof(check1)/sizeof(check1[0]);
     psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t      handle;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -63,12 +63,12 @@
                                       &attributes,
                                       check1[i].data,
                                       check1[i].data_length,
-                                      &handle);
+                                      &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Process an authenticated encryption operation */
         status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT,
-                                      handle,
+                                      key,
                                       check1[i].alg,
                                       check1[i].nonce,
                                       check1[i].nonce_length,
@@ -84,7 +84,7 @@
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
             continue;
@@ -99,7 +99,7 @@
                            get_ciphertext_length, TEST_CHECKPOINT_NUM(7));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
         /* Reset the key attributes and check if psa_import_key fails */
@@ -108,12 +108,12 @@
                                       &attributes,
                                       check1[i].data,
                                       check1[i].data_length,
-                                      &handle);
+                                      &key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_NOT_SUPPORTED, TEST_CHECKPOINT_NUM(9));
 
         /* Process an authenticated encryption operation on a destroyed key*/
         status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT,
-                                      handle,
+                                      key,
                                       check1[i].alg,
                                       check1[i].nonce,
                                       check1[i].nonce_length,
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 be83dc2..a1a65b7 100644
--- a/api-tests/dev_apis/crypto/test_c024/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c024/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -86,7 +86,7 @@
     .data                       = key_data,
     .data_length                = AES_16B_KEY_SIZE,
     .usage_flags                = PSA_KEY_USAGE_ENCRYPT,
-    .alg                        = PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+    .alg                        = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
     .nonce                      = nonce,
     .nonce_length               = 13,
     .additional_data            = additional_data,
@@ -254,7 +254,7 @@
     .data                       = key_data,
     .data_length                = AES_16B_KEY_SIZE,
     .usage_flags                = PSA_KEY_USAGE_ENCRYPT,
-    .alg                        = PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 0),
+    .alg                        = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 0),
     .nonce                      = nonce,
     .nonce_length               = 13,
     .additional_data            = additional_data,
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 bca49c9..1649d10 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c024.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 24)
-#define TEST_DESC "Testing crypto AEAD APIs\n"
+#define TEST_DESC "Testing crypto AEAD APIs | UT: psa_aead_encrypt\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 3b3f909..bcca35a 100644
--- a/api-tests/dev_apis/crypto/test_c025/test_c025.c
+++ b/api-tests/dev_apis/crypto/test_c025/test_c025.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -32,7 +32,7 @@
     size_t                expected_plaintext_length;
     int32_t               num_checks = sizeof(check1)/sizeof(check1[0]);
     psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t      key_handle;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -60,11 +60,11 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Process an authenticated decryption operation */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT, key_handle, check1[i].alg,
+        status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT, key, check1[i].alg,
                                       check1[i].nonce, check1[i].nonce_length,
                                       check1[i].additional_data, check1[i].additional_data_length,
                                       check1[i].ciphertext, check1[i].ciphertext_length,
@@ -75,7 +75,7 @@
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
             continue;
@@ -90,17 +90,17 @@
                            expected_plaintext_length, TEST_CHECKPOINT_NUM(7));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         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_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_NOT_SUPPORTED, TEST_CHECKPOINT_NUM(9));
 
         /* Process an authenticated decryption operation on a destroyed key handle */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT, key_handle, check1[i].alg,
+        status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT, key, check1[i].alg,
                                       check1[i].nonce, check1[i].nonce_length,
                                       check1[i].additional_data, check1[i].additional_data_length,
                                       check1[i].ciphertext, check1[i].ciphertext_length,
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 19074d3..4b82019 100644
--- a/api-tests/dev_apis/crypto/test_c025/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c025/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -86,7 +86,7 @@
     .data                       = key_data,
     .data_length                = AES_16B_KEY_SIZE,
     .usage_flags                = PSA_KEY_USAGE_DECRYPT,
-    .alg                        = PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4),
+    .alg                        = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
     .nonce                      = nonce,
     .nonce_length               = 13,
     .additional_data            = additional_data,
@@ -294,7 +294,7 @@
     .data                       = key_data,
     .data_length                = AES_16B_KEY_SIZE,
     .usage_flags                = PSA_KEY_USAGE_DECRYPT,
-    .alg                        = PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 0),
+    .alg                        = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 0),
     .nonce                      = nonce,
     .nonce_length               = 13,
     .additional_data            = additional_data,
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 9c3ac1d..4997626 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c025.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 25)
-#define TEST_DESC "Testing crypto AEAD APIs\n"
+#define TEST_DESC "Testing crypto AEAD APIs | UT: psa_aead_decrypt\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 6a349e1..b114390 100644
--- a/api-tests/dev_apis/crypto/test_c026/test_c026.c
+++ b/api-tests/dev_apis/crypto/test_c026/test_c026.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,15 +28,15 @@
 };
 
 extern  uint32_t g_test_count;
-
-static psa_mac_operation_t operation;
+static int32_t  valid_test_input_index = -1;
 
 int32_t psa_mac_sign_setup_test(caller_security_t caller __UNUSED)
 {
     int                   num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t               i, status;
     psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t      key_handle;
+    psa_mac_operation_t   operation;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -52,31 +52,45 @@
     {
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
-        memset(&operation, 0, sizeof(operation));
+
+        val->crypto_function(VAL_CRYPTO_MAC_OPERATION_INIT,
+                             &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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, check1[i].key_alg);
+        status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP,
+                                      &operation,
+                                      key,
+                                      check1[i].alg);
         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);
+        status = val->crypto_function(VAL_CRYPTO_MAC_ABORT,
+                                      &operation);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
         /* If setup failed, reproduce the failure, so that the caller can
@@ -84,17 +98,24 @@
          */
         if (check1[i].expected_status != PSA_SUCCESS)
         {
-            status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation,
-                    key_handle, check1[i].key_alg);
+            status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP,
+                                          &operation,
+                                          key,
+                                          check1[i].alg);
             TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
         }
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
         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);
+        /* Reset the key attributes */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES,
+                             &attributes);
+
+        if (valid_test_input_index < 0)
+            valid_test_input_index = i;
     }
 
     return VAL_STATUS_SUCCESS;
@@ -102,34 +123,46 @@
 
 int32_t psa_mac_sign_setup_negative_test(caller_security_t caller __UNUSED)
 {
-    int                 num_checks = sizeof(check2)/sizeof(check2[0]);
-    int32_t             i, status;
-    psa_key_handle_t    key_handle = 11;
+    int32_t             status;
+    psa_key_id_t        key = 11;
+    psa_mac_operation_t operation;
+
+    if (valid_test_input_index < 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++)
-    {
-        /* 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));
+    /* 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_mac_sign_setup invalid key handle\n",
-                                                                                 g_test_count++);
-        /* Start a multipart MAC verification operation */
-        status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation,
-                    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 invalid key handle\n",
+                                                                             g_test_count++);
 
-        val->print(PRINT_TEST, "[Check %d] Test psa_mac_sign_setup zero as key handle\n",
-                                                                                 g_test_count++);
-        /* 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->crypto_function(VAL_CRYPTO_MAC_OPERATION_INIT,
+                         &operation);
+
+    /* Start a multipart MAC verification operation */
+    status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP,
+                                  &operation,
+                                  key,
+                                  check1[valid_test_input_index].alg);
+    TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
+
+    val->print(PRINT_TEST, "[Check %d] Test psa_mac_sign_setup zero as key handle\n",
+                                                                             g_test_count++);
+
+    val->crypto_function(VAL_CRYPTO_MAC_OPERATION_INIT,
+                         &operation);
+
+    /* Start a multipart MAC verification operation */
+    status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP,
+                                  &operation,
+                                  0,
+                                  check1[valid_test_input_index].alg);
+    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_c026/test_data.h b/api-tests/dev_apis/crypto/test_c026/test_data.h
index 306522a..50221af 100644
--- a/api-tests/dev_apis/crypto/test_c026/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c026/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,142 +15,135 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    psa_key_type_t          key_type;
-    uint8_t                 key_data[64];
-    uint32_t                key_length;
-    psa_key_usage_t         usage;
-    psa_algorithm_t         key_alg;
+    psa_key_type_t          type;
+    const uint8_t          *data;
+    size_t                  data_length;
+    psa_key_usage_t         usage_flags;
+    psa_algorithm_t         alg;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
+#ifdef CRYPTO_1_0
 #ifdef ARCH_TEST_HMAC
 #ifdef ARCH_TEST_SHA256
-{"Test psa_mac_sign_setup 64 Byte HMAC\n", 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
+{
+    .test_desc       = "Test psa_mac_sign_setup - HMAC - SHA256\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .data            = key_data,
+    .data_length     = 64,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_256),
+    .expected_status = PSA_SUCCESS
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_AES_128
 #ifdef ARCH_TEST_CMAC
-{"Test psa_mac_sign_setup 16 Byte AES - CMAC\n", 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_SUCCESS
+{
+    .test_desc       = "Test psa_mac_sign_setup - CMAC - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg             = PSA_ALG_CMAC,
+    .expected_status = PSA_SUCCESS
 },
 #endif
-
-#ifdef ARCH_TEST_GMAC
-{"Test psa_mac_sign_setup 16 Byte AES - GMAC\n", 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_GMAC,
- PSA_ERROR_NOT_SUPPORTED
-},
 #endif
 
-#ifdef ARCH_TEST_CMAC
 #ifdef ARCH_TEST_HMAC
-{"Test psa_mac_sign_setup incompactible HMAC for CMAC\n", PSA_KEY_TYPE_HMAC,
-{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
- 0x0D, 0x0E, 0x0F},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_SIGN, PSA_ALG_CMAC,
- PSA_ERROR_NOT_SUPPORTED
+#ifdef ARCH_TEST_CMAC
+{
+    .test_desc       = "Test psa_mac_sign_setup - Incompatible HMAC for CMAC\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .data            = key_data,
+    .data_length     = 64,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg             = PSA_ALG_CMAC,
+    .expected_status = PSA_ERROR_NOT_SUPPORTED
 },
 #endif
-
-{"Test psa_mac_sign_setup invalid usage\n", 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_CMAC,
- PSA_ERROR_NOT_PERMITTED
-},
 #endif
 
 #ifdef ARCH_TEST_HMAC
 #ifdef ARCH_TEST_SHA256
-{"Test psa_mac_sign_setup invalid key type\n", PSA_KEY_TYPE_RAW_DATA,
-{0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
- 0x0B, 0x0B, 0x0B},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_256),
- PSA_ERROR_INVALID_ARGUMENT
+{
+    .test_desc       = "Test psa_mac_sign_setup - Invalid usage flag\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .data            = key_data,
+    .data_length     = 64,
+    .usage_flags     = PSA_KEY_USAGE_EXPORT,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_256),
+    .expected_status = PSA_ERROR_NOT_PERMITTED
 },
-#endif
+
+{
+    .test_desc       = "Test psa_mac_sign_setup - Invalid key type\n",
+    .type            = PSA_KEY_TYPE_RAW_DATA,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_256),
+    .expected_status = PSA_ERROR_INVALID_ARGUMENT
+},
 #endif
 #endif
 
 #ifdef ARCH_TEST_HMAC
 #ifdef ARCH_TEST_SHA256
 #ifdef ARCH_TEST_TRUNCATED_MAC
-{"Test psa_mac_sign_setup truncated MAC too large\n", 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_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 33),
- PSA_ERROR_INVALID_ARGUMENT
+{
+    .test_desc       = "Test psa_mac_sign_setup - Truncated MAC too large\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .data            = key_data,
+    .data_length     = 64,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg             = PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 33),
+    .expected_status = PSA_ERROR_INVALID_ARGUMENT
 },
 
-{"Test psa_mac_sign_setup truncated MAC too small\n", 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_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 1),
- PSA_ERROR_NOT_SUPPORTED
+{
+    .test_desc       = "Test psa_mac_sign_setup - Truncated MAC too small\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .data            = key_data,
+    .data_length     = 64,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg             = PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 1),
+    .expected_status = PSA_ERROR_NOT_SUPPORTED
 },
 #endif
 #endif
 
-#ifdef ARCH_TEST_AES_128
-{"Test psa_mac_sign_setup bad algorithm (unknown MAC algorithm)\n", 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_HMAC(0),
- PSA_ERROR_NOT_SUPPORTED
+{
+    .test_desc       = "Test psa_mac_sign_setup - Unknown MAC algorithm\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .data            = key_data,
+    .data_length     = 64,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg             = PSA_ALG_HMAC(0),
+    .expected_status = PSA_ERROR_NOT_SUPPORTED
 },
 #endif
-#endif
 
 #ifdef ARCH_TEST_AES_128
 #ifdef ARCH_TEST_CBC_NO_PADDING
-{"Test psa_mac_sign_setup bad algorithm (not a MAC algorithm)\n", 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_CBC_NO_PADDING,
- PSA_ERROR_INVALID_ARGUMENT
+{
+    .test_desc       = "Test psa_mac_sign_setup - Bad algorithm (not a MAC algorithm)\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg             = PSA_ALG_CBC_NO_PADDING,
+    .expected_status = PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
 #endif
-};
+#endif
 
-static const test_data check2[] = {
-#ifdef ARCH_TEST_HMAC
-#ifdef ARCH_TEST_SHA256
-{"Test psa_mac_sign_setup 64 negative case\n", 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 f1fcea6..77d7456 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c026.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 26)
-#define TEST_DESC "Testing crypto MAC APIs\n"
+#define TEST_DESC "Testing crypto MAC APIs | UT: psa_mac_sign_setup\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 9518070..18eb796 100644
--- a/api-tests/dev_apis/crypto/test_c027/test_c027.c
+++ b/api-tests/dev_apis/crypto/test_c027/test_c027.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,18 @@
 const client_test_t test_c027_crypto_list[] = {
     NULL,
     psa_mac_update_test,
-    psa_mac_update_invalid_operator_test,
     NULL,
 };
 
 extern  uint32_t g_test_count;
-static uint8_t  data[BUFFER_SIZE];
 
 int32_t psa_mac_update_test(caller_security_t caller __UNUSED)
 {
-    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               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;
-    psa_key_handle_t      key_handle;
+    psa_key_attributes_t  attributes;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -51,95 +48,83 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, "[Check %d] ", i+1);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
-        memset(&operation, 0, sizeof(operation));
-        memset(data, 0, sizeof(data));
+		val->crypto_function(VAL_CRYPTO_KEY_ATTRIBUTES_INIT,
+                             &attributes);
+        val->crypto_function(VAL_CRYPTO_MAC_OPERATION_INIT,
+                             &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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, check1[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        if (check1[i].operation_state) {
+            /* Start a multipart MAC calculation operation */
+            status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP,
+                                          &operation,
+                                          key,
+                                          check1[i].alg);
+            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);
+        status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE,
+                                      &operation,
+                                      check1[i].input,
+                                      check1[i].input_length >> 1);
         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);
+            status = val->crypto_function(VAL_CRYPTO_MAC_ABORT,
+                                          &operation);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
 
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                          key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
             continue;
         }
 
-        /* Finish the calculation of the MAC of a message */
-        status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_FINISH, &operation, data,
-                    sizeof(data), &length);
+        /* Add a message fragment to the same multipart MAC operation*/
+        status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE,
+                                      &operation,
+                                      check1[i].input + (check1[i].input_length >> 1),
+                                      check1[i].input_length >> 1);
         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(9));
-
         /* Abort a MAC operation */
-        status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
+        status = val->crypto_function(VAL_CRYPTO_MAC_ABORT,
+                                      &operation);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
-    }
-
-    return VAL_STATUS_SUCCESS;
-}
-
-int32_t psa_mac_update_invalid_operator_test(caller_security_t caller __UNUSED)
-{
-    int32_t             i, status;
-    psa_mac_operation_t operation[] = {psa_mac_operation_init(), PSA_MAC_OPERATION_INIT, {0} };
-    int32_t             operation_count = sizeof(operation)/sizeof(operation[0]);
-
-    memset(data, 0, sizeof(data));
-    val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
-    val->print(PRINT_TEST, "Test psa_mac_update without mac setup\n", 0);
-
-    /* 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 < operation_count; i++)
-    {
-
-        /* Start a multipart MAC calculation for each operation */
-        status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE, &operation[i], data,
-                     sizeof(data)/sizeof(data[0]));
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(2));
-
-        /* Abort the MAC operations */
-        status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation[i]);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
     }
 
     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 bdcf1d7..ec1a715 100644
--- a/api-tests/dev_apis/crypto/test_c027/test_c027.h
+++ b/api-tests/dev_apis/crypto/test_c027/test_c027.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -25,9 +25,6 @@
 extern val_api_t *val;
 extern psa_api_t *psa;
 extern const client_test_t test_c027_crypto_list[];
-
-int32_t psa_mac_update_test(caller_security_t caller);
-int32_t psa_mac_update_invalid_operator_test(caller_security_t caller);
 extern void crypto_common_exit_action(void);
-
+int32_t psa_mac_update_test(caller_security_t caller);
 #endif /* _TEST_C027_CLIENT_TESTS_H_ */
diff --git a/api-tests/dev_apis/crypto/test_c027/test_data.h b/api-tests/dev_apis/crypto/test_c027/test_data.h
index 35eebf6..6025948 100644
--- a/api-tests/dev_apis/crypto/test_c027/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c027/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,55 +15,85 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    psa_key_type_t          key_type;
-    uint8_t                 key_data[64];
-    uint32_t                key_length;
-    uint8_t                 data[64];
-    size_t                  data_size;
-    psa_key_usage_t         usage;
-    psa_algorithm_t         key_alg;
+    psa_key_type_t          type;
+    psa_key_usage_t         usage_flags;
+    psa_algorithm_t         alg;
+    const uint8_t          *data;
+    size_t                  data_length;
+    const uint8_t          *input;
+    size_t                  input_length;
+    uint32_t                operation_state;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
+#ifdef CRYPTO_1_0
 #ifdef ARCH_TEST_HMAC
 #ifdef ARCH_TEST_SHA256
-{"Test psa_mac_update 64 Byte HMAC SHA256\n", 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, "hello world", 11, PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_256),
- PSA_SUCCESS
+{
+    .test_desc       = "Test psa_mac_update - HMAC - SHA256 - 64 Byte\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_256),
+    .data            = key_data,
+    .data_length     = 64,
+    .input           = input_bytes_data,
+    .input_length    = 16,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_AES_128
 #ifdef ARCH_TEST_CMAC
-{"Test psa_mac_update 16 Byte AES - CMAC\n", PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9, 0x00},
- AES_16B_KEY_SIZE, "hello world", 11, PSA_KEY_USAGE_SIGN, PSA_ALG_CMAC,
- PSA_SUCCESS
+{
+    .test_desc       = "Test psa_mac_update - CMAC - AES - 16 Byte\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg             = PSA_ALG_CMAC,
+    .data            = key_data,
+    .data_length     = 16,
+    .input           = input_bytes_data,
+    .input_length    = 16,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_HMAC
 #ifdef ARCH_TEST_SHA512
-{"Test psa_mac_update 32 Byte HMAC SHA512\n", PSA_KEY_TYPE_HMAC,
-{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b},
- 32,  "hello world", 11, PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_512),
- PSA_SUCCESS
+{
+    .test_desc       = "Test psa_mac_update - HMAC - SHA512 - 32 Byte\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_512),
+    .data            = key_data,
+    .data_length     = 32,
+    .input           = input_bytes_data,
+    .input_length    = 16,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
 },
+
+{
+    .test_desc       = "Test psa_mac_update - HMAC - SHA512 - Invalid operation state\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_512),
+    .data            = key_data,
+    .data_length     = 32,
+    .input           = input_bytes_data,
+    .input_length    = 16,
+    .operation_state = 0,
+    .expected_status = PSA_ERROR_BAD_STATE
+},
+#endif
 #endif
 #endif
 };
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 7856607..f5eba20 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c027.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 27)
-#define TEST_DESC "Testing crypto MAC APIs\n"
+#define TEST_DESC "Testing crypto MAC APIs | UT: psa_mac_update\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 8bcbf71..9ef3160 100644
--- a/api-tests/dev_apis/crypto/test_c028/test_c028.c
+++ b/api-tests/dev_apis/crypto/test_c028/test_c028.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,16 +28,16 @@
 
 extern  uint32_t g_test_count;
 
-static uint8_t       data[BUFFER_SIZE];
+
 
 int32_t psa_mac_sign_finish_test(caller_security_t caller __UNUSED)
 {
-    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t               i, status;
-    size_t                length;
+    size_t                mac_length;
     psa_mac_operation_t   operation;
     psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t      key_handle;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -51,75 +51,102 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, "[Check %d] ", i+1);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
-        memset(&operation, 0, sizeof(operation));
-        memset(data, 0, sizeof(data));
+
+        val->crypto_function(VAL_CRYPTO_KEY_ATTRIBUTES_INIT,
+                             &attributes);
+        val->crypto_function(VAL_CRYPTO_MAC_OPERATION_INIT,
+                             &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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, check1[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        if (check1[i].operation_state) {
+            /* Start a multipart MAC calculation operation */
+            status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP,
+                                          &operation,
+                                          key,
+                                          check1[i].alg);
+            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(5));
+            /* Add a message fragment to a multipart MAC operation */
+            status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE,
+                                          &operation,
+                                          check1[i].input,
+                                          check1[i].input_length);
+            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);
+        status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_FINISH,
+                                      &operation,
+                                      check1[i].mac,
+                                      check1[i].mac_size,
+                                      &mac_length);
         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);
+            status = val->crypto_function(VAL_CRYPTO_MAC_ABORT,
+                                          &operation);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                          key);
             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(9));
+        TEST_ASSERT_EQUAL(mac_length, check1[i].expected_mac_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(10));
-
-        memset(data, 0, sizeof(data));
+        TEST_ASSERT_MEMCMP(check1[i].mac, check1[i].expected_mac, mac_length,
+                           TEST_CHECKPOINT_NUM(10));
 
         /* Calling mac finish twice in a row.
          * Finish the calculation of the MAC of a message using same operation
          * should return error
          */
-        status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_FINISH, &operation, data,
-                    check1[i].mac_size, &length);
+        status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_FINISH,
+                                      &operation,
+                                      check1[i].mac,
+                                      check1[i].mac_size,
+                                      &mac_length);
         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);
+        status = val->crypto_function(VAL_CRYPTO_MAC_ABORT,
+                                      &operation);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14));
     }
 
diff --git a/api-tests/dev_apis/crypto/test_c028/test_data.h b/api-tests/dev_apis/crypto/test_c028/test_data.h
index e489c56..c13a006 100644
--- a/api-tests/dev_apis/crypto/test_c028/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c028/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,104 +15,158 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    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];
+    psa_key_type_t          type;
+    psa_key_usage_t         usage_flags;
+    psa_algorithm_t         alg;
+    const uint8_t          *data;
+    size_t                  data_length;
+    const uint8_t          *input;
+    size_t                  input_length;
+    uint8_t                *mac;
     size_t                  mac_size;
-    size_t                  expected_length;
-    psa_key_usage_t         usage;
-    psa_algorithm_t         key_alg;
+    size_t                  expected_mac_length;
+    const uint8_t          *expected_mac;
+    uint32_t                operation_state;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
+#ifdef CRYPTO_1_0
 #ifdef ARCH_TEST_HMAC
 #ifdef ARCH_TEST_SHA224
-{"Test psa_mac_sign_finish HMAC SHA 224\n", 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_desc           = "Test psa_mac_sign_finish  - HMAC - SHA224\n",
+    .type                = PSA_KEY_TYPE_HMAC,
+    .alg                 = PSA_ALG_HMAC(PSA_ALG_SHA_224),
+    .usage_flags         = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .data                = key_data,
+    .data_length         = 64,
+    .input               = input_bytes_data,
+    .input_length        = 16,
+    .mac                 = expected_output,
+    .mac_size            = BUFFER_SIZE,
+    .expected_mac_length = 28,
+    .expected_mac        = hmac_sha224,
+    .operation_state     = 1,
+    .expected_status     = PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_SHA256
-{"Test psa_mac_sign_finish HMAC SHA 256\n", 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
+{
+    .test_desc           = "Test psa_mac_sign_finish  - HMAC - SHA256\n",
+    .type                = PSA_KEY_TYPE_HMAC,
+    .alg                 = PSA_ALG_HMAC(PSA_ALG_SHA_256),
+    .usage_flags         = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .data                = key_data,
+    .data_length         = 64,
+    .input               = input_bytes_data,
+    .input_length        = 16,
+    .mac                 = expected_output,
+    .mac_size            = BUFFER_SIZE,
+    .expected_mac_length = 32,
+    .expected_mac        = hmac_sha256,
+    .operation_state     = 1,
+    .expected_status     = PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_SHA512
-{"Test psa_mac_sign_finish HMAC SHA 512\n", 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
+{
+    .test_desc           = "Test psa_mac_sign_finish  - HMAC - SHA512\n",
+    .type                = PSA_KEY_TYPE_HMAC,
+    .alg                 = PSA_ALG_HMAC(PSA_ALG_SHA_512),
+    .usage_flags         = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .data                = key_data,
+    .data_length         = 64,
+    .input               = input_bytes_data,
+    .input_length        = 16,
+    .mac                 = expected_output,
+    .mac_size            = BUFFER_SIZE,
+    .expected_mac_length = 64,
+    .expected_mac        = hmac_sha512,
+    .operation_state     = 1,
+    .expected_status     = PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_SHA224
-{"Test psa_mac_sign_finish HMAC SHA 224 (truncated to 8 Byte)\n", 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
+{
+    .test_desc           = "Test psa_mac_sign_finish  - HMAC - SHA224 - Truncated 8 Byte\n",
+    .type                = PSA_KEY_TYPE_HMAC,
+    .alg                 = PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_224), 8),
+    .usage_flags         = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .data                = key_data,
+    .data_length         = 64,
+    .input               = input_bytes_data,
+    .input_length        = 16,
+    .mac                 = expected_output,
+    .mac_size            = BUFFER_SIZE,
+    .expected_mac_length = 8,
+    .expected_mac        = hmac_sha224,
+    .operation_state     = 1,
+    .expected_status     = PSA_SUCCESS
+},
+
+{
+    .test_desc           = "Test psa_mac_sign_finish  - HMAC - SHA224 - Small output buffer\n",
+    .type                = PSA_KEY_TYPE_HMAC,
+    .alg                 = PSA_ALG_HMAC(PSA_ALG_SHA_224),
+    .usage_flags         = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .data                = key_data,
+    .data_length         = 64,
+    .input               = input_bytes_data,
+    .input_length        = 16,
+    .mac                 = expected_output,
+    .mac_size            = 27,
+    .expected_mac_length = 0,
+    .expected_mac        = NULL,
+    .operation_state     = 1,
+    .expected_status     = PSA_ERROR_BUFFER_TOO_SMALL
+},
+
+{
+    .test_desc           = "Test psa_mac_sign_finish  - HMAC - SHA224 - Invalid operation state\n",
+    .type                = PSA_KEY_TYPE_HMAC,
+    .alg                 = PSA_ALG_HMAC(PSA_ALG_SHA_224),
+    .usage_flags         = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .data                = key_data,
+    .data_length         = 64,
+    .input               = input_bytes_data,
+    .input_length        = 16,
+    .mac                 = expected_output,
+    .mac_size            = BUFFER_SIZE,
+    .expected_mac_length = 28,
+    .expected_mac        = hmac_sha224,
+    .operation_state     = 0,
+    .expected_status     = PSA_ERROR_BAD_STATE
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_AES_128
 #ifdef ARCH_TEST_CMAC
-{"Test psa_mac_sign_finish CMAC AES 128\n", 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_desc           = "Test psa_mac_sign_finish  - CMAC - AES\n",
+    .type                = PSA_KEY_TYPE_AES,
+    .alg                 = PSA_ALG_CMAC,
+    .usage_flags         = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .data                = key_data,
+    .data_length         = AES_16B_KEY_SIZE,
+    .input               = input_bytes_data,
+    .input_length        = 16,
+    .mac                 = expected_output,
+    .mac_size            = BUFFER_SIZE,
+    .expected_mac_length = 16,
+    .expected_mac        = cmac_aes_128,
+    .operation_state     = 1,
+    .expected_status     = PSA_SUCCESS
 },
 #endif
 #endif
-
-#ifdef ARCH_TEST_HMAC
-#ifdef ARCH_TEST_SHA256
-{"Test psa_mac_sign_finish - Small buffer size\n", 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}, 31, 32,
- PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_256),
- PSA_ERROR_BUFFER_TOO_SMALL
-},
-#endif
 #endif
 };
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 3d27987..83c6b37 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c028.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 28)
-#define TEST_DESC "Testing crypto MAC APIs\n"
+#define TEST_DESC "Testing crypto MAC APIs | UT: psa_mac_sign_finish\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 e89db2d..bd7f8fd 100644
--- a/api-tests/dev_apis/crypto/test_c029/test_c029.c
+++ b/api-tests/dev_apis/crypto/test_c029/test_c029.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,15 +28,15 @@
 };
 
 extern  uint32_t g_test_count;
-
-static psa_mac_operation_t operation;
+static int32_t  valid_test_input_index = -1;
 
 int32_t psa_mac_verify_setup_test(caller_security_t caller __UNUSED)
 {
     int                   num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t               i, status;
     psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t      key_handle;
+    psa_mac_operation_t   operation;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -52,31 +52,47 @@
     {
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
-        memset(&operation, 0, sizeof(operation));
+
+        val->crypto_function(VAL_CRYPTO_KEY_ATTRIBUTES_INIT,
+                             &attributes);
+        val->crypto_function(VAL_CRYPTO_MAC_OPERATION_INIT,
+                             &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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,
-                    key_handle, check1[i].key_alg);
+        status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP,
+                                      &operation,
+                                      key,
+                                      check1[i].alg);
         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);
+        status = val->crypto_function(VAL_CRYPTO_MAC_ABORT,
+                                      &operation);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
         /* If setup failed, reproduce the failure, so that the caller can
@@ -84,14 +100,20 @@
          */
         if (check1[i].expected_status != PSA_SUCCESS)
         {
-            status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP, &operation,
-                        key_handle, check1[i].key_alg);
+            status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP,
+                                          &operation,
+                                          key,
+                                          check1[i].alg);
             TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
         }
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+
+        if (valid_test_input_index < 0)
+            valid_test_input_index = i;
     }
 
     return VAL_STATUS_SUCCESS;
@@ -99,34 +121,45 @@
 
 int32_t psa_mac_verify_setup_negative_test(caller_security_t caller __UNUSED)
 {
-    int                 num_checks = sizeof(check2)/sizeof(check2[0]);
-    int32_t             i, status;
-    psa_key_handle_t    key_handle = 11;
+    int32_t             status;
+    psa_key_id_t        key = 11;
+    psa_mac_operation_t operation;
+
+    if (valid_test_input_index < 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++)
-    {
-        /* 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));
+    /* 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_mac_verify_setup invalid key handle\n",
-                                                                                 g_test_count++);
-        /* Start a multipart MAC verification operation */
-        status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP, &operation,
-                    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_verify_setup invalid key handle\n",
+                                                                             g_test_count++);
+    val->crypto_function(VAL_CRYPTO_MAC_OPERATION_INIT,
+                         &operation);
 
-        val->print(PRINT_TEST, "[Check %d] Test psa_mac_verify_setup zero as key handle\n",
-                                                                                 g_test_count++);
-        /* Start a multipart MAC verification operation */
-        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));
-    }
+    /* Start a multipart MAC verification operation */
+    status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP,
+                                  &operation,
+                                  key,
+                                  check1[valid_test_input_index].alg);
+    TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
+
+    val->print(PRINT_TEST, "[Check %d] Test psa_mac_verify_setup zero as key handle\n",
+                                                                             g_test_count++);
+
+    val->crypto_function(VAL_CRYPTO_MAC_OPERATION_INIT,
+                         &operation);
+
+    /* Start a multipart MAC verification operation */
+    status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP,
+                                  &operation,
+                                  0,
+                                  check1[valid_test_input_index].alg);
+    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_c029/test_data.h b/api-tests/dev_apis/crypto/test_c029/test_data.h
index 3b4b121..10358eb 100644
--- a/api-tests/dev_apis/crypto/test_c029/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c029/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,141 +15,135 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    psa_key_type_t          key_type;
-    uint8_t                 key_data[64];
-    uint32_t                key_length;
-    psa_key_usage_t         usage;
-    psa_algorithm_t         key_alg;
+    psa_key_type_t          type;
+    psa_key_usage_t         usage_flags;
+    psa_algorithm_t         alg;
+    const uint8_t          *data;
+    size_t                  data_length;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
+#ifdef CRYPTO_1_0
 #ifdef ARCH_TEST_HMAC
 #ifdef ARCH_TEST_SHA256
-{"Test psa_mac_verify_setup 64 Byte HMAC\n", 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_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_256),
- PSA_SUCCESS
+{
+    .test_desc       = "Test psa_mac_verify_setup - HMAC - SHA256\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_256),
+    .data            = key_data,
+    .data_length     = 64,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_AES_128
 #ifdef ARCH_TEST_CMAC
-{"Test psa_mac_verify_setup 16 Byte AES - CMAC\n", PSA_KEY_TYPE_AES,
-{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2, 0x16, 0xA5, 0x3E, 0x99,
- 0x5F, 0xC9, 0x00},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_VERIFY, PSA_ALG_CMAC,
- PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_GMAC
-{"Test psa_mac_verify_setup 16 Byte AES - GMAC\n", 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_VERIFY, PSA_ALG_GMAC,
- PSA_ERROR_NOT_SUPPORTED
+{
+    .test_desc       = "Test psa_mac_verify_setup - CMAC - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_CMAC,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_CMAC
 #ifdef ARCH_TEST_HMAC
-{"Test psa_mac_verify_setup incompactible HMAC for CMAC\n", PSA_KEY_TYPE_HMAC,
-{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
- 0x0D, 0x0E, 0x0F},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_VERIFY, PSA_ALG_CMAC,
- PSA_ERROR_NOT_SUPPORTED
-},
-#endif
-
-#ifdef ARCH_TEST_AES_128
-{"Test psa_mac_verify_setup invalid usage\n", 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_CMAC,
- PSA_ERROR_NOT_PERMITTED
+{
+    .test_desc       = "Test psa_mac_verify_setup - Incompatible HMAC for CMAC\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_CMAC,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .expected_status = PSA_ERROR_NOT_SUPPORTED
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_HMAC
 #ifdef ARCH_TEST_SHA256
-{"Test psa_mac_verify_setup invalid key type\n", PSA_KEY_TYPE_RAW_DATA,
-{0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
- 0x0B, 0x0B, 0x0B},
- AES_16B_KEY_SIZE, PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_256),
- PSA_ERROR_INVALID_ARGUMENT
+{
+    .test_desc       = "Test psa_mac_verify_setup - Invalid usage flag\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_256),
+    .data            = key_data,
+    .data_length     = 64,
+    .expected_status = PSA_ERROR_NOT_PERMITTED
+},
+
+
+{
+    .test_desc       = "Test psa_mac_verify_setup - Invalid key type\n",
+    .type            = PSA_KEY_TYPE_RAW_DATA,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_256),
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .expected_status = PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_HMAC
 #ifdef ARCH_TEST_SHA256
-{"Test psa_mac_verify_setup truncated MAC too large\n", 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_VERIFY, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 33),
- PSA_ERROR_INVALID_ARGUMENT
+#ifdef ARCH_TEST_TRUNCATED_MAC
+{
+    .test_desc       = "Test psa_mac_verify_setup - Truncated MAC too large\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 33),
+    .data            = key_data,
+    .data_length     = 64,
+    .expected_status = PSA_ERROR_INVALID_ARGUMENT
 },
 
-{"Test psa_mac_verify_setup truncated MAC too small\n", 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_VERIFY, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 1),
- PSA_ERROR_NOT_SUPPORTED
+{
+    .test_desc       = "Test psa_mac_verify_setup - Truncated MAC too small\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 1),
+    .data            = key_data,
+    .data_length     = 64,
+    .expected_status = PSA_ERROR_NOT_SUPPORTED
 },
 #endif
+#endif
 
-#ifdef ARCH_TEST_AES_128
-{"Test psa_mac_verify_setup bad algorithm (unknown MAC algorithm)\n", 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_VERIFY, PSA_ALG_HMAC(0),
- PSA_ERROR_NOT_SUPPORTED
+{
+    .test_desc       = "Test psa_mac_verify_setup - Unknown MAC algorithm\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_HMAC(0),
+    .data            = key_data,
+    .data_length     = 64,
+    .expected_status = PSA_ERROR_NOT_SUPPORTED
 },
 #endif
-#endif
 
 #ifdef ARCH_TEST_AES_128
 #ifdef ARCH_TEST_CBC_NO_PADDING
-{"Test psa_mac_verify_setup bad algorithm (not a MAC algorithm)\n", 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_VERIFY, PSA_ALG_CBC_NO_PADDING,
- PSA_ERROR_INVALID_ARGUMENT
+{
+    .test_desc       = "Test psa_mac_verify_setup - Bad algorithm (not a MAC algorithm)\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_CBC_NO_PADDING,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .expected_status = PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
 #endif
-};
-
-static const test_data check2[] = {
-#ifdef ARCH_TEST_HMAC
-#ifdef ARCH_TEST_SHA256
-{"Test psa_mac_verify_setup 64 negative case\n", 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_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_256),
- PSA_SUCCESS
-},
-#endif
 #endif
 };
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 a958c9e..14d7392 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c029.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 29)
-#define TEST_DESC "Testing crypto MAC APIs\n"
+#define TEST_DESC "Testing crypto MAC APIs | UT: psa_mac_verify_setup\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 42cbb97..b9a842c 100644
--- a/api-tests/dev_apis/crypto/test_c030/test_c030.c
+++ b/api-tests/dev_apis/crypto/test_c030/test_c030.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -30,11 +30,11 @@
 
 int32_t psa_mac_verify_finish_test(caller_security_t caller __UNUSED)
 {
-    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               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;
-    psa_key_handle_t      key_handle;
+    psa_key_attributes_t  attributes;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -48,49 +48,72 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, "[Check %d] ", i+1);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
-        memset(&operation, 0, sizeof(operation));
+
+        val->crypto_function(VAL_CRYPTO_KEY_ATTRIBUTES_INIT,
+                             &attributes);
+        val->crypto_function(VAL_CRYPTO_MAC_OPERATION_INIT,
+                             &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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,
-                    key_handle, check1[i].key_alg);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        if (check1[i].operation_state) {
+            /* Start a multipart MAC calculation operation */
+            status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP,
+                                          &operation,
+                                          key,
+                                          check1[i].alg);
+            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(5));
+            /* Add a message fragment to a multipart MAC operation */
+            status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE,
+                                          &operation,
+                                          check1[i].input,
+                                          check1[i].input_length);
+            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);
+        status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_FINISH,
+                                      &operation,
+                                      check1[i].mac,
+                                      check1[i].mac_length);
         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);
+            status = val->crypto_function(VAL_CRYPTO_MAC_ABORT,
+                                          &operation);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                          key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
             continue;
         }
@@ -99,16 +122,20 @@
          * Finish the calculation of the MAC of a message using same operation
          * should return error
          */
-        status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_FINISH, &operation,
-                    check1[i].expected_mac, check1[i].mac_size);
+        status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_FINISH,
+                                      &operation,
+                                      check1[i].mac,
+                                      check1[i].mac_length);
         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);
+        status = val->crypto_function(VAL_CRYPTO_MAC_ABORT,
+                                      &operation);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
     }
 
diff --git a/api-tests/dev_apis/crypto/test_c030/test_data.h b/api-tests/dev_apis/crypto/test_c030/test_data.h
index cbe6979..708eb81 100644
--- a/api-tests/dev_apis/crypto/test_c030/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c030/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,114 +15,157 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    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_key_type_t          type;
+    psa_key_usage_t         usage_flags;
+    psa_algorithm_t         alg;
+    const uint8_t          *data;
+    size_t                  data_length;
+    const uint8_t          *input;
+    size_t                  input_length;
+    const uint8_t          *mac;
+    size_t                  mac_length;
+    uint32_t                operation_state;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
+#ifdef CRYPTO_1_0
 #ifdef ARCH_TEST_HMAC
 #ifdef ARCH_TEST_SHA224
-{"Test psa_mac_verify_finish - HMAC - SHA 224\n", 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
+{
+    .test_desc       = "Test psa_mac_verify_finish - HMAC - SHA224\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_224),
+    .data            = key_data,
+    .data_length     = 64,
+    .input           = input_bytes_data,
+    .input_length    = 16,
+    .mac             = hmac_sha224,
+    .mac_length      = 28,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_SHA256
-{"Test psa_mac_verify_finish - HMAC - SHA 256\n", 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_desc       = "Test psa_mac_verify_finish - HMAC - SHA256\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_256),
+    .data            = key_data,
+    .data_length     = 64,
+    .input           = input_bytes_data,
+    .input_length    = 16,
+    .mac             = hmac_sha256,
+    .mac_length      = 32,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_SHA512
-{"Test psa_mac_verify_finish - HMAC - SHA 512\n", 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
+{
+    .test_desc       = "Test psa_mac_verify_finish - HMAC - SHA512\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_512),
+    .data            = key_data,
+    .data_length     = 64,
+    .input           = input_bytes_data,
+    .input_length    = 16,
+    .mac             = hmac_sha512,
+    .mac_length      = 64,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_SHA224
-{"Test psa_mac_verify_finish - HMAC - SHA 224 (truncated to 8 Byte)\n", 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
+{
+    .test_desc       = "Test psa_mac_verify_finish - HMAC - SHA224 - Truncated 8 Byte\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_224), 8),
+    .data            = key_data,
+    .data_length     = 64,
+    .input           = input_bytes_data,
+    .input_length    = 16,
+    .mac             = hmac_sha224,
+    .mac_length      = 8,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
+},
+
+{
+    .test_desc       = "Test psa_mac_verify_finish - HMAC - SHA224 - Invalid mac length\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_224),
+    .data            = key_data,
+    .data_length     = 64,
+    .input           = input_bytes_data,
+    .input_length    = 16,
+    .mac             = hmac_sha224,
+    .mac_length      = 30,
+    .operation_state = 1,
+    .expected_status = PSA_ERROR_INVALID_SIGNATURE
+},
+
+{
+    .test_desc       = "Test psa_mac_verify_finish - HMAC - SHA224 - Invalid expected mac\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_224),
+    .data            = key_data,
+    .data_length     = 64,
+    .input           = input_bytes_data,
+    .input_length    = 16,
+    .mac             = hmac_sha224_invalid,
+    .mac_length      = 28,
+    .operation_state = 1,
+    .expected_status = PSA_ERROR_INVALID_SIGNATURE
+},
+
+{
+    .test_desc       = "Test psa_mac_verify_finish - HMAC - SHA224 - Invalid operation state\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_224),
+    .data            = key_data,
+    .data_length     = 64,
+    .input           = input_bytes_data,
+    .input_length    = 16,
+    .mac             = hmac_sha224,
+    .mac_length      = 28,
+    .operation_state = 0,
+    .expected_status = PSA_ERROR_BAD_STATE
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_AES_128
 #ifdef ARCH_TEST_CMAC
-{"Test psa_mac_verify_finish - CMAC - AES 128\n", 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
+{
+    .test_desc       = "Test psa_mac_verify_finish - CMAC - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .usage_flags     = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg             = PSA_ALG_CMAC,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .input           = input_bytes_data,
+    .input_length    = 16,
+    .mac             = cmac_aes_128,
+    .mac_length      = 16,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 #endif
-
-#ifdef ARCH_TEST_HMAC
-#ifdef ARCH_TEST_SHA256
-{"Test psa_mac_verify_finish - small size buffer\n", 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
-},
-
-{"Test psa_mac_verify_finish - Incorrect expected MAC\n", 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,
- 0x39, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 32,
- PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_256),
- PSA_ERROR_INVALID_SIGNATURE
-},
-#endif
 #endif
 };
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 bec961d..0c4d977 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c030.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 30)
-#define TEST_DESC "Testing crypto MAC APIs\n"
+#define TEST_DESC "Testing crypto MAC APIs | UT: psa_mac_verify_finish\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 f4ffff1..9f43f31 100644
--- a/api-tests/dev_apis/crypto/test_c031/test_c031.c
+++ b/api-tests/dev_apis/crypto/test_c031/test_c031.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -29,16 +29,15 @@
 
 extern  uint32_t g_test_count;
 
-static uint8_t     data[BUFFER_SIZE];
 static int32_t  valid_test_input_index = -1;
 
 int32_t psa_mac_abort_test(caller_security_t caller __UNUSED)
 {
-    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               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;
-    psa_key_handle_t      key_handle;
+    psa_key_attributes_t  attributes;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -54,37 +53,55 @@
     {
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
-        memset(&operation, 0, sizeof(operation));
+
+        val->crypto_function(VAL_CRYPTO_KEY_ATTRIBUTES_INIT,
+                             &attributes);
+        val->crypto_function(VAL_CRYPTO_MAC_OPERATION_INIT,
+                             &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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, check1[i].key_alg);
+        status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP,
+                                      &operation,
+                                      key,
+                                      check1[i].alg);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
         /* Abort a MAC operation */
-        status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation);
+        status = val->crypto_function(VAL_CRYPTO_MAC_ABORT,
+                                      &operation);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
         /* Multiple Abort a MAC operation should succeed */
-        status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation);
+        status = val->crypto_function(VAL_CRYPTO_MAC_ABORT,
+                                      &operation);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
         if (valid_test_input_index < 0)
@@ -96,19 +113,17 @@
 
 int32_t psa_mac_abort_before_finish_test(caller_security_t caller __UNUSED)
 {
-    size_t                length;
-    psa_key_handle_t      key_handle = 10;
+    size_t                mac_length;
+    psa_key_id_t          key;
     psa_mac_operation_t   operation;
-    uint8_t               input_data[] = {0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65};
-    size_t                inputdata_size = sizeof(input_data);
     int32_t               status;
     psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
 
     if (valid_test_input_index < 0)
         return RESULT_SKIP(VAL_STATUS_NO_TESTS);
 
-    memset(data, 0, sizeof(data));
-    memset(&operation, 0, sizeof(operation));
+    val->crypto_function(VAL_CRYPTO_MAC_OPERATION_INIT,
+                         &operation);
 
     val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
     val->print(PRINT_TEST, "Test psa_mac_sign_finish after calling psa_mac_abort\n", 0);
@@ -124,33 +139,34 @@
     /* Setup the attributes for the key */
     val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
                          &attributes,
-                         check1[valid_test_input_index].key_type);
+                         check1[valid_test_input_index].type);
     val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
                          &attributes,
-                         check1[valid_test_input_index].usage);
+                         check1[valid_test_input_index].usage_flags);
     val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
                          &attributes,
-                         check1[valid_test_input_index].key_alg);
+                         check1[valid_test_input_index].alg);
 
     /* Import the key data into the key slot */
     status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
                                   &attributes,
-                                  check1[valid_test_input_index].key_data,
-                                  check1[valid_test_input_index].key_length,
-                                  &key_handle);
+                                  check1[valid_test_input_index].data,
+                                  check1[valid_test_input_index].data_length,
+                                  &key);
     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,
-                                  check1[valid_test_input_index].key_alg);
+                                  key,
+                                  check1[valid_test_input_index].alg);
     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,
-                                  input_data,
-                                  inputdata_size);
+    status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE,
+                                  &operation,
+                                  input_bytes_data,
+                                  16);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
     /* Abort a MAC operation */
@@ -161,14 +177,14 @@
     /* Finish the calculation of the MAC of a message */
     status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_FINISH,
                                   &operation,
-                                  data,
+                                  expected_output,
                                   BUFFER_SIZE,
-                                  &length);
+                                  &mac_length);
     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);
+                                  key);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c031/test_data.h b/api-tests/dev_apis/crypto/test_c031/test_data.h
index 50590eb..86817ad 100644
--- a/api-tests/dev_apis/crypto/test_c031/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c031/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,64 +15,77 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    psa_key_type_t          key_type;
-    uint8_t                 key_data[64];
-    uint32_t                key_length;
-    psa_key_usage_t         usage;
-    psa_algorithm_t         key_alg;
+    psa_key_type_t          type;
+    psa_key_usage_t         usage_flags;
+    psa_algorithm_t         alg;
+    const uint8_t          *data;
+    size_t                  data_length;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
 #ifdef ARCH_TEST_HMAC
 #ifdef ARCH_TEST_SHA224
-{"Test psa_mac_abort HMAC SHA 224\n", 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,
- PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_224),
- PSA_SUCCESS
+{
+    .test_desc       = "Test psa_mac_abort - HMAC - SHA224\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_HASH,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_224),
+    .data            = key_data,
+    .data_length     = 64,
+    .expected_status = PSA_SUCCESS
+},
+
+{
+    .test_desc       = "Test psa_mac_abort - HMAC - SHA224 - Truncated 8 Byte\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_HASH,
+    .alg             = PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_224), 8),
+    .data            = key_data,
+    .data_length     = 64,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_SHA256
-{"Test psa_mac_abort HMAC SHA 256\n", 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,
- PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_256),
- PSA_SUCCESS
+{
+    .test_desc       = "Test psa_mac_abort - HMAC - SHA256\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_HASH,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_256),
+    .data            = key_data,
+    .data_length     = 64,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 
 #ifdef ARCH_TEST_SHA512
-{"Test psa_mac_abort HMAC SHA 512\n", 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,
- PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_512),
- PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_SHA224
-{"Test psa_mac_abort HMAC SHA 224 (truncated to 8 Byte)\n", 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,
- PSA_KEY_USAGE_SIGN, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_224), 8),
- PSA_SUCCESS
+{
+    .test_desc       = "Test psa_mac_abort - HMAC - SHA512\n",
+    .type            = PSA_KEY_TYPE_HMAC,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_HASH,
+    .alg             = PSA_ALG_HMAC(PSA_ALG_SHA_512),
+    .data            = key_data,
+    .data_length     = 64,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_AES_128
 #ifdef ARCH_TEST_CMAC
-{"Test psa_mac_abort CMAC AES 128\n", PSA_KEY_TYPE_AES,
-{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,
- 0xcf, 0x4f, 0x3c}, 16,
- PSA_KEY_USAGE_SIGN, PSA_ALG_CMAC,
- PSA_SUCCESS
+{
+    .test_desc       = "Test psa_mac_abort - CMAC - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .usage_flags     = PSA_KEY_USAGE_SIGN_HASH,
+    .alg             = PSA_ALG_CMAC,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 #endif
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 ec266aa..a089fae 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c031.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 31)
-#define TEST_DESC "Testing crypto MAC APIs\n"
+#define TEST_DESC "Testing crypto MAC APIs | UT: psa_mac_abort\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 ada4cb4..40a79e7 100644
--- a/api-tests/dev_apis/crypto/test_c032/test_c032.c
+++ b/api-tests/dev_apis/crypto/test_c032/test_c032.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,7 +37,7 @@
     int32_t                 i, status;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
     psa_cipher_operation_t  operation;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -68,12 +68,12 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         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, check1[i].alg);
+                    key, check1[i].alg);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         /* Whether setup succeeded or failed, abort must succeed.
@@ -85,7 +85,7 @@
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation,
-                        key_handle, check1[i].alg);
+                        key, check1[i].alg);
             TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
 
             status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation);
@@ -93,13 +93,13 @@
         }
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         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_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_NOT_SUPPORTED, TEST_CHECKPOINT_NUM(9));
 
         if (valid_test_input_index < 0)
@@ -113,7 +113,7 @@
 {
     int32_t                 status;
     psa_cipher_operation_t  operation;
-    psa_key_handle_t        key_handle = 16;
+    psa_key_id_t            key = 16;
 
     if (valid_test_input_index < 0)
         return RESULT_SKIP(VAL_STATUS_NO_TESTS);
@@ -131,7 +131,7 @@
                                                                                g_test_count++);
     /* Set the key for a multipart symmetric encryption operation */
     status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation,
-                                  key_handle, check1[valid_test_input_index].alg);
+                                  key, check1[valid_test_input_index].alg);
     TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
 
     val->print(PRINT_TEST, "[Check %d] Test psa_cipher_encrypt_setup - Zero as key handle\n",
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 0e3f681..449542e 100644
--- a/api-tests/dev_apis/crypto/test_c032/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c032/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -146,7 +146,7 @@
     .data_length     = AES_16B_KEY_SIZE,
     .bits            = BYTES_TO_BITS(AES_16B_KEY_SIZE),
     .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
-    .alg             = PSA_ALG_CATEGORY_CIPHER,
+    .alg             = PSA_ALG_NONE,
     .expected_status = PSA_ERROR_NOT_SUPPORTED
 },
 #endif
@@ -208,12 +208,12 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {
     .test_desc       = "Test psa_cipher_encrypt_setup - EC Public key\n",
-    .type            = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+    .type            = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
     .data            = ec_key_data,
     .data_length     = 65,
     .bits            = 256,
     .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
-    .alg             = PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
+    .alg             = PSA_ALG_ECDSA_ANY,
     .expected_status = PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
@@ -221,12 +221,12 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 {
     .test_desc       = "Test psa_cipher_encrypt_setup - EC keypair\n",
-    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
+    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data            = ec_key_pair,
     .data_length     = 28,
     .bits            = 224,
     .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
-    .alg             = PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
+    .alg             = PSA_ALG_ECDSA_ANY,
     .expected_status = PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
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 720f775..9e82238 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c032.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 32)
-#define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+#define TEST_DESC "Testing crypto symmetric cipher APIs | UT: psa_cipher_encrypt_setup\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 4925162..51be04b 100644
--- a/api-tests/dev_apis/crypto/test_c033/test_c033.c
+++ b/api-tests/dev_apis/crypto/test_c033/test_c033.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,7 +37,7 @@
     int32_t                 i, status;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
     psa_cipher_operation_t  operation;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -54,7 +54,7 @@
     {
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
-        memset(&operation, 0, sizeof(operation));
+        val->crypto_function(VAL_CRYPTO_CIPHER_OPERATION_INIT, &operation);
 
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
@@ -67,11 +67,11 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         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, key_handle,
+        status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, key,
                                       check1[i].alg);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
@@ -83,7 +83,7 @@
 
         if (check1[i].expected_status != PSA_SUCCESS)
         {
-            status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, key_handle,
+            status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, key,
                                           check1[i].alg);
             TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6));
 
@@ -93,13 +93,13 @@
         }
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         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_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_NOT_SUPPORTED, TEST_CHECKPOINT_NUM(9));
 
         if (valid_test_input_index < 0)
@@ -113,7 +113,7 @@
 {
     int32_t                 status;
     psa_cipher_operation_t  operation;
-    psa_key_handle_t        key_handle = 16;
+    psa_key_id_t            key = 16;
 
     if (valid_test_input_index < 0)
         return RESULT_SKIP(VAL_STATUS_NO_TESTS);
@@ -131,7 +131,7 @@
     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 */
-    status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, key_handle,
+    status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, key,
                                   check1[valid_test_input_index].alg);
     TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
 
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 0badf5e..8ab59f0 100644
--- a/api-tests/dev_apis/crypto/test_c033/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c033/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -136,7 +136,7 @@
     .data            = key_data,
     .data_length     = AES_16B_KEY_SIZE,
     .usage_flags     = PSA_KEY_USAGE_DECRYPT,
-    .alg             = PSA_ALG_CATEGORY_CIPHER,
+    .alg             = PSA_ALG_NONE,
     .expected_status = PSA_ERROR_NOT_SUPPORTED
 },
 #endif
@@ -194,11 +194,11 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {
     .test_desc       = "Test psa_cipher_decrypt_setup - EC Public key\n",
-    .type            = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+    .type            = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
     .data            = ec_key_data,
     .data_length     = 65,
     .usage_flags     = PSA_KEY_USAGE_DECRYPT,
-    .alg             = PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
+    .alg             = PSA_ALG_ECDSA_ANY,
     .expected_status = PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
@@ -206,11 +206,11 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 {
     .test_desc       = "Test psa_cipher_decrypt_setup - EC keypair\n",
-    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
+    .type            = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data            = ec_key_pair,
     .data_length     = 28,
     .usage_flags     = PSA_KEY_USAGE_DECRYPT,
-    .alg             = PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
+    .alg             = PSA_ALG_ECDSA_ANY,
     .expected_status = PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
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 0c06a40..37ef13c 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c033.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 33)
-#define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+#define TEST_DESC "Testing crypto symmetric cipher APIs | UT: psa_cipher_decrypt_setup\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 b248185..2816570 100644
--- a/api-tests/dev_apis/crypto/test_c034/test_c034.c
+++ b/api-tests/dev_apis/crypto/test_c034/test_c034.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -34,7 +34,7 @@
     psa_cipher_operation_t  operation;
     int32_t                 status;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -50,7 +50,7 @@
     {
         val->print(PRINT_TEST, "[Check %d] ", i+1);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
-        memset(&operation, 0, sizeof(operation));
+        val->crypto_function(VAL_CRYPTO_CIPHER_OPERATION_INIT, &operation);
 
         /* Setting up the watchdog timer for each check */
         status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT);
@@ -63,11 +63,11 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         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,
+        status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, key,
                                       check1[i].alg);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
@@ -83,7 +83,7 @@
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
 
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
             continue;
@@ -111,13 +111,13 @@
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         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);
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_NOT_SUPPORTED, TEST_CHECKPOINT_NUM(3));
     }
 
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 28b2a67..2792e55 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c034.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 34)
-#define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+#define TEST_DESC "Testing crypto symmetric cipher APIs | UT: psa_cipher_generate_iv\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 43fed89..9b6b885 100644
--- a/api-tests/dev_apis/crypto/test_c035/test_c035.c
+++ b/api-tests/dev_apis/crypto/test_c035/test_c035.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -32,7 +32,7 @@
     int32_t                 i, status;
     psa_cipher_operation_t  operation;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -61,11 +61,11 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         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,
+        status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, key,
                                       check1[i].alg);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
@@ -86,13 +86,13 @@
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         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_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_NOT_SUPPORTED, TEST_CHECKPOINT_NUM(9));
     }
 
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 9323895..6bbabc7 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c035.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 35)
-#define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+#define TEST_DESC "Testing crypto symmetric cipher APIs | UT: psa_cipher_set_iv\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 f9d43ca..cd28cde 100644
--- a/api-tests/dev_apis/crypto/test_c036/test_c036.c
+++ b/api-tests/dev_apis/crypto/test_c036/test_c036.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -29,7 +29,6 @@
 
 extern  uint32_t g_test_count;
 
-
 int32_t psa_cipher_update_test(caller_security_t caller __UNUSED)
 {
     int32_t                 num_checks = sizeof(check1)/sizeof(check1[0]);
@@ -37,7 +36,7 @@
     size_t                  expected_output_length;
     psa_cipher_operation_t  operation;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -69,7 +68,7 @@
                                       &attributes,
                                       check1[i].data,
                                       check1[i].data_length,
-                                      &key_handle);
+                                      &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         if (check1[i].usage_flags == PSA_KEY_USAGE_ENCRYPT)
@@ -77,14 +76,14 @@
             /* Set the key for a multipart symmetric encryption operation */
             status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP,
                                           &operation,
-                                          key_handle,
+                                          key,
                                           check1[i].alg);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
         } else if (check1[i].usage_flags == PSA_KEY_USAGE_DECRYPT)
         {
             status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP,
                                           &operation,
-                                          key_handle,
+                                          key,
                                           check1[i].alg);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
         }
@@ -113,7 +112,7 @@
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
             continue;
         }
@@ -131,7 +130,7 @@
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13));
 
         /* Reset the key attributes and check if psa_import_key fails */
@@ -140,7 +139,7 @@
                                       &attributes,
                                       check1[i].data,
                                       check1[i].data_length,
-                                      &key_handle);
+                                      &key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_NOT_SUPPORTED, TEST_CHECKPOINT_NUM(14));
     }
 
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 e42ad47..133a0f3 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c036.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 36)
-#define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+#define TEST_DESC "Testing crypto symmetric cipher APIs | UT: psa_cipher_update\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 fef6c0c..d108443 100644
--- a/api-tests/dev_apis/crypto/test_c037/test_c037.c
+++ b/api-tests/dev_apis/crypto/test_c037/test_c037.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -33,7 +33,7 @@
     size_t                  get_update_output_length, get_finish_output_length;
     psa_cipher_operation_t  operation, invalid_operation;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -63,19 +63,19 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         if (check1[i].usage_flags == PSA_KEY_USAGE_ENCRYPT)
         {
             /* Set the key for a multipart symmetric encryption operation */
-            status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, key_handle,
+            status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, key,
                                           check1[i].alg);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
         } else if (check1[i].usage_flags == PSA_KEY_USAGE_DECRYPT)
         {
             /* Set the key for a multipart symmetric decryption operation */
-            status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, key_handle,
+            status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, key,
                                           check1[i].alg);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
         }
@@ -105,7 +105,7 @@
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
 
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
             continue;
         }
@@ -135,13 +135,13 @@
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         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);
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_NOT_SUPPORTED, TEST_CHECKPOINT_NUM(3));
     }
 
diff --git a/api-tests/dev_apis/crypto/test_c037/test_data.h b/api-tests/dev_apis/crypto/test_c037/test_data.h
index 36e05f0..ab40aa8 100644
--- a/api-tests/dev_apis/crypto/test_c037/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c037/test_data.h
@@ -269,7 +269,7 @@
     .output_size            = 0,
     .expected_output        = NULL,
     .expected_output_length = 0,
-    .expected_status        = PSA_ERROR_BAD_STATE
+    .expected_status        = PSA_ERROR_INVALID_ARGUMENT
 },
 
 #endif
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 77c5a45..dbc6984 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c037.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 37)
-#define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+#define TEST_DESC "Testing crypto symmetric cipher APIs | UT: psa_cipher_finish\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 8752020..8b1b840 100644
--- a/api-tests/dev_apis/crypto/test_c038/test_c038.c
+++ b/api-tests/dev_apis/crypto/test_c038/test_c038.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,7 +37,7 @@
     int32_t                 i, status;
     psa_cipher_operation_t  operation;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -66,19 +66,19 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         if (check1[i].usage_flags == PSA_KEY_USAGE_ENCRYPT)
         {
             /* Set the key for a multipart symmetric encryption operation */
-            status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, key_handle,
+            status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, key,
                                           check1[i].alg);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
         } else if (check1[i].usage_flags == PSA_KEY_USAGE_DECRYPT)
         {
             /* Set the key for a multipart symmetric decryption operation */
-            status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, key_handle,
+            status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, key,
                                           check1[i].alg);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
         }
@@ -92,7 +92,7 @@
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
         /* Reset the key attributes and check if psa_import_key fails */
@@ -108,7 +108,7 @@
 int32_t psa_cipher_abort_before_update_test(caller_security_t caller __UNUSED)
 {
     size_t                  get_output_length;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
     psa_cipher_operation_t  operation;
     int32_t                 status;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
@@ -139,11 +139,11 @@
     /* Import the key data into the key slot */
     status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
                                   &attributes, check1[valid_test_input_index].data,
-                                  check1[valid_test_input_index].data_length, &key_handle);
+                                  check1[valid_test_input_index].data_length, &key);
     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,
+    status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, key,
                                   check1[valid_test_input_index].alg);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
@@ -161,7 +161,7 @@
     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);
+    status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
     /* Reset the key attributes and check if psa_import_key fails */
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 e82617f..276215b 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c038.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 38)
-#define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+#define TEST_DESC "Testing crypto symmetric cipher APIs | UT: psa_cipher_abort\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 7e1e62d..bf4ebad 100644
--- a/api-tests/dev_apis/crypto/test_c039/test_c039.c
+++ b/api-tests/dev_apis/crypto/test_c039/test_c039.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,7 +37,7 @@
     int32_t                 i, status;
     size_t                  get_output_length;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -65,12 +65,12 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Encrypt a short message with a public key */
-        status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_ENCRYPT,
-                                      key_handle,
+        status = val->crypto_function(VAL_CRYPTO_ASYMMETRIC_ENCRYPT,
+                                      key,
                                       check1[i].alg,
                                       check1[i].input,
                                       check1[i].input_length,
@@ -84,7 +84,7 @@
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
             /* Reset the key attributes and check if psa_import_key fails */
@@ -101,8 +101,8 @@
          * part of encryption process which prevents using fixed vectors. */
         if ((check1[i].usage_flags & PSA_KEY_USAGE_DECRYPT) == PSA_KEY_USAGE_DECRYPT)
         {
-            status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_DECRYPT,
-                                          key_handle,
+            status = val->crypto_function(VAL_CRYPTO_ASYMMETRIC_DECRYPT,
+                                          key,
                                           check1[i].alg,
                                           check1[i].output,
                                           get_output_length,
@@ -122,13 +122,13 @@
         }
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         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);
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_NOT_SUPPORTED, TEST_CHECKPOINT_NUM(11));
 
         if (valid_test_input_index < 0)
@@ -142,7 +142,7 @@
 {
     int32_t                 status;
     size_t                  get_output_length;
-    psa_key_handle_t        key_handle = 11;
+    psa_key_id_t            key = 11;
 
     if (valid_test_input_index < 0)
         return RESULT_SKIP(VAL_STATUS_NO_TESTS);
@@ -158,8 +158,8 @@
     val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_encrypt - Invalid key handle\n",
                                                                              g_test_count++);
     /* Encrypt a short message with a public key */
-    status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_ENCRYPT,
-                                  key_handle,
+    status = val->crypto_function(VAL_CRYPTO_ASYMMETRIC_ENCRYPT,
+                                  key,
                                   check1[valid_test_input_index].alg,
                                   check1[valid_test_input_index].input,
                                   check1[valid_test_input_index].input_length,
@@ -173,7 +173,7 @@
     val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_encrypt - Zero as key handle\n",
                                                                              g_test_count++);
     /* Encrypt a short message with a public key */
-    status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_ENCRYPT,
+    status = val->crypto_function(VAL_CRYPTO_ASYMMETRIC_ENCRYPT,
                                   0,
                                   check1[valid_test_input_index].alg,
                                   check1[valid_test_input_index].input,
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 a6cf0a0..446ecd9 100644
--- a/api-tests/dev_apis/crypto/test_c039/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c039/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -244,14 +244,13 @@
 
 #ifdef ARCH_TEST_ECDSA
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
-#ifdef ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT
 {
     .test_desc              = "Test psa_asymmetric_encrypt - ECC public key\n",
-    .type                   = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+    .type                   = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
     .data                   = ec_key_data,
     .data_length            = 65,
     .usage_flags            = PSA_KEY_USAGE_ENCRYPT,
-    .alg                    = PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION,
+    .alg                    = PSA_ALG_ECDSA_ANY,
     .input                  = NULL,
     .input_length           = 0,
     .salt                   = NULL,
@@ -263,5 +262,4 @@
 },
 #endif
 #endif
-#endif
 };
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 b9c58de..5b808dd 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c039.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 39)
-#define TEST_DESC "Testing crypto asymmetric APIs\n"
+#define TEST_DESC "Testing crypto asymmetric APIs | UT: psa_asymmetric_encrypt\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 3330b37..8aaa769 100644
--- a/api-tests/dev_apis/crypto/test_c040/test_c040.c
+++ b/api-tests/dev_apis/crypto/test_c040/test_c040.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,7 +37,7 @@
     int32_t                 i, status;
     size_t                  get_output_length;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -65,12 +65,12 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Decrypt a short message with a private key */
-        status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_DECRYPT,
-                                      key_handle,
+        status = val->crypto_function(VAL_CRYPTO_ASYMMETRIC_DECRYPT,
+                                      key,
                                       check1[i].alg,
                                       check1[i].input,
                                       check1[i].input_length,
@@ -84,7 +84,7 @@
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
             continue;
@@ -99,13 +99,13 @@
                            TEST_CHECKPOINT_NUM(7));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         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_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_NOT_SUPPORTED, TEST_CHECKPOINT_NUM(9));
 
         if (valid_test_input_index < 0)
@@ -119,7 +119,7 @@
 {
     int32_t                 status;
     size_t                  get_output_length;
-    psa_key_handle_t        key_handle = 1;
+    psa_key_id_t            key = 1;
 
     if (valid_test_input_index < 0)
         return RESULT_SKIP(VAL_STATUS_NO_TESTS);
@@ -135,8 +135,8 @@
     val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_decrypt - Invalid key handle\n",
                                                                              g_test_count++);
     /* Encrypt a short message with a public key */
-    status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_DECRYPT,
-                                  key_handle,
+    status = val->crypto_function(VAL_CRYPTO_ASYMMETRIC_DECRYPT,
+                                  key,
                                   check1[valid_test_input_index].alg,
                                   check1[valid_test_input_index].input,
                                   check1[valid_test_input_index].input_length,
@@ -150,7 +150,7 @@
     val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_decrypt - Zero as key handle\n",
                                                                              g_test_count++);
     /* Encrypt a short message with a public key */
-    status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_DECRYPT,
+    status = val->crypto_function(VAL_CRYPTO_ASYMMETRIC_DECRYPT,
                                   0,
                                   check1[valid_test_input_index].alg,
                                   check1[valid_test_input_index].input,
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 f9ade00..419db73 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c040.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 40)
-#define TEST_DESC "Testing crypto asymmetric APIs\n"
+#define TEST_DESC "Testing crypto asymmetric APIs | UT: psa_asymmetric_decrypt\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 4ce8b7b..ec6c47a 100644
--- a/api-tests/dev_apis/crypto/test_c041/test_c041.c
+++ b/api-tests/dev_apis/crypto/test_c041/test_c041.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,8 +22,8 @@
 
 const client_test_t test_c041_crypto_list[] = {
     NULL,
-    psa_asymmetric_sign_test,
-    psa_asymmetric_sign_negative_test,
+    psa_sign_hash_test,
+    psa_sign_hash_negative_test,
     NULL,
 };
 
@@ -31,13 +31,13 @@
 
 static int32_t  valid_test_input_index = -1;
 
-int32_t psa_asymmetric_sign_test(caller_security_t caller __UNUSED)
+int32_t psa_sign_hash_test(caller_security_t caller __UNUSED)
 {
     int32_t                 num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t                 i, status;
     size_t                  get_signature_length;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -65,12 +65,12 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         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,
-                                      key_handle,
+        status = val->crypto_function(VAL_CRYPTO_SIGN_HASH,
+                                      key,
                                       check1[i].alg,
                                       check1[i].hash,
                                       check1[i].hash_length,
@@ -82,7 +82,7 @@
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
             continue;
@@ -97,7 +97,7 @@
                            TEST_CHECKPOINT_NUM(7));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
         if (valid_test_input_index < 0)
@@ -107,11 +107,11 @@
     return VAL_STATUS_SUCCESS;
 }
 
-int32_t psa_asymmetric_sign_negative_test(caller_security_t caller __UNUSED)
+int32_t psa_sign_hash_negative_test(caller_security_t caller __UNUSED)
 {
     int32_t                 status;
     size_t                  get_signature_length;
-    psa_key_handle_t        key_handle = 10;
+    psa_key_id_t            key = 10;
 
     if (valid_test_input_index < 0)
         return RESULT_SKIP(VAL_STATUS_NO_TESTS);
@@ -124,11 +124,11 @@
     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_asymmetric_sign - Invalid key handle\n",
+    val->print(PRINT_TEST, "[Check %d] Test psa_sign_hash - Invalid key handle\n",
                                                                             g_test_count++);
     /* Sign a hash or short message with a private key */
-    status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_SIGN,
-                                  key_handle,
+    status = val->crypto_function(VAL_CRYPTO_SIGN_HASH,
+                                  key,
                                   check1[valid_test_input_index].alg,
                                   check1[valid_test_input_index].hash,
                                   check1[valid_test_input_index].hash_length,
@@ -137,10 +137,10 @@
                                   &get_signature_length);
     TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
 
-    val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_sign - Zero as key handle\n",
+    val->print(PRINT_TEST, "[Check %d] Test psa_sign_hash - Zero as key handle\n",
                                                                             g_test_count++);
     /* Sign a hash or short message with a private key */
-    status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_SIGN,
+    status = val->crypto_function(VAL_CRYPTO_SIGN_HASH,
                                   0,
                                   check1[valid_test_input_index].alg,
                                   check1[valid_test_input_index].hash,
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 ecd88d5..96f77d2 100644
--- a/api-tests/dev_apis/crypto/test_c041/test_c041.h
+++ b/api-tests/dev_apis/crypto/test_c041/test_c041.h
@@ -26,8 +26,8 @@
 extern psa_api_t *psa;
 extern const client_test_t test_c041_crypto_list[];
 
-int32_t psa_asymmetric_sign_test(caller_security_t caller);
-int32_t psa_asymmetric_sign_negative_test(caller_security_t caller);
+int32_t psa_sign_hash_test(caller_security_t caller);
+int32_t psa_sign_hash_negative_test(caller_security_t caller);
 extern void crypto_common_exit_action(void);
 
 #endif /* _TEST_C041_CLIENT_TESTS_H_ */
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 7af5157..68422c4 100644
--- a/api-tests/dev_apis/crypto/test_c041/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c041/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,11 +37,11 @@
 #ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
 {
-    .test_desc                 = "Test psa_asymmetric_sign - RSA KEY_PAIR PKCS1V15 RAW\n",
+    .test_desc                 = "Test psa_sign_hash - RSA KEY_PAIR PKCS1V15 RAW\n",
     .type                      = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data                      = rsa_128_key_pair,
     .data_length               = 610,
-    .usage_flags               = PSA_KEY_USAGE_SIGN,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_HASH,
     .alg                       = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
     .hash                      = sha_256_hash,
     .hash_length               = 32,
@@ -56,11 +56,11 @@
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
 #ifdef ARCH_TEST_SHA256
 {
-    .test_desc                 = "Test psa_asymmetric_sign - RSA KEY_PAIR PKCS1V15 SHA-256\n",
+    .test_desc                 = "Test psa_sign_hash - RSA KEY_PAIR PKCS1V15 SHA-256\n",
     .type                      = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data                      = rsa_128_key_pair,
     .data_length               = 610,
-    .usage_flags               = PSA_KEY_USAGE_SIGN,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_HASH,
     .alg                       = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
     .hash                      = sha_256_hash,
     .hash_length               = 32,
@@ -78,11 +78,11 @@
 #ifdef ARCH_TEST_DETERMINISTIC_ECDSA
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {
-    .test_desc                 = "Test psa_asymmetric_sign - ECDSA SECP256R1 SHA-256\n",
-    .type                      = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+    .test_desc                 = "Test psa_sign_hash - ECDSA SECP256R1 SHA-256\n",
+    .type                      = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data                      = ec_keypair,
     .data_length               = 32,
-    .usage_flags               = PSA_KEY_USAGE_SIGN,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_HASH,
     .alg                       = PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256),
     .hash                      = sha_256_hash,
     .hash_length               = 32,
@@ -98,11 +98,11 @@
 #ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
 {
-    .test_desc                 = "Test psa_asymmetric_sign - Invalid key type (RSA public key)\n",
+    .test_desc                 = "Test psa_sign_hash - Invalid key type (RSA public key)\n",
     .type                      = PSA_KEY_TYPE_RSA_PUBLIC_KEY,
     .data                      = rsa_128_key_data,
     .data_length               = 162,
-    .usage_flags               = PSA_KEY_USAGE_SIGN,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_HASH,
     .alg                       = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
     .hash                      = NULL,
     .hash_length               = 0,
@@ -114,11 +114,11 @@
 },
 
 {
-    .test_desc                 = "Test psa_asymmetric_sign - Small output buffer\n",
+    .test_desc                 = "Test psa_sign_hash - Small output buffer\n",
     .type                      = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data                      = rsa_128_key_pair,
     .data_length               = 610,
-    .usage_flags               = PSA_KEY_USAGE_SIGN,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_HASH,
     .alg                       = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
     .hash                      = sha_256_hash,
     .hash_length               = 32,
@@ -131,11 +131,11 @@
 #endif
 
 {
-    .test_desc                 = "Test psa_asymmetric_sign - Invalid algorithm\n",
+    .test_desc                 = "Test psa_sign_hash - Invalid algorithm\n",
     .type                      = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data                      = rsa_128_key_pair,
     .data_length               = 610,
-    .usage_flags               = PSA_KEY_USAGE_SIGN,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_HASH,
     .alg                       = PSA_ALG_SHA_256,
     .hash                      = NULL,
     .hash_length               = 0,
@@ -150,11 +150,11 @@
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
 #ifdef ARCH_TEST_AES_128
 {
-    .test_desc                 = "Test psa_asymmetric_sign - Invalid key type (AES Key)\n",
+    .test_desc                 = "Test psa_sign_hash - Invalid key type (AES Key)\n",
     .type                      = PSA_KEY_TYPE_AES,
     .data                      = key_data,
     .data_length               = AES_16B_KEY_SIZE,
-    .usage_flags               = PSA_KEY_USAGE_SIGN,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_HASH,
     .alg                       = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
     .hash                      = NULL,
     .hash_length               = 0,
@@ -171,7 +171,7 @@
 #ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
 {
-    .test_desc                 = "Test psa_asymmetric_sign - Invalid usage\n",
+    .test_desc                 = "Test psa_sign_hash - Invalid usage\n",
     .type                      = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data                      = rsa_128_key_pair,
     .data_length               = 610,
@@ -190,11 +190,11 @@
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
 #ifdef ARCH_TEST_SHA256
 {
-    .test_desc                 = "Test psa_asymmetric_sign - Wrong hash size\n",
+    .test_desc                 = "Test psa_sign_hash - Wrong hash size\n",
     .type                      = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data                      = rsa_128_key_pair,
     .data_length               = 610,
-    .usage_flags               = PSA_KEY_USAGE_SIGN,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_HASH,
     .alg                       = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
     .hash                      = sha_256_hash,
     .hash_length               = 31,
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 444e9a2..2e10d6d 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c041.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 41)
-#define TEST_DESC "Testing crypto asymmetric APIs\n"
+#define TEST_DESC "Testing crypto asymmetric APIs | UT: psa_asymmetric_sign\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 adff853..6948577 100644
--- a/api-tests/dev_apis/crypto/test_c042/test_c042.c
+++ b/api-tests/dev_apis/crypto/test_c042/test_c042.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,8 +22,8 @@
 
 const client_test_t test_c042_crypto_list[] = {
     NULL,
-    psa_asymmetric_verify_test,
-    psa_asymmetric_verify_negative_test,
+    psa_verify_hash_test,
+    psa_verify_hash_negative_test,
     NULL,
 };
 
@@ -31,13 +31,12 @@
 
 static int32_t  valid_test_input_index = -1;
 
-
-int32_t psa_asymmetric_verify_test(caller_security_t caller __UNUSED)
+int32_t psa_verify_hash_test(caller_security_t caller __UNUSED)
 {
     int32_t                 num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t                 i, status;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -65,12 +64,12 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         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,
-                                      key_handle,
+        status = val->crypto_function(VAL_CRYPTO_VERIFY_HASH,
+                                      key,
                                       check1[i].alg,
                                       check1[i].hash,
                                       check1[i].hash_length,
@@ -79,7 +78,7 @@
         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, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
         if (valid_test_input_index < 0)
@@ -89,10 +88,10 @@
     return VAL_STATUS_SUCCESS;
 }
 
-int32_t psa_asymmetric_verify_negative_test(caller_security_t caller __UNUSED)
+int32_t psa_verify_hash_negative_test(caller_security_t caller __UNUSED)
 {
     int32_t                 status;
-    psa_key_handle_t        key_handle = 13;
+    psa_key_id_t            key = 13;
 
     if (valid_test_input_index < 0)
         return RESULT_SKIP(VAL_STATUS_NO_TESTS);
@@ -101,7 +100,7 @@
     status = val->crypto_function(VAL_CRYPTO_INIT);
     TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1));
 
-    val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_verify - Invalid key handle\n",
+    val->print(PRINT_TEST, "[Check %d] Test psa_verify_hash - Invalid key handle\n",
                                                                              g_test_count++);
 
     /* Setting up the watchdog timer for each check */
@@ -109,8 +108,8 @@
     TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
     /* Verify the signature a hash or short message using a public key */
-    status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_VERIFY,
-                                  key_handle,
+    status = val->crypto_function(VAL_CRYPTO_VERIFY_HASH,
+                                  key,
                                   check1[valid_test_input_index].alg,
                                   check1[valid_test_input_index].hash,
                                   check1[valid_test_input_index].hash_length,
@@ -118,10 +117,10 @@
                                   check1[valid_test_input_index].signature_length);
     TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
 
-    val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_verify - Zero as key handle\n",
+    val->print(PRINT_TEST, "[Check %d] Test psa_verify_hash - Zero as 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,
+    status = val->crypto_function(VAL_CRYPTO_VERIFY_HASH,
                                   0,
                                   check1[valid_test_input_index].alg,
                                   check1[valid_test_input_index].hash,
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 fca2029..232130e 100644
--- a/api-tests/dev_apis/crypto/test_c042/test_c042.h
+++ b/api-tests/dev_apis/crypto/test_c042/test_c042.h
@@ -26,8 +26,8 @@
 extern psa_api_t *psa;
 extern const client_test_t test_c042_crypto_list[];
 
-int32_t psa_asymmetric_verify_test(caller_security_t caller);
-int32_t psa_asymmetric_verify_negative_test(caller_security_t caller);
+int32_t psa_verify_hash_test(caller_security_t caller);
+int32_t psa_verify_hash_negative_test(caller_security_t caller);
 extern void crypto_common_exit_action(void);
 
 #endif /* _TEST_C042_CLIENT_TESTS_H_ */
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 26c791e..f219a8d 100644
--- a/api-tests/dev_apis/crypto/test_c042/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c042/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -35,11 +35,11 @@
 #ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
 {
-    .test_desc        = "Test psa_asymmetric_verify - RSA KEY_PAIR PKCS1V15 RAW\n",
+    .test_desc        = "Test psa_verify_hash - RSA KEY_PAIR PKCS1V15 RAW\n",
     .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data             = rsa_128_key_pair,
     .data_length      = 610,
-    .usage_flags      = PSA_KEY_USAGE_VERIFY,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_HASH,
     .alg              = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
     .hash             = sha_256_hash,
     .hash_length      = 32,
@@ -52,11 +52,11 @@
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
 #ifdef ARCH_TEST_SHA256
 {
-    .test_desc        = "Test psa_asymmetric_verify - RSA KEY_PAIR PKCS1V15 SHA-256\n",
+    .test_desc        = "Test psa_verify_hash - RSA KEY_PAIR PKCS1V15 SHA-256\n",
     .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data             = rsa_128_key_pair,
     .data_length      = 610,
-    .usage_flags      = PSA_KEY_USAGE_VERIFY,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_HASH,
     .alg              = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
     .hash             = sha_256_hash,
     .hash_length      = 32,
@@ -72,11 +72,11 @@
 #ifdef ARCH_TEST_DETERMINISTIC_ECDSA
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {
-    .test_desc        = "Test psa_asymmetric_verify - ECDSA KEY_PAIR SECP256R1 SHA-256\n",
-    .type             = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+    .test_desc        = "Test psa_verify_hash - ECDSA KEY_PAIR SECP256R1 SHA-256\n",
+    .type             = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .data             = ec_keypair,
     .data_length      = 32,
-    .usage_flags      = PSA_KEY_USAGE_VERIFY,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_HASH,
     .alg              = PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256),
     .hash             = sha_256_hash,
     .hash_length      = 32,
@@ -86,11 +86,11 @@
 },
 
 {
-    .test_desc        = "Test psa_asymmetric_verify - EC public key\n",
-    .type             = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+    .test_desc        = "Test psa_verify_hash - EC public key\n",
+    .type             = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
     .data             = ec_key_data,
     .data_length      = 65,
-    .usage_flags      = PSA_KEY_USAGE_VERIFY,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_HASH,
     .alg              = PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256),
     .hash             = sha_256_hash,
     .hash_length      = 32,
@@ -105,11 +105,11 @@
 #ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
 {
-    .test_desc        = "Test psa_asymmetric_verify - RSA public key\n",
+    .test_desc        = "Test psa_verify_hash - RSA public key\n",
     .type             = PSA_KEY_TYPE_RSA_PUBLIC_KEY,
     .data             = rsa_128_key_data,
     .data_length      = 162,
-    .usage_flags      = PSA_KEY_USAGE_VERIFY,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_HASH,
     .alg              = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
     .hash             = sha_256_hash,
     .hash_length      = 32,
@@ -119,11 +119,11 @@
 },
 
 {
-    .test_desc        = "Test psa_asymmetric_verify - Small output buffer\n",
+    .test_desc        = "Test psa_verify_hash - Small output buffer\n",
     .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data             = rsa_128_key_pair,
     .data_length      = 610,
-    .usage_flags      = PSA_KEY_USAGE_VERIFY,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_HASH,
     .alg              = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
     .hash             = sha_256_hash,
     .hash_length      = 32,
@@ -134,11 +134,11 @@
 #endif
 
 {
-    .test_desc        = "Test psa_asymmetric_verify - Invalid algorithm\n",
+    .test_desc        = "Test psa_verify_hash - Invalid algorithm\n",
     .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data             = rsa_128_key_pair,
     .data_length      = 610,
-    .usage_flags      = PSA_KEY_USAGE_VERIFY,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_HASH,
     .alg              = PSA_ALG_SHA_256,
     .hash             = sha_256_hash,
     .hash_length      = 32,
@@ -151,11 +151,11 @@
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
 #ifdef ARCH_TEST_AES_128
 {
-    .test_desc        = "Test psa_asymmetric_verify - Invalid key type (AES Key)\n",
+    .test_desc        = "Test psa_verify_hash - Invalid key type (AES Key)\n",
     .type             = PSA_KEY_TYPE_AES,
     .data             = key_data,
     .data_length      = AES_16B_KEY_SIZE,
-    .usage_flags      = PSA_KEY_USAGE_VERIFY,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_HASH,
     .alg              = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
     .hash             = sha_256_hash,
     .hash_length      = 32,
@@ -169,7 +169,7 @@
 #ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
 {
-    .test_desc        = "Test psa_asymmetric_verify - Invalid usage\n",
+    .test_desc        = "Test psa_verify_hash - Invalid usage\n",
     .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data             = rsa_128_key_pair,
     .data_length      = 610,
@@ -186,11 +186,11 @@
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
 #ifdef ARCH_TEST_SHA256
 {
-    .test_desc        = "Test psa_asymmetric_verify - Wrong hash size\n",
+    .test_desc        = "Test psa_verify_hash - Wrong hash size\n",
     .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data             = rsa_128_key_pair,
     .data_length      = 610,
-    .usage_flags      = PSA_KEY_USAGE_VERIFY,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_HASH,
     .alg              = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
     .hash             = sha_256_hash,
     .hash_length      = 31,
@@ -200,11 +200,11 @@
 },
 
 {
-    .test_desc        = "Test psa_asymmetric_verify - Wrong signature\n",
+    .test_desc        = "Test psa_verify_hash - Wrong signature\n",
     .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data             = rsa_128_key_pair,
     .data_length      = 610,
-    .usage_flags      = PSA_KEY_USAGE_VERIFY,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_HASH,
     .alg              = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
     .hash             = sha_256_hash,
     .hash_length      = 32,
@@ -214,11 +214,11 @@
 },
 
 {
-    .test_desc        = "Test psa_asymmetric_verify - Wrong signature size\n",
+    .test_desc        = "Test psa_verify_hash - Wrong signature size\n",
     .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .data             = rsa_128_key_pair,
     .data_length      = 610,
-    .usage_flags      = PSA_KEY_USAGE_VERIFY,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_HASH,
     .alg              = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
     .hash             = sha_256_hash,
     .hash_length      = 32,
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 d46e266..1a930bf 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c042.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 42)
-#define TEST_DESC "Testing crypto asymmetric APIs\n"
+#define TEST_DESC "Testing crypto asymmetric APIs | UT: psa_asymmetric_verify\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 2f8ea3c..da04c6b 100644
--- a/api-tests/dev_apis/crypto/test_c043/test_c043.c
+++ b/api-tests/dev_apis/crypto/test_c043/test_c043.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,7 +37,7 @@
     int32_t                 i, status;
     size_t                  output_length;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -65,19 +65,19 @@
 
         /* 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, &key_handle);
+                 check1[i].key_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Set up a key agreement operation */
         status = val->crypto_function(VAL_CRYPTO_RAW_KEY_AGREEMENT, check1[i].key_alg,
-                    key_handle, check1[i].peer_key, check1[i].peer_key_length,
+                    key, check1[i].peer_key, check1[i].peer_key_length,
                     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)
         {
             /* Destroy a key and restore the slot to its default state */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
             continue;
         }
@@ -87,7 +87,7 @@
         TEST_CHECKPOINT_NUM(7));
 
         /* Destroy a key and restore the slot to its default state */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
     }
 
@@ -99,7 +99,7 @@
     int                     num_checks = sizeof(check2)/sizeof(check2[0]);
     int32_t                 i, status;
     size_t                  output_length;
-    psa_key_handle_t        key_handle = 8;
+    psa_key_id_t            key = 8;
 
     /* Initialize the PSA crypto library*/
     status = val->crypto_function(VAL_CRYPTO_INIT);
@@ -116,7 +116,7 @@
                                                                                  g_test_count++);
         /* Set up a key agreement operation */
         status = val->crypto_function(VAL_CRYPTO_RAW_KEY_AGREEMENT, check2[i].key_alg,
-                    key_handle, check2[i].peer_key, check2[i].peer_key_length,
+                    key, 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(3));
 
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 c66c2b2..e585078 100644
--- a/api-tests/dev_apis/crypto/test_c043/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c043/test_data.h
@@ -37,7 +37,7 @@
 #ifdef ARCH_TEST_ECDH
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {"Test psa_raw_key_agreement - ECDH SECP256R1\n",
- PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
 {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,
@@ -53,7 +53,7 @@
 },
 
 {"Test psa_raw_key_agreement - Small buffer size\n",
- PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
 {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,
@@ -72,7 +72,7 @@
 
 #ifdef ARCH_TEST_ECC_CURVE_SECP384R1
 {"Test psa_raw_key_agreement - ECDH SECP384R1\n",
- PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP384R1),
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
 {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,
@@ -96,7 +96,7 @@
 
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {"Test psa_raw_key_agreement - Invalid usage\n",
- PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
 {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,
@@ -112,7 +112,7 @@
 },
 
 {"Test psa_raw_key_agreement - Unknown KDF\n",
- PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
 {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,
@@ -134,7 +134,7 @@
 #ifdef ARCH_TEST_SHA256
 #ifdef ARCH_TEST_HKDF
 {"Test psa_raw_key_agreement - Not a key agreement alg\n",
- PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
 {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),
@@ -153,7 +153,7 @@
 
 #ifdef ARCH_TEST_ECDH
 {"Test psa_raw_key_agreement - Public key on different curve\n",
- PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
 {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,
@@ -170,7 +170,7 @@
 },
 
 {"Test psa_raw_key_agreement - Public key instead of private key\n",
- PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+ PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
 {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,
@@ -192,7 +192,7 @@
 #ifdef ARCH_TEST_ECDH
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {"Test psa_raw_key_agreement - Negative case\n",
- PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1),
+ PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
 {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,
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 2ad96e1..026129d 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c043.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 43)
-#define TEST_DESC "Testing crypto key derivation APIs\n"
+#define TEST_DESC "Testing crypto key derivation APIs | UT: psa_raw_key_agreement\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = 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 aae201c..056801e 100644
--- a/api-tests/dev_apis/crypto/test_c044/test_c044.c
+++ b/api-tests/dev_apis/crypto/test_c044/test_c044.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,8 +37,8 @@
     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;
-    psa_key_handle_t      key_handle;
-    psa_key_handle_t      target_key_handle = 0;
+    psa_key_id_t          key;
+    psa_key_id_t          target_key = 0;
 
     if (num_checks == 0)
     {
@@ -70,7 +70,7 @@
 
         /* Import the key data into the key slot */
         status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &source_attributes, check1[i].data,
-                                      check1[i].data_length, &key_handle);
+                                      check1[i].data_length, &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
         /* Setup the attributes for the target key */
@@ -86,12 +86,12 @@
                              check1[i].target_bits);
 
         /* Make a copy of a key */
-        status = val->crypto_function(VAL_CRYPTO_COPY_KEY, key_handle, &target_attributes,
-                                      &target_key_handle);
+        status = val->crypto_function(VAL_CRYPTO_COPY_KEY, key, &target_attributes,
+                                      &target_key);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         /* Destroy the source key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
         if (check1[i].expected_status != PSA_SUCCESS)
@@ -103,7 +103,7 @@
         }
 
         /* Check if the target key attributes is as expected */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, target_key_handle,
+        status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, target_key,
                                       &target_attributes);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
 
@@ -121,7 +121,7 @@
         TEST_ASSERT_EQUAL(get_bits, check1[i].target_bits, TEST_CHECKPOINT_NUM(10));
 
         /* Export a key in binary format */
-        export_status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, target_key_handle,
+        export_status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, target_key,
                                              check1[i].expected_data, check1[i].expected_data_size,
                                              &get_data_length);
 
@@ -138,12 +138,12 @@
         }
 
         /* Destroy the target key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, target_key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, target_key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14));
 
         /* Copy on a destroyed source should be an error */
-        status = val->crypto_function(VAL_CRYPTO_COPY_KEY, key_handle, &target_attributes,
-                                      &target_key_handle);
+        status = val->crypto_function(VAL_CRYPTO_COPY_KEY, key, &target_attributes,
+                                      &target_key);
         TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(14));
 
         val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &source_attributes);
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 162b1cb..f245606 100644
--- a/api-tests/dev_apis/crypto/test_c044/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c044/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -38,19 +38,18 @@
 } test_data;
 
 static const test_data check1[] = {
-#ifdef ARCH_TEST_AES
-#ifdef ARCH_TEST_CCM
+#ifdef ARCH_TEST_CIPER_MODE_CTR
 #ifdef ARCH_TEST_AES_128
 {
     .test_desc            = "Test psa_copy_key - 16 Byte AES\n",
     .type                 = PSA_KEY_TYPE_AES,
-    .alg                  = PSA_ALG_CCM,
+    .alg                  = PSA_ALG_CTR,
     .usage_flags          = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
     .lifetime             = PSA_KEY_LIFETIME_VOLATILE,
     .data                 = key_data,
     .data_length          = AES_16B_KEY_SIZE,
     .target_type          = PSA_KEY_TYPE_AES,
-    .target_alg           = PSA_ALG_CCM,
+    .target_alg           = PSA_ALG_CTR,
     .target_usage_flags   = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
     .target_lifetime      = PSA_KEY_LIFETIME_VOLATILE,
     .target_bits          = BYTES_TO_BITS(AES_16B_KEY_SIZE),
@@ -64,13 +63,13 @@
 {
     .test_desc            = "Test psa_copy_key - without copy usage\n",
     .type                 = PSA_KEY_TYPE_AES,
-    .alg                  = PSA_ALG_CCM,
+    .alg                  = PSA_ALG_CTR,
     .usage_flags          = PSA_KEY_USAGE_EXPORT,
     .lifetime             = PSA_KEY_LIFETIME_VOLATILE,
     .data                 = key_data,
     .data_length          = AES_16B_KEY_SIZE,
     .target_type          = PSA_KEY_TYPE_AES,
-    .target_alg           = PSA_ALG_CCM,
+    .target_alg           = PSA_ALG_CTR,
     .target_usage_flags   = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
     .target_lifetime      = PSA_KEY_LIFETIME_VOLATILE,
     .target_bits          = BYTES_TO_BITS(AES_16B_KEY_SIZE),
@@ -84,13 +83,13 @@
 {
     .test_desc            = "Test psa_copy_key - invalid lifetime\n",
     .type                 = PSA_KEY_TYPE_AES,
-    .alg                  = PSA_ALG_CCM,
+    .alg                  = PSA_ALG_CTR,
     .usage_flags          = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
     .lifetime             = PSA_KEY_LIFETIME_VOLATILE,
     .data                 = key_data,
     .data_length          = AES_16B_KEY_SIZE,
     .target_type          = PSA_KEY_TYPE_AES,
-    .target_alg           = PSA_ALG_CCM,
+    .target_alg           = PSA_ALG_CTR,
     .target_usage_flags   = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
     .target_lifetime      = PSA_KEY_LIFETIME_PERSISTENT,
     .target_bits          = BYTES_TO_BITS(AES_16B_KEY_SIZE),
@@ -104,13 +103,13 @@
 {
     .test_desc            = "Test psa_copy_key - invalid key type\n",
     .type                 = PSA_KEY_TYPE_AES,
-    .alg                  = PSA_ALG_CCM,
+    .alg                  = PSA_ALG_CTR,
     .usage_flags          = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
     .lifetime             = PSA_KEY_LIFETIME_VOLATILE,
     .data                 = key_data,
     .data_length          = AES_16B_KEY_SIZE,
     .target_type          = PSA_KEY_TYPE_DES,
-    .target_alg           = PSA_ALG_CCM,
+    .target_alg           = PSA_ALG_CTR,
     .target_usage_flags   = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
     .target_lifetime      = PSA_KEY_LIFETIME_VOLATILE,
     .target_bits          = BYTES_TO_BITS(AES_16B_KEY_SIZE),
@@ -124,13 +123,13 @@
 {
     .test_desc            = "Test psa_copy_key - invalid key bits\n",
     .type                 = PSA_KEY_TYPE_AES,
-    .alg                  = PSA_ALG_CCM,
+    .alg                  = PSA_ALG_CTR,
     .usage_flags          = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
     .lifetime             = PSA_KEY_LIFETIME_VOLATILE,
     .data                 = key_data,
     .data_length          = AES_16B_KEY_SIZE,
     .target_type          = PSA_KEY_TYPE_AES,
-    .target_alg           = PSA_ALG_CCM,
+    .target_alg           = PSA_ALG_CTR,
     .target_usage_flags   = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
     .target_lifetime      = PSA_KEY_LIFETIME_VOLATILE,
     .target_bits          = BYTES_TO_BITS(AES_16B_KEY_SIZE)-1,
@@ -146,13 +145,13 @@
 {
     .test_desc            = "Test psa_copy_key - 24 Byte AES\n",
     .type                 = PSA_KEY_TYPE_AES,
-    .alg                  = PSA_ALG_CCM,
+    .alg                  = PSA_ALG_CTR,
     .usage_flags          = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT,
     .lifetime             = PSA_KEY_LIFETIME_VOLATILE,
     .data                 = key_data,
     .data_length          = AES_24B_KEY_SIZE,
     .target_type          = PSA_KEY_TYPE_AES,
-    .target_alg           = PSA_ALG_CCM,
+    .target_alg           = PSA_ALG_CTR,
     .target_usage_flags   = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT,
     .target_lifetime      = PSA_KEY_LIFETIME_VOLATILE,
     .target_bits          = BYTES_TO_BITS(AES_24B_KEY_SIZE),
@@ -168,13 +167,13 @@
 {
     .test_desc            = "Test psa_copy_key - 32 Byte AES\n",
     .type                 = PSA_KEY_TYPE_AES,
-    .alg                  = PSA_ALG_CCM,
+    .alg                  = PSA_ALG_CTR,
     .usage_flags          = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_DECRYPT,
     .lifetime             = PSA_KEY_LIFETIME_VOLATILE,
     .data                 = key_data,
     .data_length          = AES_32B_KEY_SIZE,
     .target_type          = PSA_KEY_TYPE_AES,
-    .target_alg           = PSA_ALG_CCM,
+    .target_alg           = PSA_ALG_CTR,
     .target_usage_flags   = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT,
     .target_lifetime      = PSA_KEY_LIFETIME_VOLATILE,
     .target_bits          = BYTES_TO_BITS(AES_32B_KEY_SIZE),
@@ -186,7 +185,6 @@
 },
 #endif
 #endif
-#endif
 
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
 #ifdef ARCH_TEST_RSA_2048
@@ -194,7 +192,7 @@
     .test_desc            = "Test psa_copy_key - 2048 RSA public key\n",
     .type                 = PSA_KEY_TYPE_RSA_PUBLIC_KEY,
     .alg                  = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
-    .usage_flags          = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN,
+    .usage_flags          = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN_HASH,
     .lifetime             = PSA_KEY_LIFETIME_VOLATILE,
     .data                 = rsa_256_key_data,
     .data_length          = 270,
@@ -220,7 +218,7 @@
     .data_length          = 1193,
     .target_type          = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .target_alg           = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
-    .target_usage_flags   = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_VERIFY,
+    .target_usage_flags   = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_VERIFY_HASH,
     .target_lifetime      = PSA_KEY_LIFETIME_VOLATILE,
     .target_bits          = BYTES_TO_BITS(256),
     .expected_usage_flags = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
@@ -254,7 +252,7 @@
     .test_desc            = "Test psa_copy_key - source key with no export usage\n",
     .type                 = PSA_KEY_TYPE_RSA_KEY_PAIR,
     .alg                  = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
-    .usage_flags          = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_SIGN,
+    .usage_flags          = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_SIGN_HASH,
     .lifetime             = PSA_KEY_LIFETIME_VOLATILE,
     .data                 = rsa_256_key_pair,
     .data_length          = 1193,
@@ -344,13 +342,13 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
 {
     .test_desc            = "Test psa_copy_key - EC Public key\n",
-    .type                 = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+    .type                 = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
     .alg                  = PSA_ALG_ECDSA_ANY,
     .usage_flags          = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
     .lifetime             = PSA_KEY_LIFETIME_VOLATILE,
     .data                 = ec_key_data,
     .data_length          = 65,
-    .target_type          = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1),
+    .target_type          = PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
     .target_alg           = PSA_ALG_ECDSA_ANY,
     .target_usage_flags   = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
     .target_lifetime      = PSA_KEY_LIFETIME_VOLATILE,
@@ -366,13 +364,13 @@
 #ifdef ARCH_TEST_ECC_CURVE_SECP224R1
 {
     .test_desc            = "Test psa_copy_key - EC keypair\n",
-    .type                 = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
+    .type                 = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .alg                  = PSA_ALG_ECDSA_ANY,
     .usage_flags          = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
     .lifetime             = PSA_KEY_LIFETIME_VOLATILE,
     .data                 = ec_key_pair,
     .data_length          = 28,
-    .target_type          = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1),
+    .target_type          = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1),
     .target_alg           = PSA_ALG_ECDSA_ANY,
     .target_usage_flags   = PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT,
     .target_lifetime      = PSA_KEY_LIFETIME_VOLATILE,
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 a2459f2..30fca08 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
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c044.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 44)
-#define TEST_DESC "Testing crypto key management APIs\n"
+#define TEST_DESC "Testing crypto key management APIs | UT: psa_copy_key\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
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
index 779e198..bba61ae 100644
--- a/api-tests/dev_apis/crypto/test_c045/test_entry_c045.c
+++ b/api-tests/dev_apis/crypto/test_c045/test_entry_c045.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, 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,7 @@
 #include "test_c045.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 45)
-#define TEST_DESC "Testing crypto hash functions APIs\n"
+#define TEST_DESC "Testing crypto hash functions APIs | UT: psa_hash_clone\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c046/test_c046.c b/api-tests/dev_apis/crypto/test_c046/test_c046.c
index 6c0a0bc..9b195bf 100644
--- a/api-tests/dev_apis/crypto/test_c046/test_c046.c
+++ b/api-tests/dev_apis/crypto/test_c046/test_c046.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -36,7 +36,7 @@
     int32_t               i, status;
     size_t                length;
     psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t      key_handle;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -65,11 +65,11 @@
 
         /* 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, &key_handle);
+                 check1[i].key_length, &key);
         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, key_handle,
+        status = val->crypto_function(VAL_CRYPTO_MAC_COMPUTE, key,
                  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));
@@ -77,7 +77,7 @@
         if (check1[i].expected_status != PSA_SUCCESS)
         {
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
             continue;
@@ -92,13 +92,13 @@
         memset(data, 0, sizeof(data));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         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, key_handle,
+        status = val->crypto_function(VAL_CRYPTO_MAC_COMPUTE, key,
                  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));
diff --git a/api-tests/dev_apis/crypto/test_c046/test_data.h b/api-tests/dev_apis/crypto/test_c046/test_data.h
index 6830ac4..bfe6553 100644
--- a/api-tests/dev_apis/crypto/test_c046/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c046/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -42,7 +42,7 @@
 {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_KEY_USAGE_SIGN_HASH, PSA_ALG_HMAC(PSA_ALG_SHA_224),
  PSA_SUCCESS
 },
 
@@ -53,7 +53,7 @@
 {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_KEY_USAGE_SIGN_HASH, PSA_ALG_CMAC,
  PSA_ERROR_NOT_SUPPORTED
 },
 
@@ -75,7 +75,7 @@
 {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_KEY_USAGE_SIGN_HASH, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 1),
  PSA_ERROR_NOT_SUPPORTED
 },
 
@@ -86,7 +86,7 @@
 {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_KEY_USAGE_SIGN_HASH, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 33),
  PSA_ERROR_INVALID_ARGUMENT
 },
 
@@ -97,7 +97,7 @@
 {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_KEY_USAGE_SIGN_HASH, PSA_ALG_HMAC(0),
  PSA_ERROR_NOT_SUPPORTED
 },
 #endif
@@ -110,7 +110,7 @@
 {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_KEY_USAGE_SIGN_HASH, PSA_ALG_HMAC(PSA_ALG_SHA_256),
  PSA_SUCCESS
 },
 #endif
@@ -125,7 +125,7 @@
  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_KEY_USAGE_SIGN_HASH, PSA_ALG_HMAC(PSA_ALG_SHA_512),
  PSA_SUCCESS
 },
 #endif
@@ -136,7 +136,7 @@
  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_KEY_USAGE_SIGN_HASH, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_224), 8),
  PSA_SUCCESS
 },
 #endif
@@ -150,7 +150,7 @@
 {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_KEY_USAGE_SIGN_HASH, PSA_ALG_CMAC,
  PSA_SUCCESS
 },
 
@@ -160,7 +160,7 @@
 {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_KEY_USAGE_SIGN_HASH, PSA_ALG_CMAC,
  PSA_ERROR_BUFFER_TOO_SMALL
 },
 #endif
@@ -171,7 +171,7 @@
 {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_KEY_USAGE_SIGN_HASH, 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
index 60c36e5..9c66b52 100644
--- a/api-tests/dev_apis/crypto/test_c046/test_entry_c046.c
+++ b/api-tests/dev_apis/crypto/test_c046/test_entry_c046.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c046.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 46)
-#define TEST_DESC "Testing crypto MAC APIs\n"
+#define TEST_DESC "Testing crypto MAC APIs | UT: psa_mac_compute\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c047/test_c047.c b/api-tests/dev_apis/crypto/test_c047/test_c047.c
index 4f5c8bc..51f3683 100644
--- a/api-tests/dev_apis/crypto/test_c047/test_c047.c
+++ b/api-tests/dev_apis/crypto/test_c047/test_c047.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -33,7 +33,7 @@
     int                   num_checks = sizeof(check1)/sizeof(check1[0]);
     int32_t               i, status;
     psa_key_attributes_t  attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t      key_handle;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -61,24 +61,24 @@
 
         /* 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, &key_handle);
+                 check1[i].key_length, &key);
         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, key_handle,
+        status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY, key,
                  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, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         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, key_handle,
+        status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY, key,
                  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));
diff --git a/api-tests/dev_apis/crypto/test_c047/test_data.h b/api-tests/dev_apis/crypto/test_c047/test_data.h
index 5a21729..3c250dc 100644
--- a/api-tests/dev_apis/crypto/test_c047/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c047/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -41,7 +41,7 @@
 {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_KEY_USAGE_VERIFY_HASH, PSA_ALG_HMAC(PSA_ALG_SHA_224),
  PSA_SUCCESS
 },
 #endif
@@ -54,7 +54,7 @@
 {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_KEY_USAGE_VERIFY_HASH, PSA_ALG_HMAC(PSA_ALG_SHA_256),
  PSA_SUCCESS
 },
 
@@ -65,7 +65,7 @@
 {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_KEY_USAGE_VERIFY_HASH, PSA_ALG_CMAC,
  PSA_ERROR_NOT_SUPPORTED
 },
 
@@ -87,7 +87,7 @@
 {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_KEY_USAGE_VERIFY_HASH,  PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 33),
  PSA_ERROR_INVALID_ARGUMENT
 },
 
@@ -98,7 +98,7 @@
 {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_KEY_USAGE_VERIFY_HASH, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 1),
  PSA_ERROR_NOT_SUPPORTED
 },
 
@@ -109,7 +109,7 @@
 {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_KEY_USAGE_VERIFY_HASH, PSA_ALG_HMAC(0),
  PSA_ERROR_NOT_SUPPORTED
 },
 
@@ -125,7 +125,7 @@
  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_KEY_USAGE_VERIFY_HASH, PSA_ALG_HMAC(PSA_ALG_SHA_512),
  PSA_SUCCESS
 },
 #endif
@@ -136,7 +136,7 @@
  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_KEY_USAGE_VERIFY_HASH, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_224), 8),
  PSA_SUCCESS
 },
 #endif
@@ -150,7 +150,7 @@
 {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_KEY_USAGE_VERIFY_HASH, PSA_ALG_CMAC,
  PSA_SUCCESS
 },
 #endif
@@ -162,7 +162,7 @@
 {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_KEY_USAGE_VERIFY_HASH, PSA_ALG_CMAC,
  PSA_ERROR_INVALID_ARGUMENT
 },
 
@@ -175,7 +175,7 @@
 {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_KEY_USAGE_VERIFY_HASH, PSA_ALG_HMAC(PSA_ALG_SHA_256),
  PSA_ERROR_INVALID_SIGNATURE
 },
 #endif
@@ -188,7 +188,7 @@
 {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_KEY_USAGE_VERIFY_HASH, PSA_ALG_HMAC(PSA_ALG_SHA_224),
  PSA_ERROR_INVALID_SIGNATURE
 },
 #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
index 37efca4..7d5dac0 100644
--- a/api-tests/dev_apis/crypto/test_c047/test_entry_c047.c
+++ b/api-tests/dev_apis/crypto/test_c047/test_entry_c047.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c047.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 47)
-#define TEST_DESC "Testing crypto MAC APIs\n"
+#define TEST_DESC "Testing crypto MAC APIs | UT: psa_mac_verify\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c048/test_c048.c b/api-tests/dev_apis/crypto/test_c048/test_c048.c
index 01c8e2a..559c9b9 100644
--- a/api-tests/dev_apis/crypto/test_c048/test_c048.c
+++ b/api-tests/dev_apis/crypto/test_c048/test_c048.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -36,7 +36,7 @@
     int32_t                 i, status;
     size_t                  output_length;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -64,17 +64,17 @@
 
         /* 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, &key_handle);
+                 check1[i].key_length, &key);
         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, key_handle,
+        status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT, key,
                  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, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
         /* Reset the key attributes and check if psa_import_key fails */
@@ -91,7 +91,7 @@
         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, key_handle,
+        status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT, key,
                  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));
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
index bd493fa..19af21b 100644
--- a/api-tests/dev_apis/crypto/test_c048/test_entry_c048.c
+++ b/api-tests/dev_apis/crypto/test_c048/test_entry_c048.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c048.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 48)
-#define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+#define TEST_DESC "Testing crypto symmetric cipher APIs | UT: psa_cipher_encrypt\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c049/test_c049.c b/api-tests/dev_apis/crypto/test_c049/test_c049.c
index e1e7e18..ade6e1a 100644
--- a/api-tests/dev_apis/crypto/test_c049/test_c049.c
+++ b/api-tests/dev_apis/crypto/test_c049/test_c049.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -36,7 +36,7 @@
     int32_t                 i, status;
     size_t                  output_length;
     psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
-    psa_key_handle_t        key_handle;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -64,17 +64,17 @@
 
         /* 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, &key_handle);
+                 check1[i].key_length, &key);
         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, key_handle,
+        status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT, key,
                  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, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
 
         /* Reset the key attributes and check if psa_import_key fails */
@@ -90,7 +90,7 @@
         TEST_ASSERT_MEMCMP(output, check1[i].expected_output, output_length,
         TEST_CHECKPOINT_NUM(7));
 
-        status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT, key_handle,
+        status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT, key,
                  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));
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
index b133494..ddd74bf 100644
--- a/api-tests/dev_apis/crypto/test_c049/test_entry_c049.c
+++ b/api-tests/dev_apis/crypto/test_c049/test_entry_c049.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c049.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 49)
-#define TEST_DESC "Testing crypto symmetric cipher APIs\n"
+#define TEST_DESC "Testing crypto symmetric cipher APIs | UT: psa_cipher_decrypt\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c050/test_c050.c b/api-tests/dev_apis/crypto/test_c050/test_c050.c
index b22a6ed..8d64bae 100644
--- a/api-tests/dev_apis/crypto/test_c050/test_c050.c
+++ b/api-tests/dev_apis/crypto/test_c050/test_c050.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,32 +19,25 @@
 #include "val_target.h"
 #include "test_c050.h"
 #include "test_data.h"
-#include "val_crypto.h"
 
 const client_test_t test_c050_crypto_list[] = {
     NULL,
-    psa_open_key_test,
+    psa_sign_message_test,
+    psa_sign_message_negative_test,
     NULL,
 };
 
 extern  uint32_t g_test_count;
-static uint8_t  data[BUFFER_SIZE];
+static int32_t  valid_test_input_index = -1;
 
-int32_t psa_open_key_test(caller_security_t caller __UNUSED)
+
+int32_t psa_sign_message_test(caller_security_t caller __UNUSED)
 {
-    int32_t               status, i = 0;
-    size_t                length, get_key_bits;
-    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;
-    psa_key_handle_t      tdata_key_handle;
+    int32_t                 num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t                 i, status;
+    size_t                  get_signature_length;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -56,192 +49,117 @@
     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)
+    for (i = 0; i < num_checks; i++)
     {
-        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, "[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));
+        TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2));
 
-        /* Set the key data buffer to the input base on algorithm */
-        if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type))
+        /* Setup the attributes for the key */
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+
+        /* Import the key data into the key slot */
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
+
+        /* Sign a message with a private key */
+        status = val->crypto_function(VAL_CRYPTO_SIGN_MESSAGE,
+                                      key,
+                                      check1[i].sign_alg,
+                                      check1[i].input,
+                                      check1[i].input_length,
+                                      check1[i].signature,
+                                      check1[i].signature_size,
+                                      &get_signature_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
+
+        if (check1[i].expected_status != PSA_SUCCESS)
         {
-            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;
-            }
+            /* Destroy the key */
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                          key);
+            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5));
+
+            continue;
         }
-        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));
+        /* Check if the output length matches with the expected length */
+        TEST_ASSERT_EQUAL(get_signature_length, check1[i].expected_signature_length,
+                          TEST_CHECKPOINT_NUM(6));
 
-        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);
+        /* Check if the output matches with the expected data */
+        TEST_ASSERT_MEMCMP(check1[i].signature, check1[i].expected_signature, get_signature_length,
+                           TEST_CHECKPOINT_NUM(7));
 
-            if (check1[i].key_lifetime == PSA_KEY_LIFETIME_PERSISTENT)
-               val->crypto_function(VAL_CRYPTO_SET_KEY_ID, &attributes, check1[i].key_id);
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8));
 
-            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, &tdata_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), &tdata_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 */
-            status = val->crypto_function(VAL_CRYPTO_RESET);
-            if (status != PSA_SUCCESS)
-            {
-                return RESULT_SKIP(status);
-            }
-            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, &get_attributes, &get_key_type);
-            TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(17));
-
-            val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &get_attributes, &get_key_bits);
-            TEST_ASSERT_EQUAL(get_key_bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(18));
-
-            val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &get_attributes,
-                                 &get_key_usage_flags);
-            TEST_ASSERT_EQUAL(get_key_usage_flags, check1[i].usage, TEST_CHECKPOINT_NUM(19));
-
-            val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &get_attributes, &get_key_algorithm);
-            TEST_ASSERT_EQUAL(get_key_algorithm, check1[i].key_alg, TEST_CHECKPOINT_NUM(20));
-
-            /* 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(21));
-
-            /* Check the value of the exported key */
-            TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(22));
-
-            if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type))
-            {
-                TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(23));
-            }
-            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(24));
-            }
-            else
-            {
-                return VAL_STATUS_INVALID;
-            }
-
-            /* Reset the key attributes */
-            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
-
-            /* Destroy the persistent key to clean up storage for the next test */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(25));
-
-            /* 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;
+        if (valid_test_input_index < 0)
+            valid_test_input_index = i;
     }
 
     return VAL_STATUS_SUCCESS;
 }
+
+int32_t psa_sign_message_negative_test(caller_security_t caller __UNUSED)
+{
+    int32_t                 status;
+    size_t                  get_signature_length;
+    psa_key_id_t            key = 10;
+
+    if (valid_test_input_index < 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));
+
+    /* 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_sign_hash - Invalid key handle\n",
+                                                                            g_test_count++);
+    /* Sign a hash or short message with a private key */
+    status = val->crypto_function(VAL_CRYPTO_SIGN_HASH,
+                                  key,
+                                  check1[valid_test_input_index].sign_alg,
+                                  check1[valid_test_input_index].input,
+                                  check1[valid_test_input_index].input_length,
+                                  check1[valid_test_input_index].signature,
+                                  check1[valid_test_input_index].signature_size,
+                                  &get_signature_length);
+    TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
+
+    val->print(PRINT_TEST, "[Check %d] Test psa_sign_hash - Zero as key handle\n",
+                                                                            g_test_count++);
+    /* Sign a hash or short message with a private key */
+    status = val->crypto_function(VAL_CRYPTO_SIGN_HASH,
+                                  0,
+                                  check1[valid_test_input_index].sign_alg,
+                                  check1[valid_test_input_index].input,
+                                  check1[valid_test_input_index].input_length,
+                                  check1[valid_test_input_index].signature,
+                                  check1[valid_test_input_index].signature_size,
+                                  &get_signature_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_c050/test_c050.h b/api-tests/dev_apis/crypto/test_c050/test_c050.h
index e04c136..9333e36 100644
--- a/api-tests/dev_apis/crypto/test_c050/test_c050.h
+++ b/api-tests/dev_apis/crypto/test_c050/test_c050.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,7 +26,9 @@
 extern psa_api_t *psa;
 extern const client_test_t test_c050_crypto_list[];
 
-int32_t psa_open_key_test(caller_security_t caller);
+int32_t psa_sign_message_test(caller_security_t caller);
+int32_t psa_sign_message_negative_test(caller_security_t caller);
+
 extern void crypto_common_exit_action(void);
 
 #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
index 278f48b..6037381 100644
--- a/api-tests/dev_apis/crypto/test_c050/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c050/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,261 +15,226 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    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_key_type_t          type;
+    const uint8_t          *data;
+    size_t                  data_length;
+    psa_key_usage_t         usage_flags;
+    psa_algorithm_t         alg;
+    psa_algorithm_t         sign_alg;
+    const uint8_t          *input;
+    size_t                  input_length;
+    uint8_t                *signature;
+    size_t                  signature_size;
+    const uint8_t          *expected_signature;
+    size_t                  expected_signature_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_CIPHER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_open_key 16 Byte AES\n", 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", 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", 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
-
+static const test_data check1[] = {
+#ifdef CRYPTO_1_0
+#ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
-#ifdef ARCH_TEST_RSA_2048
-{"Test psa_open_key 2048 RSA public key\n", 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", 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_CIPHER_MODE_CTR
-#ifdef ARCH_TEST_DES_1KEY
-{"Test psa_open_key with DES 64 bit key\n", 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
+{
+    .test_desc                 = "Test psa_sign_message - RSA KEY_PAIR PKCS1V15 RAW\n",
+    .type                      = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data                      = rsa_128_key_pair,
+    .data_length               = 610,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg                       = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .sign_alg                  = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .input                     = &hash_input,
+    .input_length              = sizeof(hash_input),
+    .signature                 = expected_output,
+    .signature_size            = BUFFER_SIZE,
+    .expected_signature        = signature_4,
+    .expected_signature_length = 128,
+    .expected_status           = PSA_SUCCESS,
 },
 #endif
 
-#ifdef ARCH_TEST_DES_2KEY
-{"Test psa_open_key with Triple DES 2-Key\n", PSA_KEY_TYPE_DES, 0x123,
-{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
- DES3_2B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_PERSISTENT,
- BYTES_TO_BITS(DES3_2B_KEY_SIZE), DES3_2B_KEY_SIZE, PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_DES_3KEY
-{"Test psa_open_key with Triple DES 3-Key\n", 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_3B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_PERSISTENT,
- BYTES_TO_BITS(DES3_3B_KEY_SIZE), DES3_3B_KEY_SIZE, PSA_SUCCESS
+#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
+#ifdef ARCH_TEST_SHA256
+{
+    .test_desc                 = "Test psa_sign_message - RSA KEY_PAIR PKCS1V15 SHA-256\n",
+    .type                      = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data                      = rsa_128_key_pair,
+    .data_length               = 610,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg                       = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
+    .sign_alg                  = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
+    .input                     = &hash_input,
+    .input_length              = sizeof(hash_input),
+    .signature                 = NULL,
+    .signature_size            = BUFFER_SIZE,
+    .expected_signature        = NULL,
+    .expected_signature_length = 128,
+    .expected_status           = PSA_ERROR_INVALID_ARGUMENT,
 },
 #endif
 #endif
+#endif
 
-#ifdef ARCH_TEST_ECDSA
+#ifdef ARCH_TEST_SHA256
+#ifdef ARCH_TEST_DETERMINISTIC_ECDSA
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
-{"Test psa_open_key with EC Public key\n",
- PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), 0x789,
- {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",
- PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), 0x1234,
- {0},
- 28, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, PSA_KEY_LIFETIME_PERSISTENT,
- 224, 28, PSA_SUCCESS
+{
+    .test_desc                 = "Test psa_sign_message - ECDSA SECP256R1 SHA-256\n",
+    .type                      = PSA_KEY_TYPE_DH_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
+    .data                      = ec_keypair,
+    .data_length               = 32,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg                       = PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256),
+    .sign_alg                  = PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256),
+    .input                     = &hash_input,
+    .input_length              = sizeof(hash_input),
+    .signature                 = expected_output,
+    .signature_size            = BUFFER_SIZE,
+    .expected_signature        = signature_5,
+    .expected_signature_length = 64,
+    .expected_status           = PSA_SUCCESS,
 },
 #endif
 #endif
 
-#ifdef ARCH_TEST_CIPHER_MODE_CTR
-#ifdef ARCH_TEST_AES
-{"Test psa_open_key with volatile key\n", 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_DOES_NOT_EXIST
+#ifdef ARCH_TEST_RSA_1024
+#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
+{
+    .test_desc                 = "Test psa_sign_message - Invalid key type (RSA public key)\n",
+    .type                      = PSA_KEY_TYPE_RSA_PUBLIC_KEY,
+    .data                      = rsa_128_key_data,
+    .data_length               = 162,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg                       = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .sign_alg                  = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .input                     = NULL,
+    .input_length              = 0,
+    .signature                 = expected_output,
+    .signature_size            = 128,
+    .expected_signature        = NULL,
+    .expected_signature_length = 0,
+    .expected_status           = PSA_ERROR_INVALID_ARGUMENT,
 },
+
+{
+    .test_desc                 = "Test psa_sign_message - Small output buffer\n",
+    .type                      = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data                      = rsa_128_key_pair,
+    .data_length               = 610,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg                       = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .sign_alg                  = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .input                     = &hash_input,
+    .input_length              = sizeof(hash_input),
+    .signature                 = expected_output,
+    .signature_size            = 127,
+    .expected_signature        = signature_1,
+    .expected_signature_length = 128,
+    .expected_status           = PSA_ERROR_BUFFER_TOO_SMALL,
+},
+#endif
+
+{
+    .test_desc                 = "Test psa_sign_message - Invalid algorithm\n",
+    .type                      = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data                      = rsa_128_key_pair,
+    .data_length               = 610,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg                       = PSA_ALG_SHA_256,
+    .sign_alg                  = PSA_ALG_SHA_256,
+    .input                     = NULL,
+    .input_length              = 0,
+    .signature                 = expected_output,
+    .signature_size            = BUFFER_SIZE,
+    .expected_signature        = NULL,
+    .expected_signature_length = 0,
+    .expected_status           = PSA_ERROR_INVALID_ARGUMENT,
+},
+#endif
+
+#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
+#ifdef ARCH_TEST_AES_128
+{
+    .test_desc                 = "Test psa_sign_message - Invalid key type (AES Key)\n",
+    .type                      = PSA_KEY_TYPE_AES,
+    .data                      = key_data,
+    .data_length               = AES_16B_KEY_SIZE,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg                       = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .input                     = NULL,
+    .input_length              = 0,
+    .signature                 = expected_output,
+    .signature_size            = BUFFER_SIZE,
+    .expected_signature        = NULL,
+    .expected_signature_length = 0,
+    .expected_status           = PSA_ERROR_INVALID_ARGUMENT,
+},
+#endif
+#endif
+#endif
+
+#ifdef ARCH_TEST_RSA_1024
+#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
+{
+    .test_desc                 = "Test psa_sign_message - Invalid usage\n",
+    .type                      = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data                      = rsa_128_key_pair,
+    .data_length               = 610,
+    .usage_flags               = PSA_KEY_USAGE_ENCRYPT,
+    .alg                       = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .sign_alg                  = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .input                     = NULL,
+    .input_length              = 0,
+    .signature                 = expected_output,
+    .signature_size            = BUFFER_SIZE,
+    .expected_signature        = NULL,
+    .expected_signature_length = 0,
+    .expected_status           = PSA_ERROR_NOT_PERMITTED,
+},
+
+{
+    .test_desc                 = "Test psa_sign_message - Mismatch key type and Algorithm\n",
+    .type                      = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data                      = rsa_128_key_pair,
+    .data_length               = 610,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg                       = PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256),
+    .sign_alg                  = PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256),
+    .input                     = &hash_input,
+    .input_length              = sizeof(hash_input),
+    .signature                 = expected_output,
+    .signature_size            = BUFFER_SIZE,
+    .expected_signature        = NULL,
+    .expected_signature_length = 128,
+    .expected_status           = PSA_ERROR_INVALID_ARGUMENT,
+},
+
+#ifdef ARCH_TEST_SHA256
+#ifdef ARCH_TEST_DETERMINISTIC_ECDSA
+#ifdef ARCH_TEST_ECC_CURVE_SECP256R1
+{
+    .test_desc                 = "Test psa_sign_message - Alg mismatch in key and API call\n",
+    .type                      = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data                      = rsa_128_key_pair,
+    .data_length               = 610,
+    .usage_flags               = PSA_KEY_USAGE_SIGN_MESSAGE,
+    .alg                       = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .sign_alg                  = PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256),
+    .input                     = &hash_input,
+    .input_length              = sizeof(hash_input),
+    .signature                 = expected_output,
+    .signature_size            = BUFFER_SIZE,
+    .expected_signature        = NULL,
+    .expected_signature_length = 0,
+    .expected_status           = PSA_ERROR_NOT_PERMITTED,
+},
+#endif
+#endif
+#endif
+#endif
 #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
index 42ad5d0..2d8c99f 100644
--- a/api-tests/dev_apis/crypto/test_c050/test_entry_c050.c
+++ b/api-tests/dev_apis/crypto/test_c050/test_entry_c050.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c050.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 50)
-#define TEST_DESC "Testing crypto key management APIs\n"
+#define TEST_DESC "Testing crypto key management APIs | UT: psa_open_key\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c051/test_c051.c b/api-tests/dev_apis/crypto/test_c051/test_c051.c
index 7f2e4da..d7fb4a3 100644
--- a/api-tests/dev_apis/crypto/test_c051/test_c051.c
+++ b/api-tests/dev_apis/crypto/test_c051/test_c051.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,26 +22,20 @@
 
 const client_test_t test_c051_crypto_list[] = {
     NULL,
-    psa_close_key_test,
+    psa_verify_message_test,
+    psa_verify_message_negative_test,
     NULL,
 };
 
 extern  uint32_t g_test_count;
+static int32_t  valid_test_input_index = -1;
 
-int32_t psa_close_key_test(caller_security_t caller __UNUSED)
+int32_t psa_verify_message_test(caller_security_t caller __UNUSED)
 {
-    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;
-    psa_key_handle_t      key_handle;
+    int32_t                 num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t                 i, status;
+    psa_key_attributes_t    attributes = PSA_KEY_ATTRIBUTES_INIT;
+    psa_key_id_t            key;
 
     if (num_checks == 0)
     {
@@ -53,7 +47,6 @@
     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++);
@@ -63,124 +56,88 @@
         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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].alg);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
 
         /* Import the key data into the key slot */
-        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &set_attributes, key_data,
-                 check1[i].key_length, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3));
 
-        /* Close the key handle */
-        status = val->crypto_function(VAL_CRYPTO_CLOSE_KEY, key_handle);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        /* Verify the signature a hash or short message using a public key */
+        status = val->crypto_function(VAL_CRYPTO_VERIFY_MESSAGE,
+                                      key,
+                                      check1[i].alg,
+                                      check1[i].input,
+                                      check1[i].input_length,
+                                      check1[i].signature,
+                                      check1[i].signature_length);
+        TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
-        /* Getting the attributes of the closed key should return error */
-        status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, key_handle,
-                 &attributes);
-        TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(5));
+        /* Destroy a key and restore the slot to its default state */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
+        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, 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, 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,
-                     &key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13));
-
-            /* Get the attributes of the persistent key and check if it matches the given value */
-            status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, key_handle,
-                     &attributes);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14));
-
-            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(15));
-
-            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(16));
-
-            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(17));
-
-            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(18));
-
-            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(19));
-
-            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(20));
-
-            /* Reset the key attributes */
-            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
-
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(21));
-
-            status = val->crypto_function(VAL_CRYPTO_CLOSE_KEY, key_handle);
-            TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(22));
-        }
-
+        if (valid_test_input_index < 0)
+            valid_test_input_index = i;
     }
 
     return VAL_STATUS_SUCCESS;
 }
+
+int32_t psa_verify_message_negative_test(caller_security_t caller __UNUSED)
+{
+    int32_t                 status;
+    psa_key_id_t            key = 13;
+
+    if (valid_test_input_index < 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));
+
+    val->print(PRINT_TEST, "[Check %d] Test psa_verify_message - Invalid 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));
+
+    /* Verify the signature a hash or short message using a public key */
+    status = val->crypto_function(VAL_CRYPTO_VERIFY_HASH,
+                                  key,
+                                  check1[valid_test_input_index].alg,
+                                  check1[valid_test_input_index].input,
+                                  check1[valid_test_input_index].input_length,
+                                  check1[valid_test_input_index].signature,
+                                  check1[valid_test_input_index].signature_length);
+    TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3));
+
+    val->print(PRINT_TEST, "[Check %d] Test psa_verify_message - Zero as key handle\n",
+                                                                             g_test_count++);
+    /* Verify the signature a hash or short message using a public key */
+    status = val->crypto_function(VAL_CRYPTO_VERIFY_HASH,
+                                  0,
+                                  check1[valid_test_input_index].alg,
+                                  check1[valid_test_input_index].input,
+                                  check1[valid_test_input_index].input_length,
+                                  check1[valid_test_input_index].signature,
+                                  check1[valid_test_input_index].signature_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_c051/test_c051.h b/api-tests/dev_apis/crypto/test_c051/test_c051.h
index 9569f93..796ad1a 100644
--- a/api-tests/dev_apis/crypto/test_c051/test_c051.h
+++ b/api-tests/dev_apis/crypto/test_c051/test_c051.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,7 +26,7 @@
 extern psa_api_t *psa;
 extern const client_test_t test_c051_crypto_list[];
 
-int32_t psa_close_key_test(caller_security_t caller);
+int32_t psa_verify_message_test(caller_security_t caller);
+int32_t psa_verify_message_negative_test(caller_security_t caller);
 extern void crypto_common_exit_action(void);
-
 #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
index 9eef0dd..c020bd2 100644
--- a/api-tests/dev_apis/crypto/test_c051/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c051/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,257 +15,213 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    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_key_type_t          type;
+    const uint8_t          *data;
+    size_t                  data_length;
+    psa_key_usage_t         usage_flags;
+    psa_algorithm_t         alg;
+    psa_algorithm_t         setup_alg;
+    const uint8_t          *input;
+    size_t                  input_length;
+    const uint8_t          *signature;
+    size_t                  signature_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 const test_data check1[] = {
-
-#ifdef ARCH_TEST_CIPHER_MODE_CTR
-#ifdef ARCH_TEST_AES_128
-{"Test psa_close_key 16 Byte AES\n", 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", 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", 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 CRYPTO_1_0
+#ifdef ARCH_TEST_RSA_1024
 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
-#ifdef ARCH_TEST_RSA_2048
-{"Test psa_close_key 2048 RSA public key\n", 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_desc        = "Test psa_verify_message - RSA KEY_PAIR PKCS1V15 RAW\n",
+    .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data             = rsa_128_key_pair,
+    .data_length      = 610,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg              = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .input            = &hash_input,
+    .input_length     = sizeof(hash_input),
+    .signature        = signature_4,
+    .signature_length = 128,
+    .expected_status  = PSA_SUCCESS
 },
 
-{"Test psa_close_key with RSA 2048 keypair\n", 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_CIPHER_MODE_CTR
-#ifdef ARCH_TEST_DES_1KEY
-{"Test psa_close_key with DES 64 bit key\n", 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
+{
+    .test_desc        = "Test psa_verify_message - RSA Public Key PKCS1V15 RAW\n",
+    .type             = PSA_KEY_TYPE_RSA_PUBLIC_KEY,
+    .data             = rsa_128_key_data,
+    .data_length      = 162,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg              = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .input            = &hash_input,
+    .input_length     = sizeof(hash_input),
+    .signature        = signature_4,
+    .signature_length = 128,
+    .expected_status  = PSA_SUCCESS
 },
 #endif
 
-#ifdef ARCH_TEST_DES_2KEY
-{"Test psa_close_key with Triple DES 2-Key\n", PSA_KEY_TYPE_DES,
-{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
- DES3_2B_KEY_SIZE, BYTES_TO_BITS(DES3_2B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- 0xBC, PSA_KEY_LIFETIME_PERSISTENT,
- BYTES_TO_BITS(DES3_2B_KEY_SIZE), PSA_SUCCESS
-},
-#endif
-
-#ifdef ARCH_TEST_DES_3KEY
-{"Test psa_close_key with Triple DES 3-Key\n", 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_3B_KEY_SIZE, BYTES_TO_BITS(DES3_3B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR,
- 0xCD, PSA_KEY_LIFETIME_PERSISTENT,
- BYTES_TO_BITS(DES3_3B_KEY_SIZE), PSA_SUCCESS
+#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN
+#ifdef ARCH_TEST_SHA256
+{
+    .test_desc        = "Test psa_verify_message - RSA KEY_PAIR PKCS1V15 SHA-256\n",
+    .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data             = rsa_128_key_pair,
+    .data_length      = 610,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg              = PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256),
+    .input            = &hash_input,
+    .input_length     = sizeof(hash_input),
+    .signature        = NULL,
+    .signature_length = 0,
+    .expected_status  = PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
 #endif
+#endif
 
-#ifdef ARCH_TEST_ECDSA
+#ifdef ARCH_TEST_SHA256
+#ifdef ARCH_TEST_DETERMINISTIC_ECDSA
 #ifdef ARCH_TEST_ECC_CURVE_SECP256R1
-{"Test psa_close_key with EC Public key\n",
- 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
+{
+    .test_desc        = "Test psa_verify_message - ECDSA KEY_PAIR SECP256R1 SHA-256\n",
+    .type             = PSA_KEY_TYPE_DH_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
+    .data             = ec_keypair,
+    .data_length      = 32,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg              = PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256),
+    .input            = &hash_input,
+    .input_length     = sizeof(hash_input),
+    .signature        = signature_5,
+    .signature_length = 64,
+    .expected_status  = PSA_SUCCESS
 },
+
+{
+    .test_desc        = "Test psa_verify_message - ECDSA Public Key SECP256R1 SHA-256\n",
+    .type             = PSA_KEY_TYPE_DH_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1),
+    .data             = ec_key_data,
+    .data_length      = 65,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg              = PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256),
+    .input            = &hash_input,
+    .input_length     = sizeof(hash_input),
+    .signature        = signature_5,
+    .signature_length = 64,
+    .expected_status  = PSA_SUCCESS
+},
+#endif
 #endif
 #endif
 
-#ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION
-#ifdef ARCH_TEST_ECC_CURVE_SECP224R1
-{"Test psa_close_key with EC keypair\n",
- 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
+#ifdef ARCH_TEST_RSA_1024
+#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW
+{
+    .test_desc        = "Test psa_verify_message - Small output buffer\n",
+    .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data             = rsa_128_key_pair,
+    .data_length      = 610,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg              = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .input            = &hash_input,
+    .input_length     = sizeof(hash_input),
+    .signature        = signature_4,
+    .signature_length = 127,
+    .expected_status  = PSA_ERROR_INVALID_SIGNATURE
 },
+
+#ifdef ARCH_TEST_SHA256
+{
+    .test_desc        = "Test psa_verify_message - Invalid algorithm\n",
+    .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data             = rsa_128_key_pair,
+    .data_length      = 610,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg              = PSA_ALG_SHA_256,
+    .input            = &hash_input,
+    .input_length     = sizeof(hash_input),
+    .signature        = signature_4,
+    .signature_length = 128,
+    .expected_status  = PSA_ERROR_INVALID_ARGUMENT
+},
+#endif
+
+#ifdef ARCH_TEST_AES_128
+{
+    .test_desc        = "Test psa_verify_message - Invalid key type (AES Key)\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg              = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .input            = &hash_input,
+    .input_length     = sizeof(hash_input),
+    .signature        = signature_4,
+    .signature_length = 128,
+    .expected_status  = PSA_ERROR_NOT_SUPPORTED
+},
+#endif
+
+{
+    .test_desc        = "Test psa_verify_message - Invalid usage\n",
+    .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data             = rsa_128_key_pair,
+    .data_length      = 610,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .input            = &hash_input,
+    .input_length     = sizeof(hash_input),
+    .signature        = signature_4,
+    .signature_length = 128,
+    .expected_status  = PSA_ERROR_NOT_PERMITTED
+},
+
+{
+    .test_desc        = "Test psa_verify_message - Wrong message size\n",
+    .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data             = rsa_128_key_pair,
+    .data_length      = 610,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg              = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .input            = &hash_input,
+    .input_length     = sizeof(hash_input)-1,
+    .signature        = signature_4,
+    .signature_length = 128,
+    .expected_status  = PSA_ERROR_INVALID_SIGNATURE
+},
+
+{
+    .test_desc        = "Test psa_verify_message - Wrong signature\n",
+    .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data             = rsa_128_key_pair,
+    .data_length      = 610,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg              = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .input            = &hash_input,
+    .input_length     = sizeof(hash_input),
+    .signature        = signature_4_invalid,
+    .signature_length = 128,
+    .expected_status  = PSA_ERROR_INVALID_SIGNATURE
+},
+
+{
+    .test_desc        = "Test psa_verify_message - Wrong signature size\n",
+    .type             = PSA_KEY_TYPE_RSA_KEY_PAIR,
+    .data             = rsa_128_key_pair,
+    .data_length      = 610,
+    .usage_flags      = PSA_KEY_USAGE_VERIFY_MESSAGE,
+    .alg              = PSA_ALG_RSA_PKCS1V15_SIGN_RAW,
+    .input            = &hash_input,
+    .input_length     = sizeof(hash_input),
+    .signature        = signature_4,
+    .signature_length = 129,
+    .expected_status  = PSA_ERROR_INVALID_SIGNATURE
+},
+#endif
 #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
index 74a6d8e..aa73a08 100644
--- a/api-tests/dev_apis/crypto/test_c051/test_entry_c051.c
+++ b/api-tests/dev_apis/crypto/test_c051/test_entry_c051.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c051.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 51)
-#define TEST_DESC "Testing crypto key management APIs\n"
+#define TEST_DESC "Testing crypto key management APIs | UT: psa_close_key\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c052/test_c052.c b/api-tests/dev_apis/crypto/test_c052/test_c052.c
index 7104a2e..2013ffb 100644
--- a/api-tests/dev_apis/crypto/test_c052/test_c052.c
+++ b/api-tests/dev_apis/crypto/test_c052/test_c052.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -31,10 +31,10 @@
 int32_t psa_aead_encrypt_setup_test(caller_security_t caller __UNUSED)
 {
     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;
-    psa_key_handle_t      key_handle;
+    int32_t               num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes;
+    psa_aead_operation_t  operation;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -48,42 +48,61 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, "[Check %d] ", i + 1);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
+        val->crypto_function(VAL_CRYPTO_AEAD_OPERATION_INIT,
+                             &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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,
-                 key_handle, check1[i].alg);
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP,
+                                      &operation,
+                                      key,
+                                      check1[i].setup_alg);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
         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,
-                 key_handle, check1[i].alg);
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP,
+                                      &operation,
+                                      key,
+                                      check1[i].setup_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);
+        /* Reset the key attributes */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES,
+                             &attributes);
 
         /* Abort the AEAD operation */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT,
+                                      &operation);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
     }
 
diff --git a/api-tests/dev_apis/crypto/test_c052/test_data.h b/api-tests/dev_apis/crypto/test_c052/test_data.h
index 7160759..e3b3aa4 100644
--- a/api-tests/dev_apis/crypto/test_c052/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c052/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,72 +15,111 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    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_key_type_t          type;
+    const uint8_t          *data;
+    size_t                  data_length;
+    psa_key_usage_t         usage_flags;
     psa_algorithm_t         alg;
+    psa_algorithm_t         setup_alg;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
 #ifdef ARCH_TEST_CCM
 #ifdef ARCH_TEST_AES_128
-{"Test psa_aead_encrypt_setup - AES-CCM\n", 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_desc       = "Test psa_aead_encrypt_setup - CCM - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .expected_status = PSA_SUCCESS
 },
 
-{"Test psa_aead_encrypt_setup - AES-CCM 24 bytes Tag length = 4\n", 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
+{
+    .test_desc       = "Test psa_aead_encrypt_setup - CCM - AES - Tag length = 4\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
+    .expected_status = PSA_SUCCESS
+},
+
+{
+    .test_desc       = "Test psa_aead_encrypt_setup - CCM - AES - Default Tag length\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(PSA_ALG_CCM),
+    .expected_status = 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", 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
+{
+    .test_desc       = "Test psa_aead_encrypt_setup - GCM - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_GCM,
+    .setup_alg       = PSA_ALG_GCM,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_CCM
 #ifdef ARCH_TEST_DES_1KEY
-{"Test psa_aead_encrypt_setup - DES Key\n", 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
+{
+    .test_desc       = "Test psa_aead_encrypt_setup - CCM - DES Invalid key\n",
+    .type            = PSA_KEY_TYPE_DES,
+    .data            = key_data,
+    .data_length     = DES_8B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .expected_status = PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_AES_128
-#ifdef ARCH_TEST_CIPHER_MODE_CFB
-{"Test psa_aead_encrypt_setup - Unsupported Algorithm\n", 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
+#ifdef ARCH_TEST_CIPER_MODE_CFB
+{
+    .test_desc       = "Test psa_aead_encrypt_setup - Unsupported algorithm\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CFB,
+    .setup_alg       = PSA_ALG_CFB,
+    .expected_status = PSA_ERROR_NOT_SUPPORTED
 },
 #endif
 
 #ifdef ARCH_TEST_GCM
-{"Test psa_aead_encrypt_setup - Invalid key usage\n", 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
+{
+    .test_desc       = "Test psa_aead_encrypt_setup - Invalid usage flag\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_GCM,
+    .setup_alg       = PSA_ALG_GCM,
+    .expected_status = 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
index 8d9bcc7..caa8049 100644
--- a/api-tests/dev_apis/crypto/test_c052/test_entry_c052.c
+++ b/api-tests/dev_apis/crypto/test_c052/test_entry_c052.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c052.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 52)
-#define TEST_DESC "Testing crypto AEAD APIs\n"
+#define TEST_DESC "Testing crypto AEAD APIs | UT: psa_aead_encrypt_setup\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c053/test_c053.c b/api-tests/dev_apis/crypto/test_c053/test_c053.c
index 5e39a21..a9c4435 100644
--- a/api-tests/dev_apis/crypto/test_c053/test_c053.c
+++ b/api-tests/dev_apis/crypto/test_c053/test_c053.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -31,10 +31,10 @@
 int32_t psa_aead_decrypt_setup_test(caller_security_t caller __UNUSED)
 {
     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;
-    psa_key_handle_t      key_handle;
+    int32_t               num_checks = sizeof(check1)/sizeof(check1[0]);
+    psa_key_attributes_t  attributes;
+    psa_aead_operation_t  operation;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -48,42 +48,61 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, "[Check %d] ", i + 1);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
+        val->crypto_function(VAL_CRYPTO_AEAD_OPERATION_INIT,
+                             &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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,
-                 key_handle, check1[i].alg);
+        status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP,
+                                      &operation,
+                                      key,
+                                      check1[i].setup_alg);
         TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
         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,
-                 key_handle, check1[i].alg);
+        status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP,
+                                      &operation,
+                                      key,
+                                      check1[i].setup_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);
+        /* Reset the key attributes */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES,
+                             &attributes);
 
         /* Abort the AEAD operation */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation);
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT,
+                                      &operation);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
     }
 
diff --git a/api-tests/dev_apis/crypto/test_c053/test_data.h b/api-tests/dev_apis/crypto/test_c053/test_data.h
index 945fd7a..5df5443 100644
--- a/api-tests/dev_apis/crypto/test_c053/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c053/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,72 +15,111 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    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_key_type_t          type;
+    const uint8_t          *data;
+    size_t                  data_length;
+    psa_key_usage_t         usage_flags;
     psa_algorithm_t         alg;
+    psa_algorithm_t         setup_alg;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
 #ifdef ARCH_TEST_CCM
 #ifdef ARCH_TEST_AES_128
-{"Test psa_aead_decrypt_setup - AES-CCM\n", 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_desc       = "Test psa_aead_decrypt_setup - CCM - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .expected_status = PSA_SUCCESS
 },
 
-{"Test psa_aead_decrypt_setup - AES-CCM 24 bytes Tag length = 4\n", 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
+{
+    .test_desc       = "Test psa_aead_decrypt_setup - CCM - AES - Tag length = 4\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
+    .expected_status = PSA_SUCCESS
+},
+
+{
+    .test_desc       = "Test psa_aead_decrypt_setup - CCM - AES - Default Tag length\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(PSA_ALG_CCM),
+    .expected_status = 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", 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
+{
+    .test_desc       = "Test psa_aead_decrypt_setup - GCM - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_GCM,
+    .setup_alg       = PSA_ALG_GCM,
+    .expected_status = PSA_SUCCESS
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_CCM
 #ifdef ARCH_TEST_DES_1KEY
-{"Test psa_aead_decrypt_setup - DES Key\n", 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
+{
+    .test_desc       = "Test psa_aead_decrypt_setup - CCM - DES Invalid key\n",
+    .type            = PSA_KEY_TYPE_DES,
+    .data            = key_data,
+    .data_length     = DES_8B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .expected_status = PSA_ERROR_INVALID_ARGUMENT
 },
 #endif
 #endif
 
 #ifdef ARCH_TEST_AES_128
-#ifdef ARCH_TEST_CIPHER_MODE_CFB
-{"Test psa_aead_decrypt_setup - Unsupported Algorithm\n", 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
+#ifdef ARCH_TEST_CIPER_MODE_CFB
+{
+    .test_desc       = "Test psa_aead_decrypt_setup - Unsupported algorithm\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CFB,
+    .setup_alg       = PSA_ALG_CFB,
+    .expected_status = PSA_ERROR_NOT_SUPPORTED
 },
 #endif
 
 #ifdef ARCH_TEST_GCM
-{"Test psa_aead_decrypt_setup - Invalid key usage\n", 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
+{
+    .test_desc       = "Test psa_aead_decrypt_setup - Invalid usage flag\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_GCM,
+    .setup_alg       = PSA_ALG_GCM,
+    .expected_status = 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
index ce4be97..1037835 100644
--- a/api-tests/dev_apis/crypto/test_c053/test_entry_c053.c
+++ b/api-tests/dev_apis/crypto/test_c053/test_entry_c053.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c053.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 53)
-#define TEST_DESC "Testing crypto AEAD APIs\n"
+#define TEST_DESC "Testing crypto AEAD APIs | UT: psa_aead_decrypt_setup\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c054/test_c054.c b/api-tests/dev_apis/crypto/test_c054/test_c054.c
index e2652a1..644fe4c 100644
--- a/api-tests/dev_apis/crypto/test_c054/test_c054.c
+++ b/api-tests/dev_apis/crypto/test_c054/test_c054.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -31,12 +31,11 @@
 int32_t psa_aead_generate_nonce_test(caller_security_t caller __UNUSED)
 {
     int32_t               i, j, status, nonce_sum;
-    uint8_t               nonce[SIZE_32B];
     size_t                nonce_length;
-    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               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;
-    psa_key_handle_t      key_handle;
+    psa_aead_operation_t  operation;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -50,76 +49,109 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, "[Check %d] ", i+1);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
+        /* Reset the nonce output buffer */
+        memset((void *)check1[i].nonce, 0x0, check1[i].nonce_size);
+
+        val->crypto_function(VAL_CRYPTO_AEAD_OPERATION_INIT,
+                            &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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,
-                 key_handle, check1[i].alg);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        if (check1[i].operation_state) {
+            if (check1[i].usage_flags == PSA_KEY_USAGE_ENCRYPT) {
+                /* Set the key for a multipart authenticated encryption operation */
+                status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP,
+                                              &operation,
+                                              key,
+                                              check1[i].setup_alg);
+            } else {
+                /* Set the key for a multipart authenticated decryption operation */
+                status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP,
+                                              &operation,
+                                              key,
+                                              check1[i].setup_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);
+        status = val->crypto_function(VAL_CRYPTO_AEAD_GENERATE_NONCE,
+                                      &operation,
+                                      check1[i].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);
+            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, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                          key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
             /* Reset the key attributes */
-            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &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 < (int)nonce_length; j++)
-            nonce_sum += nonce[j];
+        for (j = 0; j < (int32_t)nonce_length; j++)
+            nonce_sum += check1[i].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);
+        status = val->crypto_function(VAL_CRYPTO_AEAD_GENERATE_NONCE,
+                                      &operation,
+                                      check1[i].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);
+        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, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
         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));
-
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES,
+                             &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c054/test_data.h b/api-tests/dev_apis/crypto/test_c054/test_data.h
index 4607ad3..1ffdda3 100644
--- a/api-tests/dev_apis/crypto/test_c054/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c054/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,52 +15,197 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    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_key_type_t          type;
+    const uint8_t          *data;
+    size_t                  data_length;
+    psa_key_usage_t         usage_flags;
     psa_algorithm_t         alg;
+    psa_algorithm_t         setup_alg;
+    uint8_t                *nonce;
     size_t                  nonce_size;
+    uint32_t                operation_state;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
-#ifdef ARCH_TEST_CCM
 #ifdef ARCH_TEST_AES_128
-{"Test psa_aead_generate_nonce - AES-CCM\n", 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
+#ifdef ARCH_TEST_CCM
+{
+    .test_desc       = "Test psa_aead_generate_nonce - Encrypt - CCM\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = expected_output,
+    .nonce_size      = BUFFER_SIZE,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
 },
 
-{"Test psa_aead_generate_nonce - AES-CCM 24 bytes Tag length = 4\n", 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), SIZE_32B,
- PSA_SUCCESS
+{
+    .test_desc       = "Test psa_aead_generate_nonce - Encrypt - CCM - Tag length = 4\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
+    .nonce           = expected_output,
+    .nonce_size      = BUFFER_SIZE,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
 },
 
-{"Test psa_aead_generate_nonce - Small buffer size\n", 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
+{
+    .test_desc       = "Test psa_aead_generate_nonce - Encrypt - CCM - Default Tag length\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(PSA_ALG_CCM),
+    .nonce           = expected_output,
+    .nonce_size      = BUFFER_SIZE,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
 },
-#endif
+
+{
+    .test_desc       = "Test psa_aead_generate_nonce - Encrypt - CCM - Small buffer size\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = expected_output,
+    .nonce_size      = PSA_AEAD_NONCE_LENGTH(PSA_KEY_TYPE_AES, PSA_ALG_CCM) - 1,
+    .operation_state = 1,
+    .expected_status = PSA_ERROR_BUFFER_TOO_SMALL
+},
+
+{
+    .test_desc       = "Test psa_aead_generate_nonce - Encrypt - CCM - Invalid operation state\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = expected_output,
+    .nonce_size      = BUFFER_SIZE,
+    .operation_state = 0,
+    .expected_status = PSA_ERROR_BAD_STATE
+},
 #endif
 
 #ifdef ARCH_TEST_GCM
-#ifdef ARCH_TEST_AES_128
-{"Test psa_aead_generate_nonce - GCM - 16B AES - 12B Nounce & 12B addi data\n", 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
+{
+    .test_desc       = "Test psa_aead_generate_nonce - Encrypt - GCM\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_GCM,
+    .setup_alg       = PSA_ALG_GCM,
+    .nonce           = expected_output,
+    .nonce_size      = BUFFER_SIZE,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_CCM
+{
+    .test_desc       = "Test psa_aead_generate_nonce - Decrypt - CCM\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = expected_output,
+    .nonce_size      = BUFFER_SIZE,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
+},
+
+{
+    .test_desc       = "Test psa_aead_generate_nonce - Decrypt - CCM - Tag length = 4\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
+    .nonce           = expected_output,
+    .nonce_size      = BUFFER_SIZE,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
+},
+
+{
+    .test_desc       = "Test psa_aead_generate_nonce - Decrypt - CCM - Default Tag length\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(PSA_ALG_CCM),
+    .nonce           = expected_output,
+    .nonce_size      = BUFFER_SIZE,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
+},
+
+{
+    .test_desc       = "Test psa_aead_generate_nonce - Decrypt - CCM - Small buffer size\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = expected_output,
+    .nonce_size      = PSA_AEAD_NONCE_LENGTH(PSA_KEY_TYPE_AES, PSA_ALG_CCM) - 1,
+    .operation_state = 1,
+    .expected_status = PSA_ERROR_BUFFER_TOO_SMALL
+},
+
+{
+    .test_desc       = "Test psa_aead_generate_nonce - Decrypt - CCM - Invalid operation state\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = expected_output,
+    .nonce_size      = BUFFER_SIZE,
+    .operation_state = 0,
+    .expected_status = PSA_ERROR_BAD_STATE
+},
+#endif
+
+#ifdef ARCH_TEST_GCM
+{
+    .test_desc       = "Test psa_aead_generate_nonce - Decrypt - GCM\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_GCM,
+    .setup_alg       = PSA_ALG_GCM,
+    .nonce           = expected_output,
+    .nonce_size      = BUFFER_SIZE,
+    .operation_state = 1,
+    .expected_status = 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
index 0d2b75e..3309385 100644
--- a/api-tests/dev_apis/crypto/test_c054/test_entry_c054.c
+++ b/api-tests/dev_apis/crypto/test_c054/test_entry_c054.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c054.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 54)
-#define TEST_DESC "Testing crypto AEAD APIs\n"
+#define TEST_DESC "Testing crypto AEAD APIs | UT: psa_aead_generate_nonce\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c055/test_c055.c b/api-tests/dev_apis/crypto/test_c055/test_c055.c
index 097f2b4..a0d0229 100644
--- a/api-tests/dev_apis/crypto/test_c055/test_c055.c
+++ b/api-tests/dev_apis/crypto/test_c055/test_c055.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -31,10 +31,10 @@
 int32_t psa_aead_set_nonce_test(caller_security_t caller __UNUSED)
 {
     int32_t               i, status;
-    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               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;
-    psa_key_handle_t      key_handle;
+    psa_aead_operation_t  operation;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -48,69 +48,97 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, "[Check %d] ", i+1);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
+        val->crypto_function(VAL_CRYPTO_AEAD_OPERATION_INIT,
+                            &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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,
-                 key_handle, check1[i].alg);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        if (check1[i].operation_state) {
+            if (check1[i].usage_flags == PSA_KEY_USAGE_ENCRYPT) {
+                /* Set the key for a multipart authenticated encryption operation */
+                status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP,
+                                              &operation,
+                                              key,
+                                              check1[i].setup_alg);
+            } else {
+                /* Set the key for a multipart authenticated decryption operation */
+                status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP,
+                                              &operation,
+                                              key,
+                                              check1[i].setup_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);
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE,
+                                      &operation,
+                                      check1[i].nonce,
+                                      check1[i].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);
+            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, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                          key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
 
             /* Reset the key attributes */
-            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &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);
+        status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE,
+                                      &operation,
+                                      check1[i].nonce,
+                                      check1[i].nonce_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);
+        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, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
 
         /* 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(11));
-
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES,
+                             &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c055/test_data.h b/api-tests/dev_apis/crypto/test_c055/test_data.h
index 12e2185..39535ff 100644
--- a/api-tests/dev_apis/crypto/test_c055/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c055/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,70 +15,225 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    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_key_type_t          type;
+    const uint8_t          *data;
+    size_t                  data_length;
+    psa_key_usage_t         usage_flags;
     psa_algorithm_t         alg;
-    uint8_t                 nonce[32];
-    size_t                  nonce_size;
+    psa_algorithm_t         setup_alg;
+    const uint8_t          *nonce;
+    size_t                  nonce_length;
+    uint32_t                operation_state;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
-#ifdef ARCH_TEST_CCM
 #ifdef ARCH_TEST_AES_128
-{"Test psa_aead_set_nonce - AES-CCM\n", 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
+#ifdef ARCH_TEST_CCM
+{
+    .test_desc       = "Test psa_aead_set_nonce - Encrypt - CCM\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = nonce,
+    .nonce_length    = 13,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
 },
 
-{"Test psa_aead_set_nonce - AES-CCM 24 bytes Tag length = 4\n", 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_desc       = "Test psa_aead_set_nonce - Encrypt - CCM - Tag length = 4\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
+    .nonce           = nonce,
+    .nonce_length    = 13,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
 },
 
-{"Test psa_aead_set_nonce - Small nounce size\n", 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_desc       = "Test psa_aead_set_nonce - Encrypt - CCM - Default Tag length\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(PSA_ALG_CCM),
+    .nonce           = nonce,
+    .nonce_length    = 13,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
 },
 
-{"Test psa_aead_set_nonce - Large nonce size\n", 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
+{
+    .test_desc       = "Test psa_aead_set_nonce - Encrypt - CCM - Small nonce size\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = nonce,
+    .nonce_length    = PSA_AEAD_NONCE_LENGTH(PSA_KEY_TYPE_AES, PSA_ALG_CCM) - 1,
+    .operation_state = 1,
+    .expected_status = PSA_ERROR_INVALID_ARGUMENT
 },
-#endif
+
+{
+    .test_desc       = "Test psa_aead_set_nonce - Encrypt - CCM - Large nonce size\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = nonce,
+    .nonce_length    = (PSA_AEAD_NONCE_LENGTH(PSA_KEY_TYPE_AES, PSA_ALG_CCM))*5,
+    .operation_state = 1,
+    .expected_status = PSA_ERROR_INVALID_ARGUMENT
+},
+
+{
+    .test_desc       = "Test psa_aead_set_nonce - Encrypt - CCM - Invalid operation state\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = nonce,
+    .nonce_length    = 13,
+    .operation_state = 0,
+    .expected_status = PSA_ERROR_BAD_STATE
+},
 #endif
 
 #ifdef ARCH_TEST_GCM
-#ifdef ARCH_TEST_AES_128
-{"Test psa_aead_set_nonce - GCM - 16B AES - 12B Nounce & 12B addi data\n", 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
+{
+    .test_desc       = "Test psa_aead_set_nonce - Encrypt - GCM\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_GCM,
+    .setup_alg       = PSA_ALG_GCM,
+    .nonce           = nonce,
+    .nonce_length    = 13,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_CCM
+{
+    .test_desc       = "Test psa_aead_set_nonce - Decrypt - CCM\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = nonce,
+    .nonce_length    = 13,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
+},
+
+{
+    .test_desc       = "Test psa_aead_set_nonce - Decrypt - CCM - Tag length = 4\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
+    .nonce           = nonce,
+    .nonce_length    = 13,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
+},
+
+{
+    .test_desc       = "Test psa_aead_set_nonce - Decrypt - CCM - Default Tag length\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(PSA_ALG_CCM),
+    .nonce           = nonce,
+    .nonce_length    = 13,
+    .operation_state = 1,
+    .expected_status = PSA_SUCCESS
+},
+
+{
+    .test_desc       = "Test psa_aead_set_nonce - Decrypt - CCM - Small nonce size\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = nonce,
+    .nonce_length    = PSA_AEAD_NONCE_LENGTH(PSA_KEY_TYPE_AES, PSA_ALG_CCM) - 1,
+    .operation_state = 1,
+    .expected_status = PSA_ERROR_INVALID_ARGUMENT
+},
+
+{
+    .test_desc       = "Test psa_aead_set_nonce - Decrypt - CCM - Large nonce size\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = nonce,
+    .nonce_length    = (PSA_AEAD_NONCE_LENGTH(PSA_KEY_TYPE_AES, PSA_ALG_CCM))*5,
+    .operation_state = 1,
+    .expected_status = PSA_ERROR_INVALID_ARGUMENT
+},
+
+{
+    .test_desc       = "Test psa_aead_set_nonce - Decrypt - CCM - Invalid operation state\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .nonce           = nonce,
+    .nonce_length    = 13,
+    .operation_state = 0,
+    .expected_status = PSA_ERROR_BAD_STATE
+},
+#endif
+
+#ifdef ARCH_TEST_GCM
+{
+    .test_desc       = "Test psa_aead_set_nonce - Decrypt - GCM\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_GCM,
+    .setup_alg       = PSA_ALG_GCM,
+    .nonce           = nonce,
+    .nonce_length    = 13,
+    .operation_state = 1,
+    .expected_status = 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
index c34e978..8531765 100644
--- a/api-tests/dev_apis/crypto/test_c055/test_entry_c055.c
+++ b/api-tests/dev_apis/crypto/test_c055/test_entry_c055.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c055.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 55)
-#define TEST_DESC "Testing crypto AEAD APIs\n"
+#define TEST_DESC "Testing crypto AEAD APIs | UT: psa_aead_set_nonce\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c056/test_c056.c b/api-tests/dev_apis/crypto/test_c056/test_c056.c
index 26629cf..46a2094 100644
--- a/api-tests/dev_apis/crypto/test_c056/test_c056.c
+++ b/api-tests/dev_apis/crypto/test_c056/test_c056.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -31,10 +31,10 @@
 int32_t psa_aead_set_lengths_test(caller_security_t caller __UNUSED)
 {
     int32_t               i, status;
-    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               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;
-    psa_key_handle_t      key_handle;
+    psa_aead_operation_t  operation;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -48,74 +48,104 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, "[Check %d] ", i+1);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
+        val->crypto_function(VAL_CRYPTO_AEAD_OPERATION_INIT,
+                            &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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,
-                 key_handle, check1[i].alg);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        if (check1[i].operation_state) {
+            if (check1[i].usage_flags == PSA_KEY_USAGE_ENCRYPT) {
+                /* Set the key for a multipart authenticated encryption operation */
+                status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP,
+                                              &operation,
+                                              key,
+                                              check1[i].setup_alg);
+            } else {
+                /* Set the key for a multipart authenticated decryption operation */
+                status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP,
+                                              &operation,
+                                              key,
+                                              check1[i].setup_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));
+            /* Set the nonce for an authenticated encryption operation */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE,
+                                          &operation,
+                                          check1[i].nonce,
+                                          check1[i].nonce_length);
+            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);
+        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);
+            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);
+            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, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                          key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9));
 
             /* Reset the key attributes */
-            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES,
+                                 &attributes);
             continue;
         }
 
         /* Abort the AEAD operation */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &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, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
         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));
-
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES,
+                             &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c056/test_data.h b/api-tests/dev_apis/crypto/test_c056/test_data.h
index f891b7e..e2dc9d0 100644
--- a/api-tests/dev_apis/crypto/test_c056/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c056/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,81 +15,255 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    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_key_type_t          type;
+    const uint8_t          *data;
+    size_t                  data_length;
+    psa_key_usage_t         usage_flags;
     psa_algorithm_t         alg;
-    uint8_t                 nonce[32];
-    size_t                  nonce_size;
+    psa_algorithm_t         setup_alg;
+    const uint8_t          *nonce;
+    size_t                  nonce_length;
     size_t                  ad_length;
     size_t                  plaintext_length;
+    uint32_t                operation_state;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
-#ifdef ARCH_TEST_CCM
 #ifdef ARCH_TEST_AES_128
-{"Test psa_aead_set_lengths - AES-CCM\n", 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
+#ifdef ARCH_TEST_CCM
+{
+    .test_desc        = "Test psa_aead_set_lengths - Encrypt - CCM\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
 },
 
-{"Test psa_aead_set_lengths - AES-CCM 24 bytes Tag length = 4\n", 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_desc        = "Test psa_aead_set_lengths - Encrypt - CCM - Tag length = 4\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
 },
 
-{"Test psa_aead_set_lengths - Zero ad size\n", 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_desc        = "Test psa_aead_set_lengths - Encrypt - CCM - Default Tag length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(PSA_ALG_CCM),
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
 },
 
-{"Test psa_aead_set_lengths - Zero plaintext size\n", 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_desc        = "Test psa_aead_set_lengths - Encrypt - CCM - Zero ad_length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 0,
+    .plaintext_length = 32,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
 },
 
-{"Test psa_aead_set_lengths - Invalid lengths\n", 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
+{
+    .test_desc        = "Test psa_aead_set_lengths - Encrypt - CCM - Zero plaintext_length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 0,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
 },
-#endif
+
+{
+    .test_desc        = "Test psa_aead_set_lengths - Encrypt - CCM - Invalid operation state\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .operation_state  = 0,
+    .expected_status  = PSA_ERROR_BAD_STATE
+},
 #endif
 
 #ifdef ARCH_TEST_GCM
-#ifdef ARCH_TEST_AES_128
-{"Test psa_aead_set_lengths - Vey large lengths\n", 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
+{
+    .test_desc        = "Test psa_aead_set_lengths - Encrypt - GCM\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_GCM,
+    .setup_alg        = PSA_ALG_GCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_CCM
+{
+    .test_desc        = "Test psa_aead_set_lengths - Decrypt - CCM\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
+},
+
+{
+    .test_desc        = "Test psa_aead_set_lengths - Decrypt - CCM - Tag length = 4\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
+},
+
+{
+    .test_desc        = "Test psa_aead_set_lengths - Decrypt - CCM - Default Tag length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(PSA_ALG_CCM),
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
+},
+
+{
+    .test_desc        = "Test psa_aead_set_lengths - Decrypt - CCM - Zero ad_length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 0,
+    .plaintext_length = 32,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
+},
+
+{
+    .test_desc        = "Test psa_aead_set_lengths - Decrypt - CCM - Zero plaintext_length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 0,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
+},
+
+{
+    .test_desc        = "Test psa_aead_set_lengths - Decrypt - CCM - Invalid operation state\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .operation_state  = 0,
+    .expected_status  = PSA_ERROR_BAD_STATE
+},
+#endif
+
+#ifdef ARCH_TEST_GCM
+{
+    .test_desc        = "Test psa_aead_set_lengths - Decrypt - GCM\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_GCM,
+    .setup_alg        = PSA_ALG_GCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
 },
 #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
index 37e0136..4ffb538 100644
--- a/api-tests/dev_apis/crypto/test_c056/test_entry_c056.c
+++ b/api-tests/dev_apis/crypto/test_c056/test_entry_c056.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c056.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 56)
-#define TEST_DESC "Testing crypto AEAD APIs\n"
+#define TEST_DESC "Testing crypto AEAD APIs | UT: psa_aead_set_lengths\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c057/test_c057.c b/api-tests/dev_apis/crypto/test_c057/test_c057.c
index 213ddf5..d89dbba 100644
--- a/api-tests/dev_apis/crypto/test_c057/test_c057.c
+++ b/api-tests/dev_apis/crypto/test_c057/test_c057.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -31,10 +31,10 @@
 int32_t psa_aead_update_ad_test(caller_security_t caller __UNUSED)
 {
     int32_t               i, status;
-    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               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;
-    psa_key_handle_t      key_handle;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -48,79 +48,111 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, "[Check %d] ", i+1);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
+        val->crypto_function(VAL_CRYPTO_AEAD_OPERATION_INIT,
+                             &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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,
-                 key_handle, check1[i].alg);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        if (check1[i].operation_state) {
+            if (check1[i].usage_flags == PSA_KEY_USAGE_ENCRYPT) {
+                /* Set the key for a multipart authenticated encryption operation */
+                status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP,
+                                              &operation,
+                                              key,
+                                              check1[i].setup_alg);
+            } else {
+                /* Set the key for a multipart authenticated decryption operation */
+                status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP,
+                                              &operation,
+                                              key,
+                                              check1[i].setup_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));
+            /* Set the nonce for an authenticated encryption operation */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE,
+                                          &operation,
+                                          check1[i].nonce,
+                                          check1[i].nonce_length);
+            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));
+            /* 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);
+        status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD,
+                                      &operation,
+                                      check1[i].input,
+                                      check1[i].input_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);
+            status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD,
+                                          &operation,
+                                          check1[i].input,
+                                          check1[i].input_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);
+            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, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                          key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10));
 
             /* Reset the key attributes */
-            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes);
+            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES,
+                                 &attributes);
             continue;
         }
 
         /* Abort the AEAD operation */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &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, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
         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));
-
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES,
+                             &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c057/test_data.h b/api-tests/dev_apis/crypto/test_c057/test_data.h
index 9ead790..9008c62 100644
--- a/api-tests/dev_apis/crypto/test_c057/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c057/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,88 +15,279 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    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_key_type_t          type;
+    const uint8_t          *data;
+    size_t                  data_length;
+    psa_key_usage_t         usage_flags;
     psa_algorithm_t         alg;
-    uint8_t                 additional_data[32];
-    uint8_t                 nonce[32];
-    size_t                  nonce_size;
+    psa_algorithm_t         setup_alg;
+    const uint8_t          *nonce;
+    size_t                  nonce_length;
     size_t                  ad_length;
     size_t                  plaintext_length;
+    const uint8_t          *input;
+    size_t                  input_length;
+    uint32_t                operation_state;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
+#ifdef ARCH_TEST_AES_128
 #ifdef ARCH_TEST_CCM
-#ifdef ARCH_TEST_AES_128
-{"Test psa_aead_update_ad - AES-CCM\n", 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_desc        = "Test psa_aead_update_ad - Encrypt - CCM\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .input            = additional_data,
+    .input_length     = 8,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
 },
 
-{"Test psa_aead_update_ad - AES-CCM 24 bytes Tag length = 4\n", 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_desc        = "Test psa_aead_update_ad - Encrypt - CCM - Tag length = 4\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .input            = additional_data,
+    .input_length     = 8,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
 },
 
-{"Test psa_aead_update_ad - Zero ad size\n", 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_desc        = "Test psa_aead_update_ad - Encrypt - CCM - Default length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(PSA_ALG_CCM),
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .input            = additional_data,
+    .input_length     = 8,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
 },
 
-{"Test psa_aead_update_ad - Zero plaintext size\n", 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_desc        = "Test psa_aead_update_ad - Encrypt - CCM - Zero ad_length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 0,
+    .plaintext_length = 32,
+    .input            = NULL,
+    .input_length     = 0,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
 },
 
-{"Test psa_aead_update_ad - Invalid lengths\n", 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
+{
+    .test_desc        = "Test psa_aead_update_ad - Encrypt - CCM - Zero plaintext_length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 0,
+    .input            = additional_data,
+    .input_length     = 8,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
 },
-#endif
-#endif
 
-#ifdef ARCH_TEST_GCM
-#ifdef ARCH_TEST_AES_128
-{"Test psa_aead_update_ad - Vey large lengths\n", 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
+{
+    .test_desc        = "Test psa_aead_update_ad - Encrypt - CCM - Invalid operation state\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .input            = additional_data,
+    .input_length     = 8,
+    .operation_state  = 0,
+    .expected_status  = PSA_ERROR_BAD_STATE
+},
+
+{
+    .test_desc        = "Test psa_aead_update_ad - Encrypt - CCM - Overflow input length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_ENCRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .input            = additional_data,
+    .input_length     = 9,
+    .operation_state  = 1,
+    .expected_status  = PSA_ERROR_INVALID_ARGUMENT
+},
+
+{
+    .test_desc        = "Test psa_aead_update_ad - Decrypt - CCM\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .input            = additional_data,
+    .input_length     = 8,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
+},
+
+{
+    .test_desc        = "Test psa_aead_update_ad - Decrypt - CCM - Tag length = 4\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .input            = additional_data,
+    .input_length     = 8,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
+},
+
+{
+    .test_desc        = "Test psa_aead_update_ad - Decrypt - CCM - Default length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(PSA_ALG_CCM),
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .input            = additional_data,
+    .input_length     = 8,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
+},
+
+{
+    .test_desc        = "Test psa_aead_update_ad - Decrypt - CCM - Zero ad_length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 0,
+    .plaintext_length = 32,
+    .input            = NULL,
+    .input_length     = 0,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
+},
+
+{
+    .test_desc        = "Test psa_aead_update_ad - Decrypt - CCM - Zero plaintext_length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 0,
+    .input            = additional_data,
+    .input_length     = 8,
+    .operation_state  = 1,
+    .expected_status  = PSA_SUCCESS
+},
+
+{
+    .test_desc        = "Test psa_aead_update_ad - Decrypt - CCM - Invalid operation state\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .input            = additional_data,
+    .input_length     = 8,
+    .operation_state  = 0,
+    .expected_status  = PSA_ERROR_BAD_STATE
+},
+
+{
+    .test_desc        = "Test psa_aead_update_ad - Decrypt - CCM - Overflow input length\n",
+    .type             = PSA_KEY_TYPE_AES,
+    .data             = key_data,
+    .data_length      = AES_16B_KEY_SIZE,
+    .usage_flags      = PSA_KEY_USAGE_DECRYPT,
+    .alg              = PSA_ALG_CCM,
+    .setup_alg        = PSA_ALG_CCM,
+    .nonce            = nonce,
+    .nonce_length     = 13,
+    .ad_length        = 8,
+    .plaintext_length = 32,
+    .input            = additional_data,
+    .input_length     = 9,
+    .operation_state  = 1,
+    .expected_status  = 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
index 2999f1b..3036458 100644
--- a/api-tests/dev_apis/crypto/test_c057/test_entry_c057.c
+++ b/api-tests/dev_apis/crypto/test_c057/test_entry_c057.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c057.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 57)
-#define TEST_DESC "Testing crypto AEAD APIs\n"
+#define TEST_DESC "Testing crypto AEAD APIs | UT: psa_aead_update_ad\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c058/test_c058.c b/api-tests/dev_apis/crypto/test_c058/test_c058.c
index 28e3a6f..5a467b9 100644
--- a/api-tests/dev_apis/crypto/test_c058/test_c058.c
+++ b/api-tests/dev_apis/crypto/test_c058/test_c058.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -31,12 +31,11 @@
 int32_t psa_aead_update_test(caller_security_t caller __UNUSED)
 {
     int32_t               i, status;
-    uint8_t               output[BUFFER_SIZE];
-    size_t                length;
+    size_t                output_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;
-    psa_key_handle_t      key_handle;
+    psa_aead_operation_t  operation;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -50,91 +49,130 @@
 
     for (i = 0; i < num_checks; i++)
     {
-        val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
+        val->print(PRINT_TEST, "[Check %d] ", i+1);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
+        val->crypto_function(VAL_CRYPTO_AEAD_OPERATION_INIT,
+                             &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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,
-                 key_handle, check1[i].alg);
-        TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
+        if (check1[i].operation_state) {
+            if (check1[i].usage_flags == PSA_KEY_USAGE_ENCRYPT) {
+                /* Set the key for a multipart authenticated encryption operation */
+                status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP,
+                                              &operation,
+                                              key,
+                                              check1[i].setup_alg);
+            } else {
+                /* Set the key for a multipart authenticated decryption operation */
+                status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP,
+                                              &operation,
+                                              key,
+                                              check1[i].setup_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));
+            /* Set the nonce for an authenticated encryption operation */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE,
+                                          &operation,
+                                          check1[i].nonce,
+                                          check1[i].nonce_length);
+            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));
+            /* 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, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7));
+            /* 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_input_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, check1[i].plaintext_length, output,
-                 check1[i].output_size, &length);
+        status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE,
+                                      &operation,
+                                      check1[i].input,
+                                      check1[i].input_length,
+                                      check1[i].output,
+                                      check1[i].output_size,
+                                      &output_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, check1[i].plaintext_length, output,
-                     check1[i].output_size, &length);
+            status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE,
+                                          &operation,
+                                          check1[i].input,
+                                          check1[i].input_length,
+                                          check1[i].output,
+                                          check1[i].output_size,
+                                          &output_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);
+            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, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                          key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
 
             /* Reset the key attributes */
-            val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &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));
+        TEST_ASSERT_EQUAL(output_length, check1[i].expected_output_length,
+                          TEST_CHECKPOINT_NUM(12));
+        TEST_ASSERT_MEMCMP(check1[i].output, check1[i].expected_output, output_length,
+                           TEST_CHECKPOINT_NUM(13));
 
         /* Abort the AEAD operation */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &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, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
         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));
-
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES,
+                             &attributes);
     }
 
     return VAL_STATUS_SUCCESS;
diff --git a/api-tests/dev_apis/crypto/test_c058/test_data.h b/api-tests/dev_apis/crypto/test_c058/test_data.h
index 53a36d0..587ea9d 100644
--- a/api-tests/dev_apis/crypto/test_c058/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c058/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,124 +15,465 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    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_key_type_t          type;
+    const uint8_t          *data;
+    size_t                  data_length;
+    psa_key_usage_t         usage_flags;
     psa_algorithm_t         alg;
-    uint8_t                 plaintext[30];
-    uint8_t                 additional_data[32];
-    uint8_t                 nonce[32];
-    size_t                  nonce_size;
+    psa_algorithm_t         setup_alg;
+    const uint8_t          *nonce;
+    size_t                  nonce_length;
     size_t                  ad_length;
     size_t                  plaintext_length;
+    const uint8_t          *additional_data;
+    size_t                  ad_input_length;
+    const uint8_t          *input;
     size_t                  input_length;
+    uint8_t                *output;
     size_t                  output_size;
-    uint8_t                 expected_output[45];
-    size_t                  expected_length;
+    const uint8_t          *expected_output;
+    size_t                  expected_output_length;
+    uint32_t                operation_state;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
 #ifdef ARCH_TEST_CCM
 #ifdef ARCH_TEST_AES_128
-{"Test psa_aead_update - AES-CCM\n", 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_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},
-{0x40, 0xa2, 0x7c, 0x1d, 0x1e, 0x23, 0xea, 0x3d, 0xbe, 0x80, 0x56, 0xb2, 0x77,
- 0x48, 0x61, 0xa4, 0xa2, 0x01, 0xcc, 0xe4, 0x9f, 0x19, 0x99, 0x7d, 0x19, 0x20,
- 0x6d, 0x8c, 0x8a, 0x34, 0x39, 0x51},
-{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
- 13, 32, 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_desc              = "Test psa_aead_update - Encrypt - CCM\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_ENCRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = aead_ciphertext_2,
+    .expected_output_length = AEAD_CIPHERTEXT_LEN_2,
+    .operation_state        = 1,
+    .expected_status        = PSA_SUCCESS
 },
 
-{"Test psa_aead_update - AES-CCM 24 bytes Tag length = 4\n", 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},
-{0x40, 0xa2, 0x7c, 0x1d, 0x1e, 0x23, 0xea, 0x3d, 0xbe, 0x80, 0x56, 0xb2, 0x77,
- 0x48, 0x61, 0xa4, 0xa2, 0x01, 0xcc, 0xe4, 0x9f, 0x19, 0x99, 0x7d, 0x19, 0x20,
- 0x6d, 0x8c, 0x8a, 0x34, 0x39, 0x51},
-{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
- 13, 32, 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_desc              = "Test psa_aead_update - Encrypt - CCM - Tag length = 4\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_ENCRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = aead_ciphertext_3,
+    .expected_output_length = AEAD_CIPHERTEXT_LEN_3,
+    .operation_state        = 1,
+    .expected_status        = PSA_SUCCESS
 },
 
-{"Test psa_aead_update - Zero plaintext size\n", 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_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_desc              = "Test psa_aead_update - Encrypt - CCM - Default Tag length\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_ENCRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(PSA_ALG_CCM),
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = aead_ciphertext_2,
+    .expected_output_length = AEAD_CIPHERTEXT_LEN_2,
+    .operation_state        = 1,
+    .expected_status        = PSA_SUCCESS
 },
 
-{"Test psa_aead_update - Small buffer size\n", 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_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},
-{0x40, 0xa2, 0x7c, 0x1d, 0x1e, 0x23, 0xea, 0x3d, 0xbe, 0x80, 0x56, 0xb2, 0x77,
- 0x48, 0x61, 0xa4, 0xa2, 0x01, 0xcc, 0xe4, 0x9f, 0x19, 0x99, 0x7d, 0x19, 0x20,
- 0x6d, 0x8c, 0x8a, 0x34, 0x39, 0x51},
-{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
- 13, 32, 24, 24, 10, {0}, 0,
- PSA_ERROR_BUFFER_TOO_SMALL
+{
+    .test_desc              = "Test psa_aead_update - Encrypt - CCM - Zero ad_length\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_ENCRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 0,
+    .plaintext_length       = 24,
+    .additional_data        = NULL,
+    .ad_input_length        = 0,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = aead_ciphertext_4,
+    .expected_output_length = AEAD_CIPHERTEXT_LEN_4,
+    .operation_state        = 1,
+    .expected_status        = PSA_SUCCESS
 },
 
-{"Test psa_aead_update - Input length overflows plaintext length\n", 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_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},
-{0x40, 0xa2, 0x7c, 0x1d, 0x1e, 0x23, 0xea, 0x3d, 0xbe, 0x80, 0x56, 0xb2, 0x77,
- 0x48, 0x61, 0xa4, 0xa2, 0x01, 0xcc, 0xe4, 0x9f, 0x19, 0x99, 0x7d, 0x19, 0x20,
- 0x6d, 0x8c, 0x8a, 0x34, 0x39, 0x51},
-{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72},
- 13, 32, 24, 10, BUFFER_SIZE, {0}, 0,
- PSA_ERROR_INVALID_ARGUMENT
+{
+    .test_desc              = "Test psa_aead_update - Encrypt - CCM - Zero plaintext_length\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_ENCRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 0,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = NULL,
+    .input_length           = 0,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = aead_ciphertext_5,
+    .expected_output_length = AEAD_CIPHERTEXT_LEN_5,
+    .operation_state        = 1,
+    .expected_status        = PSA_SUCCESS
 },
-#endif
-#endif
 
-#ifdef ARCH_TEST_GCM
-#ifdef ARCH_TEST_AES_128
-{"Test psa_aead_update - GCM - 16B AES - 12B Nounce & 12B addi data\n", 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
+{
+    .test_desc              = "Test psa_aead_update - Encrypt - CCM - Small buffer size\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_ENCRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = AEAD_CIPHERTEXT_LEN_2 - 2,
+    .expected_output        = NULL,
+    .expected_output_length = 0,
+    .operation_state        = 1,
+    .expected_status        = PSA_ERROR_BUFFER_TOO_SMALL
+},
+
+{
+    .test_desc              = "Test psa_aead_update - Encrypt - Less add data than specified\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_ENCRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 30,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = NULL,
+    .expected_output_length = 0,
+    .operation_state        = 1,
+    .expected_status        = PSA_ERROR_INVALID_ARGUMENT
+},
+
+{
+    .test_desc              = "Test psa_aead_update - Encrypt - CCM - Overflow input length\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_ENCRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = plaintext,
+    .input_length           = 25,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = NULL,
+    .expected_output_length = 0,
+    .operation_state        = 1,
+    .expected_status        = PSA_ERROR_INVALID_ARGUMENT
+},
+
+{
+    .test_desc              = "Test psa_aead_update - Encrypt - CCM - Invalid operation state\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_ENCRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = NULL,
+    .expected_output_length = 0,
+    .operation_state        = 0,
+    .expected_status        = PSA_ERROR_BAD_STATE
+},
+
+{
+    .test_desc              = "Test psa_aead_update - Decrypt - CCM\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_DECRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = aead_ciphertext_2,
+    .expected_output_length = AEAD_CIPHERTEXT_LEN_2,
+    .operation_state        = 1,
+    .expected_status        = PSA_SUCCESS
+},
+
+{
+    .test_desc              = "Test psa_aead_update - Decrypt - CCM - Tag length = 4\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_DECRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 4),
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = aead_ciphertext_3,
+    .expected_output_length = AEAD_CIPHERTEXT_LEN_3,
+    .operation_state        = 1,
+    .expected_status        = PSA_SUCCESS
+},
+
+{
+    .test_desc              = "Test psa_aead_update - Decrypt - CCM - Default Tag length\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_DECRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(PSA_ALG_CCM),
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = aead_ciphertext_2,
+    .expected_output_length = AEAD_CIPHERTEXT_LEN_2,
+    .operation_state        = 1,
+    .expected_status        = PSA_SUCCESS
+},
+
+{
+    .test_desc              = "Test psa_aead_update - Decrypt - CCM - Zero ad_length\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_DECRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 0,
+    .plaintext_length       = 24,
+    .additional_data        = NULL,
+    .ad_input_length        = 0,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = aead_ciphertext_4,
+    .expected_output_length = AEAD_CIPHERTEXT_LEN_4,
+    .operation_state        = 1,
+    .expected_status        = PSA_SUCCESS
+},
+
+{
+    .test_desc              = "Test psa_aead_update - Decrypt - CCM - Zero plaintext_length\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_DECRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 0,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = NULL,
+    .input_length           = 0,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = aead_ciphertext_5,
+    .expected_output_length = AEAD_CIPHERTEXT_LEN_5,
+    .operation_state        = 1,
+    .expected_status        = PSA_SUCCESS
+},
+
+{
+    .test_desc              = "Test psa_aead_update - Decrypt - CCM - Small buffer size\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_DECRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = AEAD_CIPHERTEXT_LEN_2 - 2,
+    .expected_output        = NULL,
+    .expected_output_length = 0,
+    .operation_state        = 1,
+    .expected_status        = PSA_ERROR_BUFFER_TOO_SMALL
+},
+
+{
+    .test_desc              = "Test psa_aead_update - Decrypt - Less add data than specified\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_DECRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 30,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = NULL,
+    .expected_output_length = 0,
+    .operation_state        = 1,
+    .expected_status        = PSA_ERROR_INVALID_ARGUMENT
+},
+
+{
+    .test_desc              = "Test psa_aead_update - Decrypt - CCM - Overflow input length\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_DECRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = plaintext,
+    .input_length           = 25,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = NULL,
+    .expected_output_length = 0,
+    .operation_state        = 1,
+    .expected_status        = PSA_ERROR_INVALID_ARGUMENT
+},
+
+{
+    .test_desc              = "Test psa_aead_update - Decrypt - CCM - Invalid operation state\n",
+    .type                   = PSA_KEY_TYPE_AES,
+    .data                   = key_data,
+    .data_length            = AES_16B_KEY_SIZE,
+    .usage_flags            = PSA_KEY_USAGE_DECRYPT,
+    .alg                    = PSA_ALG_CCM,
+    .setup_alg              = PSA_ALG_CCM,
+    .nonce                  = nonce,
+    .nonce_length           = 13,
+    .ad_length              = 32,
+    .plaintext_length       = 24,
+    .additional_data        = additional_data,
+    .ad_input_length        = 32,
+    .input                  = plaintext,
+    .input_length           = 24,
+    .output                 = expected_output,
+    .output_size            = BUFFER_SIZE,
+    .expected_output        = NULL,
+    .expected_output_length = 0,
+    .operation_state        = 0,
+    .expected_status        = PSA_ERROR_BAD_STATE
 },
 #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
index d7b1ee1..6febb42 100644
--- a/api-tests/dev_apis/crypto/test_c058/test_entry_c058.c
+++ b/api-tests/dev_apis/crypto/test_c058/test_entry_c058.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c058.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 58)
-#define TEST_DESC "Testing crypto AEAD APIs\n"
+#define TEST_DESC "Testing crypto AEAD APIs | UT: psa_aead_update_test\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c059/test_c059.c b/api-tests/dev_apis/crypto/test_c059/test_c059.c
index abec35e..f412690 100644
--- a/api-tests/dev_apis/crypto/test_c059/test_c059.c
+++ b/api-tests/dev_apis/crypto/test_c059/test_c059.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -36,7 +36,7 @@
     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;
-    psa_key_handle_t      key_handle;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -64,12 +64,12 @@
 
         /* 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, &key_handle);
+                 check1[i].key_length, &key);
         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,
-                 key_handle, check1[i].alg);
+                 key, check1[i].alg);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
         /* Set the nonce for an authenticated encryption operation */
@@ -110,7 +110,7 @@
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
 
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
 
             /* Reset the key attributes */
@@ -129,7 +129,7 @@
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(17));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(18));
 
         /* Reset the key attributes */
diff --git a/api-tests/dev_apis/crypto/test_c059/test_data.h b/api-tests/dev_apis/crypto/test_c059/test_data.h
index 9e43eea..9a9f5e8 100644
--- a/api-tests/dev_apis/crypto/test_c059/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c059/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -65,7 +65,7 @@
 {"Test psa_aead_finish - AES-CCM 24 bytes Tag length = 4\n", 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_ALG_AEAD_WITH_SHORTENED_TAG(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},
 {0x40, 0xa2, 0x7c, 0x1d, 0x1e, 0x23, 0xea, 0x3d, 0xbe, 0x80, 0x56, 0xb2, 0x77,
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
index 73ac611..9130cf1 100644
--- a/api-tests/dev_apis/crypto/test_c059/test_entry_c059.c
+++ b/api-tests/dev_apis/crypto/test_c059/test_entry_c059.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c059.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 59)
-#define TEST_DESC "Testing crypto AEAD APIs\n"
+#define TEST_DESC "Testing crypto AEAD APIs | UT: psa_aead_finish\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c060/test_c060.c b/api-tests/dev_apis/crypto/test_c060/test_c060.c
index e86043e..1454378 100644
--- a/api-tests/dev_apis/crypto/test_c060/test_c060.c
+++ b/api-tests/dev_apis/crypto/test_c060/test_c060.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -32,10 +32,10 @@
 int32_t psa_aead_abort_test(caller_security_t caller __UNUSED)
 {
     int32_t               i, status;
-    int                   num_checks = sizeof(check1)/sizeof(check1[0]);
+    int32_t               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;
-    psa_key_handle_t      key_handle;
+    psa_aead_operation_t  operation;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -52,35 +52,62 @@
         val->print(PRINT_TEST, "[Check %d] ", g_test_count++);
         val->print(PRINT_TEST, check1[i].test_desc, 0);
 
+        val->crypto_function(VAL_CRYPTO_AEAD_OPERATION_INIT,
+                             &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));
 
         /* 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);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE,
+                             &attributes,
+                             check1[i].type);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+                             &attributes,
+                             check1[i].usage_flags);
+        val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM,
+                             &attributes,
+                             check1[i].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, &key_handle);
+        status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY,
+                                      &attributes,
+                                      check1[i].data,
+                                      check1[i].data_length,
+                                      &key);
         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,
-                 key_handle, check1[i].alg);
+        if (check1[i].usage_flags == PSA_KEY_USAGE_ENCRYPT)
+        {
+            /* Set the key for a multipart authenticated encryption operation */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP,
+                                          &operation,
+                                          key,
+                                          check1[i].setup_alg);
+        } else {
+            /* Set the key for a multipart authenticated decryption operation */
+            status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP,
+                                          &operation,
+                                          key,
+                                          check1[i].setup_alg);
+        }
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
-        /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        /* Abort the AEAD operation */
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT,
+                                      &operation);
         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);
+        /* Destroy the key */
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY,
+                                      key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6));
+
+        /* Reset the key attributes and check if psa_import_key fails */
+        val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES,
+                             &attributes);
+
     }
 
     return VAL_STATUS_SUCCESS;
@@ -102,7 +129,8 @@
     for (i = 0; i < operation_count; i++)
     {
         /* Abort the AEAD operation */
-        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation[i]);
+        status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT,
+                                      &operation[i]);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(2));
     }
 
diff --git a/api-tests/dev_apis/crypto/test_c060/test_data.h b/api-tests/dev_apis/crypto/test_c060/test_data.h
index 2618c53..93a296a 100644
--- a/api-tests/dev_apis/crypto/test_c060/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c060/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,44 +15,96 @@
  * limitations under the License.
 **/
 
-#include "val_crypto.h"
+#include "test_crypto_common.h"
 
 typedef struct {
     char                    test_desc[75];
-    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_key_type_t          type;
+    const uint8_t          *data;
+    size_t                  data_length;
+    psa_key_usage_t         usage_flags;
     psa_algorithm_t         alg;
+    psa_algorithm_t         setup_alg;
     psa_status_t            expected_status;
 } test_data;
 
 static const test_data check1[] = {
-#ifdef ARCH_TEST_CCM
 #ifdef ARCH_TEST_AES_128
-{"Test psa_aead_abort - AES-CCM\n", 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
+#ifdef ARCH_TEST_CCM
+{
+    .test_desc       = "Test psa_aead_abort - Encrypt - CCM - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .expected_status = PSA_SUCCESS
 },
-
-{"Test psa_aead_abort - AES-CCM 24 bytes Tag length = 4\n", 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", 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
+{
+    .test_desc       = "Test psa_aead_abort - Encrypt - GCM - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_GCM,
+    .setup_alg       = PSA_ALG_GCM,
+    .expected_status = PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_CHACHA20_POLY1305
+{
+    .test_desc       = "Test psa_aead_abort - Encrypt - CHACHA20_POLY1305 - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_ENCRYPT,
+    .alg             = PSA_ALG_CHACHA20_POLY1305,
+    .setup_alg       = PSA_ALG_CHACHA20_POLY1305,
+    .expected_status = PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_CCM
+{
+    .test_desc       = "Test psa_aead_abort - Decrypt - CCM - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CCM,
+    .setup_alg       = PSA_ALG_CCM,
+    .expected_status = PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_GCM
+{
+    .test_desc       = "Test psa_aead_abort - Decrypt - GCM - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_GCM,
+    .setup_alg       = PSA_ALG_GCM,
+    .expected_status = PSA_SUCCESS
+},
+#endif
+
+#ifdef ARCH_TEST_CHACHA20_POLY1305
+{
+    .test_desc       = "Test psa_aead_abort - Decrypt - CHACHA20_POLY1305 - AES\n",
+    .type            = PSA_KEY_TYPE_AES,
+    .data            = key_data,
+    .data_length     = AES_16B_KEY_SIZE,
+    .usage_flags     = PSA_KEY_USAGE_DECRYPT,
+    .alg             = PSA_ALG_CHACHA20_POLY1305,
+    .setup_alg       = PSA_ALG_CHACHA20_POLY1305,
+    .expected_status = 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
index 20bdc80..1bcbefc 100644
--- a/api-tests/dev_apis/crypto/test_c060/test_entry_c060.c
+++ b/api-tests/dev_apis/crypto/test_c060/test_entry_c060.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c060.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 60)
-#define TEST_DESC "Testing crypto AEAD APIs\n"
+#define TEST_DESC "Testing crypto AEAD APIs | UT: psa_aead_abort\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c061/test_c061.c b/api-tests/dev_apis/crypto/test_c061/test_c061.c
index 89b4158..2378c0f 100644
--- a/api-tests/dev_apis/crypto/test_c061/test_c061.c
+++ b/api-tests/dev_apis/crypto/test_c061/test_c061.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -36,7 +36,7 @@
     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;
-    psa_key_handle_t      key_handle;
+    psa_key_id_t          key;
 
     if (num_checks == 0)
     {
@@ -64,12 +64,12 @@
 
         /* 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, &key_handle);
+                 check1[i].key_length, &key);
         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,
-                 key_handle, check1[i].alg);
+                 key, check1[i].alg);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4));
 
         /* Set the nonce for an authenticated encryption operation */
@@ -110,7 +110,7 @@
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11));
 
             /* Destroy the key */
-            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+            status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
             TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12));
 
             /* Reset the key attributes */
@@ -129,7 +129,7 @@
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16));
 
         /* Destroy the key */
-        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle);
+        status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key);
         TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(17));
 
         /* Reset the key attributes */
diff --git a/api-tests/dev_apis/crypto/test_c061/test_data.h b/api-tests/dev_apis/crypto/test_c061/test_data.h
index c5af3a8..cefed85 100644
--- a/api-tests/dev_apis/crypto/test_c061/test_data.h
+++ b/api-tests/dev_apis/crypto/test_c061/test_data.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -65,7 +65,7 @@
 {"Test psa_aead_verify - AES-CCM 24 bytes Tag length = 4\n", 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_ALG_AEAD_WITH_SHORTENED_TAG(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},
 {0x40, 0xa2, 0x7c, 0x1d, 0x1e, 0x23, 0xea, 0x3d, 0xbe, 0x80, 0x56, 0xb2, 0x77,
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
index 71b6a64..e0c3875 100644
--- a/api-tests/dev_apis/crypto/test_c061/test_entry_c061.c
+++ b/api-tests/dev_apis/crypto/test_c061/test_entry_c061.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_c061.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 61)
-#define TEST_DESC "Testing crypto AEAD APIs\n"
+#define TEST_DESC "Testing crypto AEAD APIs | UT: psa_aead_verify\n"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
diff --git a/api-tests/dev_apis/crypto/test_c062/test_c062.c b/api-tests/dev_apis/crypto/test_c062/test_c062.c
index ce99247..b088dee 100644
--- a/api-tests/dev_apis/crypto/test_c062/test_c062.c
+++ b/api-tests/dev_apis/crypto/test_c062/test_c062.c
@@ -153,7 +153,7 @@
                                   &operation,
                                   check1[valid_test_input_index].hash_state +
                                   expected_hash_state_length1,
-                                  check1[valid_test_input_index].hash_state_size - 
+                                  check1[valid_test_input_index].hash_state_size -
                                   expected_hash_state_length1,
                                   &expected_hash_state_length2);
     TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(6));
diff --git a/api-tests/dev_apis/crypto/testsuite.db b/api-tests/dev_apis/crypto/testsuite.db
index e857a3e..a322098 100644
--- a/api-tests/dev_apis/crypto/testsuite.db
+++ b/api-tests/dev_apis/crypto/testsuite.db
@@ -81,5 +81,7 @@
 test_c059
 test_c060
 test_c061
+test_c062
+test_c063
 
 (END)
diff --git a/api-tests/dev_apis/initial_attestation/1.0-beta0_testsuite.db b/api-tests/dev_apis/initial_attestation/1.0-beta0_testsuite.db
new file mode 100644
index 0000000..8f04f32
--- /dev/null
+++ b/api-tests/dev_apis/initial_attestation/1.0-beta0_testsuite.db
@@ -0,0 +1,25 @@
+#/** @file
+# * Copyright (c) 2021, 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 of tests to be compiled and run as part of initial_attestation suite
+
+(START)
+
+test_a001
+
+(END)
diff --git a/api-tests/dev_apis/initial_attestation/1.0.0_testsuite.db b/api-tests/dev_apis/initial_attestation/1.0.0_testsuite.db
new file mode 100644
index 0000000..8f04f32
--- /dev/null
+++ b/api-tests/dev_apis/initial_attestation/1.0.0_testsuite.db
@@ -0,0 +1,25 @@
+#/** @file
+# * Copyright (c) 2021, 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 of tests to be compiled and run as part of initial_attestation suite
+
+(START)
+
+test_a001
+
+(END)
diff --git a/api-tests/dev_apis/initial_attestation/1.0.1_testsuite.db b/api-tests/dev_apis/initial_attestation/1.0.1_testsuite.db
new file mode 100644
index 0000000..8f04f32
--- /dev/null
+++ b/api-tests/dev_apis/initial_attestation/1.0.1_testsuite.db
@@ -0,0 +1,25 @@
+#/** @file
+# * Copyright (c) 2021, 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 of tests to be compiled and run as part of initial_attestation suite
+
+(START)
+
+test_a001
+
+(END)
diff --git a/api-tests/dev_apis/initial_attestation/1.0.2_testsuite.db b/api-tests/dev_apis/initial_attestation/1.0.2_testsuite.db
new file mode 100644
index 0000000..8f04f32
--- /dev/null
+++ b/api-tests/dev_apis/initial_attestation/1.0.2_testsuite.db
@@ -0,0 +1,25 @@
+#/** @file
+# * Copyright (c) 2021, 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 of tests to be compiled and run as part of initial_attestation suite
+
+(START)
+
+test_a001
+
+(END)
diff --git a/api-tests/dev_apis/initial_attestation/test_a001/test_entry_a001.c b/api-tests/dev_apis/initial_attestation/test_a001/test_entry_a001.c
index db253b8..b685017 100644
--- a/api-tests/dev_apis/initial_attestation/test_a001/test_entry_a001.c
+++ b/api-tests/dev_apis/initial_attestation/test_a001/test_entry_a001.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_a001.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_INITIAL_ATTESTATION_BASE, 1)
-#define TEST_DESC "Testing initial attestation APIs\n"
+#define TEST_DESC "Testing attestation initial attestation APIs | UT: psa_initial_attestation\n"
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
 psa_api_t *psa = NULL;
diff --git a/api-tests/dev_apis/storage/its_1.0-beta2_testsuite.db b/api-tests/dev_apis/storage/its_1.0-beta2_testsuite.db
new file mode 100644
index 0000000..ebfbaaf
--- /dev/null
+++ b/api-tests/dev_apis/storage/its_1.0-beta2_testsuite.db
@@ -0,0 +1,34 @@
+#/** @file
+# * Copyright (c) 2021, 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 of tests to be compiled and run as part of internal trusted storage suite
+
+(START)
+
+test_s001
+test_s002
+test_s003
+test_s004
+test_s005
+test_s006
+test_s007
+test_s008
+test_s009
+test_s010
+
+(END)
diff --git a/api-tests/dev_apis/storage/its_1.0_testsuite.db b/api-tests/dev_apis/storage/its_1.0_testsuite.db
new file mode 100644
index 0000000..ebfbaaf
--- /dev/null
+++ b/api-tests/dev_apis/storage/its_1.0_testsuite.db
@@ -0,0 +1,34 @@
+#/** @file
+# * Copyright (c) 2021, 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 of tests to be compiled and run as part of internal trusted storage suite
+
+(START)
+
+test_s001
+test_s002
+test_s003
+test_s004
+test_s005
+test_s006
+test_s007
+test_s008
+test_s009
+test_s010
+
+(END)
diff --git a/api-tests/dev_apis/storage/ps_1.0-beta2_testsuite.db b/api-tests/dev_apis/storage/ps_1.0-beta2_testsuite.db
new file mode 100644
index 0000000..a89fa95
--- /dev/null
+++ b/api-tests/dev_apis/storage/ps_1.0-beta2_testsuite.db
@@ -0,0 +1,41 @@
+#/** @file
+# * Copyright (c) 2021, 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 of tests to be compiled and run as part of internal trusted storage suite
+
+(START)
+
+test_s001
+test_s002
+test_s003
+test_s004
+test_s005
+test_s006
+test_s007
+test_s008
+test_s009
+test_s010
+test_s011
+test_s012
+test_s013
+test_s014
+test_s015
+test_s016
+test_s017
+
+(END)
diff --git a/api-tests/dev_apis/storage/ps_1.0_testsuite.db b/api-tests/dev_apis/storage/ps_1.0_testsuite.db
new file mode 100644
index 0000000..a89fa95
--- /dev/null
+++ b/api-tests/dev_apis/storage/ps_1.0_testsuite.db
@@ -0,0 +1,41 @@
+#/** @file
+# * Copyright (c) 2021, 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 of tests to be compiled and run as part of internal trusted storage suite
+
+(START)
+
+test_s001
+test_s002
+test_s003
+test_s004
+test_s005
+test_s006
+test_s007
+test_s008
+test_s009
+test_s010
+test_s011
+test_s012
+test_s013
+test_s014
+test_s015
+test_s016
+test_s017
+
+(END)
diff --git a/api-tests/dev_apis/storage/test_s001/test_entry_s001.c b/api-tests/dev_apis/storage/test_s001/test_entry_s001.c
index b7dd733..353de42 100644
--- a/api-tests/dev_apis/storage/test_s001/test_entry_s001.c
+++ b/api-tests/dev_apis/storage/test_s001/test_entry_s001.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s001.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 1)
-#define TEST_DESC "UID not found check\n"
+#define TEST_DESC "UID not found check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+    	val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+    	val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+    	val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s002/test_entry_s002.c b/api-tests/dev_apis/storage/test_s002/test_entry_s002.c
index 43a3552..e54e697 100755
--- a/api-tests/dev_apis/storage/test_s002/test_entry_s002.c
+++ b/api-tests/dev_apis/storage/test_s002/test_entry_s002.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s002.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 2)
-#define TEST_DESC "Write once error check\n"
+#define TEST_DESC "Write once error check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s003/test_entry_s003.c b/api-tests/dev_apis/storage/test_s003/test_entry_s003.c
index 99807e2..12ae9f3 100755
--- a/api-tests/dev_apis/storage/test_s003/test_entry_s003.c
+++ b/api-tests/dev_apis/storage/test_s003/test_entry_s003.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s003.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 3)
-#define TEST_DESC "Insufficient space check\n"
+#define TEST_DESC "Insufficient space check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s004/test_entry_s004.c b/api-tests/dev_apis/storage/test_s004/test_entry_s004.c
index a7861ef..e101789 100755
--- a/api-tests/dev_apis/storage/test_s004/test_entry_s004.c
+++ b/api-tests/dev_apis/storage/test_s004/test_entry_s004.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s004.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 4)
-#define TEST_DESC "Data Consistency check\n"
+#define TEST_DESC "Data Consistency check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s005/test_entry_s005.c b/api-tests/dev_apis/storage/test_s005/test_entry_s005.c
index d41b0b8..a360d37 100755
--- a/api-tests/dev_apis/storage/test_s005/test_entry_s005.c
+++ b/api-tests/dev_apis/storage/test_s005/test_entry_s005.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s005.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 5)
-#define TEST_DESC "Success scenarios check\n"
+#define TEST_DESC "Success scenarios check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s006/test_entry_s006.c b/api-tests/dev_apis/storage/test_s006/test_entry_s006.c
index 09d90d0..cc5d188 100755
--- a/api-tests/dev_apis/storage/test_s006/test_entry_s006.c
+++ b/api-tests/dev_apis/storage/test_s006/test_entry_s006.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s006.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 6)
-#define TEST_DESC "Check for storage create flags\n"
+#define TEST_DESC "Check for storage create flags"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s007/test_entry_s007.c b/api-tests/dev_apis/storage/test_s007/test_entry_s007.c
index a2e8120..b369fbf 100755
--- a/api-tests/dev_apis/storage/test_s007/test_entry_s007.c
+++ b/api-tests/dev_apis/storage/test_s007/test_entry_s007.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s007.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 7)
-#define TEST_DESC "Incorrect Size check\n"
+#define TEST_DESC "Incorrect Size check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s008/test_entry_s008.c b/api-tests/dev_apis/storage/test_s008/test_entry_s008.c
index 98540df..ed02809 100755
--- a/api-tests/dev_apis/storage/test_s008/test_entry_s008.c
+++ b/api-tests/dev_apis/storage/test_s008/test_entry_s008.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s008.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 8)
-#define TEST_DESC "Invalid offset check\n"
+#define TEST_DESC "Invalid offset check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s009/test_entry_s009.c b/api-tests/dev_apis/storage/test_s009/test_entry_s009.c
index 6a1da17..9a2292c 100755
--- a/api-tests/dev_apis/storage/test_s009/test_entry_s009.c
+++ b/api-tests/dev_apis/storage/test_s009/test_entry_s009.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s009.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 9)
-#define TEST_DESC "Invalid Arguments check\n"
+#define TEST_DESC "Invalid Arguments check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s010/test_entry_s010.c b/api-tests/dev_apis/storage/test_s010/test_entry_s010.c
index 8cdd70b..92f21e5 100644
--- a/api-tests/dev_apis/storage/test_s010/test_entry_s010.c
+++ b/api-tests/dev_apis/storage/test_s010/test_entry_s010.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s010.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 10)
-#define TEST_DESC "UID value zero check\n"
+#define TEST_DESC "UID value zero check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s011/test_entry_s011.c b/api-tests/dev_apis/storage/test_s011/test_entry_s011.c
index 082eea4..c7486a7 100644
--- a/api-tests/dev_apis/storage/test_s011/test_entry_s011.c
+++ b/api-tests/dev_apis/storage/test_s011/test_entry_s011.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s011.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 11)
-#define TEST_DESC "Optional APIs: UID not found check\n"
+#define TEST_DESC "Optional APIs: UID not found check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s012/test_entry_s012.c b/api-tests/dev_apis/storage/test_s012/test_entry_s012.c
index 4bded12..2036949 100644
--- a/api-tests/dev_apis/storage/test_s012/test_entry_s012.c
+++ b/api-tests/dev_apis/storage/test_s012/test_entry_s012.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s012.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 12)
-#define TEST_DESC "Optional APIs: Invalid arguments and offset invalid\n"
+#define TEST_DESC "Optional APIs: Invalid arguments and offset invalid"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s013/test_entry_s013.c b/api-tests/dev_apis/storage/test_s013/test_entry_s013.c
index 0c3fa8f..075bb53 100644
--- a/api-tests/dev_apis/storage/test_s013/test_entry_s013.c
+++ b/api-tests/dev_apis/storage/test_s013/test_entry_s013.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s013.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 13)
-#define TEST_DESC "Set_Extended and Create api : Success\n"
+#define TEST_DESC "Set_Extended and Create api : Success"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s014/test_entry_s014.c b/api-tests/dev_apis/storage/test_s014/test_entry_s014.c
index 5b01131..664381d 100644
--- a/api-tests/dev_apis/storage/test_s014/test_entry_s014.c
+++ b/api-tests/dev_apis/storage/test_s014/test_entry_s014.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s014.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 14)
-#define TEST_DESC "Optional APIs not supported check\n"
+#define TEST_DESC "Optional APIs not supported check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s015/test_entry_s015.c b/api-tests/dev_apis/storage/test_s015/test_entry_s015.c
index 567c981..9b5471e 100644
--- a/api-tests/dev_apis/storage/test_s015/test_entry_s015.c
+++ b/api-tests/dev_apis/storage/test_s015/test_entry_s015.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s015.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 15)
-#define TEST_DESC "Create API write_once flag value check\n"
+#define TEST_DESC "Create API write_once flag value check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s016/test_entry_s016.c b/api-tests/dev_apis/storage/test_s016/test_entry_s016.c
index 3aef53d..3060ec5 100644
--- a/api-tests/dev_apis/storage/test_s016/test_entry_s016.c
+++ b/api-tests/dev_apis/storage/test_s016/test_entry_s016.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s016.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 16)
-#define TEST_DESC "Storage assest capacity modification check\n"
+#define TEST_DESC "Storage assest capacity modification check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_s017/test_entry_s017.c b/api-tests/dev_apis/storage/test_s017/test_entry_s017.c
index 9f7ea64..516fe99 100644
--- a/api-tests/dev_apis/storage/test_s017/test_entry_s017.c
+++ b/api-tests/dev_apis/storage/test_s017/test_entry_s017.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,7 @@
 #include "test_s017.h"
 
 #define TEST_NUM  VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 17)
-#define TEST_DESC "Storage assest capacity modification check\n"
+#define TEST_DESC "Storage assest capacity modification check"
 
 TEST_PUBLISH(TEST_NUM, test_entry);
 val_api_t *val = NULL;
@@ -35,6 +35,15 @@
 
     /* test init */
     val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT));
+
+    #if defined(STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_STORAGE, 0);
+    #elif defined(INTERNAL_TRUSTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_ITS, 0);
+    #elif defined(PROTECTED_STORAGE)
+        val->print(PRINT_TEST, TEST_DESC_PS, 0);
+    #endif
+
     if (!IS_TEST_START(val->get_status()))
     {
         goto test_exit;
diff --git a/api-tests/dev_apis/storage/test_storage_common.h b/api-tests/dev_apis/storage/test_storage_common.h
index 7d1d4b1..9d0f5ce 100644
--- a/api-tests/dev_apis/storage/test_storage_common.h
+++ b/api-tests/dev_apis/storage/test_storage_common.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2020-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -24,6 +24,9 @@
 #define STORAGE_FUNCTION val->storage_function
 #define ITS_TEST_MESSAGE "\n[Info] Executing ITS tests\n"
 #define PS_TEST_MESSAGE  "\n[Info] Executing PS tests\n"
+#define TEST_DESC_STORAGE " | UT: STORAGE\n"
+#define TEST_DESC_ITS " | UT: ITS\n"
+#define TEST_DESC_PS " | UT: PS\n"
 
 extern val_api_t           *val;
 extern psa_api_t           *psa;
diff --git a/api-tests/docs/psa_crypto_testlist.md b/api-tests/docs/psa_crypto_testlist.md
index 67aa616..4a9b973 100644
--- a/api-tests/docs/psa_crypto_testlist.md
+++ b/api-tests/docs/psa_crypto_testlist.md
@@ -485,7 +485,7 @@
 |                              |           |                                  |                                                                                        | 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                                                              |   |
+| Asymmetric Cryptography      | test_c041 | psa_sign_hash              | 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                                                               |                                                                                          |   |
@@ -500,7 +500,7 @@
 |                              |           |                                  |                                                                                        | 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                                                              |   |
+| Asymmetric Cryptography      | test_c042 | psa_verify_hash            | 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                                                                        |   |
diff --git a/api-tests/ff/ipc/test_i002/test_i002.c b/api-tests/ff/ipc/test_i002/test_i002.c
index 0546a46..3b8dc26 100644
--- a/api-tests/ff/ipc/test_i002/test_i002.c
+++ b/api-tests/ff/ipc/test_i002/test_i002.c
@@ -184,7 +184,7 @@
 {
    int32_t            status = VAL_STATUS_SUCCESS;
    psa_handle_t       handle = 0;
-   int32_t            type[] = {PSA_IPC_CALL, 1, 2, INT32_MAX};
+   int16_t            type[] = {PSA_IPC_CALL, 1, 2, INT16_MAX};
    uint32_t           i = 0;
 
    val->print(PRINT_TEST, "[Check 5] Test psa_call with different type values\n", 0);
diff --git a/api-tests/ff/ipc/test_i002/test_supp_i002.c b/api-tests/ff/ipc/test_i002/test_supp_i002.c
index 4c14cf1..9baf614 100644
--- a/api-tests/ff/ipc/test_i002/test_supp_i002.c
+++ b/api-tests/ff/ipc/test_i002/test_supp_i002.c
@@ -187,7 +187,7 @@
 {
     int32_t         status = VAL_STATUS_SUCCESS;
     psa_msg_t       msg = {0};
-    int32_t         type[] = {PSA_IPC_CALL, 1, 2, INT32_MAX};
+    int16_t         type[] = {PSA_IPC_CALL, 1, 2, INT16_MAX};
     uint32_t        i = 0;
 
     status = ((val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg))
diff --git a/api-tests/platform/drivers/uart/stm/pal_uart.c b/api-tests/platform/drivers/uart/stm/pal_uart.c
index 9208ff5..bd740ef 100644
--- a/api-tests/platform/drivers/uart/stm/pal_uart.c
+++ b/api-tests/platform/drivers/uart/stm/pal_uart.c
@@ -49,6 +49,7 @@
 {
     /* ensure TX buffer to be empty */
     while (!pal_uart_stm_is_tx_empty())
+		;
 
     /* write the data (upper 24 bits are reserved) */
     ((USART_TypeDef *) g_uart)->TDR = c;
@@ -140,14 +141,8 @@
     pal_uart_stm_putc(' ');
     pal_uart_stm_putc(' ');
     /* Loop until TX interrupt trigger */
-    while (1)
-	{
-		if (!pal_uart_stm_is_tx_irq_triggerd())
-			continue;
-		else
-			break;
-	}
-	
+    while (!pal_uart_stm_is_tx_irq_triggerd())
+		;
 }
 
 /**
diff --git a/api-tests/platform/targets/common/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/common/nspe/crypto/pal_crypto_config_check.h
index e51dc11..b6fdd11 100644
--- a/api-tests/platform/targets/common/nspe/crypto/pal_crypto_config_check.h
+++ b/api-tests/platform/targets/common/nspe/crypto/pal_crypto_config_check.h
@@ -196,10 +196,6 @@
 #error "ARCH_TEST_CMAC defined, but not all prerequisites"
 #endif
 
-#if defined(ARCH_TEST_GMAC) && !defined(ARCH_TEST_AES)
-#error "ARCH_TEST_GMAC defined, but not all prerequisites"
-#endif
-
 #if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_AES)
 #error "ARCH_TEST_HMAC defined, but not all prerequisites"
 #endif
diff --git a/api-tests/platform/targets/common/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/common/nspe/crypto/pal_crypto_intf.c
index 197fc88..34ef721 100644
--- a/api-tests/platform/targets/common/nspe/crypto/pal_crypto_intf.c
+++ b/api-tests/platform/targets/common/nspe/crypto/pal_crypto_intf.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -30,495 +30,836 @@
 **/
 int32_t pal_crypto_function(int type, va_list valist)
 {
-    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                          plaintext_size;
-#ifdef NO_SUPPORT
-    size_t                          *tag_length;
-#endif
-    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;
+    psa_algorithm_t                           alg;
+    const uint8_t                            *input, *input1;
+    size_t                                    input_length, input_length1, bits;
+    uint8_t                                  *output;
+    size_t                                    output_size;
+    size_t                                    output_length, *p_output_length;
+    size_t                                   *p_bits;
+    psa_key_id_t                              key, id;
+    psa_cipher_operation_t                   *cipher_operation, cipher_operation_temp;
+    const psa_key_attributes_t               *c_attributes;
+    psa_key_attributes_t                     *attributes, attributes_temp;
+    psa_key_id_t                             *target_key, *p_id, *p_key;
+    psa_algorithm_t                          *p_alg;
+    psa_key_lifetime_t                        lifetime;
+    psa_key_lifetime_t                       *p_lifetime;
+    psa_key_type_t                           *p_type;
+    psa_key_usage_t                           usage_flags;
+    psa_key_usage_t                          *p_usage_flags;
+    psa_hash_operation_t                     *hash_operation, *hash_target_operation;
+    psa_hash_operation_t                      hash_operation_temp;
+    const psa_hash_operation_t               *hash_source_operation;
+    psa_key_derivation_operation_t           *derivation_operation, derivation_operation_temp;
+    const psa_key_derivation_operation_t     *c_derivation_operation;
+    psa_key_derivation_step_t                 step;
+    psa_mac_operation_t                      *mac_operation, mac_operation_temp;
+    psa_aead_operation_t                     *aead_operation, aead_operation_temp;
+    const uint8_t                            *nonce;
+    size_t                                    nonce_length;
+    const uint8_t                            *additional_data;
+    size_t                                    additional_data_length;
+    uint8_t                                  *output1;
+    size_t                                   output_size1, *p_output_length1;
 
-    (void)aead_operation;
+
 
     switch (type)
-    {
-        case PAL_CRYPTO_INIT:
-            return psa_crypto_init();
-        case PAL_CRYPTO_GENERATE_RANDOM:
-            buffer = va_arg(valist, uint8_t *);
-            size = va_arg(valist, int);
-            return psa_generate_random(buffer, size);
-        case PAL_CRYPTO_IMPORT_KEY:
-            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 = (psa_key_type_t)va_arg(valist, int);
-            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:
-            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);
-            psa_set_key_usage_flags(attributes, usage);
-            return 0;
-        case PAL_CRYPTO_RESET_KEY_ATTRIBUTES:
-            attributes = va_arg(valist, psa_key_attributes_t *);
-            psa_reset_key_attributes(attributes);
-            return 0;
-        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:
-            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);
-            return psa_hash_setup(hash_operation, alg);
-        case PAL_CRYPTO_HASH_UPDATE:
-            hash_operation = va_arg(valist, psa_hash_operation_t*);
-            buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, size_t);
-            return psa_hash_update(hash_operation, buffer, size);
-        case PAL_CRYPTO_HASH_VERIFY:
-            hash_operation = va_arg(valist, psa_hash_operation_t*);
-            buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, size_t);
-            return psa_hash_verify(hash_operation, buffer, size);
-        case PAL_CRYPTO_HASH_FINISH:
-            hash_operation = va_arg(valist, psa_hash_operation_t*);
-            buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, size_t);
-            length = va_arg(valist, size_t*);
-            return psa_hash_finish(hash_operation, buffer, size, length);
-        case PAL_CRYPTO_HASH_ABORT:
-            hash_operation = va_arg(valist, psa_hash_operation_t*);
-            return psa_hash_abort(hash_operation);
-        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, 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);
-            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:
-            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);
-            additional_data = va_arg(valist, const uint8_t *);
-            additional_data_length = va_arg(valist, size_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_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data,
-            additional_data_length, plaintext, size, ciphertext, ciphertext_size, length);
-        case PAL_CRYPTO_AEAD_DECRYPT:
-            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);
-            additional_data = va_arg(valist, const uint8_t *);
-            additional_data_length = va_arg(valist, size_t);
-            ciphertext = va_arg(valist, uint8_t *);
-            ciphertext_size = va_arg(valist, size_t);
-            plaintext = va_arg(valist, uint8_t *);
-            size = va_arg(valist, size_t);
-            length = va_arg(valist, size_t*);
-            return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data,
-            additional_data_length, ciphertext, ciphertext_size, plaintext, size, length);
-#ifdef NO_SUPPORT
-        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_AEAD_ABORT:
+			aead_operation           = va_arg(valist, psa_aead_operation_t *);
+			return psa_aead_abort(aead_operation);
+			break;
+		case PAL_CRYPTO_AEAD_DECRYPT:
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			nonce                    = va_arg(valist, const uint8_t *);
+			nonce_length             = va_arg(valist, size_t);
+			additional_data          = va_arg(valist, const uint8_t *);
+			additional_data_length   = va_arg(valist, size_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_aead_decrypt(key,
+									alg,
+									nonce,
+									nonce_length,
+									additional_data,
+									additional_data_length,
+									input,
+									input_length,
+									output,
+									output_size,
+									p_output_length);
+			break;
+		case PAL_CRYPTO_AEAD_DECRYPT_SETUP:
+			aead_operation           = va_arg(valist, psa_aead_operation_t *);
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			return psa_aead_decrypt_setup(aead_operation,
+										  key,
+										  alg);
+			break;
+		case PAL_CRYPTO_AEAD_ENCRYPT:
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			nonce                    = va_arg(valist, const uint8_t *);
+			nonce_length             = va_arg(valist, size_t);
+			additional_data          = va_arg(valist, const uint8_t *);
+			additional_data_length   = va_arg(valist, size_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_aead_encrypt(key,
+									alg,
+									nonce,
+									nonce_length,
+									additional_data,
+									additional_data_length,
+									input,
+									input_length,
+									output,
+									output_size,
+									p_output_length);
+			break;
+		case PAL_CRYPTO_AEAD_ENCRYPT_SETUP:
+			aead_operation           = va_arg(valist, psa_aead_operation_t *);
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			return psa_aead_decrypt_setup(aead_operation,
+										  key,
+										  alg);
+			break;
+		case PAL_CRYPTO_AEAD_FINISH:
+			aead_operation           = va_arg(valist, psa_aead_operation_t *);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			output1                  = va_arg(valist, uint8_t *);
+			output_size1             = va_arg(valist, size_t);
+			p_output_length1         = va_arg(valist, size_t *);
+			return psa_aead_finish(aead_operation,
+								   output,
+								   output_size,
+								   p_output_length,
+								   output1,
+								   output_size1,
+								   p_output_length1);
+			break;
+		case PAL_CRYPTO_AEAD_GENERATE_NONCE:
+			aead_operation           = va_arg(valist, psa_aead_operation_t *);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_aead_generate_nonce(aead_operation,
+										   output,
+										   output_size,
+										   p_output_length);
+			break;
+		case PAL_CRYPTO_AEAD_OPERATION_INIT:
+			aead_operation           = va_arg(valist, psa_aead_operation_t *);
+			aead_operation_temp      = psa_aead_operation_init();
+			memcpy((void *)aead_operation, (void *)&aead_operation_temp,
+				   sizeof(psa_aead_operation_t));
+			return 0;
+			break;
+		case PAL_CRYPTO_AEAD_SET_LENGTHS:
+			aead_operation           = va_arg(valist, psa_aead_operation_t *);
+			input_length             = va_arg(valist, size_t);
+			input_length1            = va_arg(valist, size_t);
+			return psa_aead_set_lengths(aead_operation,
+										input_length,
+										input_length1);
+			break;
+		case PAL_CRYPTO_AEAD_SET_NONCE:
+			aead_operation           = va_arg(valist, psa_aead_operation_t *);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			return psa_aead_set_nonce(aead_operation,
+									  input,
+									  input_length);
+			break;
+		case PAL_CRYPTO_AEAD_UPDATE:
+			aead_operation           = va_arg(valist, psa_aead_operation_t *);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_aead_update(aead_operation,
+								   input,
+								   input_length,
+								   output,
+								   output_size,
+								   p_output_length);
+			break;
+		case PAL_CRYPTO_AEAD_UPDATE_AD:
+			aead_operation           = va_arg(valist, psa_aead_operation_t *);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			return psa_aead_update_ad(aead_operation,
+									  input,
+									  input_length);
+			break;
+		case PAL_CRYPTO_AEAD_VERIFY:
+			aead_operation           = va_arg(valist, psa_aead_operation_t *);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			return psa_aead_verify(aead_operation,
+								   output,
+								   output_size,
+								   p_output_length,
+								   input,
+								   input_length);
+			break;
+		case PAL_CRYPTO_ASYMMETRIC_DECRYPT:
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			input1                   = va_arg(valist, const uint8_t *);
+			input_length1            = va_arg(valist, size_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_asymmetric_decrypt(key,
+										  alg,
+										  input,
+										  input_length,
+										  input1,
+										  input_length1,
+										  output,
+										  output_size,
+										  p_output_length);
+			break;
+		case PAL_CRYPTO_ASYMMETRIC_ENCRYPT:
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			input1                   = va_arg(valist, const uint8_t *);
+			input_length1            = va_arg(valist, size_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_asymmetric_encrypt(key,
+										  alg,
+										  input,
+										  input_length,
+										  input1,
+										  input_length1,
+										  output,
+										  output_size,
+										  p_output_length);
+			break;
+		case PAL_CRYPTO_CIPHER_ABORT:
+			cipher_operation         =  va_arg(valist, psa_cipher_operation_t *);
+			return psa_cipher_abort(cipher_operation);
+			break;
+		case PAL_CRYPTO_CIPHER_DECRYPT:
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_cipher_decrypt(key,
+									  alg,
+									  input,
+									  input_length,
+									  output,
+									  output_size,
+									  p_output_length);
+			break;
+		case PAL_CRYPTO_CIPHER_DECRYPT_SETUP:
+			cipher_operation         = va_arg(valist, psa_cipher_operation_t *);
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			return psa_cipher_decrypt_setup(cipher_operation,
+											key,
+											alg);
+			break;
+		case PAL_CRYPTO_CIPHER_ENCRYPT:
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_cipher_encrypt(key,
+									  alg,
+									  input,
+									  input_length,
+									  output,
+									  output_size,
+									  p_output_length);
+			break;
+		case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP:
+			cipher_operation         = va_arg(valist, psa_cipher_operation_t *);
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			return psa_cipher_encrypt_setup(cipher_operation,
+											key,
+											alg);
+			break;
+		case PAL_CRYPTO_CIPHER_FINISH:
+			cipher_operation         = va_arg(valist, psa_cipher_operation_t *);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_cipher_finish(cipher_operation,
+									 output,
+									 output_size,
+									 p_output_length);
+			break;
+		case PAL_CRYPTO_CIPHER_GENERATE_IV:
+			cipher_operation         = va_arg(valist, psa_cipher_operation_t *);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_cipher_generate_iv(cipher_operation,
+										  output,
+										  output_size,
+										  p_output_length);
+			break;
+		case PAL_CRYPTO_CIPHER_OPERATION_INIT:
+			cipher_operation         = va_arg(valist, psa_cipher_operation_t *);
+			cipher_operation_temp    = psa_cipher_operation_init();
+			memcpy((void *)cipher_operation, (void *)&cipher_operation_temp,
+				   sizeof(psa_cipher_operation_t));
+			return 0;
+			break;
+		case PAL_CRYPTO_CIPHER_SET_IV:
+			cipher_operation         = va_arg(valist, psa_cipher_operation_t *);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			return psa_cipher_set_iv(cipher_operation,
+									 input,
+									 input_length);
+			break;
+		case PAL_CRYPTO_CIPHER_UPDATE:
+			cipher_operation         = va_arg(valist, psa_cipher_operation_t *);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_cipher_update(cipher_operation,
+									 input,
+									 input_length,
+									 output,
+									 output_size,
+									 p_output_length);
+			break;
+		case PAL_CRYPTO_COPY_KEY:
+			key                      = va_arg(valist, psa_key_id_t);
+			c_attributes             = va_arg(valist, const psa_key_attributes_t *);
+			target_key               = va_arg(valist, psa_key_id_t *);
+			return psa_copy_key(key,
+								c_attributes,
+								target_key);
+			break;
+		case PAL_CRYPTO_INIT:
+			return psa_crypto_init();
+			break;
+		case PAL_CRYPTO_DESTROY_KEY:
+			key                      = va_arg(valist, psa_key_id_t);
+			return psa_destroy_key(key);
+			break;
+		case PAL_CRYPTO_EXPORT_KEY:
+			key                      = va_arg(valist, psa_key_id_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_export_key(key,
+								  output,
+								  output_size,
+								  p_output_length);
+			break;
+		case PAL_CRYPTO_EXPORT_PUBLIC_KEY:
+			key                      = va_arg(valist, psa_key_id_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_export_public_key(key,
+										 output,
+										 output_size,
+										 p_output_length);
+			break;
+		case PAL_CRYPTO_GENERATE_KEY:
+			c_attributes             = va_arg(valist, const psa_key_attributes_t *);
+			target_key               = va_arg(valist, psa_key_id_t *);
+			return psa_generate_key(c_attributes,
+									target_key);
+			break;
+		case PAL_CRYPTO_GENERATE_RANDOM:
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			return psa_generate_random(output,
+									   output_size);
+			break;
+		case PAL_CRYPTO_GET_KEY_ALGORITHM:
+			c_attributes             = va_arg(valist, const psa_key_attributes_t *);
+			p_alg                    = va_arg(valist, psa_algorithm_t *);
+			*p_alg                   = psa_get_key_algorithm(c_attributes);
+			return 0;
+			break;
+		case PAL_CRYPTO_GET_KEY_ATTRIBUTES:
+			key                      = va_arg(valist, psa_key_id_t);
+			attributes               = va_arg(valist, psa_key_attributes_t *);
+			return psa_get_key_attributes(key,
+										  attributes);
+			break;
+		case PAL_CRYPTO_GET_KEY_BITS:
+			c_attributes             = va_arg(valist, const psa_key_attributes_t *);
+			p_bits                   = va_arg(valist, size_t *);
+			*p_bits                  = psa_get_key_bits(c_attributes);
+			return 0;
+			break;
+		case PAL_CRYPTO_GET_KEY_ID:
+			c_attributes             = va_arg(valist, const psa_key_attributes_t *);
+			p_id                     = va_arg(valist, psa_key_id_t *);
+			*p_id                    = psa_get_key_id(c_attributes);
+			return 0;
+			break;
+		case PAL_CRYPTO_GET_KEY_LIFETIME:
+			c_attributes             = va_arg(valist, const psa_key_attributes_t *);
+			p_lifetime               = va_arg(valist, psa_key_lifetime_t *);
+			*p_lifetime              = psa_get_key_lifetime(c_attributes);
+			return 0;
+			break;
+		case PAL_CRYPTO_GET_KEY_TYPE:
+			c_attributes             = va_arg(valist, const psa_key_attributes_t *);
+			p_type                   = va_arg(valist, psa_key_type_t *);
+			*p_type                  = psa_get_key_type(c_attributes);
+			return 0;
+			break;
+		case PAL_CRYPTO_GET_KEY_USAGE_FLAGS:
+			c_attributes             = va_arg(valist, const psa_key_attributes_t *);
+			p_usage_flags            = va_arg(valist, psa_key_usage_t *);
+			*p_usage_flags           = psa_get_key_usage_flags(c_attributes);
+			return 0;
+			break;
+		case PAL_CRYPTO_HASH_ABORT:
+			hash_operation           = va_arg(valist, psa_hash_operation_t *);
+			return psa_hash_abort(hash_operation);
+			break;
+		case PAL_CRYPTO_HASH_CLONE:
+			hash_source_operation    = va_arg(valist, const psa_hash_operation_t *);
+			hash_target_operation    = va_arg(valist, psa_hash_operation_t *);
+			return psa_hash_clone(hash_source_operation,
+								  hash_target_operation);
+			break;
+		case PAL_CRYPTO_HASH_COMPARE:
+			alg                      = va_arg(valist, psa_algorithm_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			input1                   = va_arg(valist, const uint8_t *);
+			input_length1            = va_arg(valist, size_t);
+			return psa_hash_compare(alg,
+									input,
+									input_length,
+									input1,
+									input_length1);
+			break;
+		case PAL_CRYPTO_HASH_COMPUTE:
+			alg                      = va_arg(valist, psa_algorithm_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_hash_compute(alg,
+									input,
+									input_length,
+									output,
+									output_size,
+									p_output_length);
+			break;
+		case PAL_CRYPTO_HASH_FINISH:
+			hash_operation           = va_arg(valist, psa_hash_operation_t *);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_hash_finish(hash_operation,
+								   output,
+								   output_size,
+								   p_output_length);
+			break;
+		case PAL_CRYPTO_HASH_OPERATION_INIT:
+			hash_operation           = va_arg(valist, psa_hash_operation_t *);
+			hash_operation_temp      = psa_hash_operation_init();
+			memcpy((void *)hash_operation, (void *)&hash_operation_temp,
+				   sizeof(psa_hash_operation_t));
+			return 0;
+			break;
+#ifdef CRYPTO_1_0
+		case PAL_CRYPTO_HASH_RESUME:
+			hash_operation           = va_arg(valist, psa_hash_operation_t *);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			return psa_hash_resume(hash_operation,
+								   input,
+								   input_length);
+			break;
+		case PAL_CRYPTO_HASH_SUSPEND:
+			hash_operation           = va_arg(valist, psa_hash_operation_t *);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_hash_suspend(hash_operation,
+									output,
+									output_size,
+									p_output_length);
+			break;
 #endif
-        case PAL_CRYPTO_MAC_SIGN_SETUP:
-            mac_operation = va_arg(valist, psa_mac_operation_t*);
-            key_handle = (psa_key_handle_t)va_arg(valist, int);
-            alg = va_arg(valist, psa_algorithm_t);
-            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*);
-            size = va_arg(valist, size_t);
-            return psa_mac_update(mac_operation, buffer, size);
-        case PAL_CRYPTO_MAC_SIGN_FINISH:
-            mac_operation = va_arg(valist, psa_mac_operation_t*);
-            buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, size_t);
-            length = (size_t *)va_arg(valist, size_t*);
-            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*);
-            key_handle = (psa_key_handle_t)va_arg(valist, int);
-            alg = va_arg(valist, psa_algorithm_t);
-            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*);
-            size = va_arg(valist, size_t);
-            return psa_mac_verify_finish(mac_operation, buffer, size);
-        case PAL_CRYPTO_MAC_ABORT:
-            mac_operation = va_arg(valist, psa_mac_operation_t*);
-            return psa_mac_abort(mac_operation);
-#ifdef NO_SUPPORT
-        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_HASH_SETUP:
+			hash_operation           = va_arg(valist, psa_hash_operation_t *);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			return psa_hash_setup(hash_operation,
+								  alg);
+			break;
+		case PAL_CRYPTO_HASH_UPDATE:
+			hash_operation           = va_arg(valist, psa_hash_operation_t *);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			return psa_hash_update(hash_operation,
+								   input,
+								   input_length);
+			break;
+		case PAL_CRYPTO_HASH_VERIFY:
+			hash_operation           = va_arg(valist, psa_hash_operation_t *);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			return psa_hash_verify(hash_operation,
+								   input,
+								   input_length);
+			break;
+		case PAL_CRYPTO_IMPORT_KEY:
+			c_attributes             = va_arg(valist, const psa_key_attributes_t *);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			p_key                    = va_arg(valist, psa_key_id_t *);
+			return psa_import_key(c_attributes,
+								  input,
+								  input_length,
+								  p_key);
+			break;
+		case PAL_CRYPTO_KEY_ATTRIBUTES_INIT:
+			attributes               = va_arg(valist, psa_key_attributes_t *);
+			attributes_temp          = psa_key_attributes_init();
+			memcpy((void *)attributes, (void *)&attributes_temp,\
+								sizeof(psa_key_attributes_t));
+			return 0;
+			break;
+		case PAL_CRYPTO_KEY_DERIVATION_ABORT:
+			derivation_operation     = va_arg(valist, psa_key_derivation_operation_t *);
+			return psa_key_derivation_abort(derivation_operation);
+			break;
+		case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY:
+			c_derivation_operation   = va_arg(valist, const psa_key_derivation_operation_t *);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_key_derivation_get_capacity(c_derivation_operation,\
+												   p_output_length);
+			break;
+		case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES:
+			derivation_operation     = va_arg(valist, psa_key_derivation_operation_t *);
+			step                     = (psa_key_derivation_step_t)va_arg(valist, int);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			return psa_key_derivation_input_bytes(derivation_operation,
+												  step,
+												  input,
+												  input_length);
+			break;
+		case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY:
+			derivation_operation     = va_arg(valist, psa_key_derivation_operation_t *);
+			step                     = (psa_key_derivation_step_t)va_arg(valist, int);
+			key                      = va_arg(valist, psa_key_id_t);
+			return psa_key_derivation_input_key(derivation_operation,
+												step,
+												key);
+			break;
+		case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT:
+			derivation_operation     = va_arg(valist, psa_key_derivation_operation_t *);
+			step                     = (psa_key_derivation_step_t)va_arg(valist, int);
+			key                      = va_arg(valist, psa_key_id_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			return psa_key_derivation_key_agreement(derivation_operation,
+													step,
+													key,
+													input,
+													input_length);
+			break;
+		case PAL_CRYPTO_KEY_DERIVATION_OPERATION_INIT:
+			derivation_operation      = va_arg(valist, psa_key_derivation_operation_t *);
+			derivation_operation_temp = psa_key_derivation_operation_init();
+			memcpy((void *)derivation_operation, (void *)&derivation_operation_temp,
+				   sizeof(psa_key_derivation_operation_t));
+			return 0;
+			break;
+		case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES:
+			derivation_operation     = va_arg(valist, psa_key_derivation_operation_t *);
+			output                   = va_arg(valist, uint8_t *);
+			output_length            = va_arg(valist, size_t);
+			return psa_key_derivation_output_bytes(derivation_operation,
+												   output,
+												   output_length);
+			break;
+		case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY:
+			c_attributes             = va_arg(valist, const psa_key_attributes_t *);
+			derivation_operation     = va_arg(valist, psa_key_derivation_operation_t *);
+			p_key                    = va_arg(valist, psa_key_id_t *);
+			return psa_key_derivation_output_key(c_attributes,
+												 derivation_operation,
+												 p_key);
+			break;
+		case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY:
+			derivation_operation     = va_arg(valist, psa_key_derivation_operation_t *);
+			input_length             = va_arg(valist, size_t);
+			return psa_key_derivation_set_capacity(derivation_operation,
+												   input_length);
+			break;
+		case PAL_CRYPTO_KEY_DERIVATION_SETUP:
+			derivation_operation     = va_arg(valist, psa_key_derivation_operation_t *);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			return psa_key_derivation_setup(derivation_operation,
+											alg);
+			break;
+		case PAL_CRYPTO_MAC_ABORT:
+			mac_operation            = va_arg(valist, psa_mac_operation_t *);
+			return psa_mac_abort(mac_operation);
+			break;
+#ifdef CRYPTO_1_0
+		case PAL_CRYPTO_MAC_COMPUTE:
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_mac_compute(key,
+								   alg,
+								   input,
+								   input_length,
+								   output,
+								   output_size,
+								   p_output_length);
+			break;
 #endif
-        case PAL_CRYPTO_ASYMMTERIC_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);
-            salt = va_arg(valist, const uint8_t *);
-            salt_length = 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_encrypt(key_handle, alg, plaintext, size, salt, salt_length,
-            ciphertext, ciphertext_size, length);
-        case PAL_CRYPTO_ASYMMTERIC_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);
-            salt = va_arg(valist, const uint8_t *);
-            salt_length = 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_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 *);
-            key_handle = (psa_key_handle_t)va_arg(valist, int);
-            alg = va_arg(valist, psa_algorithm_t);
-            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 *);
-            key_handle = (psa_key_handle_t)va_arg(valist, int);
-            alg = va_arg(valist, psa_algorithm_t);
-            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*);
-            size = va_arg(valist, size_t);
-            length = va_arg(valist, size_t*);
-            return psa_cipher_generate_iv(cipher_operation, buffer, size, length);
-        case PAL_CRYPTO_CIPHER_SET_IV:
-            cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            buffer = va_arg(valist, uint8_t*);
-            size = va_arg(valist, size_t);
-            return psa_cipher_set_iv(cipher_operation, buffer, size);
-        case PAL_CRYPTO_CIPHER_UPDATE:
-            cipher_operation =  va_arg(valist, psa_cipher_operation_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_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size,
-            length);
-        case PAL_CRYPTO_CIPHER_FINISH:
-            cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            ciphertext = va_arg(valist, uint8_t *);
-            ciphertext_size = va_arg(valist, size_t);
-            length = va_arg(valist, size_t*);
-            return psa_cipher_finish(cipher_operation, ciphertext, ciphertext_size, length);
-        case PAL_CRYPTO_CIPHER_ABORT:
-            cipher_operation =  va_arg(valist, psa_cipher_operation_t *);
-            return psa_cipher_abort(cipher_operation);
-#ifdef NO_SUPPORT
-        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_MAC_OPERATION_INIT:
+			mac_operation            = va_arg(valist, psa_mac_operation_t *);
+			mac_operation_temp       = psa_mac_operation_init();
+			memcpy((void *)mac_operation, (void *)&mac_operation_temp, \
+					sizeof(psa_mac_operation_t));
+			return 0;
+			break;
+		case PAL_CRYPTO_MAC_SIGN_FINISH:
+			mac_operation            = va_arg(valist, psa_mac_operation_t *);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_mac_sign_finish(mac_operation,
+									   output,
+									   output_size,
+									   p_output_length);
+			break;
+		case PAL_CRYPTO_MAC_SIGN_SETUP:
+			mac_operation            = va_arg(valist, psa_mac_operation_t *);
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			return psa_mac_sign_setup(mac_operation,
+									  key,
+									  alg);
+			break;
+		case PAL_CRYPTO_MAC_UPDATE:
+			mac_operation            = va_arg(valist, psa_mac_operation_t *);
+			input                    = va_arg(valist, uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			return psa_mac_update(mac_operation,
+								  input,
+								  input_length);
+			break;
+		case PAL_CRYPTO_MAC_VERIFY:
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			input1                   = va_arg(valist, const uint8_t *);
+			input_length1            = va_arg(valist, size_t);
+			return psa_mac_verify(key,
+								  alg,
+								  input,
+								  input_length,
+								  input1,
+								  input_length1);
+			break;
+		case PAL_CRYPTO_MAC_VERIFY_FINISH:
+			mac_operation            = va_arg(valist, psa_mac_operation_t *);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			return psa_mac_verify_finish(mac_operation,
+										 input,
+										 input_length);
+			break;
+		case PAL_CRYPTO_MAC_VERIFY_SETUP:
+			mac_operation            = va_arg(valist, psa_mac_operation_t *);
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			return psa_mac_verify_setup(mac_operation,
+										key,
+										alg);
+			break;
+		case PAL_CRYPTO_PURGE_KEY:
+			key                      = va_arg(valist, psa_key_id_t);
+			return psa_purge_key(key);
+			break;
+		case PAL_CRYPTO_RAW_KEY_AGREEMENT:
+			alg                      = va_arg(valist, psa_algorithm_t);
+			key                      = va_arg(valist, psa_key_id_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_raw_key_agreement(alg,
+										 key,
+										 input,
+										 input_length,
+										 output,
+										 output_size,
+										 p_output_length);
+			break;
+		case PAL_CRYPTO_RESET_KEY_ATTRIBUTES:
+			attributes               = va_arg(valist, psa_key_attributes_t *);
+			psa_reset_key_attributes(attributes);
+			return 0;
+			break;
+		case PAL_CRYPTO_SET_KEY_ALGORITHM:
+			attributes               = va_arg(valist, psa_key_attributes_t *);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			psa_set_key_algorithm(attributes,
+								  alg);
+			return 0;
+			break;
+		case PAL_CRYPTO_SET_KEY_BITS:
+			attributes               = va_arg(valist, psa_key_attributes_t *);
+			bits                     = va_arg(valist, size_t);
+			psa_set_key_bits(attributes,
+							 bits);
+			return 0;
+			break;
+		case PAL_CRYPTO_SET_KEY_ID:
+			attributes               = va_arg(valist, psa_key_attributes_t *);
+			id                       = va_arg(valist, psa_key_id_t);
+			psa_set_key_id(attributes,
+						   id);
+			return 0;
+			break;
+		case PAL_CRYPTO_SET_KEY_LIFETIME:
+			attributes               = va_arg(valist, psa_key_attributes_t *);
+			lifetime                 = va_arg(valist, psa_key_lifetime_t);
+			psa_set_key_lifetime(attributes,
+								 lifetime);
+			return 0;
+			break;
+		case PAL_CRYPTO_SET_KEY_TYPE:
+			attributes               = va_arg(valist, psa_key_attributes_t *);
+			type                     = (psa_key_type_t)va_arg(valist, int);
+			psa_set_key_type(attributes,
+							 type);
+			return 0;
+			break;
+		case PAL_CRYPTO_SET_KEY_USAGE_FLAGS:
+			attributes               = va_arg(valist, psa_key_attributes_t *);
+			usage_flags              = va_arg(valist, psa_key_usage_t);
+			psa_set_key_usage_flags(attributes,
+									usage_flags);
+			return 0;
+			break;
+		case PAL_CRYPTO_SIGN_HASH:
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_sign_hash(key,
+								 alg,
+								 input,
+								 input_length,
+								 output,
+								 output_size,
+								 p_output_length);
+			break;
+#ifdef CRYPTO_1_0
+		case PAL_CRYPTO_SIGN_MESSAGE:
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			output                   = va_arg(valist, uint8_t *);
+			output_size              = va_arg(valist, size_t);
+			p_output_length          = va_arg(valist, size_t *);
+			return psa_sign_message(key,
+									alg,
+									input,
+									input_length,
+									output,
+									output_size,
+									p_output_length);
+			break;
+		case PAL_CRYPTO_VERIFY_MESSAGE:
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			input1                   = va_arg(valist, const uint8_t *);
+			input_length1            = va_arg(valist, size_t);
+			return psa_verify_message(key,
+									  alg,
+									  input,
+									  input_length,
+									  input1,
+									  input_length1);
+			break;
 #endif
-        case PAL_CRYPTO_ASYMMTERIC_SIGN:
-            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(key_handle, alg, buffer, size, ciphertext, ciphertext_size,
-            length);
-        case PAL_CRYPTO_ASYMMTERIC_VERIFY:
-            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(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);
-            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:
-            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);
-            return 0;
-#ifndef TF_M_PROFILE_SMALL
-        case PAL_CRYPTO_RESET:
-            return pal_system_reset();
-#endif
-        default:
-            return PAL_STATUS_UNSUPPORTED_FUNC;
+		case PAL_CRYPTO_VERIFY_HASH:
+			key                      = va_arg(valist, psa_key_id_t);
+			alg                      = va_arg(valist, psa_algorithm_t);
+			input                    = va_arg(valist, const uint8_t *);
+			input_length             = va_arg(valist, size_t);
+			input1                   = va_arg(valist, const uint8_t *);
+			input_length1            = va_arg(valist, size_t);
+			return psa_verify_hash(key,
+								   alg,
+								   input,
+								   input_length,
+								   input1,
+								   input_length1);
+			break;
+		case PAL_CRYPTO_RESET:
+			return pal_system_reset();
+			break;
+		case PAL_CRYPTO_FREE:
+			for (int i = 0; i < PAL_KEY_SLOT_COUNT; i++)
+				psa_destroy_key((psa_key_id_t)i);
+			return 0;
+			break;
+		default:
+			return PAL_STATUS_UNSUPPORTED_FUNC;
     }
 }
diff --git a/api-tests/platform/targets/common/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/common/nspe/crypto/pal_crypto_intf.h
index e9039f6..2bf2785 100644
--- a/api-tests/platform/targets/common/nspe/crypto/pal_crypto_intf.h
+++ b/api-tests/platform/targets/common/nspe/crypto/pal_crypto_intf.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,82 +21,91 @@
 #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_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_RESET                            = 0xFD,
+    PAL_CRYPTO_AEAD_ABORT                        = 0x1,
+    PAL_CRYPTO_AEAD_DECRYPT,
+    PAL_CRYPTO_AEAD_DECRYPT_SETUP,
+    PAL_CRYPTO_AEAD_ENCRYPT,
+    PAL_CRYPTO_AEAD_ENCRYPT_SETUP,
+    PAL_CRYPTO_AEAD_FINISH,
+    PAL_CRYPTO_AEAD_GENERATE_NONCE,
+    PAL_CRYPTO_AEAD_OPERATION_INIT,
+    PAL_CRYPTO_AEAD_SET_LENGTHS,
+    PAL_CRYPTO_AEAD_SET_NONCE,
+    PAL_CRYPTO_AEAD_UPDATE,
+    PAL_CRYPTO_AEAD_UPDATE_AD,
+    PAL_CRYPTO_AEAD_VERIFY,
+    PAL_CRYPTO_ASYMMETRIC_DECRYPT,
+    PAL_CRYPTO_ASYMMETRIC_ENCRYPT,
+    PAL_CRYPTO_CIPHER_ABORT,
+    PAL_CRYPTO_CIPHER_DECRYPT,
+    PAL_CRYPTO_CIPHER_DECRYPT_SETUP,
+    PAL_CRYPTO_CIPHER_ENCRYPT,
+    PAL_CRYPTO_CIPHER_ENCRYPT_SETUP,
+    PAL_CRYPTO_CIPHER_FINISH,
+    PAL_CRYPTO_CIPHER_GENERATE_IV,
+    PAL_CRYPTO_CIPHER_OPERATION_INIT,
+    PAL_CRYPTO_CIPHER_SET_IV,
+    PAL_CRYPTO_CIPHER_UPDATE,
+    PAL_CRYPTO_COPY_KEY,
+    PAL_CRYPTO_INIT,
+    PAL_CRYPTO_DESTROY_KEY,
+    PAL_CRYPTO_EXPORT_KEY,
+    PAL_CRYPTO_EXPORT_PUBLIC_KEY,
+    PAL_CRYPTO_GENERATE_KEY,
+    PAL_CRYPTO_GENERATE_RANDOM,
+    PAL_CRYPTO_GET_KEY_ALGORITHM,
+    PAL_CRYPTO_GET_KEY_ATTRIBUTES,
+    PAL_CRYPTO_GET_KEY_BITS,
+    PAL_CRYPTO_GET_KEY_ID,
+    PAL_CRYPTO_GET_KEY_LIFETIME,
+    PAL_CRYPTO_GET_KEY_TYPE,
+    PAL_CRYPTO_GET_KEY_USAGE_FLAGS,
+    PAL_CRYPTO_HASH_ABORT,
+    PAL_CRYPTO_HASH_CLONE,
+    PAL_CRYPTO_HASH_COMPARE,
+    PAL_CRYPTO_HASH_COMPUTE,
+    PAL_CRYPTO_HASH_FINISH,
+    PAL_CRYPTO_HASH_OPERATION_INIT,
+    PAL_CRYPTO_HASH_RESUME,
+    PAL_CRYPTO_HASH_SETUP,
+    PAL_CRYPTO_HASH_SUSPEND,
+    PAL_CRYPTO_HASH_UPDATE,
+    PAL_CRYPTO_HASH_VERIFY,
+    PAL_CRYPTO_IMPORT_KEY,
+    PAL_CRYPTO_KEY_ATTRIBUTES_INIT,
+    PAL_CRYPTO_KEY_DERIVATION_ABORT,
+    PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES,
+    PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY,
+    PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT,
+    PAL_CRYPTO_KEY_DERIVATION_OPERATION_INIT,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES,
+    PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY,
+    PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY,
+    PAL_CRYPTO_KEY_DERIVATION_SETUP,
+    PAL_CRYPTO_MAC_ABORT,
+    PAL_CRYPTO_MAC_COMPUTE,
+    PAL_CRYPTO_MAC_OPERATION_INIT,
+    PAL_CRYPTO_MAC_SIGN_FINISH,
+    PAL_CRYPTO_MAC_SIGN_SETUP,
+    PAL_CRYPTO_MAC_UPDATE,
+    PAL_CRYPTO_MAC_VERIFY,
+    PAL_CRYPTO_MAC_VERIFY_FINISH,
+    PAL_CRYPTO_MAC_VERIFY_SETUP,
+    PAL_CRYPTO_PURGE_KEY,
+    PAL_CRYPTO_RAW_KEY_AGREEMENT,
+    PAL_CRYPTO_RESET_KEY_ATTRIBUTES,
+    PAL_CRYPTO_SET_KEY_ALGORITHM,
+    PAL_CRYPTO_SET_KEY_BITS,
+    PAL_CRYPTO_SET_KEY_ID,
+    PAL_CRYPTO_SET_KEY_LIFETIME,
+    PAL_CRYPTO_SET_KEY_TYPE,
+    PAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+    PAL_CRYPTO_SIGN_HASH,
+    PAL_CRYPTO_SIGN_MESSAGE,
+    PAL_CRYPTO_VERIFY_HASH,
+    PAL_CRYPTO_VERIFY_MESSAGE,
+    PAL_CRYPTO_RESET                            = 0xF0,
     PAL_CRYPTO_FREE                             = 0xFE,
 };
 
diff --git a/api-tests/platform/targets/common/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/common/nspe/initial_attestation/pal_attestation_crypto.c
index 7f748c2..80c2dbb 100644
--- a/api-tests/platform/targets/common/nspe/initial_attestation/pal_attestation_crypto.c
+++ b/api-tests/platform/targets/common/nspe/initial_attestation/pal_attestation_crypto.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -187,8 +187,10 @@
     return status;
 }
 
-static int32_t pal_attest_get_public_key(uint8_t *public_key_buff, size_t public_key_buf_size,
-                                       size_t *public_key_len, psa_ecc_curve_t *elliptic_curve_type)
+static int32_t pal_attest_get_public_key(uint8_t          *public_key_buff,
+                                         size_t            public_key_buf_size,
+                                         size_t           *public_key_len,
+                                         psa_ecc_family_t *elliptic_family_type)
 {
     int32_t     status = PAL_ATTEST_ERROR;
 
@@ -197,14 +199,14 @@
         return PAL_ATTEST_ERR_SMALL_BUFFER;
 
     *public_key_len = (attest_key.pubx_key_size + attest_key.puby_key_size + 1);
-    *elliptic_curve_type = PSA_ECC_CURVE_SECP256R1;
+    *elliptic_family_type = PSA_ECC_FAMILY_SECP_R1;
     memcpy(public_key_buff, (void *)&attest_public_key, *public_key_len);
     status = PSA_SUCCESS;
 #else
     status = tfm_initial_attest_get_public_key(public_key_buff,
                                                public_key_buf_size,
                                                public_key_len,
-                                               elliptic_curve_type);
+                                               elliptic_family_type);
 #endif
 
     return status;
@@ -214,7 +216,7 @@
 {
     psa_status_t     status             = PAL_ATTEST_ERROR;
     psa_key_usage_t  usage              = PSA_KEY_USAGE_VERIFY;
-    psa_ecc_curve_t  ecc_curve;
+    psa_ecc_family_t ecc_family;
     psa_key_type_t   attest_key_type;
     size_t           public_key_size;
     uint8_t          public_key_buff[ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH] = {0};
@@ -227,12 +229,15 @@
         status = pal_attest_get_public_key(public_key_buff,
                                            sizeof(public_key_buff),
                                            &public_key_size,
-                                           &ecc_curve);
+                                           &ecc_family);
         if (status != PSA_SUCCESS)
             return PAL_ATTEST_ERR_KEY_FAIL;
 
+        if (ecc_family == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
+
         /* Set key type for public key */
-        attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve);
+        attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_family);
 
         /* Setup the key policy for public key */
         policy = psa_key_policy_init();
@@ -265,12 +270,15 @@
         status = pal_attest_get_public_key(public_key_buff,
                                            sizeof(public_key_buff),
                                            &public_key_size,
-                                           &ecc_curve);
+                                           &ecc_family);
         if (status != PSA_SUCCESS)
             return PAL_ATTEST_ERR_KEY_FAIL;
 
+        if (ecc_family == USHRT_MAX)
+            return PAL_ATTEST_ERROR;
+
         /* Set key type for public key */
-        attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve);
+        attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_family);
 
         /* Set the attributes for the public key */
         psa_set_key_type(&attributes, attest_key_type);
@@ -325,7 +333,7 @@
         return status;
 
     /* Verify the signature */
-    status = psa_asymmetric_verify(public_key_handle,
+    status = psa_verify_hash(public_key_handle,
                                    key_alg, token_hash.ptr, token_hash.len,
                                    signature.ptr, signature.len);
     if (status != PSA_SUCCESS)
diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/pal_config.h
index df6cef0..eae2f8e 100644
--- a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/pal_config.h
+++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/pal_config.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -56,7 +56,7 @@
 #endif /* PSA_CMAKE_BUILD */
 
 /* Version of crypto spec used in attestation */
-#define CRYPTO_VERSION_BETA2
+#define CRYPTO_VERSION_BETA3
 
 /* Use hardcoded public key */
 //#define PLATFORM_OVERRIDE_ATTEST_PK
diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake
index 7d002d1..9211e7c 100644
--- a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake
+++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake
@@ -1,5 +1,5 @@
 #/** @file
-# * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+# * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
 # * SPDX-License-Identifier : Apache-2.0
 # *
 # * Licensed under the Apache License, Version 2.0 (the "License");
@@ -51,7 +51,7 @@
 	)
 
 	add_executable(${EXE_NAME} ${EXE_SRC})
-	target_link_libraries(${EXE_NAME} ${EXE_LIBS} ${PSA_CRYPTO_LIB_FILENAME} ${PSA_STORAGE_LIB_FILENAME})
+	target_link_libraries(${EXE_NAME} ${EXE_LIBS} ${PSA_CRYPTO_LIB_FILENAME} ${PSA_STORAGE_LIB_FILENAME} ${PSA_INITIAL_ATTESTATION_LIB_FILENAME})
 	add_dependencies(${EXE_NAME} ${PSA_TARGET_TEST_COMBINE_LIB})
 endfunction(_create_psa_stdc_exe)
 
@@ -114,7 +114,19 @@
 	_create_psa_stdc_exe(psa-arch-tests-storage storage)
 endif()
 if(${SUITE} STREQUAL "INITIAL_ATTESTATION")
-	message(FATAL_ERROR "Initial attestation not supported")
+	list(APPEND PAL_SRC_C_NSPE
+		${PSA_ROOT_DIR}/platform/targets/common/nspe/initial_attestation/pal_attestation_intf.c
+		${PSA_ROOT_DIR}/platform/targets/common/nspe/initial_attestation/pal_attestation_crypto.c
+                ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/UsefulBuf.c
+                ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/ieee754.c
+                ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_decode.c
+                ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_encode.c
+	)
+	if(NOT DEFINED PSA_INITIAL_ATTESTATION_LIB_FILENAME)
+		message(FATAL_ERROR "ERROR: PSA_STORAGE_LIB_FILENAME undefined.")
+	endif()
+_create_psa_stdc_exe(psa-arch-tests-initial-attestation initial-attestation)
+
 endif()
 
 # Create NSPE library
@@ -130,5 +142,16 @@
 	${PSA_ROOT_DIR}/platform/targets/common/nspe/crypto
 	${PSA_ROOT_DIR}/platform/targets/common/nspe/protected_storage
 	${PSA_ROOT_DIR}/platform/targets/common/nspe/internal_trusted_storage
+	${PSA_ROOT_DIR}/platform/targets/common/nspe/initial_attestation
 	${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe
 )
+
+if(${SUITE} STREQUAL "INITIAL_ATTESTATION")
+	target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE
+		${PSA_QCBOR_INCLUDE_PATH}
+	)
+#	if(NOT DEFINED PSA_INITIAL_ATTESTATION_LIB_FILENAME)
+#		message(FATAL_ERROR "ERROR: PSA_STORAGE_LIB_FILENAME undefined.")
+#	endif()
+#_create_psa_stdc_exe(psa-arch-tests-initial-attestation initial-attestation)
+endif()
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/nspe/pal_attestation_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/nspe/pal_attestation_config.h
index 6817b5f..dc7aa2e 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/nspe/pal_attestation_config.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/nspe/pal_attestation_config.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2020-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -42,14 +42,16 @@
  * This is the size of the first part of the CBOR encoded TBS
  * bytes. It is around 20 bytes. See create_tbs_hash().
  */
-#define T_COSE_SIZE_OF_TBS \
+#define T_COSE_SIZE_OF_TBS { \
     1 + /* For opening the array */ \
     sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \
     2 + /* Overhead for encoding string */ \
     T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \
     3 * (/* 3 NULL bstrs for fields not used */ \
         1 /* size of a NULL bstr */  \
-    )
+    ) \
+}
+
 #define NULL_USEFUL_BUF_C  NULLUsefulBufC
 
 #define ATTEST_PUBLIC_KEY_SLOT                  4
@@ -105,3 +107,4 @@
 };
 
 #endif /* _PAL_ATTESTATION_CONFIG_H_ */
+
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/nspe/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/nspe/pal_config.h
index c9a3597..5871659 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/nspe/pal_config.h
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/nspe/pal_config.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,6 +22,7 @@
 #include "pal_attestation_config.h"
 #include "pal_storage_config.h"
 
+
 /* Define PSA test suite dependent macros for non-cmake build */
 #if !defined(PSA_CMAKE_BUILD)
 
@@ -92,4 +93,19 @@
 #include "psa/initial_attestation.h"
 #endif
 
+extern int tfm_log_printf(const char *, ...);
+extern int32_t tfm_platform_system_reset(void);
+
+/* Initialize the timer with the given number of ticks. */
+extern void pal_timer_init_ns(uint32_t ticks);
+
+/* Start the timer. */
+extern void pal_timer_start_ns(void);
+
+/* Stop and reset the timer. */
+extern void pal_timer_stop_ns(void);
+
+/* Get the address of a free, word-aligned, 1K memory area. */
+extern uint32_t pal_nvmem_get_addr(void);
+
 #endif /* _PAL_CONFIG_H_ */
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/nspe/pal_driver_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/nspe/pal_driver_intf.c
index 7ffe64c..126628a 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/nspe/pal_driver_intf.c
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/nspe/pal_driver_intf.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2019-2021, 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,22 +18,6 @@
 #include "pal_common.h"
 #include "pal_nvmem.h"
 
-
-extern int tfm_log_printf(const char *, ...);
-extern int32_t tfm_platform_system_reset(void);
-
-/* Initialize the timer with the given number of ticks. */
-extern void pal_timer_init_ns(uint32_t ticks);
-
-/* Start the timer. */
-extern void pal_timer_start_ns(void);
-
-/* Stop and reset the timer. */
-extern void pal_timer_stop_ns(void);
-
-/* Get the address of a free, word-aligned, 1K memory area. */
-extern uint32_t pal_nvmem_get_addr(void);
-
 /**
     @brief    - This function initializes the UART
     @param    - uart base addr
@@ -107,7 +91,7 @@
 **/
 int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size)
 {
-    if (base != 0){
+    if (base != 0) {
         /* Unexpected base address */
         return PAL_STATUS_ERROR;
     }
@@ -126,7 +110,7 @@
 **/
 int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size)
 {
-    if (base != 0){
+    if (base != 0) {
         /* Unexpected base address */
         return PAL_STATUS_ERROR;
     }
@@ -145,7 +129,7 @@
 {
     /* Add logic to terminate the simluation */
 
-    while(1)
+    while (1)
     {
         __asm volatile("WFI");
     }
diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/target.cfg b/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/target.cfg
index 2a31380..8e3b5dc 100644
--- a/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/target.cfg
+++ b/api-tests/platform/targets/tgt_dev_apis_tfm_nrf/target.cfg
@@ -1,5 +1,5 @@
 ///** @file
-// * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved.
+// * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
 // * SPDX-License-Identifier : Apache-2.0
 // *
 // * Licensed under the Apache License, Version 2.0 (the "License");
@@ -29,6 +29,6 @@
 watchdog.0.timeout_in_micro_sec_crypto = 60000000; //60 secs
 
 // Range of 1KB Non-volatile memory to preserve data over reset. Ex, NVRAM and FLASH
-nvmem.num = 1;
+nvmem.num =1;
 nvmem.0.start = 0; // Unused value;
 nvmem.0.end = 0x3ff;
diff --git a/api-tests/tools/cmake/compiler/GNUARM.cmake b/api-tests/tools/cmake/compiler/GNUARM.cmake
index faf1755..20102e1 100644
--- a/api-tests/tools/cmake/compiler/GNUARM.cmake
+++ b/api-tests/tools/cmake/compiler/GNUARM.cmake
@@ -18,11 +18,7 @@
 set(CMAKE_SYSTEM_NAME Generic)
 set(CMKE_SYSTEM_PROCESSOR ARM)
 
-if (DEFINED CROSS_COMPILE)
-	set(_C_TOOLCHAIN_NAME ${CROSS_COMPILE}-gcc)
-else()
-	set(_C_TOOLCHAIN_NAME arm-none-eabi-gcc)
-endif()
+set(_C_TOOLCHAIN_NAME arm-none-eabi-gcc)
 
 if(WIN32)
 	if (NOT DEFINED GNUARM_PATH)
@@ -44,7 +40,7 @@
 
 if(_C_TOOLCHAIN_PATH STREQUAL "_C_TOOLCHAIN_PATH-NOTFOUND")
         message(FATAL_ERROR "[PSA] : Couldn't find ${_C_TOOLCHAIN_NAME}."
-			    " Either put ${_C_TOOLCHAIN_NAME} on the PATH or set GNUARM_PATH or CROSS_COMPILE properly.")
+			    " Either put ${_C_TOOLCHAIN_NAME} on the PATH or set GNUARM_PATH set properly.")
 endif()
 
 set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
diff --git a/api-tests/tools/utils/README.md b/api-tests/tools/utils/README.md
new file mode 100644
index 0000000..a22f14d
--- /dev/null
+++ b/api-tests/tools/utils/README.md
@@ -0,0 +1,12 @@
+
+# Log Analysis Tool
+
+Prerequisites :
+Python 3.7 with Tkinter Package
+
+Execution : python log_analysis_tool.py
+
+This Directory contain script for analysis of log result.
+It wil take test logs as input and display results in tree format.
+1. By double clicking on TEST it will show detail description of that test.
+2. Right click of the parent node of tree and select summary option it will show summary result of that node.
diff --git a/api-tests/tools/utils/log_analysis_tool.py b/api-tests/tools/utils/log_analysis_tool.py
new file mode 100644
index 0000000..abcd4af
--- /dev/null
+++ b/api-tests/tools/utils/log_analysis_tool.py
@@ -0,0 +1,772 @@
+#! /usr/bin/env python
+#/** @file
+# * Copyright (c) 2021, 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.
+#**/
+
+import os, sys, re
+
+gtoplevel = None
+filename=''
+filename_dir = []
+testsuite_list = []
+f_temp=[]
+testsuite_temp=[]
+
+
+try:
+    import Tkinter as tk
+    from Tkinter import tkFileDialog as fd
+    from Tkinter import *
+except ImportError:
+    import tkinter as tk
+    from tkinter import filedialog as fd
+    from tkinter import *
+
+try:
+    import ttk
+    py3 = False
+except ImportError:
+    import tkinter.ttk as ttk
+    py3 = True
+
+try:
+    from tkinter import messagebox
+except:
+    import tkMessageBox as messagebox
+
+# Browse the single testsuite log file
+def browseLogFile():
+    clearText()
+    clearTree()
+    filename_dir.clear()
+    testsuite_list.clear()
+    f_temp.clear()
+    global filename
+    global gtoplevel
+    try:
+        ftypes = [('all types', '*.*')]
+        filename = fd.askopenfilename(initialdir="/", title="Select A File", filetypes=ftypes)
+        if filename == "":
+            clearText()
+            gtoplevel.Scrolledtext1.insert("end", "\nPlease Select File\n")
+            return;
+        filename_dir.append(filename)
+        findTestSuite(filename)
+
+    except Exception as e:
+        gtoplevel.Scrolledtext1.insert("end", "EXCEPTION : " + str(e) + "\n")
+        pass
+
+# Browse multiple testsuite log files in single folder
+def browseLogFolder():
+    global filename_dir
+    global gtoplevel
+    testsuite_list.clear()
+    clearText()
+    clearTree()
+    filename_dir.clear()
+    f_temp.clear()
+    testsuite_temp.clear()
+
+
+    try:
+        dirname = fd.askdirectory()
+        if dirname == "":
+            clearText()
+            gtoplevel.Scrolledtext1.insert("end", "\nPlease Select Directory\n")
+            return;
+        for path in os.listdir(dirname):
+            full_path = os.path.join(dirname, path)
+            if os.path.isfile(full_path):
+                filename_dir.append(full_path)
+        for file in filename_dir:
+            findTestSuite(file)
+        for f1 in f_temp:
+            filename_dir.remove(f1)
+
+        if testsuite_temp:
+            testsuite_temp1 = set(testsuite_temp)
+            messagebox.showwarning("Warning","{} Test Suite file is already exists. \nAll the duplicate test suite will not be added.".format(testsuite_temp1))
+            testsuite_temp1.clear()
+
+    except Exception as e:
+        gtoplevel.Scrolledtext1.insert("end", "EXCEPTION : " + str(e) + "\n")
+        pass
+
+# Find testsuite from file.
+def findTestSuite(filename):
+    ut = False
+    global gtoplevel
+    f = open(filename, 'r+')
+    try:
+
+        for line in f:
+            if re.search(r'PSA\sArchitecture\sTest\sSuite\s-\sVersion\s(.*?)\s',line):
+                testsuite_version = re.search(r'PSA\sArchitecture\sTest\sSuite\s-\sVersion\s(.*?)\s',line).group(1)
+                gtoplevel.Scrolledtreeview1.heading("#0", text="PSA Arch Test Suite "+testsuite_version)
+                break
+        for line in f:
+            if re.search(r'^Running..\s(.*?)\sSuite$', line):
+                testsuite = re.search("Running..\s(.*?)\sSuite", line).group(1)
+                if testsuite in testsuite_list:
+                    f_temp.append(filename)
+                    testsuite_temp.append(testsuite)
+                else:
+                    testsuite_list.append(testsuite)
+
+                    for line in f:
+                        if re.search(r'^TEST:\s[0-9]+\s\|\sDESCRIPTION:\sTesting\s.*\s.*\sAPIs\s\|\sUT:\s.*\n', line):
+                            ut = True
+                            break
+                    if testsuite == "":
+                        gtoplevel.Scrolledtext1.insert("end","Please Select Proper File")
+                    if ut is True:
+                        if testsuite == "Storage":
+                            storageDataExtraction(filename, testsuite)
+                        else:
+                            testsuiteDataExtraction(filename, testsuite)
+                    else:
+                        if testsuite=="Attestation":
+                            attestationDataExtraction(filename, testsuite)
+                        elif testsuite=="Storage":
+                            storageDataExtraction(filename, testsuite)
+                        elif testsuite=="Crypto":
+                            cryptoDataExtraction(filename, testsuite)
+                break
+
+    except Exception as e:
+        gtoplevel.Scrolledtext1.insert("end", "EXCEPTION : " + str(e) + "\n")
+        pass
+
+
+# Tests extraction from file. It will create list of tests.
+def testsExtraction(fname):
+    f = open(fname, 'r+')
+    test = None
+    tests = []
+    is_test = False
+    for line in f:
+        if not is_test and line.startswith('TEST:'):
+            is_test = True
+            test = []
+
+        elif is_test and line.startswith('TEST RESULT:'):
+            test.append(line)
+            is_test = False
+            tests.append(''.join(test))
+            test = None
+
+        if is_test:
+            test.append(line)
+    return tests
+
+
+# Crypto testsuite data extaction
+def cryptoDataExtraction(fname, testsuite):
+    global gtoplevel
+    tests = testsExtraction(fname)
+    testsuite = testsuite.lower()
+    firstlevel = []
+    secondlevel = []
+    thirdlevel = []
+
+    gtoplevel.Scrolledtreeview1.insert(parent='', index='end', iid=testsuite, text=testsuite)
+
+    for i in tests:
+        if re.search(r'^TEST:\s201',i):
+            gtoplevel.Scrolledtreeview1.insert(parent=testsuite, index='end', iid="basic", text="Basic")
+            gtoplevel.Scrolledtreeview1.insert(parent="basic", index='end', iid="psa_crypto_init", text="psa_crypto_init")
+            test_num = re.search(r'(.*?)\sDESCRIPTION:', i).group(1)
+            test_result = re.search(r'TEST\sRESULT:\s(.*?)\s', i).group(1)
+            b = test_num + " " + test_result
+            b_temp = b.replace(" ","")
+            gtoplevel.Scrolledtreeview1.insert(parent="psa_crypto_init", index='end', iid=b_temp, text=b)
+
+        if re.search(rf'^TEST:\s[0-9]+\s\|\sDESCRIPTION:\sTesting\s{testsuite}\s(.*?)\sAPIs', i):
+            x = re.search(rf'^TEST:\s[0-9]+\s\|\sDESCRIPTION:\sTesting\s{testsuite}\s(.*?)\sAPIs', i).group(1)
+            firstlevel.append(x) if x not in firstlevel else firstlevel
+
+    if not firstlevel:
+        messagebox.showerror("Error", "Test Suite File must be in required format.")
+        clearTree()
+        return
+
+    for record in firstlevel:
+        r_temp = record.replace(" ", "")
+        gtoplevel.Scrolledtreeview1.insert(parent=testsuite, index='end', iid=r_temp, text=record)
+
+    for i in firstlevel:
+        secondlevel.clear()
+        for j in tests:
+            if re.search(rf'^TEST:\s[0-9]+\s\|\sDESCRIPTION:\sTesting\s{testsuite}\s{i}\sAPIs\n', j):
+                if re.search(r'\[Check\s1\]\sTest\s(.*?)\s.*\n', j):
+                    y = re.search(r'\[Check\s1\]\sTest\s(.*?)\s.*\n', j).group(1)
+                    secondlevel.append(y) if y not in secondlevel else secondlevel
+
+        for r in secondlevel:
+            i_temp = i.replace(" ", "")
+            gtoplevel.Scrolledtreeview1.insert(parent=i_temp, index='end', iid=r, text=r)
+
+        for k in secondlevel:
+            thirdlevel.clear()
+            for m in tests:
+                if re.search(rf'^TEST:\s[0-9]+\s\|\sDESCRIPTION:\sTesting\s{testsuite}\s{i}\sAPIs\n', m):
+                    if re.search(rf'\[Check\s1\]\sTest\s{k}\s.*\n', m):
+                        test_num = re.search(r'(.*?)\sDESCRIPTION:', m).group(1)
+                        test_result = re.search(r'TEST\sRESULT:\s(.*?)\s', m).group(1)
+                        b = test_num + " " + test_result
+                        thirdlevel.append(b) if b not in thirdlevel else thirdlevel
+
+            for rec in thirdlevel:
+                rec_temp = rec.replace(" ", "")
+                gtoplevel.Scrolledtreeview1.insert(parent=k, index='end', iid=rec_temp, text=rec)
+
+    if not secondlevel or not thirdlevel:
+        messagebox.showerror("Error", "Test Suite File must be in required format.")
+        clearTree()
+
+
+# Attestation testsuite data extraction
+def attestationDataExtraction(fname, testsuite):
+    global gtoplevel
+    tests = testsExtraction(fname)
+    testsuite = testsuite.lower()
+    attest = []
+
+    gtoplevel.Scrolledtreeview1.insert(parent='', index='end', iid=testsuite, text=testsuite)
+    testsuite_new="initial attestation"
+    for i in tests:
+        if re.search(rf'^TEST:\s[0-9]+\s\|\sDESCRIPTION:\sTesting\s{testsuite_new}\sAPIs', i):
+            if re.search(r'\[Check\s1\]\sTest\s(.*?)\s.*\n', i):
+                y = re.search(r'\[Check\s1\]\sTest\s(.*?)\s.*\n', i).group(1)
+                attest.append(y) if y not in attest else attest
+
+    for r in attest:
+        gtoplevel.Scrolledtreeview1.insert(parent=testsuite, index='end', iid=r, text=r)
+
+
+    for j in attest:
+        for t in tests:
+            if re.search(rf'\[Check\s1\]\sTest\s{j}\s.*\n', t):
+                test_num = re.search(r'(.*?)\sDESCRIPTION:', t).group(1)
+                test_result = re.search(r'TEST\sRESULT:\s(.*?)\s', t).group(1)
+                b = test_num + " " + test_result
+                gtoplevel.Scrolledtreeview1.insert(parent=j, index='end', iid=b, text=b)
+
+# Storage testsuite data extraction
+def storageDataExtraction(fname, testsuite):
+    global gtoplevel
+    tests = testsExtraction(fname)
+    testsuite = testsuite.lower()
+
+    gtoplevel.Scrolledtreeview1.insert(parent='', index='end', iid=testsuite, text=testsuite)
+    gtoplevel.Scrolledtreeview1.insert(parent=testsuite, index='end', iid="ITS", text="ITS")
+    gtoplevel.Scrolledtreeview1.insert(parent=testsuite, index='end', iid="PS", text="PS")
+    for i in tests:
+        test_num = re.search(r'(.*?)\sDESCRIPTION:', i).group(1)
+        test_result = re.search(r'TEST\sRESULT:\s(.*?)\s', i).group(1)
+        b = test_num + " " + test_result
+        b_temp = b.replace(" ", "")
+        if re.search(r'\[Info\]\sExecuting\sITS\stests\n', i):
+            b_temp1 = "its_"+b_temp
+            gtoplevel.Scrolledtreeview1.insert(parent="ITS", index='end', iid=b_temp1, text=b)
+
+        if re.search(r'\[Info\]\sExecuting\sPS\stests\n', i):
+            b_temp2 = "ps_" + b_temp
+            gtoplevel.Scrolledtreeview1.insert(parent="PS", index='end', iid=b_temp2, text=b)
+
+    its_child = gtoplevel.Scrolledtreeview1.get_children("ITS")
+    if not its_child:
+        gtoplevel.Scrolledtreeview1.delete("ITS")
+    ps_child = gtoplevel.Scrolledtreeview1.get_children("PS")
+    if not ps_child:
+        gtoplevel.Scrolledtreeview1.delete("PS")
+
+
+# Generic testsuite data extraction
+def testsuiteDataExtraction(fname, testsuite):
+    global gtoplevel
+    tests = testsExtraction(fname)
+    firstlevel = []
+    secondlevel = []
+    thirdlevel = []
+    testsuite = testsuite.lower()
+
+    gtoplevel.Scrolledtreeview1.insert(parent='', index='end', iid=testsuite, text=testsuite)
+
+    for i in tests:
+        if re.search(rf'^TEST:\s[0-9]+\s\|\sDESCRIPTION:\sTesting\s{testsuite}\s(.*?)\sAPIs', i):
+            x = re.search(rf'^TEST:\s[0-9]+\s\|\sDESCRIPTION:\sTesting\s{testsuite}\s(.*?)\sAPIs', i).group(1)
+            firstlevel.append(x) if x not in firstlevel else firstlevel
+
+    if not firstlevel:
+        messagebox.showerror("Error","Test Suite File must be in required format.")
+        clearTree()
+        return
+
+    for record in firstlevel:
+        r_temp = record.replace(" ", "")
+        gtoplevel.Scrolledtreeview1.insert(parent=testsuite, index='end', iid=r_temp, text=record)
+
+    for i in firstlevel:
+        secondlevel.clear()
+        for j in tests:
+            if re.search(rf'^TEST:\s[0-9]+\s\|\sDESCRIPTION:\sTesting\s{testsuite}\s{i}\sAPIs\s\|\sUT:\s(.*?)\n', j):
+                y = re.search(rf'^TEST:\s[0-9]+\s\|\sDESCRIPTION:\sTesting\s{testsuite}\s{i}\sAPIs\s\|\sUT:\s(.*?)\n', j).group(1)
+                secondlevel.append(y) if y not in secondlevel else secondlevel
+
+        for r in secondlevel:
+            i_temp = i.replace(" ","")
+            gtoplevel.Scrolledtreeview1.insert(parent=i_temp, index='end', iid=r, text=r)
+
+        for k in secondlevel:
+            thirdlevel.clear()
+            for m in tests:
+                if re.search(rf'^TEST:\s[0-9]+\s\|\sDESCRIPTION:\sTesting\s{testsuite}\s{i}\sAPIs\s\|\sUT:\s{k}\n', m):
+                    test_num = re.search(r'(.*?)\sDESCRIPTION:',m).group(1)
+                    test_result = re.search(r'TEST\sRESULT:\s(.*?)\s',m).group(1)
+                    b = test_num+" "+test_result
+                    thirdlevel.append(b) if b not in thirdlevel else thirdlevel
+
+            for rec in thirdlevel:
+                rec_temp=rec.replace(" ","")
+                gtoplevel.Scrolledtreeview1.insert(parent=k, index='end', iid=rec_temp, text=rec)
+
+    if not secondlevel or not thirdlevel:
+        messagebox.showerror("Error", "Test Suite File must be in required format.")
+        clearTree()
+
+
+# Get the summary result of selected tree node
+def summary_result():
+    global gtoplevel
+    passed = 0
+    failed = 0
+    skipped = 0
+    sim_error = 0
+    clearText()
+    selected_item = gtoplevel.Scrolledtreeview1.selection()[0]
+
+    if selected_item == "storage" :
+        firstlevel = gtoplevel.Scrolledtreeview1.get_children(selected_item)
+        for child in firstlevel:
+            passed = 0
+            failed = 0
+            skipped = 0
+            sim_error = 0
+            secondlevel = gtoplevel.Scrolledtreeview1.get_children(child)
+            if not secondlevel:
+                result = gtoplevel.Scrolledtreeview1.item(child)['text']
+                if re.search(r'TEST:\s[0-9]+\s\|\s(.*?)', result):
+                    r = re.search(r'TEST:\s[0-9]+\s\|\s(.*?)$', result).group(1)
+                    if r == "PASSED":
+                        passed = passed + 1
+                    if r == "FAILED":
+                        failed = failed + 1
+                    if r == "SKIPPED":
+                        skipped = skipped + 1
+                    if r == "SIM ERROR":
+                        sim_error = sim_error + 1
+
+            else:
+                for c in secondlevel:
+                    thirdlevel = gtoplevel.Scrolledtreeview1.get_children(c)
+
+                    if not thirdlevel:
+                        result = gtoplevel.Scrolledtreeview1.item(c)['text']
+                        if re.search(r'TEST:\s[0-9]+\s\|\s(.*?)', result):
+                            r = re.search(r'TEST:\s[0-9]+\s\|\s(.*?)$', result).group(1)
+                            if r == "PASSED":
+                                passed = passed + 1
+                            if r == "FAILED":
+                                failed = failed + 1
+                            if r == "SKIPPED":
+                                skipped = skipped + 1
+                            if r == "SIM ERROR":
+                                sim_error = sim_error + 1
+
+            total_test = passed + failed + skipped + sim_error
+            data1 = "************ "+child+" Summary Report ************\nTOTAL TESTS   :" + str(
+                total_test) + "\nTOTAL PASSED    :" + str(
+                passed) + "\nTOTAL SIM ERROR :" + str(sim_error) + "\nTOTAL FAILED   :" + str(
+                failed) + "\nTOTAL SKIPPED   :" + str(skipped) + "\n***********************************************\n"
+            gtoplevel.Scrolledtext1.insert(END, data1)
+    else:
+        firstlevel = gtoplevel.Scrolledtreeview1.get_children(selected_item)
+
+        if not firstlevel:
+            gtoplevel.Scrolledtext1.insert(END,"This node has not any leaf nodes.")
+        else:
+            for child in firstlevel:
+                secondlevel = gtoplevel.Scrolledtreeview1.get_children(child)
+                if not secondlevel:
+                    result = gtoplevel.Scrolledtreeview1.item(child)['text']
+                    if re.search(r'TEST:\s[0-9]+\s\|\s(.*?)', result):
+                        r = re.search(r'TEST:\s[0-9]+\s\|\s(.*?)$', result).group(1)
+                        if r == "PASSED":
+                            passed = passed + 1
+                        if r == "FAILED":
+                            failed = failed + 1
+                        if r == "SKIPPED":
+                            skipped = skipped + 1
+                        if r == "SIM ERROR":
+                            sim_error = sim_error + 1
+                else:
+                    for c in secondlevel:
+                        thirdlevel = gtoplevel.Scrolledtreeview1.get_children(c)
+
+                        if not thirdlevel:
+                            result = gtoplevel.Scrolledtreeview1.item(c)['text']
+                            if re.search(r'TEST:\s[0-9]+\s\|\s(.*?)', result):
+                                r = re.search(r'TEST:\s[0-9]+\s\|\s(.*?)$', result).group(1)
+                                if r == "PASSED":
+                                    passed = passed + 1
+                                if r == "FAILED":
+                                    failed = failed + 1
+                                if r == "SKIPPED":
+                                    skipped = skipped + 1
+                                if r == "SIM ERROR":
+                                    sim_error = sim_error + 1
+                        else:
+                            for c1 in thirdlevel:
+                                fourthlevel = gtoplevel.Scrolledtreeview1.get_children(c1)
+                                if not fourthlevel:
+                                    result = gtoplevel.Scrolledtreeview1.item(c1)['text']
+                                    if re.search(r'TEST:\s[0-9]+\s\|\s(.*?)', result):
+                                        r = re.search(r'TEST:\s[0-9]+\s\|\s(.*?)$', result).group(1)
+                                        if r == "PASSED":
+                                            passed = passed + 1
+                                        if r == "FAILED":
+                                            failed = failed + 1
+                                        if r == "SKIPPED":
+                                            skipped = skipped + 1
+                                        if r == "SIM ERROR":
+                                            sim_error = sim_error + 1
+
+            total_test = passed + failed + skipped + sim_error
+            data1 = "************ Summary Report ************\nTOTAL TESTS   :" + str(total_test) + "\nTOTAL PASSED    :" + str(
+                passed) + "\nTOTAL SIM ERROR :" + str(sim_error) + "\nTOTAL FAILED   :" + str(
+                failed) + "\nTOTAL SKIPPED   :" + str(skipped) + "\n******************************************"
+            gtoplevel.Scrolledtext1.insert(END, data1)
+
+
+# On Right click of tree item it will display summary result of that tree node
+def onRightClick(e):
+    global gtoplevel
+    try:
+        e.widget.focus()
+        item = gtoplevel.Scrolledtreeview1.identify('item', e.x, e.y)
+        rmenu = Menu(None, tearoff=0, takefocus=0)
+        rmenu.add_command(label="Summary", command=summary_result)
+        rmenu.add_command(label="Expand", command=lambda: open_tree(item))
+        rmenu.add_command(label="Collapse", command=lambda: close_tree(item))
+        rmenu.tk_popup(e.x_root + 40, e.y_root + 10, entry="0")
+    except TclError:
+        print(' - rClick menu, something wrong')
+        pass
+
+    return "break"
+
+# On clicking double click on tree item for test it will fetch the test data from file and insert in text widget
+def onDoubleClick(a):
+    global gtoplevel
+    global filename
+    global filename_dir
+
+    clearText()
+    selected_item = gtoplevel.Scrolledtreeview1.selection()[0]
+    cur_item = gtoplevel.Scrolledtreeview1.item(selected_item)['text']
+
+
+    if re.search(r'^TEST:', cur_item):
+        for file in filename_dir:
+            data = showTest(file,cur_item)
+            try:
+                if data:
+                    gtoplevel.Scrolledtext1.insert(END, data)
+                    pass
+            except Exception as e:
+                print ('error : '+e)
+
+
+# Get specific selected test from file
+def showTest(fname,selected_item):
+    tests = testsExtraction(fname)
+    x = selected_item.split('|')
+    for i in tests:
+        if re.search(rf'{x[0]}',i):
+            return i
+
+
+# Clear Tree Widget Data
+def clearTree():
+    global gtoplevel
+    for i in gtoplevel.Scrolledtreeview1.get_children():
+        gtoplevel.Scrolledtreeview1.delete(i)
+
+
+# Clear Text Widget Data
+def clearText():
+    global gtoplevel
+    gtoplevel.Scrolledtext1.delete("1.0", "end")
+
+# Collapse tree nodes
+def close_tree(parent):
+    global gtoplevel
+    gtoplevel.Scrolledtreeview1.item(parent, open=False)
+    for child in gtoplevel.Scrolledtreeview1.get_children(parent):
+        close_tree(child)
+
+# Expand tree nodes
+def open_tree(parent):
+    global gtoplevel
+    gtoplevel.Scrolledtreeview1.item(parent, open=True)
+    for child in gtoplevel.Scrolledtreeview1.get_children(parent):
+        open_tree(child)
+
+
+def vp_start_gui():
+    '''Starting point when module is the main routine.'''
+    global gtoplevel
+    global val, w, root
+    root = tk.Tk()
+    top = Toplevel1 (root)
+
+    if platform.system() == 'Linux':
+        root.attributes('-zoomed', True)
+    elif platform.system() == 'Windows':
+        root.state('zoomed')
+    gtoplevel = top
+    gui_init(root, top)
+    root.mainloop()
+
+w = None
+def create_Toplevel1(rt, *args, **kwargs):
+    '''Starting point when module is imported by another module.
+       Correct form of call: 'create_Toplevel1(root, *args, **kwargs)' .'''
+    global w, w_win, root
+    #rt = root
+    root = rt
+    w = tk.Toplevel (root)
+    top = Toplevel1 (w)
+    gui_init(w, top, *args, **kwargs)
+    return (w, top)
+
+def destroy_Toplevel1():
+    global w
+    w.destroy()
+    w = None
+
+def gui_init(top, gui, *args, **kwargs):
+    global w, top_level, root
+    w = gui
+    top_level = top
+    root = top
+
+def destroy_window():
+    # Function which closes the window.
+    global top_level
+    top_level.destroy()
+    top_level = None
+
+class Toplevel1:
+    def __init__(self, top=None):
+        '''This class configures and populates the toplevel window.
+           top is the toplevel containing window.'''
+        _bgcolor = '#d9d9d9'  # X11 color: 'gray85'
+        _fgcolor = '#000000'  # X11 color: 'black'
+        _compcolor = '#d9d9d9' # X11 color: 'gray85'
+        _ana1color = '#d9d9d9' # X11 color: 'gray85'
+        _ana2color = '#ececec' # Closest X11 color: 'gray92'
+        self.style = ttk.Style()
+        if sys.platform == "win32":
+            self.style.theme_use('winnative')
+        self.style.configure('.',background="white")
+        self.style.configure('.',foreground=_fgcolor)
+        self.style.configure('.',font="TkDefaultFont")
+        self.style.map('.',background=
+            [('selected', _compcolor), ('active',_ana2color)])
+
+        self.style.configure('Treeview', font="TkDefaultFont")
+        top.geometry("1250x500")
+        top.minsize(176, 1)
+        top.maxsize(1924, 1050)
+        top.resizable(1, 1)
+
+        top.title("PSA Test Suite Log Analysis Tool")
+        top.configure(background="white")
+        top.configure(highlightbackground="#d9d9d9")
+        top.configure(highlightcolor="black")
+        top.columnconfigure(0, weight=1)
+        top.columnconfigure(1, weight=2)
+        top.rowconfigure(0, weight=1)
+
+        self.Scrolledtext1 = ScrolledText(top, borderwidth=1)
+        self.Scrolledtext1.grid(row = 0, column = 1, sticky="NSEW")
+        self.Scrolledtext1.configure(background="white")
+        self.Scrolledtext1.configure(font="TkTextFont")
+        self.Scrolledtext1.configure(foreground="black")
+        self.Scrolledtext1.configure(highlightbackground="#d9d9d9")
+        self.Scrolledtext1.configure(highlightcolor="black")
+        self.Scrolledtext1.configure(insertbackground="black")
+        self.Scrolledtext1.configure(insertborderwidth="3")
+        self.Scrolledtext1.configure(selectbackground="#c4c4c4")
+        self.Scrolledtext1.configure(selectforeground="black")
+        self.Scrolledtext1.configure(wrap="none")
+
+        self.Scrolledtreeview1 = ScrolledTreeView(top)
+        self.Scrolledtreeview1.grid(row=0, column=0, sticky="NSEW")
+        self.Scrolledtreeview1.heading("#0",text="Test Suite")
+        self.Scrolledtreeview1.heading("#0",anchor="center")
+        self.Scrolledtreeview1.column("#0", width="10")
+        self.Scrolledtreeview1.column("#0",minwidth="250")
+        self.Scrolledtreeview1.column("#0",anchor="w")
+        self.Scrolledtreeview1.bind('<Double-Button-1>', onDoubleClick)
+        self.Scrolledtreeview1.bind('<Button-3>', onRightClick)
+
+        self.Menu1 = tk.Menu(top)
+        top.configure(menu=self.Menu1)
+        self.filemenu=tk.Menu(top)
+        self.Menu1.add_cascade(menu=self.filemenu, label="Menu")
+        self.filemenu.add_command(label="Select Log File", command=browseLogFile)
+        self.filemenu.add_command(label="Select Log Folder", command=browseLogFolder)
+        self.filemenu.add_command(label="Exit", command=top.quit)
+
+
+# The following code is added to facilitate the Scrolled widgets you specified.
+class AutoScroll(object):
+    '''Configure the scrollbars for a widget.'''
+    def __init__(self, master):
+        #  Rozen. Added the try-except clauses so that this class
+        #  could be used for scrolled entry widget for which vertical
+        #  scrolling is not supported. 5/7/14.
+        try:
+            vsb = ttk.Scrollbar(master, orient='vertical', command=self.yview)
+        except:
+            pass
+        hsb = ttk.Scrollbar(master, orient='horizontal', command=self.xview)
+        try:
+            self.configure(yscrollcommand=self._autoscroll(vsb))
+        except:
+            pass
+        self.configure(xscrollcommand=self._autoscroll(hsb))
+        self.grid(column=0, row=0, sticky='nsew')
+        try:
+            vsb.grid(column=1, row=0, sticky='ns')
+        except:
+            pass
+        hsb.grid(column=0, row=1, sticky='ew')
+        master.grid_columnconfigure(0, weight=1)
+        master.grid_rowconfigure(0, weight=1)
+        # Copy geometry methods of master  (taken from ScrolledText.py)
+        if py3:
+            methods = tk.Pack.__dict__.keys() | tk.Grid.__dict__.keys() \
+                  | tk.Place.__dict__.keys()
+        else:
+            methods = tk.Pack.__dict__.keys() + tk.Grid.__dict__.keys() \
+                  + tk.Place.__dict__.keys()
+        for meth in methods:
+            if meth[0] != '_' and meth not in ('config', 'configure'):
+                setattr(self, meth, getattr(master, meth))
+
+    @staticmethod
+    def _autoscroll(sbar):
+        '''Hide and show scrollbar as needed.'''
+        def wrapped(first, last):
+            first, last = float(first), float(last)
+            if first <= 0 and last >= 1:
+                sbar.grid_remove()
+            else:
+                sbar.grid()
+            sbar.set(first, last)
+        return wrapped
+
+    def __str__(self):
+        return str(self.master)
+
+def _create_container(func):
+    '''Creates a ttk Frame with a given master, and use this new frame to
+    place the scrollbars and the widget.'''
+    def wrapped(cls, master, **kw):
+        container = ttk.Frame(master)
+        container.bind('<Enter>', lambda e: _bound_to_mousewheel(e, container))
+        container.bind('<Leave>', lambda e: _unbound_to_mousewheel(e, container))
+        return func(cls, container, **kw)
+    return wrapped
+
+class ScrolledText(AutoScroll, tk.Text):
+    '''A standard Tkinter Text widget with scrollbars that will
+    automatically show/hide as needed.'''
+    @_create_container
+    def __init__(self, master, **kw):
+        tk.Text.__init__(self, master, **kw)
+        AutoScroll.__init__(self, master)
+
+class ScrolledTreeView(AutoScroll, ttk.Treeview):
+    '''A standard ttk Treeview widget with scrollbars that will
+    automatically show/hide as needed.'''
+    @_create_container
+    def __init__(self, master, **kw):
+        ttk.Treeview.__init__(self, master, **kw)
+        AutoScroll.__init__(self, master)
+
+
+import platform
+def _bound_to_mousewheel(event, widget):
+    child = widget.winfo_children()[0]
+    if platform.system() == 'Windows' or platform.system() == 'Darwin':
+        child.bind_all('<MouseWheel>', lambda e: _on_mousewheel(e, child))
+        child.bind_all('<Shift-MouseWheel>', lambda e: _on_shiftmouse(e, child))
+    else:
+        child.bind_all('<Button-4>', lambda e: _on_mousewheel(e, child))
+        child.bind_all('<Button-5>', lambda e: _on_mousewheel(e, child))
+        child.bind_all('<Shift-Button-4>', lambda e: _on_shiftmouse(e, child))
+        child.bind_all('<Shift-Button-5>', lambda e: _on_shiftmouse(e, child))
+
+def _unbound_to_mousewheel(event, widget):
+    if platform.system() == 'Windows' or platform.system() == 'Darwin':
+        widget.unbind_all('<MouseWheel>')
+        widget.unbind_all('<Shift-MouseWheel>')
+    else:
+        widget.unbind_all('<Button-4>')
+        widget.unbind_all('<Button-5>')
+        widget.unbind_all('<Shift-Button-4>')
+        widget.unbind_all('<Shift-Button-5>')
+
+def _on_mousewheel(event, widget):
+    if platform.system() == 'Windows':
+        widget.yview_scroll(-1*int(event.delta/120),'units')
+    elif platform.system() == 'Darwin':
+        widget.yview_scroll(-1*int(event.delta),'units')
+    else:
+        if event.num == 4:
+            widget.yview_scroll(-1, 'units')
+        elif event.num == 5:
+            widget.yview_scroll(1, 'units')
+
+def _on_shiftmouse(event, widget):
+    if platform.system() == 'Windows':
+        widget.xview_scroll(-1*int(event.delta/120), 'units')
+    elif platform.system() == 'Darwin':
+        widget.xview_scroll(-1*int(event.delta), 'units')
+    else:
+        if event.num == 4:
+            widget.xview_scroll(-1, 'units')
+        elif event.num == 5:
+            widget.xview_scroll(1, 'units')
+
+if __name__ == '__main__':
+    vp_start_gui()
diff --git a/api-tests/val/nspe/val_crypto.h b/api-tests/val/nspe/val_crypto.h
index 7270a40..86f41e8 100644
--- a/api-tests/val/nspe/val_crypto.h
+++ b/api-tests/val/nspe/val_crypto.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -48,88 +48,112 @@
 
 #define PSA_KEY_LIFETIME_INVALID        0xFFFFFFFF
 #define PSA_KEY_USAGE_INVALID           0xFFFFFFFF
-#define PSA_HASH_ALG_INVALID            0x01FFFFFF
+#define PSA_HASH_ALG_INVALID            0x02FFFFFF
 #define PSA_ALG_INVALID                 0xFFFFFFFF
 #define PSA_KEY_DERIVATION_STEP_INVALID 0x0000FFFF
 
+#define PSA_ALG_NONE ((psa_algorithm_t)0)
+#define PSA_KEY_ID_NULL ((psa_key_id_t)0)
+
+#if 0
+#define PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(aead_alg) \
+        ((((aead_alg) & ~0x003f0000) == 0x05400100) ? PSA_ALG_CCM : \
+        (((aead_alg) & ~0x003f0000) == 0x05400200) ? PSA_ALG_GCM : \
+        (((aead_alg) & ~0x003f0000) == 0x05000500) ? PSA_ALG_CHACHA20_POLY1305 : \
+        PSA_ALG_NONE)
+
+#define PSA_ALG_AEAD_WITH_SHORTENED_TAG(aead_alg, tag_length) \
+		((psa_algorithm_t) (((aead_alg) & ~0x003f0000) | (((tag_length) & 0x3f) << 16)))
+#endif
+
+
 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_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,
+    VAL_CRYPTO_AEAD_ABORT                        = 0x1,
+    VAL_CRYPTO_AEAD_DECRYPT,
+    VAL_CRYPTO_AEAD_DECRYPT_SETUP,
+    VAL_CRYPTO_AEAD_ENCRYPT,
+    VAL_CRYPTO_AEAD_ENCRYPT_SETUP,
+    VAL_CRYPTO_AEAD_FINISH,
+    VAL_CRYPTO_AEAD_GENERATE_NONCE,
+    VAL_CRYPTO_AEAD_OPERATION_INIT,
+    VAL_CRYPTO_AEAD_SET_LENGTHS,
+    VAL_CRYPTO_AEAD_SET_NONCE,
+    VAL_CRYPTO_AEAD_UPDATE,
+    VAL_CRYPTO_AEAD_UPDATE_AD,
+    VAL_CRYPTO_AEAD_VERIFY,
+    VAL_CRYPTO_ASYMMETRIC_DECRYPT,
+    VAL_CRYPTO_ASYMMETRIC_ENCRYPT,
+    VAL_CRYPTO_CIPHER_ABORT,
+    VAL_CRYPTO_CIPHER_DECRYPT,
+    VAL_CRYPTO_CIPHER_DECRYPT_SETUP,
+    VAL_CRYPTO_CIPHER_ENCRYPT,
+    VAL_CRYPTO_CIPHER_ENCRYPT_SETUP,
+    VAL_CRYPTO_CIPHER_FINISH,
+    VAL_CRYPTO_CIPHER_GENERATE_IV,
+    VAL_CRYPTO_CIPHER_OPERATION_INIT,
+    VAL_CRYPTO_CIPHER_SET_IV,
+    VAL_CRYPTO_CIPHER_UPDATE,
+    VAL_CRYPTO_COPY_KEY,
+    VAL_CRYPTO_INIT,
+    VAL_CRYPTO_DESTROY_KEY,
+    VAL_CRYPTO_EXPORT_KEY,
+    VAL_CRYPTO_EXPORT_PUBLIC_KEY,
+    VAL_CRYPTO_GENERATE_KEY,
+    VAL_CRYPTO_GENERATE_RANDOM,
+    VAL_CRYPTO_GET_KEY_ALGORITHM,
+    VAL_CRYPTO_GET_KEY_ATTRIBUTES,
+    VAL_CRYPTO_GET_KEY_BITS,
+    VAL_CRYPTO_GET_KEY_ID,
+    VAL_CRYPTO_GET_KEY_LIFETIME,
+    VAL_CRYPTO_GET_KEY_TYPE,
+    VAL_CRYPTO_GET_KEY_USAGE_FLAGS,
+    VAL_CRYPTO_HASH_ABORT,
+    VAL_CRYPTO_HASH_CLONE,
+    VAL_CRYPTO_HASH_COMPARE,
+    VAL_CRYPTO_HASH_COMPUTE,
+    VAL_CRYPTO_HASH_FINISH,
+    VAL_CRYPTO_HASH_OPERATION_INIT,
+    VAL_CRYPTO_HASH_RESUME,
+    VAL_CRYPTO_HASH_SETUP,
+    VAL_CRYPTO_HASH_SUSPEND,
+    VAL_CRYPTO_HASH_UPDATE,
+    VAL_CRYPTO_HASH_VERIFY,
+    VAL_CRYPTO_IMPORT_KEY,
+    VAL_CRYPTO_KEY_ATTRIBUTES_INIT,
+    VAL_CRYPTO_KEY_DERIVATION_ABORT,
+    VAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY,
+    VAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES,
+    VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY,
+    VAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT,
+    VAL_CRYPTO_KEY_DERIVATION_OPERATION_INIT,
+    VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES,
+    VAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY,
+    VAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY,
+    VAL_CRYPTO_KEY_DERIVATION_SETUP,
+    VAL_CRYPTO_MAC_ABORT,
+    VAL_CRYPTO_MAC_COMPUTE,
+    VAL_CRYPTO_MAC_OPERATION_INIT,
+    VAL_CRYPTO_MAC_SIGN_FINISH,
+    VAL_CRYPTO_MAC_SIGN_SETUP,
+    VAL_CRYPTO_MAC_UPDATE,
+    VAL_CRYPTO_MAC_VERIFY,
+    VAL_CRYPTO_MAC_VERIFY_FINISH,
+    VAL_CRYPTO_MAC_VERIFY_SETUP,
+    VAL_CRYPTO_PURGE_KEY,
+    VAL_CRYPTO_RAW_KEY_AGREEMENT,
+    VAL_CRYPTO_RESET_KEY_ATTRIBUTES,
+    VAL_CRYPTO_SET_KEY_ALGORITHM,
+    VAL_CRYPTO_SET_KEY_BITS,
+    VAL_CRYPTO_SET_KEY_ID,
+    VAL_CRYPTO_SET_KEY_LIFETIME,
+    VAL_CRYPTO_SET_KEY_TYPE,
+    VAL_CRYPTO_SET_KEY_USAGE_FLAGS,
+    VAL_CRYPTO_SIGN_HASH,
+    VAL_CRYPTO_SIGN_MESSAGE,
+    VAL_CRYPTO_VERIFY_HASH,
+    VAL_CRYPTO_VERIFY_MESSAGE,
+    VAL_CRYPTO_RESET                            = 0xF0,
+    VAL_CRYPTO_FREE                             = 0xFE,
 };
 
 int32_t val_crypto_function(int type, ...);
diff --git a/api-tests/val/nspe/val_dispatcher.c b/api-tests/val/nspe/val_dispatcher.c
index faf10d6..4a256b9 100644
--- a/api-tests/val/nspe/val_dispatcher.c
+++ b/api-tests/val/nspe/val_dispatcher.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,6 +28,38 @@
 addr_t          g_test_info_addr;
 
 /**
+    @brief        - This function prints PSA_{SUITE}_API_VERSION_MAJOR
+                    PSA_{SUITE}_API_VERSION_MINOR details.
+    @param        - None
+    @return       - None
+**/
+static void val_print_api_version(void)
+{
+#ifdef CRYPTO
+    val_print(PRINT_ALWAYS, " %d.", PSA_CRYPTO_API_VERSION_MAJOR);
+    val_print(PRINT_ALWAYS, "%d", PSA_CRYPTO_API_VERSION_MINOR);
+#endif
+#ifdef INTERNAL_TRUSTED_STORAGE
+    val_print(PRINT_ALWAYS, " %d.", PSA_ITS_API_VERSION_MAJOR);
+    val_print(PRINT_ALWAYS, "%d", PSA_ITS_API_VERSION_MINOR);
+#endif
+#ifdef PROTECTED_STORAGE
+    val_print(PRINT_ALWAYS, " %d.", PSA_PS_API_VERSION_MAJOR);
+    val_print(PRINT_ALWAYS, "%d", PSA_PS_API_VERSION_MINOR);
+#endif
+#ifdef STORAGE
+    val_print(PRINT_ALWAYS, " ITS %d.", PSA_ITS_API_VERSION_MAJOR);
+    val_print(PRINT_ALWAYS, "%d", PSA_ITS_API_VERSION_MINOR);
+    val_print(PRINT_ALWAYS, " and PS %d.", PSA_PS_API_VERSION_MAJOR);
+    val_print(PRINT_ALWAYS, "%d", PSA_PS_API_VERSION_MINOR);
+#endif
+#ifdef INITIAL_ATTESTATION
+    val_print(PRINT_ALWAYS, " %d.", PSA_INITIAL_ATTEST_API_VERSION_MAJOR);
+    val_print(PRINT_ALWAYS, "%d", PSA_INITIAL_ATTEST_API_VERSION_MINOR);
+#endif
+}
+
+/**
     @brief        - This function reads the test ELFs from RAM or secondary storage and loads into
                     system memory
     @param        - test_id      : Returns the current test ID
@@ -196,6 +228,7 @@
             {
                 val_print(PRINT_ALWAYS, "\nRunning.. ", 0);
                 val_print(PRINT_ALWAYS, val_get_comp_name(test_id), 0);
+				val_print_api_version();
                 val_print(PRINT_ALWAYS, "\n******************************************\n", 0);
             }
 
