blob: 17202646cbb03337ddc605673f299329de7173c7 [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
Imre Kis6d867d82023-07-04 13:29:33 +020010#include "components/rpc/common/endpoint/rpc_service_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 Hallc02fffb2020-11-23 18:22:06 +010014
15#ifdef __cplusplus
16extern "C" {
17#endif
18
Julian Hall9061e6c2021-06-29 14:24:20 +010019struct crypto_provider
Julian Hallc02fffb2020-11-23 18:22:06 +010020{
Julian Hall3e614542021-07-29 11:47:47 +010021 struct service_provider base_provider;
Imre Kis6d867d82023-07-04 13:29:33 +020022 const struct crypto_provider_serializer *serializer;
Julian Hallc02fffb2020-11-23 18:22:06 +010023};
24
25/*
Julian Hall9061e6c2021-06-29 14:24:20 +010026 * Initializes an instance of the crypto service provider. A suitable
27 * backend that realizes the PSA Crypto API should have been initialized
28 * prior to initializing the crypto provider.
Julian Hallc02fffb2020-11-23 18:22:06 +010029 */
Imre Kis6d867d82023-07-04 13:29:33 +020030struct rpc_service_interface *crypto_provider_init(struct crypto_provider *context,
31 unsigned int encoding, const struct crypto_provider_serializer *serializer);
Julian Hallc02fffb2020-11-23 18:22:06 +010032
33/*
34 * When operation of the provider is no longer required, this function
35 * frees any resource used by the previously initialized provider instance.
36 */
Julian Hall9061e6c2021-06-29 14:24:20 +010037void crypto_provider_deinit(struct crypto_provider *context);
Julian Hallc02fffb2020-11-23 18:22:06 +010038
julhal01c3f4e9a2020-12-15 13:39:01 +000039/*
40 * Register a serializer for supportng a particular parameter encoding. At
41 * least one serializer must be registered but additional ones may be registered
42 * to allow alternative parameter serialization schemes to be used to allow
43 * for compatibility with different types of client.
44 */
Julian Hall9061e6c2021-06-29 14:24:20 +010045void crypto_provider_register_serializer(struct crypto_provider *context,
Julian Hall3e614542021-07-29 11:47:47 +010046 const struct crypto_provider_serializer *serializer);
julhal01c3f4e9a2020-12-15 13:39:01 +000047
Julian Hall13e76952021-07-13 12:17:09 +010048/*
49 * Extend the core set of operations provided by the crypto provider.
50 */
51void crypto_provider_extend(struct crypto_provider *context,
Julian Hall3e614542021-07-29 11:47:47 +010052 struct service_provider *sub_provider);
Julian Hall13e76952021-07-13 12:17:09 +010053
Julian Hallc02fffb2020-11-23 18:22:06 +010054#ifdef __cplusplus
55} /* extern "C" */
56#endif
57
Julian Hall9061e6c2021-06-29 14:24:20 +010058#endif /* CRYPTO_PROVIDER_H */