summaryrefslogtreecommitdiffstats
path: root/lib/psa/delegated_attestation.c
blob: 81e26215f70e5d69a8afcfd639e078b70cb893ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
 * Copyright (c) 2022-2023, Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *
 */

#include <delegated_attestation.h>
#include <psa/client.h>
#include <psa_manifest/sid.h>

psa_status_t
rss_delegated_attest_get_delegated_key(uint8_t   ecc_curve,
				       uint32_t  key_bits,
				       uint8_t  *key_buf,
				       size_t    key_buf_size,
				       size_t   *key_size,
				       uint32_t  hash_algo)
{
	psa_status_t status;
	psa_invec in_vec[] = {
		{&ecc_curve, sizeof(ecc_curve)},
		{&key_bits,  sizeof(key_bits)},
		{&hash_algo, sizeof(hash_algo)}
	};
	psa_outvec out_vec[] = {
		{key_buf, key_buf_size}
	};

	if (key_size == NULL) {
		return PSA_ERROR_INVALID_ARGUMENT;
	}

	status = psa_call(RSS_DELEGATED_SERVICE_HANDLE,
			  RSS_DELEGATED_ATTEST_GET_DELEGATED_KEY,
			  in_vec,  IOVEC_LEN(in_vec),
			  out_vec, IOVEC_LEN(out_vec));
	if (status == PSA_SUCCESS) {
		*key_size = out_vec[0].len;
	}

	return status;
}

psa_status_t
rss_delegated_attest_get_token(const uint8_t *dak_pub_hash,
			       size_t         dak_pub_hash_size,
			       uint8_t       *token_buf,
			       size_t         token_buf_size,
			       size_t        *token_size)
{
	psa_status_t status;
	psa_invec in_vec[] = {
		{dak_pub_hash, dak_pub_hash_size}
	};
	psa_outvec out_vec[] = {
		{token_buf, token_buf_size}
	};

	if (token_size == NULL) {
		return PSA_ERROR_INVALID_ARGUMENT;
	}

	status = psa_call(RSS_DELEGATED_SERVICE_HANDLE,
			  RSS_DELEGATED_ATTEST_GET_PLATFORM_TOKEN,
			  in_vec, IOVEC_LEN(in_vec),
			  out_vec, IOVEC_LEN(out_vec));
	if (status == PSA_SUCCESS) {
		*token_size = out_vec[0].len;
	}

	return status;
}