blob: 8859497d261f63d13ccc133470bedcce73ddcbf5 [file] [log] [blame]
Julian Hallb7db5802021-07-26 16:20:40 +01001/*
2 * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <stddef.h>
Julian Hall3b2fc5c2021-08-12 15:56:07 +01008#include <psa/crypto.h>
Julian Hallb7db5802021-07-26 16:20:40 +01009#include <service_locator.h>
10#include <service/attestation/client/psa/iat_client.h>
11#include <service/attestation/client/provision/attest_provision_client.h>
12#include <protocols/rpc/common/packed-c/encoding.h>
13#include "../service_under_test.h"
14
15/* RPC context */
16static rpc_session_handle session_handle = NULL;
17static struct service_context *crypto_service_context = NULL;
18
19int locate_service_under_test(struct logging_caller *call_logger)
20{
21 int status = -1;
22
Julian Hall3b2fc5c2021-08-12 15:56:07 +010023 /* Attestation tests depend on PSA crypto so ensure library is initialised */
24 psa_status_t psa_status = psa_crypto_init();
25
26 if ((psa_status == PSA_SUCCESS) && !session_handle && !crypto_service_context) {
Julian Hallb7db5802021-07-26 16:20:40 +010027
28 struct rpc_caller *caller;
29
30 crypto_service_context =
31 service_locator_query("sn:trustedfirmware.org:attestation:0", &status);
32
33 if (crypto_service_context) {
34
35 session_handle =
36 service_context_open(crypto_service_context, TS_RPC_ENCODING_PACKED_C, &caller);
37
38 if (session_handle) {
39
40 if (call_logger) {
41
42 struct rpc_caller *stacked_caller = logging_caller_attach(call_logger, caller);
43
44 psa_iat_client_init(stacked_caller);
45 attest_provision_client_init(stacked_caller);
46 }
47 else {
48
49 psa_iat_client_init(caller);
50 attest_provision_client_init(caller);
51 }
52
53 status = 0;
54 }
55 else {
56
57 status = -1;
58 relinquish_service_under_test();
59 }
60 }
61 }
62
63 return status;
64}
65
66void relinquish_service_under_test(void)
67{
68 psa_iat_client_deinit();
69 attest_provision_client_deinit();
70
71 if (crypto_service_context && session_handle) {
72
73 service_context_close(crypto_service_context, session_handle);
74 session_handle = NULL;
75 }
76
77 if (crypto_service_context) {
78
79 service_context_relinquish(crypto_service_context);
80 crypto_service_context = NULL;
81 }
82}