[UTC][key-manager][ACR-1852] Add key-manager extended API tests 82/314682/1
authorFilip Skrzeczkowski <f.skrzeczkow@samsung.com>
Tue, 9 Jul 2024 14:21:07 +0000 (16:21 +0200)
committerFilip Skrzeczkowski <f.skrzeczkow@samsung.com>
Wed, 17 Jul 2024 09:27:02 +0000 (11:27 +0200)
Change-Id: I4181442b97c6280047db439dbc9651764fea2533

packaging/utc/core-key-manager-tests.xml
src/utc/key-manager/CMakeLists.txt
src/utc/key-manager/public.list
src/utc/key-manager/tct-key-manager-core_mobile.h
src/utc/key-manager/tct-key-manager-core_tizeniot.h
src/utc/key-manager/tct-key-manager-core_tv.h
src/utc/key-manager/tct-key-manager-core_wearable.h
src/utc/key-manager/utc-key-manager-extended.c [new file with mode: 0644]

index 9004a665c82bba08125d6b2d4bc826a7d3abddeb..968c33cfcbfe7c9885e031080d82e697e3400c90 100755 (executable)
@@ -13,5 +13,6 @@
     </ui-application>
     <privileges>
         <privilege>http://tizen.org/privilege/internet</privilege>
+        <privilege>http://tizen.org/privilege/keymanager.extended</privilege>
     </privileges>
 </manifest>
