diff --git a/api-tests/val/common/val.h b/api-tests/val/common/val.h
index de9cd8c..3e9a9d7 100644
--- a/api-tests/val/common/val.h
+++ b/api-tests/val/common/val.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,18 +18,7 @@
 #ifndef _VAL_COMMON_H_
 #define _VAL_COMMON_H_
 
-#include <string.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-/* typedef's */
-typedef uint8_t             bool_t;
-typedef uint32_t            addr_t;
-typedef uint32_t            test_id_t;
-typedef uint32_t            block_id_t;
-typedef char                char8_t;
-typedef uint32_t            cfg_id_t;
-
+#include "pal_common.h"
 
 #ifndef VAL_NSPE_BUILD
 #define STATIC_DECLARE  static
@@ -84,17 +73,22 @@
 #define IS_TEST_PENDING(status) (((status >> TEST_STATE_BIT) & TEST_STATE_MASK) == TEST_PENDING)
 #define IS_TEST_START(status)   (((status >> TEST_STATE_BIT) & TEST_STATE_MASK) == TEST_START)
 #define IS_TEST_END(status)     (((status >> TEST_STATE_BIT) & TEST_STATE_MASK) == TEST_END)
-#define VAL_ERROR(status)       (status?1:0)
+#define VAL_ERROR(status)       ((status & TEST_STATUS_MASK) ? 1 : 0)
 
 
 
 /* Test Defines */
 #define TEST_PUBLISH(test_id, entry) \
-   const val_test_info_t __attribute__((section(".acs_test_info"))) CONCAT(acs_test_info, entry) = {test_id, entry}
+   const val_test_info_t __attribute__((section(".acs_test_info"))) \
+                      CONCAT(acs_test_info, entry) = {test_id, entry}
 
-#define VAL_MAX_TEST_PER_COMP           200
-#define VAL_FF_BASE                     0
-#define VAL_CRYPTO_BASE                 1
+#define VAL_MAX_TEST_PER_COMP                200
+#define VAL_FF_BASE                            0
+#define VAL_CRYPTO_BASE                        1
+#define VAL_PROTECTED_STORAGE_BASE             2
+#define VAL_INTERNAL_TRUSTED_STORAGE_BASE      3
+#define VAL_INITIAL_ATTESTATION_BASE           4
+
 #define VAL_GET_COMP_NUM(test_id)      \
    ((test_id - (test_id % VAL_MAX_TEST_PER_COMP)) / VAL_MAX_TEST_PER_COMP)
 #define VAL_GET_TEST_NUM(test_id)      (test_id % VAL_MAX_TEST_PER_COMP)
@@ -102,7 +96,7 @@
 
 #define TEST_FIELD(num1,num2)           (num2 << 8 | num1)
 #define GET_TEST_ISOLATION_LEVEL(num)   (num & 0x3)
-#define GET_WD_TIMOUT_TYPE(num)         ((num >> 8) & 0x3)
+#define GET_WD_TIMOUT_TYPE(num)         ((num >> 8) & 0x7)
 
 #define TEST_CHECKPOINT_NUM(n)          n
 #define TEST(n)                         n
@@ -121,9 +115,56 @@
 #define VAL_NVMEM_BLOCK_SIZE           4
 #define VAL_NVMEM_OFFSET(nvmem_idx)    (nvmem_idx * VAL_NVMEM_BLOCK_SIZE)
 
-#define UART_INIT_SIGN 0xff
+#define UART_INIT_SIGN  0xff
 #define UART_PRINT_SIGN 0xfe
 
+#define TEST_PANIC()                          \
+    do {                                         \
+    } while(1)
+
+#define TEST_ASSERT_EQUAL(arg1, arg2, checkpoint)                                   \
+    do {                                                                            \
+        if ((arg1) != arg2)                                                         \
+        {                                                                           \
+            val->print(PRINT_ERROR, "\tFailed at Checkpoint: %d\n", checkpoint);    \
+            val->print(PRINT_ERROR, "\tActual: %d\n", arg1);                        \
+            val->print(PRINT_ERROR, "\tExpected: %d\n", arg2);                      \
+            return 1;                                                               \
+        }                                                                           \
+    } while (0)
+
+#define TEST_ASSERT_DUAL(arg1, status1, status2, checkpoint)                        \
+    do {                                                                            \
+        if ((arg1) != status1 && (arg1) != status2)                                 \
+        {                                                                           \
+            val->print(PRINT_ERROR, "\tFailed at Checkpoint: %d\n", checkpoint);    \
+            val->print(PRINT_ERROR, "\tActual: %d\n", arg1);                        \
+            val->print(PRINT_ERROR, "\tExpected: %d", status1);                     \
+            val->print(PRINT_ERROR, "or %d\n", status2);                            \
+            return 1;                                                               \
+        }                                                                           \
+    } while (0)
+
+#define TEST_ASSERT_NOT_EQUAL(arg1, arg2, checkpoint)                               \
+    do {                                                                            \
+        if ((arg1) == arg2)                                                         \
+        {                                                                           \
+            val->print(PRINT_ERROR, "\tFailed at Checkpoint: %d\n", checkpoint);    \
+            val->print(PRINT_ERROR, "\tValue: %d\n", arg1);                         \
+            return 1;                                                               \
+        }                                                                           \
+    } while (0)
+
+#define TEST_ASSERT_MEMCMP(buf1, buf2, size, checkpoint)                            \
+    do {                                                                            \
+        if (memcmp(buf1, buf2, size))                                               \
+        {                                                                           \
+            val->print(PRINT_ERROR, "\tFailed at Checkpoint: %d : ", checkpoint);   \
+            val->print(PRINT_ERROR, "Unequal data in compared buffers\n", 0);       \
+            return 1;                                                               \
+        }                                                                           \
+    } while (0)
+
 /* enums */
 typedef enum {
     NONSECURE = 0x0,
@@ -152,29 +193,6 @@
     NV_TEST_CNT         = 0x3,
 } nvmem_index_t;
 
-typedef enum {
-    WD_INIT_SEQ         = 0x1,
-    WD_ENABLE_SEQ       = 0x2,
-    WD_DISABLE_SEQ      = 0x3,
-    WD_STATUS_SEQ       = 0x4,
-} wd_fn_type_t;
-
-typedef enum {
-    WD_LOW_TIMEOUT      = 0x1,
-    WD_MEDIUM_TIMEOUT   = 0x2,
-    WD_HIGH_TIMEOUT     = 0x3,
-} wd_timeout_type_t;
-
-typedef enum {
-    NVMEM_READ             = 0x1,
-    NVMEM_WRITE            = 0x2,
-} nvmem_fn_type_t;
-
-typedef enum {
-    UART_INIT             = 0x1,
-    UART_PRINT            = 0x2,
-} uart_fn_type_t;
-
 /* enums to report test sub-state */
 typedef enum {
   VAL_STATUS_SUCCESS                     = 0x0,
@@ -203,6 +221,9 @@
   VAL_STATUS_INVALID_SIZE                = 0x26,
   VAL_STATUS_DATA_MISMATCH               = 0x27,
   VAL_STATUS_BOOT_EXPECTED_BUT_FAILED    = 0x28,
+  VAL_STATUS_INIT_ALREADY_DONE           = 0x29,
+  VAL_STATUS_HEAP_NOT_AVAILABLE          = 0x2A,
+  VAL_STATUS_ERROR_MAX                   = INT_MAX,
 } val_status_t;
 
 /* verbosity enums */
@@ -215,6 +236,14 @@
     PRINT_ALWAYS  = 9
 } print_verbosity_t;
 
+/* Interrupt test function id enums */
+typedef enum {
+    TEST_PSA_EOI_WITH_NON_INTR_SIGNAL    = 1,
+    TEST_PSA_EOI_WITH_MULTIPLE_SIGNALS   = 2,
+    TEST_PSA_EOI_WITH_UNASSERTED_SIGNAL  = 3,
+    TEST_INTR_SERVICE                    = 4,
+} test_intr_fn_id_t;
+
 /* typedef's */
 typedef struct {
     boot_state_t state;
@@ -228,20 +257,6 @@
 } test_count_t;
 
 typedef struct {
-    wd_fn_type_t wd_fn_type;
-    addr_t       wd_base_addr;
-    uint32_t     wd_time_us;
-    uint32_t     wd_timer_tick_us;
-} wd_param_t;
-
-typedef struct {
-    nvmem_fn_type_t nvmem_fn_type;
-    addr_t          base;
-    uint32_t        offset;
-    int             size;
-} nvmem_param_t;
-
-typedef struct {
     uint16_t test_num;
     uint8_t block_num;
 } test_info_t;
diff --git a/api-tests/val/common/val_client_defs.h b/api-tests/val/common/val_client_defs.h
index 714b7a6..db7825c 100644
--- a/api-tests/val/common/val_client_defs.h
+++ b/api-tests/val/common/val_client_defs.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,51 +18,15 @@
 #ifndef _VAL_CLIENT_H_
 #define _VAL_CLIENT_H_
 
-/****************** PSA Client API *****************/
-
-/* Note - This header file containts the declaration of PSA defined client API elements.
- * Ideally, These elements must be defined in a header file <psa_client.h> by SPM implemented
- * library and provided to clients operation in NSPE and SPE as per the specification.
- *  If this is available in the platform, the elements declared as part of this
- *  file can be overwritten by passing --include <path_to_psa_client_h> to setup.sh script.
- */
-
-#if PSA_IPC_IMPLEMENTED
-/* psa/client.h: Contains the Client API elements. Accessible to all applications */
-#include "psa/client.h"
-
-/* psa_manifest/sid.h:  Macro definitions derived from manifest files that map from RoT Service
- * names to Service IDs (SIDs).
- * Partition manifest parse build tool must provide the implementation of this file.
-*/
-#include "psa_manifest/sid.h"
-
-#else
-
-#include "pal_sid.h"
 #include "val.h"
-#define PSA_FRAMEWORK_VERSION       (0x0100)
-#define PSA_VERSION_NONE            (0)
-#define PSA_SUCCESS                 (0)
-#define PSA_CONNECTION_REFUSED      (INT32_MIN + 1)
-#define PSA_CONNECTION_BUSY         (INT32_MIN + 2)
-#define PSA_DROP_CONNECTION         (INT32_MIN)
-#define PSA_NULL_HANDLE             ((psa_handle_t)0)
-
-typedef int32_t psa_status_t;
-typedef int32_t psa_handle_t;
-
-typedef struct psa_invec {
-    const void *base;
-    size_t len;
-} psa_invec;
-
-typedef struct psa_outvec {
-    void *base;
-    size_t len;
-} psa_outvec;
-
-#endif /* #if PSA_IPC_IMPLEMENTED */
 
 #define INVALID_SID                     0x0000FA20
