diff --git a/interface/include/tfm_initial_attestation_veneers.h b/interface/include/tfm_initial_attestation_veneers.h
deleted file mode 100644
index 502ab3e..0000000
--- a/interface/include/tfm_initial_attestation_veneers.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2018, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#ifndef __TFM_INITIAL_ATTESTATION_VENEERS_H__
-#define __TFM_INITIAL_ATTESTATION_VENEERS_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "psa_client.h"
-
-/**
- * \brief Get initial attestation token
- *
- * \param[in]     in_vec     Pointer to in_vec array, which contains input data
- *                           to attestation service
- * \param[in]     num_invec  Number of elements in in_vec array
- * \param[in/out] out_vec    Pointer out_vec array, which contains output data
- *                           to attestation service
- * \param[in]     num_outvec Number of elements in out_vec array
- *
- * \return Returns error code as specified in \ref psa_attest_err_t
- */
-enum psa_attest_err_t
-tfm_attest_veneer_get_token(const psa_invec  *in_vec,  uint32_t num_invec,
-                                  psa_outvec *out_vec, uint32_t num_outvec);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __TFM_INITIAL_ATTESTATION_VENEERS_H__ */
diff --git a/interface/include/tfm_veneers.h b/interface/include/tfm_veneers.h
index 1e03e08..c238b35 100644
--- a/interface/include/tfm_veneers.h
+++ b/interface/include/tfm_veneers.h
@@ -52,6 +52,7 @@
 
 /******** TFM_SP_INITIAL_ATTESTATION ********/
 psa_status_t tfm_initial_attest_get_token_veneer(struct psa_invec *in_vec, size_t in_len, struct psa_outvec *out_vec, size_t out_len);
+psa_status_t tfm_initial_attest_get_token_size_veneer(struct psa_invec *in_vec, size_t in_len, struct psa_outvec *out_vec, size_t out_len);
 
 #ifdef TFM_PARTITION_TEST_CORE
 /******** TFM_SP_CORE_TEST ********/
diff --git a/interface/src/tfm_initial_attestation_api.c b/interface/src/tfm_initial_attestation_api.c
index b935f34..ae58701 100644
--- a/interface/src/tfm_initial_attestation_api.c
+++ b/interface/src/tfm_initial_attestation_api.c
@@ -1,12 +1,12 @@
 /*
- * Copyright (c) 2018, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
  */
 
 #include "psa_initial_attestation_api.h"
-#include "tfm_initial_attestation_veneers.h"
+#include "tfm_veneers.h"
 #include "tfm_ns_lock.h"
 #include "psa_client.h"
 
@@ -18,6 +18,7 @@
 {
     psa_invec  in_vec[1];
     psa_outvec out_vec[1];
+    uint32_t res;
 
     in_vec[0].base = challenge_obj;
     in_vec[0].len  = challenge_size;
@@ -25,7 +26,30 @@
     out_vec[0].base = token;
     out_vec[0].len  = *token_size;
 
-    return tfm_ns_lock_dispatch((veneer_fn)tfm_attest_veneer_get_token,
+    res = tfm_ns_lock_dispatch((veneer_fn)tfm_initial_attest_get_token_veneer,
+                                (uint32_t)in_vec,  1,
+                                (uint32_t)out_vec, 1);
+
+    *token_size = out_vec[0].len;
+
+    return res;
+}
+
+enum psa_attest_err_t
+psa_initial_attest_get_token_size(uint32_t  challenge_size,
+                                  uint32_t *token_size)
+{
+    psa_invec  in_vec[1];
+    psa_outvec out_vec[1];
+
+    in_vec[0].base = &challenge_size;
+    in_vec[0].len  = sizeof(uint32_t);
+
+    out_vec[0].base = token_size;
+    out_vec[0].len  = sizeof(uint32_t);
+
+    return tfm_ns_lock_dispatch((veneer_fn) \
+                                tfm_initial_attest_get_token_size_veneer,
                                 (uint32_t)in_vec,  1,
                                 (uint32_t)out_vec, 1);
 }
diff --git a/secure_fw/ns_callable/CMakeLists.inc b/secure_fw/ns_callable/CMakeLists.inc
index 80561db..a09ff13 100644
--- a/secure_fw/ns_callable/CMakeLists.inc
+++ b/secure_fw/ns_callable/CMakeLists.inc
@@ -1,5 +1,5 @@
 #-------------------------------------------------------------------------------
-# Copyright (c) 2017-2018, Arm Limited. All rights reserved.
+# Copyright (c) 2017-2019, Arm Limited. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -27,8 +27,7 @@
                           "${CMAKE_CURRENT_LIST_DIR}/tfm_sst_veneers.c"
                           "${CMAKE_CURRENT_LIST_DIR}/tfm_audit_veneers.c"
                           "${CMAKE_CURRENT_LIST_DIR}/tfm_crypto_veneers.c"
-                          "${CMAKE_CURRENT_LIST_DIR}/tfm_platform_veneers.c"
-                          "${CMAKE_CURRENT_LIST_DIR}/tfm_initial_attestation_veneers.c")
+                          "${CMAKE_CURRENT_LIST_DIR}/tfm_platform_veneers.c")
 
 #Append all our source files to global lists.
 list(APPEND ALL_SRC_C ${SS_NS_CALLABLE_C_SRC})
