From: Filip Skrzeczkowski Date: Tue, 9 Jul 2024 14:21:07 +0000 (+0200) Subject: [UTC][key-manager][ACR-1852] Add key-manager extended API tests X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F81%2F314681%2F1;p=test%2Ftct%2Fnative%2Fapi.git [UTC][key-manager][ACR-1852] Add key-manager extended API tests Change-Id: I4181442b97c6280047db439dbc9651764fea2533 --- diff --git a/packaging/utc/core-key-manager-tests.xml b/packaging/utc/core-key-manager-tests.xml index 9004a665c..968c33cfc 100755 --- a/packaging/utc/core-key-manager-tests.xml +++ b/packaging/utc/core-key-manager-tests.xml @@ -13,5 +13,6 @@ http://tizen.org/privilege/internet + http://tizen.org/privilege/keymanager.extended diff --git a/src/utc/key-manager/CMakeLists.txt b/src/utc/key-manager/CMakeLists.txt index 6b65bb6b1..922e02cb1 100644 --- a/src/utc/key-manager/CMakeLists.txt +++ b/src/utc/key-manager/CMakeLists.txt @@ -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 diff --git a/src/utc/key-manager/public.list b/src/utc/key-manager/public.list index 3949c8274..fd51ba453 100755 --- a/src/utc/key-manager/public.list +++ b/src/utc/key-manager/public.list @@ -27,3 +27,5 @@ ckmc_remove_alias ckmc_get_pkcs12 ckmc_pkcs12_load ckmc_pkcs12_free +ckmc_wrap_concatenated_data +ckmc_unwrap_concatenated_data diff --git a/src/utc/key-manager/tct-key-manager-core_mobile.h b/src/utc/key-manager/tct-key-manager-core_mobile.h index cc056607f..33e7d22e6 100755 --- a/src/utc/key-manager/tct-key-manager-core_mobile.h +++ b/src/utc/key-manager/tct-key-manager-core_mobile.h @@ -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/tct-key-manager-core_tizeniot.h b/src/utc/key-manager/tct-key-manager-core_tizeniot.h index cc056607f..33e7d22e6 100755 --- a/src/utc/key-manager/tct-key-manager-core_tizeniot.h +++ b/src/utc/key-manager/tct-key-manager-core_tizeniot.h @@ -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/tct-key-manager-core_tv.h b/src/utc/key-manager/tct-key-manager-core_tv.h index cc056607f..33e7d22e6 100755 --- a/src/utc/key-manager/tct-key-manager-core_tv.h +++ b/src/utc/key-manager/tct-key-manager-core_tv.h @@ -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/tct-key-manager-core_wearable.h b/src/utc/key-manager/tct-key-manager-core_wearable.h index cc056607f..33e7d22e6 100755 --- a/src/utc/key-manager/tct-key-manager-core_wearable.h +++ b/src/utc/key-manager/tct-key-manager-core_wearable.h @@ -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 index 000000000..6d6bc7eb8 --- /dev/null +++ b/src/utc/key-manager/utc-key-manager-extended.c @@ -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 +#include +#include +#include +#include + +#include +#include +#include +#include + +#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, ¶ms); + 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, ¶msAES); + 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