+
+#ifndef CLIENT_TEST_DISPATCHER_SID
+#define CLIENT_TEST_DISPATCHER_SID      0x0
+#endif
+
+#ifndef SERVER_TEST_DISPATCHER_SID
+#define SERVER_TEST_DISPATCHER_SID      0x0
+#endif
 #endif /* _VAL_CLIENT_H_ */
diff --git a/api-tests/val/common/val_target.c b/api-tests/val/common/val_target.c
index bd40eb2..e3b2980 100644
--- a/api-tests/val/common/val_target.c
+++ b/api-tests/val/common/val_target.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,8 +18,17 @@
 #include "val_target.h"
 #include "target_database.h"
 
+#ifdef USE_RAW_PRINT_FOR_DRIVER_PARTITION
+#define val_print(x, y, z)                        \
+       do {                                       \
+           if (x >= VERBOSE)                      \
+              val_print_sf(y,z);                  \
+       } while(0)
+#else
 __UNUSED STATIC_DECLARE val_status_t val_print
                         (print_verbosity_t verbosity, char *string, uint32_t data);
+#endif
+
 /**
     @brief    - Returns the base address of target configuration block database.
     @param    - blob     : Populates the base address
diff --git a/api-tests/val/common/val_target.h b/api-tests/val/common/val_target.h
index 55d4556..c32f0a5 100644
--- a/api-tests/val/common/val_target.h
+++ b/api-tests/val/common/val_target.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -62,7 +62,10 @@
 } soc_peripheral_cfg_id_t;
 
 typedef enum _MEMORY_CONFIG_ID_ {
-  MEMORY_NVMEM = 0x2
+  MEMORY_NVMEM                    = 0x2,
+  MEMORY_NSPE_MMIO                = 0x3,
+  MEMORY_CLIENT_PARTITION_MMIO    = 0x4,
+  MEMORY_DRIVER_PARTITION_MMIO    = 0x5,
 } memory_cfg_id_t;
 
 typedef enum _MISCELLANEOUS_CONFIG_ID_ {
@@ -74,12 +77,15 @@
   Assign group type to each system component
 **/
 typedef enum _COMPONENT_GROUPING_{
-  UART          = GROUP_SOC_PERIPHERAL,
-  TIMER         = GROUP_SOC_PERIPHERAL,
-  WATCHDOG      = GROUP_SOC_PERIPHERAL,
-  NVMEM         = GROUP_MEMORY,
-  BOOT          = GROUP_MISCELLANEOUS,
-  DUT           = GROUP_MISCELLANEOUS,
+  UART                     = GROUP_SOC_PERIPHERAL,
+  TIMER                    = GROUP_SOC_PERIPHERAL,
+  WATCHDOG                 = GROUP_SOC_PERIPHERAL,
+  NVMEM                    = GROUP_MEMORY,
+  NSPE_MMIO                = GROUP_MEMORY,
+  CLIENT_PARTITION_MMIO    = GROUP_MEMORY,
+  DRIVER_PARTITION_MMIO    = GROUP_MEMORY,
+  BOOT                     = GROUP_MISCELLANEOUS,
+  DUT                      = GROUP_MISCELLANEOUS,
 } comp_group_assign_t;
 
 /**
@@ -169,6 +175,7 @@
   uint32_t    timeout_in_micro_sec_low;
   uint32_t    timeout_in_micro_sec_medium;
   uint32_t    timeout_in_micro_sec_high;
+  uint32_t    timeout_in_micro_sec_crypto;
   uint32_t    num_of_tick_per_micro_sec;
   dev_attr_t  attribute;
 } soc_peripheral_desc_t;
diff --git a/api-tests/val/nspe/pal_interfaces_ns.h b/api-tests/val/nspe/pal_interfaces_ns.h
index 4e3ba03..186a5fc 100644
--- a/api-tests/val/nspe/pal_interfaces_ns.h
+++ b/api-tests/val/nspe/pal_interfaces_ns.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -151,5 +151,37 @@
  *               valist  : variable argument list
  *   @return   - error status
 **/
-uint32_t pal_crypto_function(int type, va_list valist);
+int32_t pal_crypto_function(int type, va_list valist);
+
+/**
+ *   @brief    - This API will call the requested internal trusted storage function
+ *   @param    - type    : function code
+ *               valist  : variable argument list
+ *   @return   - error status
+**/
+uint32_t pal_its_function(int type, va_list valist);
+
+/**
+ *   @brief    - This API will call the requested protected storage function
+ *   @param    - type    : function code
+ *               valist  : variable argument list
+ *   @return   - error status
+**/
+uint32_t pal_ps_function(int type, va_list valist);
+
+/**
+ *   @brief    - This API will call the requested attestation function
+ *   @param    - type    : function code
+ *               valist  : variable argument list
+ *   @return   - error status
+**/
+int32_t pal_attestation_function(int type, va_list valist);
+
+/**
+ *   @brief    - Terminates the simulation at the end of all tests completion.
+ *               By default, it put cpus into power down mode.
+ *   @param    - void
+ *   @return   - void
+**/
+void pal_terminate_simulation(void);
 #endif
diff --git a/api-tests/val/nspe/val_attestation.c b/api-tests/val/nspe/val_attestation.c
new file mode 100644
index 0000000..cd8069a
--- /dev/null
+++ b/api-tests/val/nspe/val_attestation.c
@@ -0,0 +1,40 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_target.h"
+#include "pal_interfaces_ns.h"
+#include "val_framework.h"
+#include "val_client_defs.h"
+#include "val_attestation.h"
+
+/**
+    @brief    - This API will call the requested attestation function
+    @param    - type : function code
+                ...  : variable number of arguments
+    @return   - Error status
+**/
+
+int32_t val_attestation_function(int type, ...)
+{
+    va_list      valist;
+    val_status_t status;
+
+    va_start(valist, type);
+    status = pal_attestation_function(type, valist);
+    va_end(valist);
+    return status;
+}
diff --git a/api-tests/val/nspe/val_attestation.h b/api-tests/val/nspe/val_attestation.h
new file mode 100644
index 0000000..172b94e
--- /dev/null
+++ b/api-tests/val/nspe/val_attestation.h
@@ -0,0 +1,32 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#ifndef _VAL_INITIAL_ATTESTATION_H_
+#define _VAL_INITIAL_ATTESTATION_H_
+
+#include "val.h"
+
+#define TOO_SMALL_TOKEN_BUFFER          16
+#define CHALLENGE_SIZE                  16
+#define MAX_CHALLENGE_SIZE              64
+
+enum attestation_function_code {
+    VAL_INITIAL_ATTEST_GET_TOKEN        = 0x1,
+};
+
+int32_t val_attestation_function(int type, ...);
+#endif /* _VAL_INITIAL_ATTESTATION_H_ */
diff --git a/api-tests/val/nspe/val_crypto.c b/api-tests/val/nspe/val_crypto.c
index 4f6e968..764b44a 100644
--- a/api-tests/val/nspe/val_crypto.c
+++ b/api-tests/val/nspe/val_crypto.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -27,7 +27,7 @@
                 ...  : variable number of arguments
     @return   - Error status
 **/
-val_status_t val_crypto_function(int type, ...)
+int32_t val_crypto_function(int type, ...)
 {
     va_list      valist;
     val_status_t status;
@@ -37,17 +37,3 @@
     va_end(valist);
     return status;
 }
-
-/**
-    @brief    - Checks if the key type is of raw bits
-    @param    - type : type of the key
-    @return   - True : If key type is raw bits
-                False: If key type is not raw bits
-**/
-int32_t val_crypto_key_type_is_raw(psa_key_type_t type)
-{
-    psa_key_type_t category = type & PSA_KEY_TYPE_CATEGORY_MASK;
-
-    return (category == PSA_KEY_TYPE_RAW_DATA ||
-            category == PSA_KEY_TYPE_CATEGORY_SYMMETRIC);
-}
diff --git a/api-tests/val/nspe/val_crypto.h b/api-tests/val/nspe/val_crypto.h
index 366bce7..6cb1b2f 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, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,15 +19,9 @@
 #define _VAL_CRYPTO_H_
 
 #include "val.h"
-#include <stdarg.h>
-
-#if PSA_IPC_IMPLEMENTED
-#include "psa/client.h"
-#else
-typedef int32_t psa_status_t;
-#endif
 
 #define BYTES_TO_BITS(byte)             (byte * 8)
+
 /* Size */
 #define AES_16B_KEY_SIZE                16
 #define AES_24B_KEY_SIZE                24
@@ -37,11 +31,14 @@
 #define DES_8B_KEY_SIZE                 8
 #define DES3_2KEY_SIZE                  16
 #define DES3_3KEY_SIZE                  24
+#define SIZE_32B                        32
+#define SIZE_50B                        50
 #define SIZE_128B                       128
 #define SIZE_256B                       256
 #define SIZE_512B                       512
 #define BUFFER_SIZE                     1200
 #define HASH_64B                        64
+#define BUFFER_SIZE_HIGH                5130
 
 /* Key Slot */
 #define INVALID_KEY_SLOT                0xDEAD
@@ -49,181 +46,9 @@
 #define OCCUPIED_KEY_SLOT               1
 #define MAX_KEY_SLOT                    32
 
