Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 1 | /* |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 2 | * Copyright (c) 2021-2023, Arm Limited and Contributors. All rights reserved. |
| 3 | * Copyright (c) 2021-2023, Linaro Limited. All rights reserved. |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 4 | * |
| 5 | * SPDX-License-Identifier: BSD-3-Clause |
| 6 | */ |
| 7 | |
| 8 | #include <stddef.h> |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 9 | #include <psa/sid.h> |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 10 | #include <rpc/common/endpoint/rpc_interface.h> |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 11 | #include <rpc/psa_ipc/caller/sp/psa_ipc_caller.h> |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 12 | #include <service/attestation/provider/attest_provider.h> |
| 13 | #include <service/attestation/provider/serializer/packed-c/packedc_attest_provider_serializer.h> |
Julian Hall | 7bfb18e | 2021-07-13 15:48:13 +0100 | [diff] [blame] | 14 | #include <service/crypto/factory/crypto_provider_factory.h> |
Julian Hall | 628be29 | 2021-08-04 16:57:40 +0100 | [diff] [blame] | 15 | #include <service/secure_storage/frontend/secure_storage_provider/secure_storage_provider.h> |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 16 | #include <trace.h> |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 17 | |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 18 | /* 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 | |
| 23 | struct psa_ipc_caller psa_ipc; |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 24 | |
| 25 | struct rpc_interface *attest_proxy_create(void) |
| 26 | { |
| 27 | struct rpc_interface *attest_iface; |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 28 | struct rpc_caller *attest_caller; |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 29 | |
| 30 | /* Static objects for proxy instance */ |
| 31 | static struct attest_provider attest_provider; |
| 32 | |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 33 | attest_caller = psa_ipc_caller_init(&psa_ipc); |
| 34 | if (!attest_caller) |
| 35 | return NULL; |
| 36 | |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 37 | /* Initialize the service provider */ |
Julian Hall | 644b57a | 2021-06-30 08:45:19 +0100 | [diff] [blame] | 38 | attest_iface = attest_provider_init(&attest_provider); |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 39 | psa_iat_client_init(&psa_ipc.rpc_caller); |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 40 | |
| 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 | |
| 47 | struct rpc_interface *crypto_proxy_create(void) |
| 48 | { |
Julian Hall | 9061e6c | 2021-06-29 14:24:20 +0100 | [diff] [blame] | 49 | struct rpc_interface *crypto_iface = NULL; |
Julian Hall | 7bfb18e | 2021-07-13 15:48:13 +0100 | [diff] [blame] | 50 | struct crypto_provider *crypto_provider; |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 51 | struct rpc_caller *crypto_caller; |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 52 | |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 53 | crypto_caller = psa_ipc_caller_init(&psa_ipc); |
| 54 | if (!crypto_caller) |
| 55 | return NULL; |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 56 | |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 57 | 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 Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 62 | |
| 63 | return crypto_iface; |
| 64 | } |
| 65 | |
| 66 | struct rpc_interface *ps_proxy_create(void) |
| 67 | { |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 68 | static struct secure_storage_provider ps_provider; |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 69 | static struct secure_storage_ipc ps_backend; |
| 70 | struct rpc_caller *storage_caller; |
| 71 | struct storage_backend *backend; |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 72 | |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 73 | 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 Hall | 628be29 | 2021-08-04 16:57:40 +0100 | [diff] [blame] | 78 | |
| 79 | return secure_storage_provider_init(&ps_provider, backend); |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 80 | } |
| 81 | |
| 82 | struct rpc_interface *its_proxy_create(void) |
| 83 | { |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 84 | static struct secure_storage_provider its_provider; |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 85 | static struct secure_storage_ipc its_backend; |
| 86 | struct rpc_caller *storage_caller; |
| 87 | struct storage_backend *backend; |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 88 | |
Rui Miguel Silva | a53cc53 | 2021-12-03 19:25:34 +0000 | [diff] [blame^] | 89 | 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 Hall | 628be29 | 2021-08-04 16:57:40 +0100 | [diff] [blame] | 94 | |
| 95 | return secure_storage_provider_init(&its_provider, backend); |
Julian Hall | 527ddd5 | 2021-06-28 11:57:17 +0100 | [diff] [blame] | 96 | } |