Add packed-c protocol support for crypto service

To provide a lightweight parameter encoding that is aligned to
conventions used by SCMI, the packed-c parameter serialization has
been added to the crypto service.  This builds on generic
components that allow other packed-c service access protocols
to be added easily.  Service level tests have been extended to
use both protobuf and packed-c clients.

Signed-off-by: julhal01 <julian.hall@arm.com>
Change-Id: I9279b0814bcc9cf6c4aa4e30629e2f46f2df4c23
diff --git a/deployments/component-test/component-test.cmake b/deployments/component-test/component-test.cmake
index 3af6d02..deadf11 100644
--- a/deployments/component-test/component-test.cmake
+++ b/deployments/component-test/component-test.cmake
@@ -18,8 +18,11 @@
 		"components/app/ts-demo/test"
 		"components/common/uuid"
 		"components/common/uuid/test"
+		"components/common/tlv"
+		"components/common/tlv/test"
 		"components/rpc/common/caller"
 		"components/rpc/common/interface"
+		"components/rpc/common/test/protocol"
 		"components/rpc/direct"
 		"components/rpc/dummy"
 		"components/service/common"
@@ -32,13 +35,19 @@
 		"components/service/locator/standalone"
 		"components/service/locator/standalone/services/crypto"
 		"components/service/crypto/client/cpp"
+		"components/service/crypto/client/cpp/protobuf"
+		"components/service/crypto/client/cpp/packed-c"
 		"components/service/crypto/client/test"
 		"components/service/crypto/client/test/standalone"
 		"components/service/crypto/provider/mbedcrypto"
 		"components/service/crypto/provider/mbedcrypto/entropy_source/mock"
 		"components/service/crypto/provider/serializer/protobuf"
+		"components/service/crypto/provider/serializer/packed-c"
 		"components/service/crypto/test/unit"
 		"components/service/crypto/test/service"
+		"components/service/crypto/test/service/protobuf"
+		"components/service/crypto/test/service/packed-c"
+		"components/service/crypto/test/protocol"
 		"components/service/secure_storage/client/psa"
 		"components/service/secure_storage/provider/mock_store"
 		"components/service/secure_storage/provider/secure_flash_store"
@@ -47,7 +56,6 @@
 		"components/service/secure_storage/test"
 		"protocols/rpc/common/protobuf"
 		"protocols/rpc/common/packed-c"
-		"protocols/rpc/common/packed-c/test"
 		"protocols/service/crypto/packed-c"
 		"protocols/service/crypto/protobuf"
 		"protocols/service/secure_storage/packed-c"
diff --git a/deployments/crypto/opteesp/CMakeLists.txt b/deployments/crypto/opteesp/CMakeLists.txt
index fec7b69..38bc42d 100644
--- a/deployments/crypto/opteesp/CMakeLists.txt
+++ b/deployments/crypto/opteesp/CMakeLists.txt
@@ -31,6 +31,7 @@
 add_components(TARGET "crypto-sp"
 	BASE_DIR ${TS_ROOT}
 	COMPONENTS
+		"components/common/tlv"
 		"components/messaging/ffa/libsp"
 		"components/rpc/ffarpc/endpoint"
 		"components/rpc/ffarpc/caller/sp"
@@ -43,6 +44,7 @@
 		"components/service/crypto/provider/mbedcrypto"
 		"components/service/crypto/provider/mbedcrypto/entropy_source/mock"
 		"components/service/crypto/provider/serializer/protobuf"
+		"components/service/crypto/provider/serializer/packed-c"
 		"components/service/secure_storage/client/psa"
 		"protocols/rpc/common/packed-c"
 		"protocols/service/secure_storage/packed-c"
diff --git a/deployments/crypto/opteesp/crypto_sp.c b/deployments/crypto/opteesp/crypto_sp.c
index 5756d1b..ea60d1c 100644
--- a/deployments/crypto/opteesp/crypto_sp.c
+++ b/deployments/crypto/opteesp/crypto_sp.c
@@ -9,6 +9,7 @@
 #include <service/secure_storage/client/psa/its/its_client.h>
 #include <service/crypto/provider/mbedcrypto/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 <protocols/rpc/common/packed-c/status.h>
 #include <ffa_api.h>
 #include <sp_api.h>
@@ -59,9 +60,13 @@
 
 	/* Initialize the crypto service */
 	crypto_iface = mbed_crypto_provider_init(&crypto_provider, storage_caller);
-    mbed_crypto_provider_register_serializer(&crypto_provider,
+
+	mbed_crypto_provider_register_serializer(&crypto_provider,
                     TS_RPC_ENCODING_PROTOBUF, pb_crypto_provider_serializer_instance());
 
+	mbed_crypto_provider_register_serializer(&crypto_provider,
+                    TS_RPC_ENCODING_PACKED_C, packedc_crypto_provider_serializer_instance());
+
 	ffa_call_ep_init(&ffarpc_call_ep, crypto_iface);
 
  	/* End of boot phase */
diff --git a/deployments/libts/linux-pc/CMakeLists.txt b/deployments/libts/linux-pc/CMakeLists.txt
index 8de05fd..9c798ad 100644
--- a/deployments/libts/linux-pc/CMakeLists.txt
+++ b/deployments/libts/linux-pc/CMakeLists.txt
@@ -1,5 +1,5 @@
 #-------------------------------------------------------------------------------
-# Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2020-2021, Arm Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -30,6 +30,7 @@
 	BASE_DIR ${TS_ROOT}
 	COMPONENTS
 		"components/rpc/direct"
+		"components/common/tlv"
 		"components/service/common"
 		"components/service/common/serializer/protobuf"
 		"components/service/common/provider"
@@ -38,6 +39,7 @@
 		"components/service/crypto/provider/mbedcrypto"
 		"components/service/crypto/provider/mbedcrypto/entropy_source/mock"
 		"components/service/crypto/provider/serializer/protobuf"
+		"components/service/crypto/provider/serializer/packed-c"
 		"components/service/secure_storage/client/psa"
 		"components/service/secure_storage/provider/secure_flash_store"
 		"components/service/secure_storage/provider/secure_flash_store/flash_fs"
@@ -82,10 +84,16 @@
 	BASE_DIR ${TS_ROOT}
 	COMPONENTS
 		"components/app/test-runner"
+		"components/common/tlv"
 		"components/service/crypto/test/service"
+		"components/service/crypto/test/service/protobuf"
+		"components/service/crypto/test/service/packed-c"
 		"components/service/crypto/client/cpp"
+		"components/service/crypto/client/cpp/protobuf"
+		"components/service/crypto/client/cpp/packed-c"
 		"components/service/common/serializer/protobuf"
 		"protocols/service/crypto/protobuf"
+		"protocols/service/crypto/packed-c"
 )
 
 #-------------------------------------------------------------------------------
diff --git a/deployments/ts-demo/ts-demo.cmake b/deployments/ts-demo/ts-demo.cmake
index d6f1067..828a31e 100644
--- a/deployments/ts-demo/ts-demo.cmake
+++ b/deployments/ts-demo/ts-demo.cmake
@@ -36,9 +36,10 @@
 	BASE_DIR ${TS_ROOT}
 	COMPONENTS
 		"components/app/ts-demo"
+		"components/common/tlv"
 		"components/service/crypto/client/cpp"
-		"components/service/common/serializer/protobuf"
-		"protocols/service/crypto/protobuf"
+		"components/service/crypto/client/cpp/packed-c"
+		"protocols/service/crypto/packed-c"
 )
 
 #-------------------------------------------------------------------------------