diff --git a/secure_fw/ns_callable/tfm_initial_attestation_veneers.c b/secure_fw/ns_callable/tfm_initial_attestation_veneers.c
deleted file mode 100644
index df154d4..0000000
--- a/secure_fw/ns_callable/tfm_initial_attestation_veneers.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2018, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#include "tfm_initial_attestation_veneers.h"
-#include "secure_fw/services/initial_attestation/attestation.h"
-#include "tfm_secure_api.h"
-#include "tfm_api.h"
-#include "spm_partition_defs.h"
-#include "psa_client.h"
-
-__tfm_secure_gateway_attributes__
-enum psa_attest_err_t
-tfm_attest_veneer_get_token(const psa_invec  *in_vec,  uint32_t num_invec,
-                                  psa_outvec *out_vec, uint32_t num_outvec)
-{
-    TFM_CORE_SFN_REQUEST(TFM_SP_INITIAL_ATTESTATION_ID,
-                         initial_attest_get_token,
-                         in_vec,  num_invec,
-                         out_vec, num_outvec);
-}
diff --git a/secure_fw/ns_callable/tfm_veneers.c b/secure_fw/ns_callable/tfm_veneers.c
index c87fe30..ed69b94 100644
--- a/secure_fw/ns_callable/tfm_veneers.c
+++ b/secure_fw/ns_callable/tfm_veneers.c
@@ -47,6 +47,7 @@
 
 /******** TFM_SP_INITIAL_ATTESTATION ********/
 psa_status_t initial_attest_get_token(struct psa_invec *, size_t, struct psa_outvec *, size_t);
+psa_status_t initial_attest_get_token_size(struct psa_invec *, size_t, struct psa_outvec *, size_t);
 
 #ifdef TFM_PARTITION_TEST_CORE
 /******** TFM_SP_CORE_TEST ********/
@@ -117,6 +118,7 @@
 
 /******** TFM_SP_INITIAL_ATTESTATION ********/
 TFM_VENEER_FUNCTION(TFM_SP_INITIAL_ATTESTATION, initial_attest_get_token)
+TFM_VENEER_FUNCTION(TFM_SP_INITIAL_ATTESTATION, initial_attest_get_token_size)
 
 #ifdef TFM_PARTITION_TEST_CORE
 /******** TFM_SP_CORE_TEST ********/
diff --git a/secure_fw/services/initial_attestation/attestation.h b/secure_fw/services/initial_attestation/attestation.h
index 10c5a92..78b74ac 100644
--- a/secure_fw/services/initial_attestation/attestation.h
+++ b/secure_fw/services/initial_attestation/attestation.h
@@ -49,7 +49,21 @@
 initial_attest_get_token(const psa_invec  *in_vec,  uint32_t num_invec,
                                psa_outvec *out_vec, uint32_t num_outvec);
 
-
+/**
+ * \brief Get the size of the initial attestation token
+ *
+ * \param[in]     in_vec     Pointer to in_vec array, which contains input data
+ *                           to attestation service
+ * \param[in]     num_invec  Number of elements in in_vec array
+ * \param[out]    out_vec    Pointer to out_vec array, which contains pointer
+ *                           where to store the output data
+ * \param[in]     num_outvec Number of elements in out_vec array
+ *
+ * \return Returns error code as specified in \ref psa_attest_err_t
+ */
+enum psa_attest_err_t
+initial_attest_get_token_size(const psa_invec  *in_vec,  uint32_t num_invec,
+                                    psa_outvec *out_vec, uint32_t num_outvec);
 #ifdef __cplusplus
 }
 #endif