-/* Key Type */
-#define PSA_KEY_TYPE_RAW_DATA                   ((psa_key_type_t)0x50000001)
-#define PSA_KEY_TYPE_DERIVE                     ((psa_key_type_t)0x52000000)
-#define PSA_KEY_TYPE_CATEGORY_MASK              ((psa_key_type_t)0x70000000)
-#define PSA_KEY_TYPE_CATEGORY_SYMMETRIC         ((psa_key_type_t)0x40000000)
-#define PSA_KEY_TYPE_PAIR_FLAG                  ((psa_key_type_t)0x10000000)
-#define PSA_KEY_TYPE_AES                        ((psa_key_type_t)0x40000001)
-#define PSA_KEY_TYPE_DES                        ((psa_key_type_t)0x40000002)
-#define PSA_KEY_TYPE_RSA_PUBLIC_KEY             ((psa_key_type_t)0x60010000)
-#define PSA_KEY_TYPE_RSA_KEYPAIR                ((psa_key_type_t)0x70010000)
-#define PSA_KEY_TYPE_VENDOR_FLAG                ((psa_key_type_t)0x80000000)
-#define PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE        ((psa_key_type_t)0x60030000)
-#define PSA_KEY_TYPE_ECC_KEYPAIR_BASE           ((psa_key_type_t)0x70030000)
-#define PSA_KEY_TYPE_ECC_CURVE_MASK             ((psa_key_type_t)0x0000ffff)
-
-/* Key Lifetime */
-#define PSA_KEY_LIFETIME_VOLATILE               ((psa_key_lifetime_t)0x00000000)
-#define PSA_KEY_LIFETIME_PERSISTENT             ((psa_key_lifetime_t)0x00000001)
-#define PSA_KEY_LIFETIME_WRITE_ONCE             ((psa_key_lifetime_t)0x7fffffff)
-#define PSA_KEY_LIFETIME_INVALID                ((psa_key_lifetime_t)0xffffffff)
-
-/* Algorithm */
-#define PSA_ALG_BLOCK_CIPHER_PAD_NONE           ((psa_algorithm_t)0x00000000)
-#define PSA_ALG_BLOCK_CIPHER_BASE               ((psa_algorithm_t)0x04000000)
-#define PSA_KEY_USAGE_EXPORT                    ((psa_key_usage_t)0x00000001)
-#define PSA_KEY_USAGE_ENCRYPT                   ((psa_key_usage_t)0x00000100)
-#define PSA_KEY_USAGE_DECRYPT                   ((psa_key_usage_t)0x00000200)
-#define PSA_KEY_USAGE_SIGN                      ((psa_key_usage_t)0x00000400)
-#define PSA_KEY_USAGE_VERIFY                    ((psa_key_usage_t)0x00000800)
-#define PSA_KEY_USAGE_DERIVE                    ((psa_key_usage_t)0x00001000)
-#define PSA_ALG_RSA_PKCS1V15_SIGN_BASE          ((psa_algorithm_t)0x10020000)
-#define PSA_ALG_ECDSA_BASE                      ((psa_algorithm_t)0x10060000)
-#define PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION  ((psa_algorithm_t)0x12000000)
-#define PSA_ALG_RSA_PKCS1V15_CRYPT              ((psa_algorithm_t)0x12020000)
-#define PSA_ALG_HMAC_BASE                       ((psa_algorithm_t)0x02800000)
-#define PSA_ALG_CIPHER_MAC_BASE                 ((psa_algorithm_t)0x02c00000)
-#define PSA_ALG_CBC_MAC                         ((psa_algorithm_t)0x02c00001)
-#define PSA_ALG_CMAC                            ((psa_algorithm_t)0x02c00002)
-#define PSA_ALG_GMAC                            ((psa_algorithm_t)0x02c00003)
-#define PSA_ALG_CFB                             ((psa_algorithm_t)0x04c00002)
-#define PSA_ALG_CCM                             ((psa_algorithm_t)0x06001001)
-#define PSA_ALG_GCM                             ((psa_algorithm_t)0x06001002)
-#define PSA_ALG_RSA_PKCS1V15_SIGN_RAW           PSA_ALG_RSA_PKCS1V15_SIGN_BASE
-#define PSA_ALG_HKDF_BASE                       ((psa_algorithm_t)0x30000100)
-#define PSA_KEY_USAGE_INVALID                   0xFFFFFFFF
-#define PSA_ALG_INVALID                         0xFFFFFFFF
-
-/* Hash Algorithm */
-#define PSA_ALG_CATEGORY_HASH                   ((psa_algorithm_t)0x01000000)
-#define PSA_ALG_HASH_MASK                       ((psa_algorithm_t)0x000000ff)
-#define PSA_ALG_MD2                             ((psa_algorithm_t)0x01000001)
-#define PSA_ALG_MD4                             ((psa_algorithm_t)0x01000002)
-#define PSA_ALG_MD5                             ((psa_algorithm_t)0x01000003)
-#define PSA_ALG_RIPEMD160                       ((psa_algorithm_t)0x01000004)
-#define PSA_ALG_SHA_1                           ((psa_algorithm_t)0x01000005)
-#define PSA_ALG_SHA_224                         ((psa_algorithm_t)0x01000008)
-#define PSA_ALG_SHA_256                         ((psa_algorithm_t)0x01000009)
-#define PSA_ALG_SHA_384                         ((psa_algorithm_t)0x0100000a)
-#define PSA_ALG_SHA_512                         ((psa_algorithm_t)0x0100000b)
-#define PSA_ALG_SHA_512_224                     ((psa_algorithm_t)0x0100000c)
-#define PSA_ALG_SHA_512_256                     ((psa_algorithm_t)0x0100000d)
-#define PSA_ALG_SHA3_224                        ((psa_algorithm_t)0x01000010)
-#define PSA_ALG_SHA3_256                        ((psa_algorithm_t)0x01000011)
-#define PSA_ALG_SHA3_384                        ((psa_algorithm_t)0x01000012)
-#define PSA_ALG_SHA3_512                        ((psa_algorithm_t)0x01000013)
-
-/* Error codes */
-#define PSA_ERROR_UNKNOWN_ERROR                 ((psa_status_t)1)
-#define PSA_ERROR_NOT_SUPPORTED                 ((psa_status_t)2)
-#define PSA_ERROR_NOT_PERMITTED                 ((psa_status_t)3)
-#define PSA_ERROR_BUFFER_TOO_SMALL              ((psa_status_t)4)
-#define PSA_ERROR_OCCUPIED_SLOT                 ((psa_status_t)5)
-#define PSA_ERROR_EMPTY_SLOT                    ((psa_status_t)6)
-#define PSA_ERROR_BAD_STATE                     ((psa_status_t)7)
-#define PSA_ERROR_INVALID_ARGUMENT              ((psa_status_t)8)
-#define PSA_ERROR_INSUFFICIENT_MEMORY           ((psa_status_t)9)
-#define PSA_ERROR_INSUFFICIENT_STORAGE          ((psa_status_t)10)
-#define PSA_ERROR_COMMUNICATION_FAILURE         ((psa_status_t)11)
-#define PSA_ERROR_STORAGE_FAILURE               ((psa_status_t)12)
-#define PSA_ERROR_HARDWARE_FAILURE              ((psa_status_t)13)
-#define PSA_ERROR_TAMPERING_DETECTED            ((psa_status_t)14)
-#define PSA_ERROR_INSUFFICIENT_ENTROPY          ((psa_status_t)15)
-#define PSA_ERROR_INVALID_SIGNATURE             ((psa_status_t)16)
-#define PSA_ERROR_INVALID_PADDING               ((psa_status_t)17)
-#define PSA_ERROR_INSUFFICIENT_CAPACITY         ((psa_status_t)18)
-
-/* Encoding of curve identifiers */
-#define PSA_ECC_CURVE_SECT163K1                 ((psa_ecc_curve_t) 0x0001)
-#define PSA_ECC_CURVE_SECT163R1                 ((psa_ecc_curve_t) 0x0002)
-#define PSA_ECC_CURVE_SECT163R2                 ((psa_ecc_curve_t) 0x0003)
-#define PSA_ECC_CURVE_SECT193R1                 ((psa_ecc_curve_t) 0x0004)
-#define PSA_ECC_CURVE_SECT193R2                 ((psa_ecc_curve_t) 0x0005)
-#define PSA_ECC_CURVE_SECT233K1                 ((psa_ecc_curve_t) 0x0006)
-#define PSA_ECC_CURVE_SECT233R1                 ((psa_ecc_curve_t) 0x0007)
-#define PSA_ECC_CURVE_SECT239K1                 ((psa_ecc_curve_t) 0x0008)
-#define PSA_ECC_CURVE_SECT283K1                 ((psa_ecc_curve_t) 0x0009)
-#define PSA_ECC_CURVE_SECT283R1                 ((psa_ecc_curve_t) 0x000a)
-#define PSA_ECC_CURVE_SECT409K1                 ((psa_ecc_curve_t) 0x000b)
-#define PSA_ECC_CURVE_SECT409R1                 ((psa_ecc_curve_t) 0x000c)
-#define PSA_ECC_CURVE_SECT571K1                 ((psa_ecc_curve_t) 0x000d)
-#define PSA_ECC_CURVE_SECT571R1                 ((psa_ecc_curve_t) 0x000e)
-#define PSA_ECC_CURVE_SECP160K1                 ((psa_ecc_curve_t) 0x000f)
-#define PSA_ECC_CURVE_SECP160R1                 ((psa_ecc_curve_t) 0x0010)
-#define PSA_ECC_CURVE_SECP160R2                 ((psa_ecc_curve_t) 0x0011)
-#define PSA_ECC_CURVE_SECP192K1                 ((psa_ecc_curve_t) 0x0012)
-#define PSA_ECC_CURVE_SECP192R1                 ((psa_ecc_curve_t) 0x0013)
-#define PSA_ECC_CURVE_SECP224K1                 ((psa_ecc_curve_t) 0x0014)
-#define PSA_ECC_CURVE_SECP224R1                 ((psa_ecc_curve_t) 0x0015)
-#define PSA_ECC_CURVE_SECP256K1                 ((psa_ecc_curve_t) 0x0016)
-#define PSA_ECC_CURVE_SECP256R1                 ((psa_ecc_curve_t) 0x0017)
-#define PSA_ECC_CURVE_SECP384R1                 ((psa_ecc_curve_t) 0x0018)
-#define PSA_ECC_CURVE_SECP521R1                 ((psa_ecc_curve_t) 0x0019)
-#define PSA_ECC_CURVE_BRAINPOOL_P256R1          ((psa_ecc_curve_t) 0x001a)
-#define PSA_ECC_CURVE_BRAINPOOL_P384R1          ((psa_ecc_curve_t) 0x001b)
-#define PSA_ECC_CURVE_BRAINPOOL_P512R1          ((psa_ecc_curve_t) 0x001c)
-#define PSA_ECC_CURVE_CURVE25519                ((psa_ecc_curve_t) 0x001d)
-#define PSA_ECC_CURVE_CURVE448                  ((psa_ecc_curve_t) 0x001e)
-#define PSA_ECC_CURVE_FFDHE_2048                ((psa_ecc_curve_t) 0x0100)
-#define PSA_ECC_CURVE_FFDHE_3072                ((psa_ecc_curve_t) 0x0101)
-#define PSA_ECC_CURVE_FFDHE_4096                ((psa_ecc_curve_t) 0x0102)
-#define PSA_ECC_CURVE_FFDHE_6144                ((psa_ecc_curve_t) 0x0103)
-#define PSA_ECC_CURVE_FFDHE_8192                ((psa_ecc_curve_t) 0x0104)
-
-#define PSA_ALG_HMAC_HASH(hmac_alg)                             \
-    (PSA_ALG_CATEGORY_HASH | ((hmac_alg) & PSA_ALG_HASH_MASK))
-
-/* The size of the output hash */
-#define PSA_HASH_SIZE(alg)                                      \
-    (                                                           \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_MD2 ? 16 :            \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_MD4 ? 16 :            \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_MD5 ? 16 :            \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_RIPEMD160 ? 20 :      \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_SHA_1 ? 20 :          \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_SHA_224 ? 28 :        \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_SHA_256 ? 32 :        \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_SHA_384 ? 48 :        \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_SHA_512 ? 64 :        \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_SHA_512_224 ? 28 :    \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_SHA_512_256 ? 32 :    \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_SHA3_224 ? 28 :       \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_SHA3_256 ? 32 :       \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_SHA3_384 ? 48 :       \
-        PSA_ALG_HMAC_HASH(alg) == PSA_ALG_SHA3_512 ? 64 :       \
-        0)
-
-/** The public key type corresponding to a key pair type. */
-#define PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type)        \
-    ((type) & ~PSA_KEY_TYPE_PAIR_FLAG)
-
-/** Whether a key type is an RSA key (pair or public-only). */
-#define PSA_KEY_TYPE_IS_RSA(type)                                       \
-    (PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type) == PSA_KEY_TYPE_RSA_PUBLIC_KEY)
-
-/** Whether a key type is an elliptic curve key (pair or public-only). */
-#define PSA_KEY_TYPE_IS_ECC(type)                                       \
-    ((PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type) &                        \
-      ~PSA_KEY_TYPE_ECC_CURVE_MASK) == PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE)
-#define PSA_KEY_TYPE_IS_ECC_KEYPAIR(type)                               \
-    (((type) & ~PSA_KEY_TYPE_ECC_CURVE_MASK) ==                         \
-     PSA_KEY_TYPE_ECC_KEYPAIR_BASE)
-#define PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(type)                            \
-    (((type) & ~PSA_KEY_TYPE_ECC_CURVE_MASK) ==                         \
-     PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE)
-
-/*Macro to build an HMAC algorithm */
-#define PSA_ALG_HKDF(hash_alg)                                  \
-    (PSA_ALG_HKDF_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
-
-typedef uint16_t psa_ecc_curve_t;
-typedef uint32_t psa_key_usage_t;
-typedef uint32_t psa_algorithm_t;
-typedef uint32_t psa_key_type_t;
-typedef uint32_t psa_key_slot_t;
-typedef uint32_t psa_key_lifetime_t;
+#define PSA_KEY_LIFETIME_INVALID        0xFFFFFFFF
+#define PSA_KEY_USAGE_INVALID           0xFFFFFFFF
+#define PSA_ALG_INVALID                 0xFFFFFFFF
 
 enum crypto_function_code {
     VAL_CRYPTO_INIT                     = 0x1,
@@ -241,7 +66,6 @@
     VAL_CRYPTO_GET_KEY_POLICY           = 0xD,
     VAL_CRYPTO_GET_KEY_INFORMATION      = 0xE,
     VAL_CRYPTO_GET_KEY_LIFETIME         = 0xF,
-    VAL_CRYPTO_SET_KEY_LIFETIME         = 0x10,
     VAL_CRYPTO_HASH_SETUP               = 0x11,
     VAL_CRYPTO_HASH_UPDATE              = 0x12,
     VAL_CRYPTO_HASH_VERIFY              = 0x13,
@@ -251,314 +75,31 @@
     VAL_CRYPTO_GENERATOR_READ           = 0x17,
     VAL_CRYPTO_KEY_DERIVATION           = 0x18,
     VAL_CRYPTO_GET_GENERATOR_CAPACITY   = 0x19,
-    VAL_CRYPTO_GENERATOR_IMPORT_KEY     = 0x20,
-    VAL_CRYPTO_GENERATOR_ABORT          = 0x21,
-    VAL_CRYPTO_AEAD_ENCRYPT             = 0x22,
-    VAL_CRYPTO_MAC_SIGN_SETUP,
+    VAL_CRYPTO_GENERATOR_IMPORT_KEY     = 0x1A,
+    VAL_CRYPTO_GENERATOR_ABORT          = 0x1B,
+    VAL_CRYPTO_AEAD_ENCRYPT             = 0x1C,
+    VAL_CRYPTO_AEAD_DECRYPT             = 0x1D,
+    VAL_CRYPTO_MAC_SIGN_SETUP           = 0x1E,
+    VAL_CRYPTO_MAC_UPDATE               = 0x1F,
+    VAL_CRYPTO_MAC_SIGN_FINISH          = 0x20,
+    VAL_CRYPTO_MAC_VERIFY_SETUP         = 0x21,
+    VAL_CRYPTO_MAC_VERIFY_FINISH        = 0x22,
+    VAL_CRYPTO_MAC_ABORT                = 0x23,
+    VAL_CRYPTO_ASYMMTERIC_ENCRYPT       = 0x24,
+    VAL_CRYPTO_ASYMMTERIC_DECRYPT       = 0x25,
+    VAL_CRYPTO_CIPHER_ENCRYPT_SETUP     = 0x26,
+    VAL_CRYPTO_CIPHER_DECRYPT_SETUP     = 0x2A,
+    VAL_CRYPTO_CIPHER_GENERATE_IV       = 0x2B,
+    VAL_CRYPTO_CIPHER_SET_IV            = 0x2C,
+    VAL_CRYPTO_CIPHER_UPDATE            = 0x2D,
+    VAL_CRYPTO_CIPHER_FINISH            = 0x2E,
+    VAL_CRYPTO_CIPHER_ABORT             = 0x2F,
+    VAL_CRYPTO_ASYMMTERIC_SIGN          = 0x30,
+    VAL_CRYPTO_ASYMMTERIC_VERIFY        = 0x31,
+    VAL_CRYPTO_KEY_AGREEMENT            = 0x32,
+    VAL_CRYPTO_ALLOCATE_KEY             = 0x33,
     VAL_CRYPTO_FREE                     = 0xFE,
 };
 
-struct psa_key_policy_s {
-    psa_key_usage_t usage;
-    psa_algorithm_t alg;
-};
-
-typedef struct {
-    unsigned char cksum[16];    /*!< checksum of the data block */
-    unsigned char state[48];    /*!< intermediate digest state  */
-    unsigned char buffer[16];   /*!< data block being processed */
-    size_t left;                /*!< amount of data in buffer   */
-} mbedtls_md2_context;
-
-typedef struct {
-    uint32_t total[2];          /*!< number of bytes processed  */
-    uint32_t state[4];          /*!< intermediate digest state  */
-    unsigned char buffer[64];   /*!< data block being processed */
-} mbedtls_md4_context;
-
-typedef struct {
-    uint32_t total[2];          /*!< number of bytes processed  */
-    uint32_t state[4];          /*!< intermediate digest state  */
-    unsigned char buffer[64];   /*!< data block being processed */
-} mbedtls_md5_context;
-
-typedef struct {
-    uint32_t total[2];          /*!< number of bytes processed  */
-    uint32_t state[5];          /*!< intermediate digest state  */
-    unsigned char buffer[64];   /*!< data block being processed */
-} mbedtls_ripemd160_context;
-
-typedef struct {
-    uint32_t total[2];          /*!< The number of Bytes processed.  */
-    uint32_t state[5];          /*!< The intermediate digest state.  */
-    unsigned char buffer[64];   /*!< The data block being processed. */
-} mbedtls_sha1_context;
-
-typedef struct {
-    uint32_t total[2];          /*!< The number of Bytes processed.  */
-    uint32_t state[8];          /*!< The intermediate digest state.  */
-    unsigned char buffer[64];   /*!< The data block being processed. */
-    int is224;                  /*!< Determines which function to use:
-                                     0: Use SHA-256, or 1: Use SHA-224. */
-} mbedtls_sha256_context;
-
-typedef struct {
-    uint64_t total[2];          /*!< The number of Bytes processed. */
-    uint64_t state[8];          /*!< The intermediate digest state. */
-    unsigned char buffer[128];  /*!< The data block being processed. */
-    int is384;                  /*!< Determines which function to use:
-                                     0: Use SHA-512, or 1: Use SHA-384. */
-} mbedtls_sha512_context;
-
-typedef struct mbedtls_cipher_base_t mbedtls_cipher_base_t;
-
-/**
- * \brief     Supported {cipher type, cipher mode} pairs.
- *
- * \warning   RC4 and DES are considered weak ciphers and their use
- *            constitutes a security risk. Arm recommends considering stronger
- *            ciphers instead.
- */
-typedef enum {
-    MBEDTLS_CIPHER_NONE = 0,             /**< Placeholder to mark the end of cipher-pair lists. */
-    MBEDTLS_CIPHER_NULL,                 /**< The identity stream cipher. */
-    MBEDTLS_CIPHER_AES_128_ECB,          /**< AES cipher with 128-bit ECB mode. */
-    MBEDTLS_CIPHER_AES_192_ECB,          /**< AES cipher with 192-bit ECB mode. */
-    MBEDTLS_CIPHER_AES_256_ECB,          /**< AES cipher with 256-bit ECB mode. */
-    MBEDTLS_CIPHER_AES_128_CBC,          /**< AES cipher with 128-bit CBC mode. */
-    MBEDTLS_CIPHER_AES_192_CBC,          /**< AES cipher with 192-bit CBC mode. */
-    MBEDTLS_CIPHER_AES_256_CBC,          /**< AES cipher with 256-bit CBC mode. */
-    MBEDTLS_CIPHER_AES_128_CFB128,       /**< AES cipher with 128-bit CFB128 mode. */
-    MBEDTLS_CIPHER_AES_192_CFB128,       /**< AES cipher with 192-bit CFB128 mode. */
-    MBEDTLS_CIPHER_AES_256_CFB128,       /**< AES cipher with 256-bit CFB128 mode. */
-    MBEDTLS_CIPHER_AES_128_CTR,          /**< AES cipher with 128-bit CTR mode. */
-    MBEDTLS_CIPHER_AES_192_CTR,          /**< AES cipher with 192-bit CTR mode. */
-    MBEDTLS_CIPHER_AES_256_CTR,          /**< AES cipher with 256-bit CTR mode. */
-    MBEDTLS_CIPHER_AES_128_GCM,          /**< AES cipher with 128-bit GCM mode. */
-    MBEDTLS_CIPHER_AES_192_GCM,          /**< AES cipher with 192-bit GCM mode. */
-    MBEDTLS_CIPHER_AES_256_GCM,          /**< AES cipher with 256-bit GCM mode. */
-    MBEDTLS_CIPHER_CAMELLIA_128_ECB,     /**< Camellia cipher with 128-bit ECB mode. */
-    MBEDTLS_CIPHER_CAMELLIA_192_ECB,     /**< Camellia cipher with 192-bit ECB mode. */
-    MBEDTLS_CIPHER_CAMELLIA_256_ECB,     /**< Camellia cipher with 256-bit ECB mode. */
-    MBEDTLS_CIPHER_CAMELLIA_128_CBC,     /**< Camellia cipher with 128-bit CBC mode. */
-    MBEDTLS_CIPHER_CAMELLIA_192_CBC,     /**< Camellia cipher with 192-bit CBC mode. */
-    MBEDTLS_CIPHER_CAMELLIA_256_CBC,     /**< Camellia cipher with 256-bit CBC mode. */
-    MBEDTLS_CIPHER_CAMELLIA_128_CFB128,  /**< Camellia cipher with 128-bit CFB128 mode. */
-    MBEDTLS_CIPHER_CAMELLIA_192_CFB128,  /**< Camellia cipher with 192-bit CFB128 mode. */
-    MBEDTLS_CIPHER_CAMELLIA_256_CFB128,  /**< Camellia cipher with 256-bit CFB128 mode. */
-    MBEDTLS_CIPHER_CAMELLIA_128_CTR,     /**< Camellia cipher with 128-bit CTR mode. */
-    MBEDTLS_CIPHER_CAMELLIA_192_CTR,     /**< Camellia cipher with 192-bit CTR mode. */
-    MBEDTLS_CIPHER_CAMELLIA_256_CTR,     /**< Camellia cipher with 256-bit CTR mode. */
-    MBEDTLS_CIPHER_CAMELLIA_128_GCM,     /**< Camellia cipher with 128-bit GCM mode. */
-    MBEDTLS_CIPHER_CAMELLIA_192_GCM,     /**< Camellia cipher with 192-bit GCM mode. */
-    MBEDTLS_CIPHER_CAMELLIA_256_GCM,     /**< Camellia cipher with 256-bit GCM mode. */
-    MBEDTLS_CIPHER_DES_ECB,              /**< DES cipher with ECB mode. */
-    MBEDTLS_CIPHER_DES_CBC,              /**< DES cipher with CBC mode. */
-    MBEDTLS_CIPHER_DES_EDE_ECB,          /**< DES cipher with EDE ECB mode. */
-    MBEDTLS_CIPHER_DES_EDE_CBC,          /**< DES cipher with EDE CBC mode. */
-    MBEDTLS_CIPHER_DES_EDE3_ECB,         /**< DES cipher with EDE3 ECB mode. */
-    MBEDTLS_CIPHER_DES_EDE3_CBC,         /**< DES cipher with EDE3 CBC mode. */
-    MBEDTLS_CIPHER_BLOWFISH_ECB,         /**< Blowfish cipher with ECB mode. */
-    MBEDTLS_CIPHER_BLOWFISH_CBC,         /**< Blowfish cipher with CBC mode. */
-    MBEDTLS_CIPHER_BLOWFISH_CFB64,       /**< Blowfish cipher with CFB64 mode. */
-    MBEDTLS_CIPHER_BLOWFISH_CTR,         /**< Blowfish cipher with CTR mode. */
-    MBEDTLS_CIPHER_ARC4_128,             /**< RC4 cipher with 128-bit mode. */
-    MBEDTLS_CIPHER_AES_128_CCM,          /**< AES cipher with 128-bit CCM mode. */
-    MBEDTLS_CIPHER_AES_192_CCM,          /**< AES cipher with 192-bit CCM mode. */
-    MBEDTLS_CIPHER_AES_256_CCM,          /**< AES cipher with 256-bit CCM mode. */
-    MBEDTLS_CIPHER_CAMELLIA_128_CCM,     /**< Camellia cipher with 128-bit CCM mode. */
-    MBEDTLS_CIPHER_CAMELLIA_192_CCM,     /**< Camellia cipher with 192-bit CCM mode. */
-    MBEDTLS_CIPHER_CAMELLIA_256_CCM,     /**< Camellia cipher with 256-bit CCM mode. */
-} mbedtls_cipher_type_t;
-
-/** Supported cipher modes. */
-typedef enum {
-    MBEDTLS_MODE_NONE = 0,               /**< None. */
-    MBEDTLS_MODE_ECB,                    /**< The ECB cipher mode. */
-    MBEDTLS_MODE_CBC,                    /**< The CBC cipher mode. */
-    MBEDTLS_MODE_CFB,                    /**< The CFB cipher mode. */
-    MBEDTLS_MODE_OFB,                    /**< The OFB cipher mode - unsupported. */
-    MBEDTLS_MODE_CTR,                    /**< The CTR cipher mode. */
-    MBEDTLS_MODE_GCM,                    /**< The GCM cipher mode. */
-    MBEDTLS_MODE_STREAM,                 /**< The stream cipher mode. */
-    MBEDTLS_MODE_CCM,                    /**< The CCM cipher mode. */
-} mbedtls_cipher_mode_t;
-
-struct psa_hash_operation_s {
-    psa_algorithm_t alg;
-    union
-    {
-        unsigned dummy; /* Make the union non-empty even with no supported algorithms. */
-        mbedtls_md2_context md2;
-        mbedtls_md4_context md4;
-        mbedtls_md5_context md5;
-        mbedtls_ripemd160_context ripemd160;
-        mbedtls_sha1_context sha1;
-        mbedtls_sha256_context sha256;
-        mbedtls_sha512_context sha512;
-    } ctx;
-};
-
-typedef struct {
-    /** Full cipher identifier. For example,
-     * MBEDTLS_CIPHER_AES_256_CBC.
-     */
-    mbedtls_cipher_type_t type;
-
-    /** The cipher mode. For example, MBEDTLS_MODE_CBC. */
-    mbedtls_cipher_mode_t mode;
-
-    /** The cipher key length, in bits. This is the
-     * default length for variable sized ciphers.
-     * Includes parity bits for ciphers like DES.
-     */
-    unsigned int key_bitlen;
-
-    /** Name of the cipher. */
-    const char *name;
-
-    /** IV or nonce size, in Bytes.
-     * For ciphers that accept variable IV sizes,
-     * this is the recommended size.
-     */
-    unsigned int iv_size;
-
-    /** Bitflag comprised of MBEDTLS_CIPHER_VARIABLE_IV_LEN and
-     *  MBEDTLS_CIPHER_VARIABLE_KEY_LEN indicating whether the
-     *  cipher supports variable IV or variable key sizes, respectively.
-     */
-    int flags;
-
-    /** The block size, in Bytes. */
-    unsigned int block_size;
-
-    /** Struct for base cipher information and functions. */
-    const mbedtls_cipher_base_t *base;
-
-} mbedtls_cipher_info_t;
-
-/** Type of operation. */
-typedef enum {
-    MBEDTLS_OPERATION_NONE = -1,
-    MBEDTLS_DECRYPT = 0,
-    MBEDTLS_ENCRYPT,
-} mbedtls_operation_t;
-
-/** Maximum length of any IV, in Bytes. */
-#define MBEDTLS_MAX_IV_LENGTH      16
-/** Maximum block size of any cipher, in Bytes. */
-#define MBEDTLS_MAX_BLOCK_LENGTH   16
-
-#if defined(MBEDTLS_SHA512_C)
-#define PSA_HASH_MAX_SIZE 64
-#define PSA_HMAC_MAX_HASH_BLOCK_SIZE 128
-#else
-#define PSA_HASH_MAX_SIZE 32
-#define PSA_HMAC_MAX_HASH_BLOCK_SIZE 64
-#endif
-
-/**
- * Generic cipher context.
- */
-typedef struct {
-    /** Information about the associated cipher. */
-    const mbedtls_cipher_info_t *cipher_info;
-
-    /** Key length to use. */
-    int key_bitlen;
-
-    /** Operation that the key of the context has been
-     * initialized for.
-     */
-    mbedtls_operation_t operation;
-
-#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING)
-    /** Padding functions to use, if relevant for
-     * the specific cipher mode.
-     */
-    void (*add_padding)(unsigned char *output, size_t olen, size_t data_len);
-    int (*get_padding)(unsigned char *input, size_t ilen, size_t *data_len);
-#endif
-
-    /** Buffer for input that has not been processed yet. */
-    unsigned char unprocessed_data[MBEDTLS_MAX_BLOCK_LENGTH];
-
-    /** Number of Bytes that have not been processed yet. */
-    size_t unprocessed_len;
-
-    /** Current IV or NONCE_COUNTER for CTR-mode. */
-    unsigned char iv[MBEDTLS_MAX_IV_LENGTH];
-
-    /** IV size in Bytes, for ciphers with variable-length IVs. */
-    size_t iv_size;
-
-    /** The cipher-specific context. */
-    void *cipher_ctx;
-
-#if defined(MBEDTLS_CMAC_C)
-    /** CMAC-specific context. */
-    mbedtls_cmac_context_t *cmac_ctx;
-#endif
-} mbedtls_cipher_context_t;
-
-typedef struct {
-        /** The hash context. */
-        struct psa_hash_operation_s hash_ctx;
-        /** The HMAC part of the context. */
-        uint8_t opad[PSA_HMAC_MAX_HASH_BLOCK_SIZE];
-} psa_hmac_internal_data;
-
-struct psa_mac_operation_s {
-    psa_algorithm_t alg;
-    unsigned int key_set : 1;
-    unsigned int iv_required : 1;
-    unsigned int iv_set : 1;
-    unsigned int has_input : 1;
-    unsigned int is_sign : 1;
-    uint8_t mac_size;
-    union {
-        unsigned dummy; /* Make the union non-empty even with no supported algorithms. */
-#if defined(MBEDTLS_MD_C)
-        psa_hmac_internal_data hmac;
-#endif
-#if defined(MBEDTLS_CMAC_C)
-        mbedtls_cipher_context_t cmac;
-#endif
-    } ctx;
-};
-
-typedef struct {
-    uint8_t *info;
-    size_t info_length;
-    psa_hmac_internal_data hmac;
-    uint8_t prk[PSA_HASH_MAX_SIZE];
-    uint8_t output_block[PSA_HASH_MAX_SIZE];
-#if PSA_HASH_MAX_SIZE > 0xff
-#error "PSA_HASH_MAX_SIZE does not fit in uint8_t"
-#endif
-    uint8_t offset_in_block;
-    uint8_t block_number;
-} psa_hkdf_generator_t;
-
-struct psa_crypto_generator_s {
-    psa_algorithm_t alg;
-    size_t capacity;
-    union {
-        struct {
-            uint8_t *data;
-            size_t size;
-        } buffer;
-#if defined(MBEDTLS_MD_C)
-        psa_hkdf_generator_t hkdf;
-#endif
-    } ctx;
-};
-
-typedef struct psa_hash_operation_s psa_hash_operation_t;
-typedef struct psa_key_policy_s psa_key_policy_t;
-typedef struct psa_mac_operation_s psa_mac_operation_t;
-typedef struct psa_crypto_generator_s psa_crypto_generator_t;
-
-val_status_t val_crypto_function(int type, ...);
-int32_t val_crypto_key_type_is_raw(psa_key_type_t type);
+int32_t val_crypto_function(int type, ...);
 #endif /* _VAL_CRYPTO_H_ */
diff --git a/api-tests/val/nspe/val_dispatcher.c b/api-tests/val/nspe/val_dispatcher.c
index bfa74bb..29c72dc 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, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -164,7 +164,7 @@
 
             if (test_header.start_marker == VAL_TEST_END_MARKER)
             {
-                val_print(PRINT_ERROR, "\n\nNo more valid tests found. Exiting..", 0);
+                val_print(PRINT_DEBUG, "\n\nNo more valid tests found. Exiting..", 0);
                 *test_id = VAL_INVALID_TEST_ID;
                 return VAL_STATUS_SUCCESS;
             }
@@ -194,14 +194,14 @@
 
     if (test_header.start_marker == VAL_TEST_END_MARKER)
     {
-        val_print(PRINT_ERROR, "\n\nNo more valid tests found. Exiting.", 0);
+        val_print(PRINT_DEBUG, "\n\nNo more valid tests found. Exiting.", 0);
         *test_id = VAL_INVALID_TEST_ID;
         return VAL_STATUS_SUCCESS;
     }
 
     if (test_header.start_marker != VAL_TEST_START_MARKER)
     {
-        val_print(PRINT_ERROR, "\n\nNo valid test binary found. Exiting.", 0);
+        val_print(PRINT_ERROR, "\n\nError: No valid test binary found. Exiting.", 0);
         *test_id = VAL_INVALID_TEST_ID;
         return VAL_STATUS_LOAD_ERROR;
     }
@@ -293,11 +293,17 @@
     switch (VAL_GET_COMP_NUM(test_id))
     {
         case VAL_FF_BASE:
-            return "\nRunning... IPC Suite";
+            return "IPC Suite";
         case VAL_CRYPTO_BASE:
-            return "\nRunning... Crypto Suite";
+            return "Crypto Suite";
+        case VAL_PROTECTED_STORAGE_BASE:
+            return "Protected Storage Suite";
+        case VAL_INTERNAL_TRUSTED_STORAGE_BASE:
+            return "Internal Trusted Storage Suite";
+        case VAL_INITIAL_ATTESTATION_BASE:
+            return "Attestation Suite";
         default:
-            return "No Component";
+            return "Unknown Suite";
     }
 }
 