@@ -46,11 +47,6 @@
 #
 #-------------------------------------------------------------------------------
 
-# Nanopb
-include(${TS_ROOT}/external/nanopb/nanopb.cmake)
-target_link_libraries(ts-demo PRIVATE nanopb::protobuf-nanopb-static)
-protobuf_generate_all(TGT "ts-demo" NAMESPACE "protobuf" BASE_DIR "${TS_ROOT}/protocols")
-
 # Mbedcrypto
 include(${TS_ROOT}/external/mbed-crypto/mbedcrypto.cmake)
 target_link_libraries(ts-demo PRIVATE mbedcrypto)
diff --git a/deployments/ts-demo/ts-demo.cpp b/deployments/ts-demo/ts-demo.cpp
index eaa8b52..2f607e6 100644
--- a/deployments/ts-demo/ts-demo.cpp
+++ b/deployments/ts-demo/ts-demo.cpp
@@ -3,7 +3,7 @@
  * Copyright (c) 2020-2021, Arm Limited and Contributors. All rights reserved.
  */
 
-#include <service/crypto/client/cpp/crypto_client.h>
+#include <service/crypto/client/cpp/packed-c/packedc_crypto_client.h>
 #include <protocols/rpc/common/packed-c/encoding.h>
 #include <app/ts-demo/ts-demo.h>
 #include <service_locator.h>
@@ -25,11 +25,11 @@
 		struct rpc_caller *caller;
 		rpc_session_handle rpc_session_handle;
 
-		rpc_session_handle = service_context_open(crypto_service_context, TS_RPC_ENCODING_PROTOBUF, &caller);
+		rpc_session_handle = service_context_open(crypto_service_context, TS_RPC_ENCODING_PACKED_C, &caller);
 
 		if (rpc_session_handle) {
 
-			crypto_client crypto_client(caller);
+			packedc_crypto_client crypto_client(caller);
 
 			status = run_ts_demo(&crypto_client, true);
 
diff --git a/deployments/ts-service-test/ts-service-test.cmake b/deployments/ts-service-test/ts-service-test.cmake
index 5630a99..4bd8c71 100644
--- a/deployments/ts-service-test/ts-service-test.cmake
+++ b/deployments/ts-service-test/ts-service-test.cmake
@@ -27,10 +27,16 @@
 	TARGET "ts-service-test"
 	BASE_DIR ${TS_ROOT}
 	COMPONENTS
+		"components/common/tlv"
 		"components/service/crypto/test/service"
+		"components/service/crypto/test/service/protobuf"
+		"components/service/crypto/test/service/packed-c"
 		"components/service/crypto/client/cpp"
+		"components/service/crypto/client/cpp/protobuf"
+		"components/service/crypto/client/cpp/packed-c"
 		"components/service/common/serializer/protobuf"
 		"protocols/service/crypto/protobuf"
+		"protocols/service/crypto/packed-c"
 )
 
 #-------------------------------------------------------------------------------