blob: 8859497d261f63d13ccc133470bedcce73ddcbf5 [file] [log] [blame]
/*
* Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <stddef.h>
#include <psa/crypto.h>
#include <service_locator.h>
#include <service/attestation/client/psa/iat_client.h>
#include <service/attestation/client/provision/attest_provision_client.h>
#include <protocols/rpc/common/packed-c/encoding.h>
#include "../service_under_test.h"
/* RPC context */
static rpc_session_handle session_handle = NULL;
static struct service_context *crypto_service_context = NULL;
int locate_service_under_test(struct logging_caller *call_logger)
{
int status = -1;
/* Attestation tests depend on PSA crypto so ensure library is initialised */
psa_status_t psa_status = psa_crypto_init();
if ((psa_status == PSA_SUCCESS) && !session_handle && !crypto_service_context) {
struct rpc_caller *caller;
crypto_service_context =
service_locator_query("sn:trustedfirmware.org:attestation:0", &status);
if (crypto_service_context) {
session_handle =
service_context_open(crypto_service_context, TS_RPC_ENCODING_PACKED_C, &caller);
if (session_handle) {
if (call_logger) {
struct rpc_caller *stacked_caller = logging_caller_attach(call_logger, caller);
psa_iat_client_init(stacked_caller);
attest_provision_client_init(stacked_caller);
}
else {
psa_iat_client_init(caller);
attest_provision_client_init(caller);
}
status = 0;
}
else {
status = -1;
relinquish_service_under_test();
}
}
}
return status;
}
void relinquish_service_under_test(void)
{
psa_iat_client_deinit();
attest_provision_client_deinit();
if (crypto_service_context && session_handle) {
service_context_close(crypto_service_context, session_handle);
session_handle = NULL;
}
if (crypto_service_context) {
service_context_relinquish(crypto_service_context);
crypto_service_context = NULL;
}
}