blob: ce33c23b866adebe2bbf7d4505f4c1c895e03165 [file] [log] [blame]
Julian Hallc02fffb2020-11-23 18:22:06 +01001/*
julhal01c3f4e9a2020-12-15 13:39:01 +00002 * Copyright (c) 2020-2021, Arm Limited and Contributors. All rights reserved.
Julian Hallc02fffb2020-11-23 18:22:06 +01003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
Julian Hall9061e6c2021-06-29 14:24:20 +01007#ifndef CRYPTO_PROVIDER_H
8#define CRYPTO_PROVIDER_H
Julian Hallc02fffb2020-11-23 18:22:06 +01009
julhal01c3f4e9a2020-12-15 13:39:01 +000010#include <rpc/common/endpoint/rpc_interface.h>
Julian Hallc02fffb2020-11-23 18:22:06 +010011#include <service/common/provider/service_provider.h>
julhal01c3f4e9a2020-12-15 13:39:01 +000012#include <service/crypto/provider/serializer/crypto_provider_serializer.h>
Julian Hall3e614542021-07-29 11:47:47 +010013#include <service/discovery/provider/discovery_provider.h>
julhal01c3f4e9a2020-12-15 13:39:01 +000014#include <protocols/rpc/common/packed-c/encoding.h>
Julian Hallc02fffb2020-11-23 18:22:06 +010015
16#ifdef __cplusplus
17extern "C" {
18#endif
19
Julian Hall9061e6c2021-06-29 14:24:20 +010020struct crypto_provider
Julian Hallc02fffb2020-11-23 18:22:06 +010021{
Julian Hall3e614542021-07-29 11:47:47 +010022 struct service_provider base_provider;
23 const struct crypto_provider_serializer *serializers[TS_RPC_ENCODING_LIMIT];
24 struct discovery_provider discovery_provider;
Julian Hallc02fffb2020-11-23 18:22:06 +010025};
26
27/*
Julian Hall9061e6c2021-06-29 14:24:20 +010028 * Initializes an instance of the crypto service provider. A suitable
29 * backend that realizes the PSA Crypto API should have been initialized
30 * prior to initializing the crypto provider.
Julian Hallc02fffb2020-11-23 18:22:06 +010031 */
Julian Hall9061e6c2021-06-29 14:24:20 +010032struct rpc_interface *crypto_provider_init(struct crypto_provider *context);
Julian Hallc02fffb2020-11-23 18:22:06 +010033
34/*
35 * When operation of the provider is no longer required, this function
36 * frees any resource used by the previously initialized provider instance.
37 */
Julian Hall9061e6c2021-06-29 14:24:20 +010038void crypto_provider_deinit(struct crypto_provider *context);
Julian Hallc02fffb2020-11-23 18:22:06 +010039
julhal01c3f4e9a2020-12-15 13:39:01 +000040/*
41 * Register a serializer for supportng a particular parameter encoding. At
42 * least one serializer must be registered but additional ones may be registered
43 * to allow alternative parameter serialization schemes to be used to allow
44 * for compatibility with different types of client.
45 */
Julian Hall9061e6c2021-06-29 14:24:20 +010046void crypto_provider_register_serializer(struct crypto_provider *context,
Julian Hall3e614542021-07-29 11:47:47 +010047 unsigned int encoding,
48 const struct crypto_provider_serializer *serializer);
julhal01c3f4e9a2020-12-15 13:39:01 +000049
Julian Hall13e76952021-07-13 12:17:09 +010050/*
51 * Extend the core set of operations provided by the crypto provider.
52 */
53void crypto_provider_extend(struct crypto_provider *context,
Julian Hall3e614542021-07-29 11:47:47 +010054 struct service_provider *sub_provider);
Julian Hall13e76952021-07-13 12:17:09 +010055
Julian Hallc02fffb2020-11-23 18:22:06 +010056#ifdef __cplusplus
57} /* extern "C" */
58#endif
59
Julian Hall9061e6c2021-06-29 14:24:20 +010060#endif /* CRYPTO_PROVIDER_H */