index 6b65bb6b114bd8ff716644d05692a5f54ce08b5b..922e02cb1b137eb016bad86668d139eb41d61a26 100644 (file)
@@ -6,6 +6,7 @@ SET(RPM_NAME "core-${PKG_NAME}-tests")
 SET(CAPI_LIB "key-manager")
 SET(TC_SOURCES
     utc-key-manager-crypto.c
+    utc-key-manager-extended.c
     utc-key-manager-storage.c
     utc-key-manager-type.c
     res-util.c
index 3949c8274459b33f31a7e870aa3f9eb0259b1ed9..fd51ba45393a88d774d80cb4d699847c7c42fdcb 100755 (executable)
@@ -27,3 +27,5 @@ ckmc_remove_alias
 ckmc_get_pkcs12
 ckmc_pkcs12_load
 ckmc_pkcs12_free
+ckmc_wrap_concatenated_data
+ckmc_unwrap_concatenated_data
index cc056607fe9c49b01c02208fca1fde9f43cf337b..33e7d22e63a2bd35869d027497ebe2a358b2d2fe 100755 (executable)
@@ -25,6 +25,8 @@ extern void utc_key_manager_store_startup(void);
 extern void utc_key_manager_store_cleanup(void);
 extern void utc_key_manager_type_startup(void);
 extern void utc_key_manager_type_cleanup(void);
+extern void utc_key_manager_extended_startup(void);
+extern void utc_key_manager_extended_cleanup(void);
 
 extern int utc_ckmc_create_key_pair_rsa_p(void);
 extern int utc_ckmc_create_key_pair_rsa_n(void);
@@ -179,6 +181,15 @@ extern int utc_ckmc_get_cert_alias_info_list_n(void);
 extern int utc_ckmc_get_data_alias_info_list_p1(void);
 extern int utc_ckmc_get_data_alias_info_list_p2(void);
 extern int utc_ckmc_get_data_alias_info_list_n(void);
+extern int utc_ckmc_wrap_unwrap_concatenated_data_p1(void);
+extern int utc_ckmc_wrap_unwrap_concatenated_data_p2(void);
+extern int utc_ckmc_wrap_concatenated_data_n1(void);
+extern int utc_ckmc_wrap_concatenated_data_n2(void);
+extern int utc_ckmc_wrap_concatenated_data_n3(void);
+extern int utc_ckmc_unwrap_concatenated_data_n1(void);
+extern int utc_ckmc_unwrap_concatenated_data_n2(void);
+extern int utc_ckmc_unwrap_concatenated_data_n3(void);
+extern int utc_ckmc_unwrap_concatenated_data_n4(void);
 
 testcase tc_array[] = {
        {"utc_ckmc_create_key_pair_rsa_p",utc_ckmc_create_key_pair_rsa_p,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup},
@@ -334,6 +345,15 @@ testcase tc_array[] = {
        {"utc_ckmc_get_data_alias_info_list_p1",utc_ckmc_get_data_alias_info_list_p1,utc_key_manager_type_startup,utc_key_manager_type_cleanup},
        {"utc_ckmc_get_data_alias_info_list_p2",utc_ckmc_get_data_alias_info_list_p2,utc_key_manager_type_startup,utc_key_manager_type_cleanup},
        {"utc_ckmc_get_data_alias_info_list_n",utc_ckmc_get_data_alias_info_list_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup},
+       {"utc_ckmc_wrap_unwrap_concatenated_data_p1",utc_ckmc_wrap_unwrap_concatenated_data_p1,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_unwrap_concatenated_data_p2",utc_ckmc_wrap_unwrap_concatenated_data_p2,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_concatenated_data_n1",utc_ckmc_wrap_concatenated_data_n1,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_concatenated_data_n2",utc_ckmc_wrap_concatenated_data_n2,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_concatenated_data_n3",utc_ckmc_wrap_concatenated_data_n3,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n1",utc_ckmc_unwrap_concatenated_data_n1,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n2",utc_ckmc_unwrap_concatenated_data_n2,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n3",utc_ckmc_unwrap_concatenated_data_n3,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n4",utc_ckmc_unwrap_concatenated_data_n4,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
        {NULL, NULL}
 };
 
index cc056607fe9c49b01c02208fca1fde9f43cf337b..33e7d22e63a2bd35869d027497ebe2a358b2d2fe 100755 (executable)
@@ -25,6 +25,8 @@ extern void utc_key_manager_store_startup(void);
 extern void utc_key_manager_store_cleanup(void);
 extern void utc_key_manager_type_startup(void);
 extern void utc_key_manager_type_cleanup(void);
+extern void utc_key_manager_extended_startup(void);
+extern void utc_key_manager_extended_cleanup(void);
 
 extern int utc_ckmc_create_key_pair_rsa_p(void);
 extern int utc_ckmc_create_key_pair_rsa_n(void);
@@ -179,6 +181,15 @@ extern int utc_ckmc_get_cert_alias_info_list_n(void);
 extern int utc_ckmc_get_data_alias_info_list_p1(void);
 extern int utc_ckmc_get_data_alias_info_list_p2(void);
 extern int utc_ckmc_get_data_alias_info_list_n(void);
+extern int utc_ckmc_wrap_unwrap_concatenated_data_p1(void);
+extern int utc_ckmc_wrap_unwrap_concatenated_data_p2(void);
+extern int utc_ckmc_wrap_concatenated_data_n1(void);
+extern int utc_ckmc_wrap_concatenated_data_n2(void);
+extern int utc_ckmc_wrap_concatenated_data_n3(void);
+extern int utc_ckmc_unwrap_concatenated_data_n1(void);
+extern int utc_ckmc_unwrap_concatenated_data_n2(void);
+extern int utc_ckmc_unwrap_concatenated_data_n3(void);
+extern int utc_ckmc_unwrap_concatenated_data_n4(void);
 
 testcase tc_array[] = {
        {"utc_ckmc_create_key_pair_rsa_p",utc_ckmc_create_key_pair_rsa_p,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup},
@@ -334,6 +345,15 @@ testcase tc_array[] = {
        {"utc_ckmc_get_data_alias_info_list_p1",utc_ckmc_get_data_alias_info_list_p1,utc_key_manager_type_startup,utc_key_manager_type_cleanup},
        {"utc_ckmc_get_data_alias_info_list_p2",utc_ckmc_get_data_alias_info_list_p2,utc_key_manager_type_startup,utc_key_manager_type_cleanup},
        {"utc_ckmc_get_data_alias_info_list_n",utc_ckmc_get_data_alias_info_list_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup},
+       {"utc_ckmc_wrap_unwrap_concatenated_data_p1",utc_ckmc_wrap_unwrap_concatenated_data_p1,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_unwrap_concatenated_data_p2",utc_ckmc_wrap_unwrap_concatenated_data_p2,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_concatenated_data_n1",utc_ckmc_wrap_concatenated_data_n1,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_concatenated_data_n2",utc_ckmc_wrap_concatenated_data_n2,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_concatenated_data_n3",utc_ckmc_wrap_concatenated_data_n3,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n1",utc_ckmc_unwrap_concatenated_data_n1,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n2",utc_ckmc_unwrap_concatenated_data_n2,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n3",utc_ckmc_unwrap_concatenated_data_n3,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n4",utc_ckmc_unwrap_concatenated_data_n4,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
        {NULL, NULL}
 };
 
index cc056607fe9c49b01c02208fca1fde9f43cf337b..33e7d22e63a2bd35869d027497ebe2a358b2d2fe 100755 (executable)
@@ -25,6 +25,8 @@ extern void utc_key_manager_store_startup(void);
 extern void utc_key_manager_store_cleanup(void);
 extern void utc_key_manager_type_startup(void);
 extern void utc_key_manager_type_cleanup(void);
+extern void utc_key_manager_extended_startup(void);
+extern void utc_key_manager_extended_cleanup(void);
 
 extern int utc_ckmc_create_key_pair_rsa_p(void);
 extern int utc_ckmc_create_key_pair_rsa_n(void);
@@ -179,6 +181,15 @@ extern int utc_ckmc_get_cert_alias_info_list_n(void);
 extern int utc_ckmc_get_data_alias_info_list_p1(void);
 extern int utc_ckmc_get_data_alias_info_list_p2(void);
 extern int utc_ckmc_get_data_alias_info_list_n(void);
+extern int utc_ckmc_wrap_unwrap_concatenated_data_p1(void);
+extern int utc_ckmc_wrap_unwrap_concatenated_data_p2(void);
+extern int utc_ckmc_wrap_concatenated_data_n1(void);
+extern int utc_ckmc_wrap_concatenated_data_n2(void);
+extern int utc_ckmc_wrap_concatenated_data_n3(void);
+extern int utc_ckmc_unwrap_concatenated_data_n1(void);
+extern int utc_ckmc_unwrap_concatenated_data_n2(void);
+extern int utc_ckmc_unwrap_concatenated_data_n3(void);
+extern int utc_ckmc_unwrap_concatenated_data_n4(void);
 
 testcase tc_array[] = {
        {"utc_ckmc_create_key_pair_rsa_p",utc_ckmc_create_key_pair_rsa_p,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup},
@@ -334,6 +345,15 @@ testcase tc_array[] = {
        {"utc_ckmc_get_data_alias_info_list_p1",utc_ckmc_get_data_alias_info_list_p1,utc_key_manager_type_startup,utc_key_manager_type_cleanup},
        {"utc_ckmc_get_data_alias_info_list_p2",utc_ckmc_get_data_alias_info_list_p2,utc_key_manager_type_startup,utc_key_manager_type_cleanup},
        {"utc_ckmc_get_data_alias_info_list_n",utc_ckmc_get_data_alias_info_list_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup},
+       {"utc_ckmc_wrap_unwrap_concatenated_data_p1",utc_ckmc_wrap_unwrap_concatenated_data_p1,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_unwrap_concatenated_data_p2",utc_ckmc_wrap_unwrap_concatenated_data_p2,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_concatenated_data_n1",utc_ckmc_wrap_concatenated_data_n1,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_concatenated_data_n2",utc_ckmc_wrap_concatenated_data_n2,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_concatenated_data_n3",utc_ckmc_wrap_concatenated_data_n3,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n1",utc_ckmc_unwrap_concatenated_data_n1,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n2",utc_ckmc_unwrap_concatenated_data_n2,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n3",utc_ckmc_unwrap_concatenated_data_n3,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n4",utc_ckmc_unwrap_concatenated_data_n4,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
        {NULL, NULL}
 };
 
index cc056607fe9c49b01c02208fca1fde9f43cf337b..33e7d22e63a2bd35869d027497ebe2a358b2d2fe 100755 (executable)
@@ -25,6 +25,8 @@ extern void utc_key_manager_store_startup(void);
 extern void utc_key_manager_store_cleanup(void);
 extern void utc_key_manager_type_startup(void);
 extern void utc_key_manager_type_cleanup(void);
+extern void utc_key_manager_extended_startup(void);
+extern void utc_key_manager_extended_cleanup(void);
 
 extern int utc_ckmc_create_key_pair_rsa_p(void);
 extern int utc_ckmc_create_key_pair_rsa_n(void);
@@ -179,6 +181,15 @@ extern int utc_ckmc_get_cert_alias_info_list_n(void);
 extern int utc_ckmc_get_data_alias_info_list_p1(void);
 extern int utc_ckmc_get_data_alias_info_list_p2(void);
 extern int utc_ckmc_get_data_alias_info_list_n(void);
+extern int utc_ckmc_wrap_unwrap_concatenated_data_p1(void);
+extern int utc_ckmc_wrap_unwrap_concatenated_data_p2(void);
+extern int utc_ckmc_wrap_concatenated_data_n1(void);
+extern int utc_ckmc_wrap_concatenated_data_n2(void);
+extern int utc_ckmc_wrap_concatenated_data_n3(void);
+extern int utc_ckmc_unwrap_concatenated_data_n1(void);
+extern int utc_ckmc_unwrap_concatenated_data_n2(void);
+extern int utc_ckmc_unwrap_concatenated_data_n3(void);
+extern int utc_ckmc_unwrap_concatenated_data_n4(void);
 
 testcase tc_array[] = {
        {"utc_ckmc_create_key_pair_rsa_p",utc_ckmc_create_key_pair_rsa_p,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup},
@@ -334,6 +345,15 @@ testcase tc_array[] = {
        {"utc_ckmc_get_data_alias_info_list_p1",utc_ckmc_get_data_alias_info_list_p1,utc_key_manager_type_startup,utc_key_manager_type_cleanup},
        {"utc_ckmc_get_data_alias_info_list_p2",utc_ckmc_get_data_alias_info_list_p2,utc_key_manager_type_startup,utc_key_manager_type_cleanup},
        {"utc_ckmc_get_data_alias_info_list_n",utc_ckmc_get_data_alias_info_list_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup},
+       {"utc_ckmc_wrap_unwrap_concatenated_data_p1",utc_ckmc_wrap_unwrap_concatenated_data_p1,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_unwrap_concatenated_data_p2",utc_ckmc_wrap_unwrap_concatenated_data_p2,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_concatenated_data_n1",utc_ckmc_wrap_concatenated_data_n1,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_concatenated_data_n2",utc_ckmc_wrap_concatenated_data_n2,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_wrap_concatenated_data_n3",utc_ckmc_wrap_concatenated_data_n3,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n1",utc_ckmc_unwrap_concatenated_data_n1,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n2",utc_ckmc_unwrap_concatenated_data_n2,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n3",utc_ckmc_unwrap_concatenated_data_n3,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
+       {"utc_ckmc_unwrap_concatenated_data_n4",utc_ckmc_unwrap_concatenated_data_n4,utc_key_manager_extended_startup,utc_key_manager_extended_cleanup},
        {NULL, NULL}
 };
 
diff --git a/src/utc/key-manager/utc-key-manager-extended.c b/src/utc/key-manager/utc-key-manager-extended.c
new file mode 100644 (file)
index 0000000..6d6bc7e
--- /dev/null
@@ -0,0 +1,549 @@
+//
+// Copyright (c) 2024 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "assert.h"
+
+#include <ckmc/ckmc-manager.h>
+#include <ckmc/ckmc-extended.h>
+#include <ckmc/ckmc-control.h>
+#include <ckmc/ckmc-type.h>
+#include <ckmc/ckmc-error.h>
+
+#include <string.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+#define PASS "test-pass-1"
+
+const char* prvAlias = "RSA-prv-test";
+const char* pubAlias = "RSA-pub-test";
+const char* aliasAES = "AES-test";
+const char* AES_KEY_IMP = "AES_KEY_IMP";
+
+const ckmc_policy_s policyExp = {NULL, 1};
+const ckmc_policy_s policyExpPass = {(char*)PASS, 1};
+const ckmc_policy_s policyUnexp = {NULL, 0};
+
+ckmc_param_list_h params = NULL;
+ckmc_raw_buffer_s *data = NULL;
+ckmc_raw_buffer_s *dataImp = NULL;
+ckmc_key_s *wrappedKey = NULL;
+
+/**
+ * @function        utc_key_manager_extended_startup
+ * @description     Called before each test
+ * @parameter       NA
+ * @return          NA
+ */
+void utc_key_manager_extended_startup(void)
+{
+    ckmc_generate_new_params(CKMC_ALGO_RSA_OAEP, &params);
+    ckmc_param_list_set_integer(params, CKMC_PARAM_ED_OAEP_HASH, CKMC_HASH_SHA384);
+    ckmc_buffer_new((unsigned char*)"somedata", 9, &data);
+}
+
+/**
+ * @function        utc_key_manager_extended_cleanup
+ * @description     Called after each test
+ * @parameter       NA
+ * @return          NA
+ */
+void utc_key_manager_extended_cleanup(void)
+{
+    ckmc_remove_key(prvAlias);
+    ckmc_remove_key(pubAlias);
+    ckmc_remove_key(aliasAES);
+    ckmc_param_list_free(params);
+    ckmc_buffer_free(data);
+    ckmc_remove_alias(AES_KEY_IMP);
+}
+
+/**
+ * @testcase        utc_ckmc_wrap_unwrap_concatenated_data_p1
+ * @since_tizen     7.0
+ * @description     Wrap and unwrap exportable concatenated data.
+ * @scenario        Wrap an AES key, unwrap it and compare the result with the original key.
+ */
+int utc_ckmc_wrap_unwrap_concatenated_data_p1(void)
+{
+    ckmc_key_s *aesKey = NULL;
+    ckmc_key_s *aesKeyImp = NULL;
+
+    int temp = ckmc_create_key_pair_rsa(4096, prvAlias, pubAlias, policyExp, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+    temp = ckmc_create_key_aes(256, aliasAES, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_wrap_concatenated_data(params,
+                pubAlias,
+                NULL,
+                aliasAES,
+                NULL,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_unwrap_concatenated_data(params,
+                prvAlias,
+                NULL,
+                wrappedKey,
+                AES_KEY_IMP,
+                256,
+                policyExp,
+                &dataImp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    assert_eq(data->size, dataImp->size);
+    assert_eq(memcmp(data->data, dataImp->data, data->size), 0);
+
+    temp = ckmc_get_key(aliasAES, NULL, &aesKey);
+    assert_eq(temp, CKMC_ERROR_NONE);
+    temp = ckmc_get_key(AES_KEY_IMP, NULL, &aesKeyImp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    assert_eq(aesKey->key_size, aesKeyImp->key_size);
+    assert_eq(0, memcmp(aesKey->raw_key, aesKeyImp->raw_key, aesKey->key_size));
+
+    ckmc_buffer_free(dataImp);
+    ckmc_key_free(wrappedKey);
+    ckmc_key_free(aesKey);
+    ckmc_key_free(aesKeyImp);
+
+    return 0;
+}
+
+/**
+ * @testcase        utc_ckmc_wrap_unwrap_concatenated_data_p2
+ * @since_tizen     7.0
+ * @description     Wrap and unwrap unexportable concatenated data.
+ * @scenario        Wrap an AES key, unwrap it and indirectly compare the result with the original
+ *                  key by encrypting some data with one and decrypting with the other, then
+ *                  comparing the decrypted data with the original.
+ */
+int utc_ckmc_wrap_unwrap_concatenated_data_p2(void)
+{
+    ckmc_raw_buffer_s *encrypted = NULL;
+    ckmc_raw_buffer_s *decrypted = NULL;
+    ckmc_param_list_h paramsAES = NULL;
+    ckmc_raw_buffer_s *iv = NULL;
+    char ivData[16] = {0};
+
+    int temp = ckmc_create_key_pair_rsa(2048, prvAlias, pubAlias, policyUnexp, policyUnexp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+    temp = ckmc_create_key_aes(128, aliasAES, policyUnexp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_wrap_concatenated_data(params,
+                pubAlias,
+                NULL,
+                aliasAES,
+                NULL,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_unwrap_concatenated_data(params,
+                prvAlias,
+                NULL,
+                wrappedKey,
+                AES_KEY_IMP,
+                128,
+                policyUnexp,
+                &dataImp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    assert_eq(data->size, dataImp->size);
+    assert_eq(memcmp(data->data, dataImp->data, data->size), 0);
+
+    temp = ckmc_generate_new_params(CKMC_ALGO_AES_CBC, &paramsAES);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    ckmc_buffer_new((unsigned char*)ivData, 16, &iv);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_param_list_set_buffer(paramsAES, CKMC_PARAM_ED_IV, iv);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_encrypt_data(paramsAES,
+                aliasAES,
+                NULL,
+                *data,
+                &encrypted);
+    assert_eq(temp, CKMC_ERROR_NONE);
+    temp = ckmc_decrypt_data(paramsAES,
+                AES_KEY_IMP,
+                NULL,
+                *encrypted,
+                &decrypted);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    assert_eq(data->size, decrypted->size);
+    assert_eq(memcmp(data->data, decrypted->data, data->size), 0);
+
+    ckmc_buffer_free(dataImp);
+    ckmc_buffer_free(encrypted);
+    ckmc_buffer_free(decrypted);
+    ckmc_buffer_free(iv);
+    ckmc_param_list_free(paramsAES);
+    ckmc_key_free(wrappedKey);
+
+    return 0;
+}
+
+/**
+ * @testcase        utc_ckmc_wrap_concatenated_data_n1
+ * @since_tizen     7.0
+ * @description     Wrap concatenated data with an invalid alias.
+ * @scenario        Wrap an AES key while providing either an invalid private RSA key alias or an
+ *                  invalid AES key alias.
+ */
+int utc_ckmc_wrap_concatenated_data_n1(void)
+{
+    int temp = ckmc_create_key_pair_rsa(3072, prvAlias, pubAlias, policyExp, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+    temp = ckmc_create_key_aes(128, aliasAES, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_wrap_concatenated_data(params,
+                pubAlias,
+                NULL,
+                "invalid_alias",
+                NULL,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_DB_ALIAS_UNKNOWN);
+
+    temp = ckmc_wrap_concatenated_data(params,
+                "invalid_alias",
+                NULL,
+                aliasAES,
+                NULL,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_DB_ALIAS_UNKNOWN);
+
+    return 0;
+}
+
+/**
+ * @testcase        utc_ckmc_wrap_concatenated_data_n2
+ * @since_tizen     7.0
+ * @description     Wrap concatenated data with invalid parameters.
+ * @scenario        Wrap an AES key while providing NULL parameters.
+ */
+int utc_ckmc_wrap_concatenated_data_n2(void)
+{
+    int temp = ckmc_create_key_pair_rsa(3072, prvAlias, pubAlias, policyExp, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+    temp = ckmc_create_key_aes(128, aliasAES, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    ckmc_raw_buffer_s *wrongSizeData = NULL;
+    char* buf = (char*)malloc(1024*sizeof(char));
+    temp = ckmc_buffer_new((unsigned char*)buf, 1024, &wrongSizeData);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_wrap_concatenated_data(params,
+                pubAlias,
+                NULL,
+                aliasAES,
+                NULL,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_wrap_concatenated_data(params,
+                NULL,
+                NULL,
+                aliasAES,
+                NULL,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_INVALID_PARAMETER);
+
+    temp = ckmc_wrap_concatenated_data(params,
+                pubAlias,
+                NULL,
+                NULL,
+                NULL,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_INVALID_PARAMETER);
+
+    temp = ckmc_wrap_concatenated_data(params,
+                pubAlias,
+                NULL,
+                aliasAES,
+                NULL,
+                data,
+                NULL);
+    assert_eq(temp, CKMC_ERROR_INVALID_PARAMETER);
+
+    temp = ckmc_wrap_concatenated_data(params,
+                pubAlias,
+                NULL,
+                aliasAES,
+                NULL,
+                wrongSizeData,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_INVALID_PARAMETER);
+
+    temp = ckmc_wrap_concatenated_data(NULL,
+                pubAlias,
+                NULL,
+                aliasAES,
+                NULL,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_INVALID_PARAMETER);
+
+    ckmc_buffer_free(wrongSizeData);
+    free(buf);
+
+    return 0;
+}
+
+/**
+ * @testcase        utc_ckmc_wrap_concatenated_data_n3
+ * @since_tizen     7.0
+ * @description     Wrap concatenated data with failed authentication.
+ * @scenario        Wrap an AES key while providing either an RSA passowrd or an AES password when
+ *                  neither ot them is requierd due to the policy.
+ */
+int utc_ckmc_wrap_concatenated_data_n3(void)
+{
+    int temp = ckmc_create_key_pair_rsa(2048, prvAlias, pubAlias, policyExp, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+    temp = ckmc_create_key_aes(192, aliasAES, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    const char* passwordRSA = "unrequired RSA password";
+    temp = ckmc_wrap_concatenated_data(params,
+                pubAlias,
+                passwordRSA,
+                aliasAES,
+                NULL,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_AUTHENTICATION_FAILED);
+
+    const char* passwordAES = "unrequired AES password";
+    temp = ckmc_wrap_concatenated_data(params,
+                pubAlias,
+                NULL,
+                aliasAES,
+                passwordAES,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_AUTHENTICATION_FAILED);
+
+    return 0;
+}
+
+/**
+ * @testcase        utc_ckmc_unwrap_concatenated_data_n1
+ * @since_tizen     7.0
+ * @description     Unwrap concatenated data with an unknown alias.
+ * @scenario        Wrap an AES key and then try to unwrap it while providing an invalid RSA alias.
+ */
+int utc_ckmc_unwrap_concatenated_data_n1(void)
+{
+    int temp = ckmc_create_key_pair_rsa(3072, prvAlias, pubAlias, policyExp, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+    temp = ckmc_create_key_aes(192, aliasAES, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_wrap_concatenated_data(params,
+                pubAlias,
+                NULL,
+                aliasAES,
+                NULL,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_unwrap_concatenated_data(params,
+                "invalid alias",
+                NULL,
+                wrappedKey,
+                AES_KEY_IMP,
+                192,
+                policyExp,
+                &dataImp);
+    assert_eq(temp, CKMC_ERROR_DB_ALIAS_UNKNOWN);
+
+    ckmc_key_free(wrappedKey);
+
+    return 0;
+}
+
+/**
+ * @testcase        utc_ckmc_unwrap_concatenated_data_n2
+ * @since_tizen     7.0
+ * @description     Unwrap concatenated data while an AES alias already exists.
+ * @scenario        Wrap an AES key and then try to unwrap it while an AES alias already exists.
+ */
+int utc_ckmc_unwrap_concatenated_data_n2(void)
+{
+    int temp = ckmc_create_key_pair_rsa(3072, prvAlias, pubAlias, policyExp, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+    temp = ckmc_create_key_aes(192, aliasAES, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_wrap_concatenated_data(params,
+                pubAlias,
+                NULL,
+                aliasAES,
+                NULL,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_create_key_aes(192, AES_KEY_IMP, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_unwrap_concatenated_data(params,
+                prvAlias,
+                NULL,
+                wrappedKey,
+                AES_KEY_IMP,
+                192,
+                policyExp,
+                &dataImp);
+    assert_eq(temp, CKMC_ERROR_DB_ALIAS_EXISTS);
+
+    ckmc_key_free(wrappedKey);
+
+    return 0;
+}
+
+/**
+ * @testcase        utc_ckmc_unwrap_concatenated_data_n3
+ * @since_tizen     7.0
+ * @description     Unwrap concatenated data with invalid parameters.
+ * @scenario        Wrap an AES key and try to unwrap it while providing NULL parameters.
+ */
+int utc_ckmc_unwrap_concatenated_data_n3(void)
+{
+    int temp = ckmc_create_key_pair_rsa(3072, prvAlias, pubAlias, policyExp, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+    temp = ckmc_create_key_aes(192, aliasAES, policyExp);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_wrap_concatenated_data(params,
+                pubAlias,
+                NULL,
+                aliasAES,
+                NULL,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_unwrap_concatenated_data(params,
+                NULL,
+                NULL,
+                wrappedKey,
+                AES_KEY_IMP,
+                192,
+                policyExp,
+                &dataImp);
+    assert_eq(temp, CKMC_ERROR_INVALID_PARAMETER);
+
+    temp = ckmc_unwrap_concatenated_data(params,
+                prvAlias,
+                NULL,
+                NULL,
+                AES_KEY_IMP,
+                192,
+                policyExp,
+                &dataImp);
+    assert_eq(temp, CKMC_ERROR_INVALID_PARAMETER);
+
+    temp = ckmc_unwrap_concatenated_data(params,
+                prvAlias,
+                NULL,
+                wrappedKey,
+                NULL,
+                192,
+                policyExp,
+                &dataImp);
+    assert_eq(temp, CKMC_ERROR_INVALID_PARAMETER);
+
+    temp = ckmc_unwrap_concatenated_data(params,
+                prvAlias,
+                NULL,
+                wrappedKey,
+                AES_KEY_IMP,
+                1024,
+                policyExp,
+                &dataImp);
+    assert_eq(temp, CKMC_ERROR_INVALID_PARAMETER);
+
+    temp = ckmc_unwrap_concatenated_data(NULL,
+                prvAlias,
+                NULL,
+                wrappedKey,
+                AES_KEY_IMP,
+                192,
+                policyExp,
+                &dataImp);
+    assert_eq(temp, CKMC_ERROR_INVALID_PARAMETER);
+
+    ckmc_key_free(wrappedKey);
+
+    return 0;
+}
+
+/**
+ * @testcase        utc_ckmc_unwrap_concatenated_data_n4
+ * @since_tizen     7.0
+ * @description     Unwrap concatenated data with failed authentication.
+ * @scenario        Wrap an AES key and try to unwrap it while providing an incorrect RSA key
+ *                  password.
+ */
+int utc_ckmc_unwrap_concatenated_data_n4(void)
+{
+    int temp = ckmc_create_key_pair_rsa(3072, prvAlias, pubAlias,
+                policyExpPass, policyExpPass);
+    assert_eq(temp, CKMC_ERROR_NONE);
+    temp = ckmc_create_key_aes(192, aliasAES, policyExpPass);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    temp = ckmc_wrap_concatenated_data(params,
+                pubAlias,
+                PASS,
+                aliasAES,
+                PASS,
+                data,
+                &wrappedKey);
+    assert_eq(temp, CKMC_ERROR_NONE);
+
+    const char* incorrectPasswordRSA = "incorrect RSA password";
+    temp = ckmc_unwrap_concatenated_data(params,
+                prvAlias,
+                incorrectPasswordRSA,
+                wrappedKey,
+                "AES_KEY_IMP",
+                192,
+                policyExpPass,
+                &dataImp
+                );
+    assert_eq(temp, CKMC_ERROR_AUTHENTICATION_FAILED);
+
+    ckmc_key_free(wrappedKey);
+
+    return 0;
+}
\ No newline at end of file