@@ -334,7 +340,7 @@
         status = val_get_boot_flag(&boot.state);
         if (VAL_ERROR(status))
         {
-            break;
+            return;
         }
 
         /* Did last run test hang and system re-booted due to watchdog timeout and
@@ -348,6 +354,7 @@
             if (VAL_ERROR(status))
             {
                 val_print(PRINT_ERROR, "\n\tNVMEM read error", 0);
+                return;
             }
         }
         /* Did last run test hang and system reset due to watchdog timeout but
@@ -363,13 +370,18 @@
             if (VAL_ERROR(status))
             {
                 val_print(PRINT_ERROR, "\n\tNVMEM read error", 0);
+                return;
             }
         }
         else
         {
             status = val_test_load(&test_id, test_id_prev);
 
-            if (test_id == VAL_INVALID_TEST_ID || VAL_ERROR(status))
+            if (VAL_ERROR(status))
+            {
+                return;
+            }
+            else if (test_id == VAL_INVALID_TEST_ID)
             {
                 break;
             }
@@ -379,11 +391,12 @@
             if (VAL_ERROR(status))
             {
                 val_print(PRINT_ERROR, "\n\tNVMEM write error", 0);
-                break;
+                return;
             }
 
             if (VAL_GET_COMP_NUM(test_id_prev) != VAL_GET_COMP_NUM(test_id))
             {
+                val_print(PRINT_ALWAYS, "\nRunning.. ", 0);
                 val_print(PRINT_ALWAYS, val_get_comp_name(test_id), 0);
                 val_print(PRINT_ALWAYS, "\n******************************************\n", 0);
             }
@@ -394,7 +407,7 @@
                 status = val_set_boot_flag(BOOT_NOT_EXPECTED);
                 if (VAL_ERROR(status))
                 {
-                    break;
+                    return;
                 }
             }
             val_execute_test_fn();
@@ -406,7 +419,7 @@
         status = val_set_boot_flag(BOOT_UNKNOWN);
         if (VAL_ERROR(status))
         {
-            break;
+            return;
         }
 
         /* Prepare suite summary data structure */
