1 /*
2 * Copyright (c) 2023, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8 #include <psa/client.h>
9 #include <psa_manifest/sid.h>
10 #include <rss_crypto_defs.h>
11 #include <rss_platform_api.h>
12
13 psa_status_t
rss_platform_nv_counter_increment(uint32_t counter_id)14 rss_platform_nv_counter_increment(uint32_t counter_id)
15 {
16 struct psa_invec in_vec[1];
17
18 in_vec[0].base = &counter_id;
19 in_vec[0].len = sizeof(counter_id);
20
21 return psa_call(RSS_PLATFORM_SERVICE_HANDLE,
22 RSS_PLATFORM_API_ID_NV_INCREMENT,
23 in_vec, 1, NULL, 0);
24 }
25
26 psa_status_t
rss_platform_nv_counter_read(uint32_t counter_id,uint32_t size,uint8_t * val)27 rss_platform_nv_counter_read(uint32_t counter_id,
28 uint32_t size, uint8_t *val)
29 {
30 struct psa_invec in_vec[1];
31 struct psa_outvec out_vec[1];
32
33 in_vec[0].base = &counter_id;
34 in_vec[0].len = sizeof(counter_id);
35
36 out_vec[0].base = val;
37 out_vec[0].len = size;
38
39 return psa_call(RSS_PLATFORM_SERVICE_HANDLE,
40 RSS_PLATFORM_API_ID_NV_READ,
41 in_vec, 1, out_vec, 1);
42 }
43
44 psa_status_t
rss_platform_key_read(enum rss_key_id_builtin_t key,uint8_t * data,size_t data_size,size_t * data_length)45 rss_platform_key_read(enum rss_key_id_builtin_t key, uint8_t *data,
46 size_t data_size, size_t *data_length)
47 {
48 psa_status_t status;
49
50 struct rss_crypto_pack_iovec iov = {
51 .function_id = RSS_CRYPTO_EXPORT_PUBLIC_KEY_SID,
52 .key_id = key,
53 };
54
55 psa_invec in_vec[] = {
56 {.base = &iov, .len = sizeof(struct rss_crypto_pack_iovec)},
57 };
58 psa_outvec out_vec[] = {
59 {.base = data, .len = data_size}
60 };
61
62 status = psa_call(RSS_CRYPTO_HANDLE, PSA_IPC_CALL,
63 in_vec, IOVEC_LEN(in_vec),
64 out_vec, IOVEC_LEN(out_vec));
65
66 *data_length = out_vec[0].len;
67
68 return status;
69 }
70