blob: 4a3a10e2563608f0b0e66b1aa8ab4274c36b0798 [file] [log] [blame]
Gabor Toth172659d2023-04-27 08:51:21 +02001/*
2 * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <protocols/rpc/common/packed-c/encoding.h>
8#include <service/crypto/client/psa/psa_crypto_client.h>
9#include <service_locator.h>
10#include <stdio.h>
11
12#include "libpsa.h"
13#include "trace.h"
14
15static struct rpc_caller_session *rpc_session;
16static struct service_context *crypto_service_context;
17
18LIBPSA_EXPORTED psa_status_t libpsa_init_crypto_context(const char *service_name)
19{
20 psa_status_t result = PSA_ERROR_GENERIC_ERROR;
21
22 if (rpc_session || crypto_service_context) {
23 EMSG("The client is already initialized\n");
24 return result;
25 }
26
27 service_locator_init();
28
29 crypto_service_context = service_locator_query(service_name);
30
31 if (!crypto_service_context) {
32 EMSG("Failed to discover service\n");
33 return result;
34 }
35
36 rpc_session = service_context_open(crypto_service_context);
37
38 if (!rpc_session) {
39 EMSG("Failed to open rpc session\n");
40 libpsa_deinit_crypto_context();
41 return result;
42 }
43
44 result = psa_crypto_client_init(rpc_session);
45
46 if (result)
47 EMSG("psa_crypto_client_init failed\n");
48
49 return result;
50}
51
52LIBPSA_EXPORTED void libpsa_deinit_crypto_context(void)
53{
54 psa_crypto_client_deinit();
55
56 if (crypto_service_context && rpc_session) {
57 service_context_close(crypto_service_context, rpc_session);
58 rpc_session = NULL;
59 }
60
61 if (crypto_service_context) {
62 service_context_relinquish(crypto_service_context);
63 crypto_service_context = NULL;
64 }
65}