@@ -414,7 +427,7 @@
         if (VAL_ERROR(status))
         {
             val_print(PRINT_ERROR, "\n\tNVMEM read error", 0);
-            break;
+            return;
         }
 
         switch (test_result)
@@ -437,7 +450,7 @@
         if (VAL_ERROR(status))
         {
             val_print(PRINT_ERROR, "\n\tNVMEM write error", 0);
-            break;
+            return;
         }
 
         test_id_prev = test_id;
@@ -446,7 +459,7 @@
         if (VAL_ERROR(status))
         {
             val_print(PRINT_ERROR, "\n\tNVMEM write error", 0);
-            break;
+            return;
         }
 
    } while(1);
@@ -458,14 +471,16 @@
        return;
    }
 
-   val_print(PRINT_ALWAYS, "\n\n************ REGRESSION SUMMARY **********\n", 0);
+   val_print(PRINT_ALWAYS, "\n************ ", 0);
+   val_print(PRINT_ALWAYS, val_get_comp_name(test_id_prev), 0);
+   val_print(PRINT_ALWAYS, " Report **********\n", 0);
    val_print(PRINT_ALWAYS, "TOTAL TESTS     : %d\n", test_count.pass_cnt + test_count.fail_cnt
             + test_count.skip_cnt + test_count.sim_error_cnt);
    val_print(PRINT_ALWAYS, "TOTAL PASSED    : %d\n", test_count.pass_cnt);
    val_print(PRINT_ALWAYS, "TOTAL SIM ERROR : %d\n", test_count.sim_error_cnt);
    val_print(PRINT_ALWAYS, "TOTAL FAILED    : %d\n", test_count.fail_cnt);
    val_print(PRINT_ALWAYS, "TOTAL SKIPPED   : %d\n", test_count.skip_cnt);
