Attest: Align interface to PSA API 1.0

Change the arguments to psa_initial_attest_get_token and
psa_initial_attest_get_token_size as per the PSA 1.0 spec. Update
documentation for new function signature.

Change-Id: Ied6a0bea9ab4a404c147db286584a0873f1a3bf3
Signed-off-by: Raef Coles <raef.coles@arm.com>
diff --git a/docs/user_guides/services/tfm_attestation_integration_guide.rst b/docs/user_guides/services/tfm_attestation_integration_guide.rst
index cae3d2e..68a6736 100644
--- a/docs/user_guides/services/tfm_attestation_integration_guide.rst
+++ b/docs/user_guides/services/tfm_attestation_integration_guide.rst
@@ -197,14 +197,15 @@
 .. code-block:: c
 
     psa_status_t
-    psa_initial_attest_get_token(const uint8_t *challenge_obj,
-        uint32_t challenge_size,
-        uint8_t  *token,
-        uint32_t *token_size);
+    psa_initial_attest_get_token(const uint8_t *auth_challenge,
+                                 size_t         challenge_size,
+                                 uint8_t       *token_buf,
+                                 size_t         token_buf_size,
+                                 size_t        *token_size);
 
     psa_status_t
-    psa_initial_attest_get_token_size(uint32_t challenge_size,
-        uint32_t *token_size);
+    psa_initial_attest_get_token_size(size_t challenge_size,
+                                      size_t *token_size);
 
     psa_status_t
     tfm_initial_attest_get_public_key(uint8_t         *public_key,
diff --git a/interface/include/psa/initial_attestation.h b/interface/include/psa/initial_attestation.h
index aa4a414..c125a4d 100644
--- a/interface/include/psa/initial_attestation.h
+++ b/interface/include/psa/initial_attestation.h
@@ -27,7 +27,7 @@
 /**
  * \brief PSA INITIAL ATTESTATION API version
  *
- * Initial attestation API version is: 1.0-beta-0
+ * Initial attestation API version is: 1.0.0
  */
 #define PSA_INITIAL_ATTEST_API_VERSION_MAJOR (1)
 #define PSA_INITIAL_ATTEST_API_VERSION_MINOR (0)
@@ -42,6 +42,13 @@
 #define PSA_INITIAL_ATTEST_CHALLENGE_SIZE_64  (64u)
 
 /**
+ * The maximum size of an attestation token that can be generated by the
+ * attestation service. Used to configure buffers for services that verify the
+ * produced tokens.
+ */
+#define PSA_INITIAL_ATTEST_MAX_TOKEN_SIZE (0x400)
+
+/**
  * The list of fixed claims in the initial attestation token is still evolving,
  * you can expect slight changes in the future.
  *
@@ -156,25 +163,26 @@
 /**
  * \brief Get initial attestation token
  *
- * \param[in]     challenge_obj   Pointer to buffer where challenge input is
+ * \param[in]     auth_challenge  Pointer to buffer where challenge input is
  *                                stored. Nonce and / or hash of attested data.
  *                                Must be always
  *                                \ref PSA_INITIAL_ATTEST_TOKEN_SIZE bytes
  *                                long.
  * \param[in]     challenge_size  Size of challenge object in bytes.
- * \param[out]    token           Pointer to the buffer where attestation token
- *                                must be stored.
- * \param[in,out] token_size      Size of allocated buffer for token, which
- *                                updated by initial attestation service with
- *                                final token size.
+ * \param[out]    token_buf       Pointer to the buffer where attestation token
+ *                                will be stored.
+ * \param[in]     token_buf_size  Size of allocated buffer for token, in bytes.
+ * \param[out]    token_size      Size of the token that has been returned, in
+ *                                bytes.
  *
  * \return Returns error code as specified in \ref psa_status_t
  */
 psa_status_t
-psa_initial_attest_get_token(const uint8_t *challenge_obj,
-                             uint32_t       challenge_size,
-                             uint8_t       *token,
-                             uint32_t      *token_size);
+psa_initial_attest_get_token(const uint8_t *auth_challenge,
+                             size_t         challenge_size,
+                             uint8_t       *token_buf,
+                             size_t         token_buf_size,
+                             size_t        *token_size);
 
 /**
  * \brief Get the exact size of initial attestation token in bytes.
@@ -182,15 +190,16 @@
  * It just returns with the size of the IAT token. It can be used if the caller
  * dynamically allocates memory for the token buffer.
  *
- * \param[in]   challenge_size  Size of challenge object in bytes.
+ * \param[in]   challenge_size  Size of challenge object in bytes. This must be
+ *                              a supported challenge size (as above).
  * \param[out]  token_size      Size of the token in bytes, which is created by
  *                              initial attestation service.
  *
  * \return Returns error code as specified in \ref psa_status_t
  */
 psa_status_t
-psa_initial_attest_get_token_size(uint32_t  challenge_size,
-                                  uint32_t *token_size);
+psa_initial_attest_get_token_size(size_t  challenge_size,
+                                  size_t *token_size);
 
 /**
  * \brief Get the initial attestation public key.
diff --git a/interface/src/tfm_initial_attestation_func_api.c b/interface/src/tfm_initial_attestation_func_api.c
index cf82498..7723d6a 100644
--- a/interface/src/tfm_initial_attestation_func_api.c
+++ b/interface/src/tfm_initial_attestation_func_api.c
@@ -14,19 +14,20 @@
 #define IOVEC_LEN(x) (sizeof(x)/sizeof(x[0]))
 
 psa_status_t
-psa_initial_attest_get_token(const uint8_t *challenge_obj,
-                             uint32_t       challenge_size,
-                             uint8_t       *token,
-                             uint32_t      *token_size)
+psa_initial_attest_get_token(const uint8_t *auth_challenge,
+                             size_t         challenge_size,
+                             uint8_t       *token_buf,
+                             size_t         token_buf_size,
+                             size_t        *token_size)
 {
 
     int32_t res;
 
     psa_invec in_vec[] = {
-        {challenge_obj, challenge_size}
+        {auth_challenge, challenge_size}
     };
     psa_outvec out_vec[] = {
-        {token, *token_size}
+        {token_buf, token_buf_size}
     };
 
     res = tfm_ns_interface_dispatch(
@@ -42,14 +43,14 @@
 }
 
 psa_status_t
-psa_initial_attest_get_token_size(uint32_t  challenge_size,
-                                  uint32_t *token_size)
+psa_initial_attest_get_token_size(size_t  challenge_size,
+                                  size_t *token_size)
 {
     psa_invec in_vec[] = {
         {&challenge_size, sizeof(challenge_size)}
     };
     psa_outvec out_vec[] = {
-        {token_size, sizeof(uint32_t)}
+        {token_size, sizeof(size_t)}
     };
 
     return tfm_ns_interface_dispatch(
diff --git a/interface/src/tfm_initial_attestation_ipc_api.c b/interface/src/tfm_initial_attestation_ipc_api.c
index c60f8bd..337acbe 100644
--- a/interface/src/tfm_initial_attestation_ipc_api.c
+++ b/interface/src/tfm_initial_attestation_ipc_api.c
@@ -15,19 +15,20 @@
 #define IOVEC_LEN(x) (sizeof(x)/sizeof(x[0]))
 
 psa_status_t
-psa_initial_attest_get_token(const uint8_t *challenge_obj,
-                             uint32_t       challenge_size,
-                             uint8_t       *token,
-                             uint32_t      *token_size)
+psa_initial_attest_get_token(const uint8_t *auth_challenge,
+                             size_t         challenge_size,
+                             uint8_t       *token_buf,
+                             size_t         token_buf_size,
+                             size_t        *token_size)
 {
     psa_handle_t handle = PSA_NULL_HANDLE;
     psa_status_t status;
 
     psa_invec in_vec[] = {
-        {challenge_obj, challenge_size}
+        {auth_challenge, challenge_size}
     };
     psa_outvec out_vec[] = {
-        {token, *token_size}
+        {token_buf, token_buf_size}
     };
 
     handle = psa_connect(TFM_ATTEST_GET_TOKEN_SID,
@@ -49,8 +50,8 @@
 }
 
 psa_status_t
-psa_initial_attest_get_token_size(uint32_t  challenge_size,
-                                  uint32_t *token_size)
+psa_initial_attest_get_token_size(size_t  challenge_size,
+                                  size_t *token_size)
 {
     psa_handle_t handle = PSA_NULL_HANDLE;
     psa_status_t status;
@@ -58,7 +59,7 @@
         {&challenge_size, sizeof(challenge_size)}
     };
     psa_outvec out_vec[] = {
-        {token_size, sizeof(uint32_t)}
+        {token_size, sizeof(size_t)}
     };
 
     handle = psa_connect(TFM_ATTEST_GET_TOKEN_SIZE_SID,
diff --git a/secure_fw/services/initial_attestation/tfm_attestation_req_mngr.c b/secure_fw/services/initial_attestation/tfm_attestation_req_mngr.c
index 0b1e93b..07d9a80 100644
--- a/secure_fw/services/initial_attestation/tfm_attestation_req_mngr.c
+++ b/secure_fw/services/initial_attestation/tfm_attestation_req_mngr.c
@@ -66,9 +66,9 @@
 static psa_status_t psa_attest_get_token_size(const psa_msg_t *msg)
 {
     psa_status_t status = PSA_SUCCESS;
-    uint32_t challenge_size;
-    uint32_t token_size;
-    uint32_t bytes_read = 0;
+    size_t challenge_size;
+    size_t token_size;
+    size_t bytes_read = 0;
     psa_invec in_vec[] = {
         {&challenge_size, msg->in_size[0]}
     };
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 151c168..59cbfb3 100644
--- a/secure_fw/services/initial_attestation/tfm_attestation_secure_api.c
+++ b/secure_fw/services/initial_attestation/tfm_attestation_secure_api.c
@@ -19,17 +19,18 @@
 
 __attribute__((section("SFN")))
 psa_status_t
-psa_initial_attest_get_token(const uint8_t *challenge_obj,
-                             uint32_t       challenge_size,
-                             uint8_t       *token,
-                             uint32_t      *token_size)
+psa_initial_attest_get_token(const uint8_t *auth_challenge,
+                             size_t         challenge_size,
+                             uint8_t       *token_buf,
+                             size_t         token_buf_size,
+                             size_t        *token_size)
 {
     psa_status_t status;
     psa_invec in_vec[] = {
-        {challenge_obj, challenge_size}
+        {auth_challenge, challenge_size}
     };
     psa_outvec out_vec[] = {
-        {token, *token_size}
+        {token_buf, token_buf_size}
     };
 
 #ifdef TFM_PSA_API
@@ -48,7 +49,6 @@
     status = tfm_initial_attest_get_token_veneer(in_vec, IOVEC_LEN(in_vec),
                                                  out_vec, IOVEC_LEN(out_vec));
 #endif
-
     if (status == PSA_SUCCESS) {
         *token_size = out_vec[0].len;
     }
@@ -58,15 +58,15 @@
 
 __attribute__((section("SFN")))
 psa_status_t
-psa_initial_attest_get_token_size(uint32_t challenge_size,
-                                  uint32_t *token_size)
+psa_initial_attest_get_token_size(size_t challenge_size,
+                                  size_t *token_size)
 {
     psa_status_t status;
     psa_invec in_vec[] = {
         {&challenge_size, sizeof(challenge_size) }
     };
     psa_outvec out_vec[] = {
-        {token_size, sizeof(uint32_t)}
+        {token_size, sizeof(size_t)}
     };
 
 #ifdef TFM_PSA_API
diff --git a/test/suites/attestation/attest_token_test.c b/test/suites/attestation/attest_token_test.c
index 6b0efd5..c6495e0 100644
--- a/test/suites/attestation/attest_token_test.c
+++ b/test/suites/attestation/attest_token_test.c
@@ -55,7 +55,8 @@
                    struct q_useful_buf_c *completed_token)
 {
     psa_status_t                 return_value;
-    uint32_t                     completed_token_len;
+    size_t                       token_buf_size;
+    size_t                       completed_token_size;
     struct q_useful_buf_c        actual_nonce;
     Q_USEFUL_BUF_MAKE_STACK_UB(  actual_nonce_storage, 64);
 
@@ -70,13 +71,15 @@
         actual_nonce = nonce;
     }
 
-    completed_token_len = (uint32_t)buffer.len;
+    token_buf_size = buffer.len;
     return_value = psa_initial_attest_get_token(actual_nonce.ptr,
-                                                (uint32_t)actual_nonce.len,
+                                                actual_nonce.len,
                                                 buffer.ptr,
-                                                &completed_token_len);
+                                                token_buf_size,
+                                                &completed_token_size);
 
-    *completed_token = (struct q_useful_buf_c){buffer.ptr, completed_token_len};
+    *completed_token =
+        (struct q_useful_buf_c){buffer.ptr, completed_token_size};
 
     if (return_value != PSA_SUCCESS) {
         return (int)return_value;
@@ -180,7 +183,7 @@
 int_fast16_t minimal_get_size_test()
 {
     int_fast16_t          return_value = 0;
-    uint32_t              length;
+    size_t                length;
     struct q_useful_buf_c expected_token;
     struct q_useful_buf_c nonce;
 
@@ -189,7 +192,7 @@
         Q_USEFUL_BUF_FROM_BYTE_ARRAY_LITERAL(expected_minimal_token_bytes);
 
 
-    return_value = psa_initial_attest_get_token_size((uint32_t)nonce.len,
+    return_value = psa_initial_attest_get_token_size(nonce.len,
                                                      &length);
 
     /*
diff --git a/test/suites/attestation/attestation_tests_common.h b/test/suites/attestation/attestation_tests_common.h
index bf82db3..03c6199 100644
--- a/test/suites/attestation/attestation_tests_common.h
+++ b/test/suites/attestation/attestation_tests_common.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018-2019, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2020, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
@@ -39,7 +39,7 @@
 /*!
  * \def INVALID_CHALLENGE_OBJECT_SIZE
  *
- * \brief Size of challenge object that is
+ * \brief Size of challenge object that is invalid.
  */
 #define INVALID_CHALLENGE_OBJECT_SIZE (PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32 + 1)
 
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 cf3b28b..e19bc32 100644
--- a/test/suites/attestation/non_secure/attestation_ns_interface_testsuite.c
+++ b/test/suites/attestation/non_secure/attestation_ns_interface_testsuite.c
@@ -151,12 +151,14 @@
 static void tfm_attest_test_2005(struct test_result_t *ret)
 {
     psa_status_t err;
-    uint32_t token_size = TEST_TOKEN_SIZE;
+    size_t token_buf_size = TEST_TOKEN_SIZE;
+    size_t token_size;
 
     /* Call with with bigger challenge object than allowed */
     err = psa_initial_attest_get_token(challenge_buffer,
                                        INVALID_CHALLENGE_OBJECT_SIZE,
                                        token_buffer,
+                                       token_buf_size,
                                        &token_size);
 
     if (err != PSA_ERROR_INVALID_ARGUMENT) {
@@ -165,10 +167,11 @@
     }
 
     /* Call with smaller buffer size than size of test token */
-    token_size = TOO_SMALL_TOKEN_BUFFER;
+    token_buf_size = TOO_SMALL_TOKEN_BUFFER;
     err = psa_initial_attest_get_token(challenge_buffer,
                                        TEST_CHALLENGE_OBJ_SIZE,
                                        token_buffer,
+                                       token_buf_size,
                                        &token_size);
 
     if (err != PSA_ERROR_BUFFER_TOO_SMALL) {
diff --git a/test/suites/attestation/secure/attestation_s_interface_testsuite.c b/test/suites/attestation/secure/attestation_s_interface_testsuite.c
index 7dec677..66362da 100644
--- a/test/suites/attestation/secure/attestation_s_interface_testsuite.c
+++ b/test/suites/attestation/secure/attestation_s_interface_testsuite.c
@@ -151,12 +151,14 @@
 static void tfm_attest_test_1005(struct test_result_t *ret)
 {
     psa_status_t err;
-    uint32_t token_size = TEST_TOKEN_SIZE;
+    size_t token_buf_size = TEST_TOKEN_SIZE;
+    size_t token_size;
 
     /* Call with with bigger challenge object than allowed */
     err = psa_initial_attest_get_token(challenge_buffer,
                                        INVALID_CHALLENGE_OBJECT_SIZE,
                                        token_buffer,
+                                       token_buf_size,
                                        &token_size);
 
     if (err != PSA_ERROR_INVALID_ARGUMENT) {
@@ -165,10 +167,11 @@
     }
 
     /* Call with smaller buffer size than size of test token */
-    token_size = TOO_SMALL_TOKEN_BUFFER;
+    token_buf_size = TOO_SMALL_TOKEN_BUFFER;
     err = psa_initial_attest_get_token(challenge_buffer,
                                        TEST_CHALLENGE_OBJ_SIZE,
                                        token_buffer,
+                                       token_buf_size,
                                        &token_size);
 
     if (err != PSA_ERROR_BUFFER_TOO_SMALL) {