diff --git a/secure_fw/services/initial_attestation/attestation_core.c b/secure_fw/services/initial_attestation/attestation_core.c
index 3d33543..fe75674 100644
--- a/secure_fw/services/initial_attestation/attestation_core.c
+++ b/secure_fw/services/initial_attestation/attestation_core.c
@@ -594,3 +594,19 @@
 error:
     return attest_err;
 }
+
+/* Initial implementation, just returns with hard coded value */
+enum psa_attest_err_t
+initial_attest_get_token_size(const psa_invec  *in_vec,  uint32_t num_invec,
+                                    psa_outvec *out_vec, uint32_t num_outvec)
+{
+    uint32_t *token_buf_size = (uint32_t *)out_vec[0].base;
+
+    if (out_vec[0].len < sizeof(uint32_t)) {
+        return PSA_ATTEST_ERR_INVALID_INPUT;
+    }
+
+    *token_buf_size = PSA_INITIAL_ATTEST_TOKEN_SIZE;
+
+    return PSA_ATTEST_ERR_SUCCESS;
+}
diff --git a/secure_fw/services/initial_attestation/manifest.yaml b/secure_fw/services/initial_attestation/manifest.yaml
index bd9889b..b3cf73d 100644
--- a/secure_fw/services/initial_attestation/manifest.yaml
+++ b/secure_fw/services/initial_attestation/manifest.yaml
@@ -1,5 +1,5 @@
 #-------------------------------------------------------------------------------
-# Copyright (c) 2018, Arm Limited. All rights reserved.
+# Copyright (c) 2018-2019, Arm Limited. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -24,6 +24,14 @@
       "non_secure_clients": true,
       "minor_version": 1,
       "minor_policy": "strict"
+    },
+    {
+      "sfid": "TFM_ATTEST_GET_TOKEN_SIZE_SFID",
+      "signal": "TFM_ATTEST_GET_TOKEN_SIZE",
+      "tfm_symbol": "initial_attest_get_token_size",
+      "non_secure_clients": true,
+      "minor_version": 1,
+      "minor_policy": "strict"
     }
   ],
   "source_files": [
diff --git a/secure_fw/services/initial_attestation/tfm_attestation_secure_api.c b/secure_fw/services/initial_attestation/tfm_attestation_secure_api.c
index 0943de0..4b71974 100644
--- a/secure_fw/services/initial_attestation/tfm_attestation_secure_api.c
+++ b/secure_fw/services/initial_attestation/tfm_attestation_secure_api.c
@@ -1,12 +1,12 @@
 /*
- * Copyright (c) 2018, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
  */
 
 #include "psa_initial_attestation_api.h"
-#include "tfm_initial_attestation_veneers.h"
+#include "tfm_veneers.h"
 #include "secure_utilities.h"
 #include "psa_client.h"
 #include "tfm_secure_api.h"
@@ -57,7 +57,7 @@
     out_vec[0].base = token_buff;
     out_vec[0].len  = *token_size;
 
-    err = tfm_attest_veneer_get_token(in_vec, 1, out_vec, 1);
+    err = tfm_initial_attest_get_token_veneer(in_vec, 1, out_vec, 1);
     if (err != PSA_ATTEST_ERR_SUCCESS) {
         return err;
     }
@@ -68,3 +68,43 @@
 
     return err;
 }