-   val_print(PRINT_ALWAYS, "\n******************************************\n", 0);
+   val_print(PRINT_ALWAYS, "******************************************\n", 0);
 }
 
 
diff --git a/api-tests/val/nspe/val_entry.c b/api-tests/val/nspe/val_entry.c
index 616af07..cff5ded 100644
--- a/api-tests/val/nspe/val_entry.c
+++ b/api-tests/val/nspe/val_entry.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -42,7 +42,8 @@
     /* Compliance header print */
     if (test_id == VAL_INVALID_TEST_ID)
     {
-        val_print(PRINT_ALWAYS, "\n***** PSA Compliance Suite - Version %d.", PSA_ACS_MAJOR_VER);
+        val_print(PRINT_ALWAYS, "\n***** PSA Architecture Test Suite - Version %d.",
+                                                                         PSA_ACS_MAJOR_VER);
         val_print(PRINT_ALWAYS, "%d *****\n", PSA_ACS_MINOR_VER);
     }
 
@@ -50,9 +51,7 @@
     val_dispatcher(test_id);
 
 exit:
-    val_print(PRINT_ALWAYS, "\n\nEntering standby\n", 0);
-    while(1)
-    {
-        asm volatile("WFI");
-    }
+    val_print(PRINT_ALWAYS, "\nEntering standby.. \n", 0);
+
+    pal_terminate_simulation();
 }
diff --git a/api-tests/val/nspe/val_entry.h b/api-tests/val/nspe/val_entry.h
index 0293113..4903457 100644
--- a/api-tests/val/nspe/val_entry.h
+++ b/api-tests/val/nspe/val_entry.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,10 +21,10 @@
 #include "val_framework.h"
 
 #define PSA_ACS_MAJOR_VER    0
-#define PSA_ACS_MINOR_VER    5
+#define PSA_ACS_MINOR_VER    7
 
 /**
-    @brief    - PSA C main function, does VAL init and calls test dispatcher
+    @brief    - PSA Test Suite C main function, does VAL init and calls test dispatcher
     @param    - None
     @return   - void
 **/
diff --git a/api-tests/val/nspe/val_framework.c b/api-tests/val/nspe/val_framework.c
index 0248adc..bbd459e 100644
--- a/api-tests/val/nspe/val_framework.c
+++ b/api-tests/val/nspe/val_framework.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -113,7 +113,7 @@
 
     if (boot.state == BOOT_NOT_EXPECTED || boot.state == BOOT_EXPECTED_CRYPTO)
     {
-        val_print(PRINT_TEST,"[Info] Executing tests form non-secure\n", 0);
+        val_print(PRINT_TEST,"[Info] Executing tests from non-secure\n", 0);
         while (tests_list[i] != NULL)
         {
             if (server_hs == TRUE)
@@ -125,7 +125,7 @@
                 if (VAL_ERROR(status))
                 {
                     val_set_status(RESULT_FAIL(status));
-                    val_print(PRINT_ERROR,"[Check%d] START\n", i);
+                    val_print(PRINT_DEBUG,"[Check%d] START\n", i);
                     return status;
                 }
                 else
@@ -144,18 +144,27 @@
             }
 
             status = test_status ? test_status:status;
-            if (VAL_ERROR(status))
+            if (IS_TEST_SKIP(status))
+            {
+                val_set_status(status);
+                if (server_hs == TRUE)
+                    val_print(PRINT_DEBUG, "[Check%d] SKIPPED\n", i);
+                return status;
+            }
+            else if (VAL_ERROR(status))
             {
                 val_set_status(RESULT_FAIL(status));
                 if (server_hs == TRUE)
-                val_print(PRINT_ERROR,"[Check%d] FAILED\n", i);
+                    val_print(PRINT_DEBUG, "[Check%d] FAILED\n", i);
+
                 return status;
             }
             else
             {
                 if (server_hs == TRUE)
-                val_print(PRINT_DEBUG,"[Check%d] PASSED\n", i);
+                    val_print(PRINT_DEBUG, "[Check%d] PASSED\n", i);
             }
+
             i++;
         }
    }
