Factor hash operations to sub-provider
To allow for per-deployment configuration of supported crypto
operations, hash operations have been factored to a separate
sub-provider. This approach allows extended operations to
be supported without bloating the base crypto provider.
Signed-off-by: Julian Hall <julian.hall@arm.com>
Change-Id: I7a785762e8958c916a2668dba96efb533908bc8a
diff --git a/deployments/component-test/component-test.cmake b/deployments/component-test/component-test.cmake
index 7c82cb7..e1855a3 100644
--- a/deployments/component-test/component-test.cmake
+++ b/deployments/component-test/component-test.cmake
@@ -69,8 +69,11 @@
"components/service/crypto/provider"
"components/service/crypto/provider/serializer/protobuf"
"components/service/crypto/provider/serializer/packed-c"
+ "components/service/crypto/provider/extension/hash"
+ "components/service/crypto/provider/extension/hash/serializer/packed-c"
"components/service/crypto/provider/test"
"components/service/crypto/backend/mbedcrypto"
+ "components/service/crypto/factory/full"
"components/service/crypto/test/unit"
"components/service/crypto/test/service"
"components/service/crypto/test/service/protobuf"
diff --git a/deployments/crypto/opteesp/CMakeLists.txt b/deployments/crypto/opteesp/CMakeLists.txt
index ee2c3dc..cbc1d73 100644
--- a/deployments/crypto/opteesp/CMakeLists.txt
+++ b/deployments/crypto/opteesp/CMakeLists.txt
@@ -48,6 +48,9 @@
"components/service/crypto/provider"
"components/service/crypto/provider/serializer/protobuf"
"components/service/crypto/provider/serializer/packed-c"
+ "components/service/crypto/provider/extension/hash"
+ "components/service/crypto/provider/extension/hash/serializer/packed-c"
+ "components/service/crypto/factory/full"
"components/service/crypto/backend/mbedcrypto"
"components/service/crypto/backend/mbedcrypto/trng_adapter/platform"
"components/service/secure_storage/include"
diff --git a/deployments/crypto/opteesp/crypto_sp.c b/deployments/crypto/opteesp/crypto_sp.c
index bca971b..ce236d9 100644
--- a/deployments/crypto/opteesp/crypto_sp.c
+++ b/deployments/crypto/opteesp/crypto_sp.c
@@ -6,9 +6,7 @@
#include <rpc/ffarpc/endpoint/ffarpc_call_ep.h>
#include <service/secure_storage/factory/storage_factory.h>
-#include <service/crypto/provider/crypto_provider.h>
-#include <service/crypto/provider/serializer/protobuf/pb_crypto_provider_serializer.h>
-#include <service/crypto/provider/serializer/packed-c/packedc_crypto_provider_serializer.h>
+#include <service/crypto/factory/crypto_provider_factory.h>
#include <service/crypto/backend/mbedcrypto/mbedcrypto_backend.h>
#include <protocols/rpc/common/packed-c/status.h>
#include <config/ramstore/config_ramstore.h>
@@ -27,7 +25,7 @@
void __noreturn sp_main(struct ffa_init_info *init_info)
{
- struct crypto_provider crypto_provider;
+ struct crypto_provider *crypto_provider;
struct ffa_call_ep ffarpc_call_ep;
struct rpc_interface *crypto_iface;
struct sp_msg req_msg = { 0 };
@@ -47,15 +45,10 @@
/* Initialize the crypto service */
crypto_iface = NULL;
- if (mbedcrypto_backend_init(storage_backend, 0) == PSA_SUCCESS) {
+ if (mbedcrypto_backend_init(storage_backend, 0) == PSA_SUCCESS) {
- crypto_iface = crypto_provider_init(&crypto_provider);
-
- crypto_provider_register_serializer(&crypto_provider,
- TS_RPC_ENCODING_PROTOBUF, pb_crypto_provider_serializer_instance());
-
- crypto_provider_register_serializer(&crypto_provider,
- TS_RPC_ENCODING_PACKED_C, packedc_crypto_provider_serializer_instance());
+ crypto_provider = crypto_provider_factory_create();
+ crypto_iface = service_provider_get_rpc_interface(&crypto_provider->base_provider);
}
ffa_call_ep_init(&ffarpc_call_ep, crypto_iface);
diff --git a/deployments/libts/linux-pc/CMakeLists.txt b/deployments/libts/linux-pc/CMakeLists.txt
index f8ab349..b4d39a1 100644
--- a/deployments/libts/linux-pc/CMakeLists.txt
+++ b/deployments/libts/linux-pc/CMakeLists.txt
@@ -57,6 +57,9 @@
"components/service/crypto/provider"
"components/service/crypto/provider/serializer/protobuf"
"components/service/crypto/provider/serializer/packed-c"
+ "components/service/crypto/provider/extension/hash"
+ "components/service/crypto/provider/extension/hash/serializer/packed-c"
+ "components/service/crypto/factory/full"
"components/service/crypto/backend/mbedcrypto"
"components/service/crypto/backend/mbedcrypto/trng_adapter/linux"
"components/service/secure_storage/include"
diff --git a/deployments/se-proxy/opteesp/CMakeLists.txt b/deployments/se-proxy/opteesp/CMakeLists.txt
index 29d2edc..af25f39 100644
--- a/deployments/se-proxy/opteesp/CMakeLists.txt
+++ b/deployments/se-proxy/opteesp/CMakeLists.txt
@@ -60,6 +60,9 @@
"components/service/crypto/provider"
"components/service/crypto/provider/serializer/protobuf"
"components/service/crypto/provider/serializer/packed-c"
+ "components/service/crypto/provider/extension/hash"
+ "components/service/crypto/provider/extension/hash/serializer/packed-c"
+ "components/service/crypto/factory/full"
"components/service/secure_storage/include"
"components/service/secure_storage/frontend/secure_storage_provider"
"components/service/attestation/include"
diff --git a/deployments/se-proxy/opteesp/service_proxy_factory.c b/deployments/se-proxy/opteesp/service_proxy_factory.c
index 6bbee65..6261128 100644
--- a/deployments/se-proxy/opteesp/service_proxy_factory.c
+++ b/deployments/se-proxy/opteesp/service_proxy_factory.c
@@ -8,9 +8,7 @@
#include <rpc/common/endpoint/rpc_interface.h>
#include <service/attestation/provider/attest_provider.h>
#include <service/attestation/provider/serializer/packed-c/packedc_attest_provider_serializer.h>
-#include <service/crypto/provider/crypto_provider.h>
-#include <service/crypto/provider/serializer/protobuf/pb_crypto_provider_serializer.h>
-#include <service/crypto/provider/serializer/packed-c/packedc_crypto_provider_serializer.h>
+#include <service/crypto/factory/crypto_provider_factory.h>
#include <components/service/secure_storage/frontend/secure_storage_provider/secure_storage_provider.h>
/* Not needed once proxy backends added */
@@ -74,19 +72,12 @@
struct rpc_interface *crypto_proxy_create(void)
{
struct rpc_interface *crypto_iface = NULL;
-
- /* Static objects for proxy instance */
- static struct crypto_provider crypto_provider;
+ struct crypto_provider *crypto_provider;
if (mbedcrypto_backend_init(shared_storage_backend, 0) == PSA_SUCCESS) {
- crypto_iface = crypto_provider_init(&crypto_provider);
-
- crypto_provider_register_serializer(&crypto_provider,
- TS_RPC_ENCODING_PROTOBUF, pb_crypto_provider_serializer_instance());
-
- crypto_provider_register_serializer(&crypto_provider,
- TS_RPC_ENCODING_PACKED_C, packedc_crypto_provider_serializer_instance());
+ crypto_provider = crypto_provider_factory_create();
+ crypto_iface = service_provider_get_rpc_interface(&crypto_provider->base_provider);
}
return crypto_iface;