+
+__attribute__((section("SFN")))
+enum psa_attest_err_t
+psa_initial_attest_get_token_size(uint32_t  challenge_size,
+                                  uint32_t *token_size)
+{
+    enum psa_attest_err_t err;
+    struct paramters_t {
+        psa_invec in_vec;
+        uint32_t challenge_size;
+        psa_outvec out_vec;
+        uint32_t token_size;
+    };
+
+    if (tfm_core_set_buffer_area(TFM_BUFFER_SHARE_SCRATCH) != TFM_SUCCESS) {
+        return PSA_ATTEST_ERR_GENERAL;
+    }
+
+    struct paramters_t *param = (struct paramters_t *)tfm_scratch_area;
+    /*
+     * Scratch area layout
+     * ------------------------------------------------------
+     * |in_vec[0] | challenge_size | out_vec[0] | token_size|
+     * ------------------------------------------------------
+     */
+    param->challenge_size = challenge_size;
+    param->in_vec.base  = &param->challenge_size;
+    param->in_vec.len   = sizeof(uint32_t);
+    param->out_vec.base = &param->token_size;
+    param->out_vec.len  = sizeof(uint32_t);
+
+    err = tfm_initial_attest_get_token_size_veneer(&param->in_vec,  1,
+                                                   &param->out_vec, 1);
+    if (err != PSA_ATTEST_ERR_SUCCESS) {
+        return err;
+    }
+    *token_size = param->token_size;
+
+    return err;
+}
diff --git a/secure_fw/services/tfm_sfid_list.inc b/secure_fw/services/tfm_sfid_list.inc
index 4cc6b0a..8f833bf 100644
--- a/secure_fw/services/tfm_sfid_list.inc
+++ b/secure_fw/services/tfm_sfid_list.inc
@@ -62,6 +62,7 @@
 
     /******** TFM_SP_INITIAL_ATTESTATION ********/
     {initial_attest_get_token, TFM_ATTEST_GET_TOKEN_SFID},
+    {initial_attest_get_token_size, TFM_ATTEST_GET_TOKEN_SIZE_SFID},
 
 #ifdef TFM_PARTITION_TEST_CORE
     /******** TFM_SP_CORE_TEST ********/
diff --git a/test/suites/attestation/non_secure/attestation_ns_interface_testsuite.c b/test/suites/attestation/non_secure/attestation_ns_interface_testsuite.c
index 69ac958..1615327 100644
--- a/test/suites/attestation/non_secure/attestation_ns_interface_testsuite.c
+++ b/test/suites/attestation/non_secure/attestation_ns_interface_testsuite.c
@@ -138,7 +138,7 @@
 static void tfm_attest_test_1001(struct test_result_t *ret)
 {
     enum psa_attest_err_t err;
-    uint32_t token_size = TEST_TOKEN_SIZE;
+    uint32_t token_size;
     uint8_t boot_seed_buffer[BOOT_SEED_SIZE];
     uint8_t *tlv_data_ptr;
     int32_t caller_id;
@@ -146,6 +146,19 @@
 
     generate_challenge(TEST_CHALLENGE_OBJ_SIZE, challenge_buffer);
 
+    /* Get attestation token size */
+    err = psa_initial_attest_get_token_size(TEST_CHALLENGE_OBJ_SIZE,
+                                            &token_size);
+    if (err != PSA_ATTEST_ERR_SUCCESS) {
+        TEST_FAIL("Get token size failed");
+        return;
+    }
+
+    if (token_size != PSA_INITIAL_ATTEST_TOKEN_SIZE) {
+        TEST_FAIL("Token size is faulty");
+        return;
+    }
+
     /* Get attestation token */
     err = psa_initial_attest_get_token(challenge_buffer,
                                        TEST_CHALLENGE_OBJ_SIZE,
diff --git a/test/suites/attestation/secure/attestation_s_interface_testsuite.c b/test/suites/attestation/secure/attestation_s_interface_testsuite.c
index a0004c0..2a6f906 100644
--- a/test/suites/attestation/secure/attestation_s_interface_testsuite.c
+++ b/test/suites/attestation/secure/attestation_s_interface_testsuite.c
@@ -174,12 +174,25 @@
 static void tfm_attest_test_1001(struct test_result_t *ret)
 {
     enum psa_attest_err_t err;
-    uint32_t token_size = TEST_TOKEN_SIZE;
+    uint32_t token_size;
     uint8_t boot_seed_buffer[BOOT_SEED_SIZE];
     uint8_t *tlv_data_ptr;
     int32_t caller_id;
     uint32_t res;
 
+    /* Get attestation token size */
+    err = psa_initial_attest_get_token_size(TEST_CHALLENGE_OBJ_SIZE,
+                                            &token_size);
+    if (err != PSA_ATTEST_ERR_SUCCESS) {
+        TEST_FAIL("Get token size failed");
+        return;
+    }
+
+    if (token_size != PSA_INITIAL_ATTEST_TOKEN_SIZE) {
+        TEST_FAIL("Token size is faulty");
+        return;
+    }
+
     /* Get attestation token
      * FixMe: Hard coded challenge is used, because currently there is no
      *        support for random source(RNG, rand(), etc.) on secure side.