@@ -165,7 +174,7 @@
        status = VAL_STATUS_SUCCESS;
        if (boot.state != BOOT_EXPECTED_S)
        {
-            val_print(PRINT_DEBUG,"[Check1] PASSED\n", 0);
+            val_print(PRINT_DEBUG, "[Check1] PASSED\n", 0);
        }
    }
    return status;
@@ -210,6 +219,11 @@
 
        /* Retrive secure client test status */
        status = val_get_secure_test_result(&handle);
+       if (IS_TEST_SKIP(status))
+       {
+            val_set_status(status);
+            return status;
+       }
        if (VAL_ERROR(status))
        {
            goto exit;
@@ -219,7 +233,7 @@
    else
    {
        /* If we are here means, we are in third run of this test */
-       val_print(PRINT_DEBUG,"[Check1] PASSED\n", 0);
+       val_print(PRINT_DEBUG, "[Check1] PASSED\n", 0);
        return VAL_STATUS_SUCCESS;
    }
 
@@ -245,7 +259,6 @@
     psa_status_t    status_of_call = PSA_SUCCESS;
 
     *handle = pal_ipc_connect(sid, 0);
-
     if (*handle < 0)
     {
         val_print(PRINT_ERROR, "Could not connect SID. Handle=%x\n", *handle);
@@ -257,13 +270,13 @@
     psa_invec data[1] = {{&test_data, sizeof(test_data)}};
 
     status_of_call = pal_ipc_call(*handle, data, 1, NULL, 0);
-
     if (status_of_call != PSA_SUCCESS)
     {
         status = VAL_STATUS_CALL_FAILED;
         val_print(PRINT_ERROR, "Call to dispatch SF failed. Status=%x\n", status_of_call);
         pal_ipc_close(*handle);
     }
+
     return status;
 }
 
@@ -328,6 +341,7 @@
             break;
 
         case TEST_SKIP:
+            state = TEST_SKIP;
             val_print(PRINT_ALWAYS, "TEST RESULT: SKIPPED (Skip Code=0x%x)\n", status);
             break;
 
@@ -429,6 +443,7 @@
                                   (uint32_t *)sizeof(miscellaneous_desc_t));
    if (VAL_ERROR(status))
    {
+       val_print(PRINT_ERROR, "val_target_get_config failed Error=0x%x\n", status);
        return;
    }
 
@@ -468,14 +483,19 @@
 
 void val_test_exit(void)
 {
-    val_wd_timer_disable();
+    val_status_t    status;
 
+    val_wd_timer_disable();
+    status = val_get_status();
     /* return if test skipped or failed */
-    if (IS_TEST_SKIP(val_get_status()) || IS_TEST_FAIL(val_get_status()))
+    if (IS_TEST_FAIL(status) || IS_TEST_SKIP(status))
     {
-       return;
+        return;
     }
-    val_set_status(RESULT_END(VAL_STATUS_SUCCESS));
+    else
+    {
+        val_set_status(RESULT_END(VAL_STATUS_SUCCESS));
+    }
 }
 
 /**
diff --git a/api-tests/val/nspe/val_interfaces.c b/api-tests/val/nspe/val_interfaces.c
index 36ad173..719f4b0 100644
--- a/api-tests/val/nspe/val_interfaces.c
+++ b/api-tests/val/nspe/val_interfaces.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,6 +21,9 @@
 #include "val_peripherals.h"
 #include "val_target.h"
 #include "val_crypto.h"
+#include "val_internal_trusted_storage.h"
+#include "val_protected_storage.h"
+#include "val_attestation.h"
 
 /*VAL APIs to be used by test */
 const val_api_t val_api = {
@@ -43,10 +46,13 @@
     .wd_timer_init             = val_wd_timer_init,
     .wd_timer_enable           = val_wd_timer_enable,
     .wd_timer_disable          = val_wd_timer_disable,
+    .wd_reprogram_timer        = val_wd_reprogram_timer,
     .set_boot_flag             = val_set_boot_flag,
     .get_boot_flag             = val_get_boot_flag,
     .crypto_function           = val_crypto_function,
-    .crypto_key_type_is_raw    = val_crypto_key_type_is_raw,
+    .its_function              = val_its_function,
+    .ps_function               = val_ps_function,
+    .attestation_function      = val_attestation_function,
 };
 
 const psa_api_t psa_api = {
diff --git a/api-tests/val/nspe/val_interfaces.h b/api-tests/val/nspe/val_interfaces.h
index ce9b3a1..b41aab1 100644
--- a/api-tests/val/nspe/val_interfaces.h
+++ b/api-tests/val/nspe/val_interfaces.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -50,10 +50,13 @@
     val_status_t     (*wd_timer_init)             (wd_timeout_type_t timeout_type);
     val_status_t     (*wd_timer_enable)           (void);
     val_status_t     (*wd_timer_disable)          (void);
+    val_status_t     (*wd_reprogram_timer)        (wd_timeout_type_t timeout_type);
     val_status_t     (*set_boot_flag)             (boot_state_t state);
     val_status_t     (*get_boot_flag)             (boot_state_t *state);
-    val_status_t     (*crypto_function)           (int type, ...);
-    int32_t          (*crypto_key_type_is_raw)    (uint32_t type);
+    int32_t          (*crypto_function)           (int type, ...);
+    uint32_t         (*its_function)              (int type, ...);
+    uint32_t         (*ps_function)               (int type, ...);
+    int32_t          (*attestation_function)      (int type, ...);
 } val_api_t;
 
 typedef struct {
@@ -66,7 +69,7 @@
                                               psa_outvec *out_vec,
                                               size_t out_len
                                               );
-    void     (*close)                 (psa_handle_t handle);
+    void             (*close)                 (psa_handle_t handle);
 } psa_api_t;
 
 typedef void (*test_fptr_t)(val_api_t *val, psa_api_t *psa);
@@ -77,7 +80,6 @@
 } val_test_info_t;
 
 #include "test_entry_fn_declare_list.inc"
-void test_entry(val_api_t *val, psa_api_t *psa);
-void test_payload(val_api_t *val, psa_api_t *psa);
 
+void test_entry(val_api_t *val, psa_api_t *psa);
 #endif
diff --git a/api-tests/val/nspe/val_internal_trusted_storage.c b/api-tests/val/nspe/val_internal_trusted_storage.c
new file mode 100644
index 0000000..e79e9c0
--- /dev/null
+++ b/api-tests/val/nspe/val_internal_trusted_storage.c
@@ -0,0 +1,39 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_target.h"
+#include "pal_interfaces_ns.h"
+#include "val_framework.h"
+#include "val_client_defs.h"
+#include "val_internal_trusted_storage.h"
+
+/**
+    @brief    - This API will call the requested internal trusted storage function
+    @param    - type : function code
+                ...  : variable number of arguments
+    @return   - Error status
+**/
+uint32_t val_its_function(int type, ...)
+{
+    va_list      valist;
+    uint32_t status;
+
+    va_start(valist, type);
+    status = pal_its_function(type, valist);
+    va_end(valist);
+    return status;
+}
diff --git a/api-tests/val/nspe/val_internal_trusted_storage.h b/api-tests/val/nspe/val_internal_trusted_storage.h
new file mode 100644
index 0000000..e74a701
--- /dev/null
+++ b/api-tests/val/nspe/val_internal_trusted_storage.h
@@ -0,0 +1,35 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#ifndef _VAL_INTERNAL_TRUSTED_STORAGE_H_
+#define _VAL_INTERNAL_TRUSTED_STORAGE_H_
+
+#include "val.h"
+
+#define UID_BASE_VALUE  0
+#define UID_MAX_VALUE  15
+#define BYTES_TO_BITS(byte)             (byte * 8)
+
+enum its_function_code {
+    VAL_ITS_SET                         = 0x1,
+    VAL_ITS_GET                         = 0x2,
+    VAL_ITS_GET_INFO                    = 0x3,
+    VAL_ITS_REMOVE                      = 0x4,
+};
+
+uint32_t val_its_function(int type, ...);
+#endif /* _VAL_INTERNAL_TRUSTED_STORAGE_H_ */
diff --git a/api-tests/val/nspe/val_peripherals.c b/api-tests/val/nspe/val_peripherals.c
index 1ac33c6..9f153e0 100644
--- a/api-tests/val/nspe/val_peripherals.c
+++ b/api-tests/val/nspe/val_peripherals.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -100,7 +100,11 @@
         return status;
    }
 
-   if (timeout_type == WD_LOW_TIMEOUT)
+   if (timeout_type == WD_CRYPTO_TIMEOUT)
+   {
+       time_us =  soc_per_desc->timeout_in_micro_sec_crypto;
+   }
+   else if (timeout_type == WD_LOW_TIMEOUT)
    {
        time_us =  soc_per_desc->timeout_in_micro_sec_low;
    }
@@ -162,6 +166,31 @@
    return pal_wd_timer_disable_ns(soc_per_desc->base);
 }
 
