blob: 7cd91a942beec4a9e6d2ce364344802a87cda990 [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>
13#include <protocols/rpc/common/packed-c/encoding.h>
Julian Hallf5728962021-06-24 09:40:23 +010014#include "crypto_context_pool.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{
22 struct service_provider base_provider;
Julian Hallf5728962021-06-24 09:40:23 +010023 struct crypto_context_pool context_pool;
julhal01c3f4e9a2020-12-15 13:39:01 +000024 const struct crypto_provider_serializer *serializers[TS_RPC_ENCODING_LIMIT];
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,
julhal01c3f4e9a2020-12-15 13:39:01 +000047 unsigned int encoding, const struct crypto_provider_serializer *serializer);
48
Julian Hall13e76952021-07-13 12:17:09 +010049/*
50 * Extend the core set of operations provided by the crypto provider.
51 */
52void crypto_provider_extend(struct crypto_provider *context,
53 struct service_provider *sub_provider);
54
Julian Hallc02fffb2020-11-23 18:22:06 +010055#ifdef __cplusplus
56} /* extern "C" */
57#endif
58
Julian Hall9061e6c2021-06-29 14:24:20 +010059#endif /* CRYPTO_PROVIDER_H */