1 /*
2 * SPDX-FileCopyrightText: Copyright The TrustedFirmware-M Contributors
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8 #include "psa/initial_attestation.h"
9 #include "psa/client.h"
10 #include "psa_manifest/sid.h"
11 #include "tfm_attest_defs.h"
12
13 psa_status_t
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)14 psa_initial_attest_get_token(const uint8_t *auth_challenge,
15 size_t challenge_size,
16 uint8_t *token_buf,
17 size_t token_buf_size,
18 size_t *token_size)
19 {
20 psa_status_t status;
21
22 psa_invec in_vec[] = {
23 {auth_challenge, challenge_size}
24 };
25 psa_outvec out_vec[] = {
26 {token_buf, token_buf_size}
27 };
28
29 status = psa_call(TFM_ATTESTATION_SERVICE_HANDLE, TFM_ATTEST_GET_TOKEN,
30 in_vec, IOVEC_LEN(in_vec),
31 out_vec, IOVEC_LEN(out_vec));
32
33 if (status == PSA_SUCCESS) {
34 *token_size = out_vec[0].len;
35 }
36
37 return status;
38 }
39
40 psa_status_t
psa_initial_attest_get_token_size(size_t challenge_size,size_t * token_size)41 psa_initial_attest_get_token_size(size_t challenge_size,
42 size_t *token_size)
43 {
44 psa_status_t status;
45 rot_size_t challenge_size_param;
46 rot_size_t token_size_param = 0;
47
48 psa_invec in_vec[] = {
49 {&challenge_size_param, sizeof(challenge_size_param)}
50 };
51 psa_outvec out_vec[] = {
52 {&token_size_param, sizeof(token_size_param)}
53 };
54
55 if (challenge_size > ROT_SIZE_MAX) {
56 return PSA_ERROR_INVALID_ARGUMENT;
57 }
58 challenge_size_param = (rot_size_t)challenge_size;
59
60 if (token_size == NULL) {
61 return PSA_ERROR_INVALID_ARGUMENT;
62 }
63
64 status = psa_call(TFM_ATTESTATION_SERVICE_HANDLE, TFM_ATTEST_GET_TOKEN_SIZE,
65 in_vec, IOVEC_LEN(in_vec),
66 out_vec, IOVEC_LEN(out_vec));
67
68 *token_size = token_size_param;
69
70 return status;
71 }
72