blob: bacab1ded5e4835bfcf6dabde448c1c362955101 [file] [log] [blame]
Julian Hall527ddd52021-06-28 11:57:17 +01001/*
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +00002 * Copyright (c) 2021-2023, Arm Limited and Contributors. All rights reserved.
3 * Copyright (c) 2021-2023, Linaro Limited. All rights reserved.
Julian Hall527ddd52021-06-28 11:57:17 +01004 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8#include <stddef.h>
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +00009#include <psa/sid.h>
Julian Hall527ddd52021-06-28 11:57:17 +010010#include <rpc/common/endpoint/rpc_interface.h>
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +000011#include <rpc/psa_ipc/caller/sp/psa_ipc_caller.h>
Julian Hall527ddd52021-06-28 11:57:17 +010012#include <service/attestation/provider/attest_provider.h>
13#include <service/attestation/provider/serializer/packed-c/packedc_attest_provider_serializer.h>
Julian Hall7bfb18e2021-07-13 15:48:13 +010014#include <service/crypto/factory/crypto_provider_factory.h>
Julian Hall628be292021-08-04 16:57:40 +010015#include <service/secure_storage/frontend/secure_storage_provider/secure_storage_provider.h>
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +000016#include <trace.h>
Julian Hall527ddd52021-06-28 11:57:17 +010017
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +000018/* backends */
19#include <service/crypto/backend/psa_ipc/crypto_ipc_backend.h>
20#include <service/secure_storage/backend/secure_storage_ipc/secure_storage_ipc.h>
21#include <service/attestation/client/psa/iat_client.h>
22
23struct psa_ipc_caller psa_ipc;
Julian Hall527ddd52021-06-28 11:57:17 +010024
25struct rpc_interface *attest_proxy_create(void)
26{
27 struct rpc_interface *attest_iface;
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +000028 struct rpc_caller *attest_caller;
Julian Hall527ddd52021-06-28 11:57:17 +010029
30 /* Static objects for proxy instance */
31 static struct attest_provider attest_provider;
32
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +000033 attest_caller = psa_ipc_caller_init(&psa_ipc);
34 if (!attest_caller)
35 return NULL;
36
Julian Hall527ddd52021-06-28 11:57:17 +010037 /* Initialize the service provider */
Julian Hall644b57a2021-06-30 08:45:19 +010038 attest_iface = attest_provider_init(&attest_provider);
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +000039 psa_iat_client_init(&psa_ipc.rpc_caller);
Julian Hall527ddd52021-06-28 11:57:17 +010040
41 attest_provider_register_serializer(&attest_provider,
42 TS_RPC_ENCODING_PACKED_C, packedc_attest_provider_serializer_instance());
43
44 return attest_iface;
45}
46
47struct rpc_interface *crypto_proxy_create(void)
48{
Julian Hall9061e6c2021-06-29 14:24:20 +010049 struct rpc_interface *crypto_iface = NULL;
Julian Hall7bfb18e2021-07-13 15:48:13 +010050 struct crypto_provider *crypto_provider;
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +000051 struct rpc_caller *crypto_caller;
Julian Hall527ddd52021-06-28 11:57:17 +010052
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +000053 crypto_caller = psa_ipc_caller_init(&psa_ipc);
54 if (!crypto_caller)
55 return NULL;
Julian Hall527ddd52021-06-28 11:57:17 +010056
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +000057 if (crypto_ipc_backend_init(&psa_ipc.rpc_caller) != PSA_SUCCESS)
58 return NULL;
59
60 crypto_provider = crypto_provider_factory_create();
61 crypto_iface = service_provider_get_rpc_interface(&crypto_provider->base_provider);
Julian Hall527ddd52021-06-28 11:57:17 +010062
63 return crypto_iface;
64}
65
66struct rpc_interface *ps_proxy_create(void)
67{
Julian Hall527ddd52021-06-28 11:57:17 +010068 static struct secure_storage_provider ps_provider;
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +000069 static struct secure_storage_ipc ps_backend;
70 struct rpc_caller *storage_caller;
71 struct storage_backend *backend;
Julian Hall527ddd52021-06-28 11:57:17 +010072
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +000073 storage_caller = psa_ipc_caller_init(&psa_ipc);
74 if (!storage_caller)
75 return NULL;
76 backend = secure_storage_ipc_init(&ps_backend, &psa_ipc.rpc_caller);
77 ps_backend.service_handle = TFM_PROTECTED_STORAGE_SERVICE_HANDLE;
Julian Hall628be292021-08-04 16:57:40 +010078
79 return secure_storage_provider_init(&ps_provider, backend);
Julian Hall527ddd52021-06-28 11:57:17 +010080}
81
82struct rpc_interface *its_proxy_create(void)
83{
Julian Hall527ddd52021-06-28 11:57:17 +010084 static struct secure_storage_provider its_provider;
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +000085 static struct secure_storage_ipc its_backend;
86 struct rpc_caller *storage_caller;
87 struct storage_backend *backend;
Julian Hall527ddd52021-06-28 11:57:17 +010088
Rui Miguel Silvaa53cc532021-12-03 19:25:34 +000089 storage_caller = psa_ipc_caller_init(&psa_ipc);
90 if (!storage_caller)
91 return NULL;
92 backend = secure_storage_ipc_init(&its_backend, &psa_ipc.rpc_caller);
93 its_backend.service_handle = TFM_INTERNAL_TRUSTED_STORAGE_SERVICE_HANDLE;
Julian Hall628be292021-08-04 16:57:40 +010094
95 return secure_storage_provider_init(&its_provider, backend);
Julian Hall527ddd52021-06-28 11:57:17 +010096}