+val_status_t val_wd_reprogram_timer(wd_timeout_type_t timeout_type)
+{
+    val_status_t    status = VAL_STATUS_SUCCESS;
+
+    /* Disable watchdog Timer */
+    val_wd_timer_disable();
+
+    /* Initialise watchdog */
+    status = val_wd_timer_init(timeout_type);
+    if (VAL_ERROR(status))
+    {
+        return status;
+    }
+
+    /* Enable watchdog Timer */
+    status = val_wd_timer_enable();
+    if (VAL_ERROR(status))
+    {
+        return status;
+    }
+
+    return status;
+}
+
+
 /*
     @brief     - Reads 'size' bytes from Non-volatile memory at a given. This is client interface
                 API of secure partition val_nvmem_read_sf API for nspe world.
diff --git a/api-tests/val/nspe/val_peripherals.h b/api-tests/val/nspe/val_peripherals.h
index 86147c1..dfea143 100644
--- a/api-tests/val/nspe/val_peripherals.h
+++ b/api-tests/val/nspe/val_peripherals.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,4 +28,5 @@
 val_status_t val_wd_timer_init(wd_timeout_type_t timeout_type);
 val_status_t val_wd_timer_enable(void);
 val_status_t val_wd_timer_disable(void);
+val_status_t val_wd_reprogram_timer(wd_timeout_type_t timeout_type);
 #endif
diff --git a/api-tests/val/nspe/val_protected_storage.c b/api-tests/val/nspe/val_protected_storage.c
new file mode 100644
index 0000000..06c1f50
--- /dev/null
+++ b/api-tests/val/nspe/val_protected_storage.c
@@ -0,0 +1,39 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#include "val_target.h"
+#include "pal_interfaces_ns.h"
+#include "val_framework.h"
+#include "val_client_defs.h"
+#include "val_protected_storage.h"
+
+/**
+    @brief    - This API will call the requested protected storage function
+    @param    - type : function code
+                ...  : variable number of arguments
+    @return   - Error status
+**/
+uint32_t val_ps_function(int type, ...)
+{
+    va_list      valist;
+    uint32_t status;
+
+    va_start(valist, type);
+    status = pal_ps_function(type, valist);
+    va_end(valist);
+    return status;
+}
diff --git a/api-tests/val/nspe/val_protected_storage.h b/api-tests/val/nspe/val_protected_storage.h
new file mode 100644
index 0000000..5d2df21
--- /dev/null
+++ b/api-tests/val/nspe/val_protected_storage.h
@@ -0,0 +1,37 @@
+/** @file
+ * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved.
+ * SPDX-License-Identifier : Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+**/
+
+#ifndef _VAL_PROTECTED_STORAGE_H_
+#define _VAL_PROTECTED_STORAGE_H_
+
+#include "val.h"
+
+#define UID_BASE_VALUE  0
+#define UID_MAX_VALUE  15
+#define BYTES_TO_BITS(byte)             (byte * 8)
+
+enum ps_function_code {
+    VAL_PS_SET                          = 0x1,
+    VAL_PS_GET                          = 0x2,
+    VAL_PS_GET_INFO                     = 0x3,
+    VAL_PS_REMOVE                       = 0x4,
+    VAL_PS_CREATE                       = 0x5,
+    VAL_PS_SET_EXTENDED                 = 0x6,
+};
+
+uint32_t val_ps_function(int type, ...);
+#endif /* _VAL_PROTECTED_STORAGE_H_ */
diff --git a/api-tests/val/spe/val_driver_service_apis.c b/api-tests/val/spe/val_driver_service_apis.c
index b29de14..46a3162 100644
--- a/api-tests/val/spe/val_driver_service_apis.c
+++ b/api-tests/val/spe/val_driver_service_apis.c
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,8 +17,10 @@
 
 
 #include "val_driver_service_apis.h"
+#include "val/common/val_target.c"
 
 print_verbosity_t  g_print_level = PRINT_INFO;
+static int is_uart_init_done = 0;
 
 /* UART APIs */
 /*
@@ -30,6 +32,7 @@
 val_status_t val_uart_init_sf(addr_t uart_base_addr)
 {
     pal_uart_init(uart_base_addr);
+    is_uart_init_done = 1;
     return VAL_STATUS_SUCCESS;
 }
 /*
@@ -41,7 +44,11 @@
  */
 val_status_t val_print_sf(char *string, uint32_t data)
 {
-    pal_print(string, data);
+    if (is_uart_init_done == 1)
+    {
+        /* Do not print until uart_init is complete */
+        pal_print(string, data);
+    }
     return VAL_STATUS_SUCCESS;
 }
 
@@ -133,3 +140,62 @@
         return VAL_STATUS_ERROR;
     }
 }
+
+/**
+    @brief    - This function sets the given boot.state value to corresponding
+                boot NVMEM location
+    @param    - state: boot_state_t
+    @return   - val_status_t
+**/
+val_status_t val_driver_private_set_boot_flag_fn(boot_state_t state)
+{
+   boot_t           boot;
+   val_status_t     status;
+   memory_desc_t   *memory_desc;
+
+   status = val_target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_NVMEM, 0),
+                                  (uint8_t **)&memory_desc,
+                                  (uint32_t *)sizeof(memory_desc_t));
+
+   if (VAL_ERROR(status))
+   {
+        return status;
+   }
+
+   boot.state = state;
+   status = val_nvmem_write_sf(memory_desc->start,
+                               VAL_NVMEM_OFFSET(NV_BOOT),
+                               &boot,
+                               sizeof(boot_t));
+   if (VAL_ERROR(status))
+   {
+       val_print_sf("val_nvmem_write_sf failed Error=0x%x\n", status);
+       return status;
+   }
+   return status;
+}
+
+/**
+    @brief    - This function initialises the driver reserved mmio region
+    @param    - void
+    @return   - val_status_t
+**/
+val_status_t val_init_driver_memory(void)
+{
+   val_status_t     status;
+   memory_desc_t   *memory_desc;
+
+   status = val_target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY,
+                                  MEMORY_DRIVER_PARTITION_MMIO, 0),
+                                  (uint8_t **)&memory_desc,
+                                  (uint32_t *)sizeof(memory_desc_t));
+   if (VAL_ERROR(status))
+   {
+        return status;
+   }
+
+   /* Init driver mmio space to 0 to avoid uninit access */
+   memset((uint32_t *)memory_desc->start, 0, (memory_desc->end - memory_desc->start + 1));
+
+   return VAL_STATUS_SUCCESS;
+}
diff --git a/api-tests/val/spe/val_driver_service_apis.h b/api-tests/val/spe/val_driver_service_apis.h
index a045d57..9614e35 100644
--- a/api-tests/val/spe/val_driver_service_apis.h
+++ b/api-tests/val/spe/val_driver_service_apis.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,8 +18,8 @@
 #ifndef _VAL_DRIVER_PARTITION_APIS_H_
 #define _VAL_DRIVER_PARTITION_APIS_H_
 
-#include "val/common/val.h"
-#include "val/common/val_client_defs.h"
+#include "val.h"
+#include "val_client_defs.h"
 #include "val_service_defs.h"
 #include "pal_interfaces_s.h"
 
@@ -30,6 +30,8 @@
  */
 #include "psa_manifest/driver_partition_psa.h"
 
+#define USE_RAW_PRINT_FOR_DRIVER_PARTITION 1
+
 val_status_t val_uart_init_sf(addr_t uart_base_addr);
 val_status_t val_print_sf(char *string, uint32_t data);
 val_status_t val_wd_timer_init_sf(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us);
@@ -38,4 +40,6 @@
 val_status_t val_is_wd_timer_enabled_sf(addr_t base_addr);
 val_status_t val_nvmem_read_sf(addr_t base, uint32_t offset, void *buffer, int size);
 val_status_t val_nvmem_write_sf(addr_t base, uint32_t offset, void *buffer, int size);
+val_status_t val_driver_private_set_boot_flag_fn(boot_state_t state);
+val_status_t val_init_driver_memory(void);
 #endif
diff --git a/api-tests/val/spe/val_partition_common.h b/api-tests/val/spe/val_partition_common.h
index 7648116..df36402 100644
--- a/api-tests/val/spe/val_partition_common.h
+++ b/api-tests/val/spe/val_partition_common.h
@@ -1,5 +1,5 @@
 /** @file
- * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved.
  * SPDX-License-Identifier : Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,8 +26,8 @@
 #ifndef _VAL_COMMON_SP_APIS_H_
 #define _VAL_COMMON_SP_APIS_H_
 
-#include "val/common/val.h"
-#include "val/common/val_target.c"
+#include "val.h"
+#include "val_target.c"
 #include "val_service_defs.h"
 
 /* "psa_manifest/<manifestfilename>.h" Manifest definitions. Only accessible to Secure Partition.
@@ -206,7 +206,7 @@
 
         if ((msg->type != PSA_IPC_CONNECT) || (msg->handle <= 0))
         {
-            val_print(PRINT_ERROR, "\npsa_get failed for PSA_IPC_CONNECT", 0);
+            val_print(PRINT_ERROR, "\tpsa_get failed for PSA_IPC_CONNECT\n", 0);
             res = VAL_STATUS_ERROR;
         }
         else
@@ -216,7 +216,7 @@
     }
     else
     {
-        val_print(PRINT_ERROR, "\npsa_wait returned with invalid signal value = 0x%x", signals);
+        val_print(PRINT_ERROR, "\tpsa_wait returned with invalid signal value = 0x%x\n", signals);
         res = VAL_STATUS_ERROR;
     }
     return res;
@@ -244,7 +244,7 @@
 
         if ((msg->type != PSA_IPC_CALL) || (msg->handle <= 0))
         {
-            val_print(PRINT_ERROR, "\npsa_get failed for PSA_IPC_CALL", 0);
+            val_print(PRINT_ERROR, "\tpsa_get failed for PSA_IPC_CALL\n", 0);
             res = VAL_STATUS_ERROR;
         }
         else
@@ -254,7 +254,7 @@
     }
     else
     {
-        val_print(PRINT_ERROR, "\npsa_wait returned with invalid signal value = 0x%x", signals);
+        val_print(PRINT_ERROR, "\tpsa_wait returned with invalid signal value = 0x%x\n", signals);
         res = VAL_STATUS_ERROR;
     }
     return res;
@@ -282,7 +282,7 @@
 
         if ((msg->type != PSA_IPC_DISCONNECT) || (msg->handle <= 0))
         {
-            val_print(PRINT_ERROR, "\npsa_get failed for PSA_IPC_DISCONNECT", 0);
+            val_print(PRINT_ERROR, "\tpsa_get failed for PSA_IPC_DISCONNECT\n", 0);
             res = VAL_STATUS_ERROR;
         }
         else
@@ -292,7 +292,7 @@
     }
     else
     {
-        val_print(PRINT_ERROR, "\npsa_wait returned with invalid signal value = 0x%x", signals);
+        val_print(PRINT_ERROR, "\tpsa_wait returned with invalid signal value = 0x%x\n", signals);
         res = VAL_STATUS_ERROR;
     }
     return res;
@@ -314,7 +314,7 @@
     test_info_t           test_info;
 
     test_info.test_num = test_num;
-    val_print(PRINT_TEST, "[Info] Executing tests form secure\n", 0);
+    val_print(PRINT_TEST, "[Info] Executing tests from secure\n", 0);
 
     while (tests_list[i] != NULL)
     {
@@ -339,9 +339,14 @@
         status = val_get_secure_test_result(&handle);
 
         status = test_status ? test_status:status;
+        if (IS_TEST_SKIP(status))
+        {
+            val_print(PRINT_DEBUG, "[Check%d] SKIPPED\n", i);
+            return status;
+        }
         if (VAL_ERROR(status))
         {
-            val_print(PRINT_ERROR,"[Check%d] FAILED\n", i);
+            val_print(PRINT_DEBUG,"[Check%d] FAILED\n", i);
             return status;
         }
         else
