blob: 5efe9040cf438928341f7ea4e586bfdf96f7a422 [file] [log] [blame]
Kevin Peng9449a362019-07-29 16:05:42 +08001/*
Raef Coles793574c2019-10-09 10:59:42 +01002 * Copyright (c) 2018-2020, Arm Limited. All rights reserved.
Kevin Peng9449a362019-07-29 16:05:42 +08003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8#include "psa/initial_attestation.h"
9#include "tfm_veneers.h"
10#include "tfm_ns_interface.h"
11#include "psa/client.h"
David Vinczeff6da532019-11-21 00:19:50 +010012#include "psa/crypto_types.h"
Kevin Peng9449a362019-07-29 16:05:42 +080013
14#define IOVEC_LEN(x) (sizeof(x)/sizeof(x[0]))
15
Raef Coles793574c2019-10-09 10:59:42 +010016psa_status_t
Raef Coles70a02da2019-10-09 11:32:04 +010017psa_initial_attest_get_token(const uint8_t *auth_challenge,
18 size_t challenge_size,
19 uint8_t *token_buf,
20 size_t token_buf_size,
21 size_t *token_size)
Kevin Peng9449a362019-07-29 16:05:42 +080022{
23
24 int32_t res;
25
26 psa_invec in_vec[] = {
Raef Coles70a02da2019-10-09 11:32:04 +010027 {auth_challenge, challenge_size}
Kevin Peng9449a362019-07-29 16:05:42 +080028 };
29 psa_outvec out_vec[] = {
Raef Coles70a02da2019-10-09 11:32:04 +010030 {token_buf, token_buf_size}
Kevin Peng9449a362019-07-29 16:05:42 +080031 };
32
33 res = tfm_ns_interface_dispatch(
34 (veneer_fn)tfm_initial_attest_get_token_veneer,
35 (uint32_t)in_vec, IOVEC_LEN(in_vec),
36 (uint32_t)out_vec, IOVEC_LEN(out_vec));
37
Raef Coles793574c2019-10-09 10:59:42 +010038 if (res == (int32_t)PSA_SUCCESS) {
Kevin Peng9449a362019-07-29 16:05:42 +080039 *token_size = out_vec[0].len;
40 }
41
Raef Coles793574c2019-10-09 10:59:42 +010042 return res;
Kevin Peng9449a362019-07-29 16:05:42 +080043}
44
Raef Coles793574c2019-10-09 10:59:42 +010045psa_status_t
Raef Coles70a02da2019-10-09 11:32:04 +010046psa_initial_attest_get_token_size(size_t challenge_size,
47 size_t *token_size)
Kevin Peng9449a362019-07-29 16:05:42 +080048{
49 psa_invec in_vec[] = {
50 {&challenge_size, sizeof(challenge_size)}
51 };
52 psa_outvec out_vec[] = {
Raef Coles70a02da2019-10-09 11:32:04 +010053 {token_size, sizeof(size_t)}
Kevin Peng9449a362019-07-29 16:05:42 +080054 };
55
Raef Coles793574c2019-10-09 10:59:42 +010056 return tfm_ns_interface_dispatch(
Kevin Peng9449a362019-07-29 16:05:42 +080057 (veneer_fn)tfm_initial_attest_get_token_size_veneer,
58 (uint32_t)in_vec, IOVEC_LEN(in_vec),
59 (uint32_t)out_vec, IOVEC_LEN(out_vec));
60}
David Vinczeff6da532019-11-21 00:19:50 +010061
Raef Coles793574c2019-10-09 10:59:42 +010062psa_status_t
Summer Qin0e5b2e02020-10-22 11:23:39 +080063tfm_initial_attest_get_public_key(uint8_t *public_key,
64 size_t public_key_buf_size,
65 size_t *public_key_len,
66 psa_ecc_family_t *elliptic_curve_type)
David Vinczeff6da532019-11-21 00:19:50 +010067{
68 int32_t res;
69
70 psa_outvec out_vec[] = {
71 {.base = public_key, .len = public_key_buf_size},
72 {.base = elliptic_curve_type, .len = sizeof(*elliptic_curve_type)},
73 {.base = public_key_len, .len = sizeof(*public_key_len)}
74 };
75
76 res = tfm_ns_interface_dispatch(
77 (veneer_fn)tfm_initial_attest_get_public_key_veneer,
78 (uint32_t)NULL, 0,
79 (uint32_t)out_vec, IOVEC_LEN(out_vec));
80
Raef Coles793574c2019-10-09 10:59:42 +010081 return (psa_status_t) res;
David Vinczeff6da532019-11-21 00:19:50 +010082}