From: Krzysztof Jackiewicz Date: Mon, 12 Jun 2023 11:36:00 +0000 (+0200) Subject: [ITC][UTC][key-manager][ACR-1770] Tests for cipher and backend API X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=20b97d7bf2b2c36f4233bf41ea59be44bc61452e;p=test%2Ftct%2Fnative%2Fapi.git [ITC][UTC][key-manager][ACR-1770] Tests for cipher and backend API Change-Id: I290874048234dfbe5fae0d5f89f485d879a6fac3 --- diff --git a/src/itc/key-manager/ITs-key-manager.c b/src/itc/key-manager/ITs-key-manager.c index 4d4ea0e3c..f5a44c52f 100755 --- a/src/itc/key-manager/ITs-key-manager.c +++ b/src/itc/key-manager/ITs-key-manager.c @@ -1891,6 +1891,216 @@ cleanup: return 1; } +//& purpose: Encrypts data using the cipher API +//& type: auto +/** +* @testcase ITc_ckmc_cipher_api_p +* @since 6.0 +* @author SRPOL(k.jackiewicz) +* @reviewer SRPOL(d.michaluk) +* @type auto +* @scenario Creates AES key, encrypts and decrypts data with it +* @apicovered ckmc_cipher_init, ckmc_cipher_update, ckmc_cipher_finalize +* @passcase API returns 0 and decrypyted data is identical to the original +* @failcase API returns non zero value or decrypted data is different then the original +* @precondition AES key must be created +* @postcondition NA +*/ + +int ITc_ckmc_cipher_api_p(void) +{ + START_TEST; + + const ckmc_policy_s unexportable = {"", false}; + ckmc_raw_buffer_s plaintext_buffer; + ckmc_raw_buffer_s aad_buffer; + ckmc_raw_buffer_s iv_buffer; + ckmc_cipher_ctx_h context = NULL; + ckmc_param_list_h params = NULL; + unsigned char plaintext[400] = {0, }; + unsigned char aad[sizeof(plaintext)/2] = {0, }; + unsigned char iv[12] = {0, }; + const size_t DATA_CHUNK = 100; + size_t aad_written = 0; + size_t plaintext_written = 0; + const size_t BLOCKS = (sizeof(plaintext) + DATA_CHUNK - 1) / DATA_CHUNK; + size_t encrypted_idx = 0; + ckmc_raw_buffer_s *encrypted[BLOCKS]; + ckmc_raw_buffer_s *decrypted[BLOCKS]; + ckmc_raw_buffer_s *tag = NULL; + ckmc_raw_buffer_s *tmp = NULL; + int nRet; + const char* KEY_ALIAS = "AES-key"; + + for (size_t i = 0; i < sizeof(plaintext); i++) { + plaintext[i] = i & 0xff; + if (i < sizeof(aad)) + aad[i] = (i + 10) & 0xff; + if (i < sizeof(iv)) + iv[i] = (i + 20) & 0xff; + } + + ckmc_remove_alias(KEY_ALIAS); + nRet = ckmc_create_key_aes(256, KEY_ALIAS, unexportable); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "Preconditon for ITc_ckmc_cipher_api_p (ckmc_create_aes_key)", KeyMngrGetError(nRet)); + goto cleanup; + } + + nRet = ckmc_generate_new_params(CKMC_ALGO_AES_GCM, ¶ms); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "Preconditon for ITc_ckmc_cipher_api_p (ckmc_generate_new_params)", KeyMngrGetError(nRet)); + goto cleanup; + } + + iv_buffer.data = iv; + iv_buffer.size = sizeof(iv); + nRet = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_IV, &iv_buffer); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "Preconditon for ITc_ckmc_cipher_api_p (ckmc_param_list_set_buffer)", KeyMngrGetError(nRet)); + goto cleanup; + } + + aad_buffer.data = aad; + aad_buffer.size = DATA_CHUNK; + nRet = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_AAD, &aad_buffer); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "Preconditon for ITc_ckmc_cipher_api_p (ckmc_param_list_set_buffer)", KeyMngrGetError(nRet)); + goto cleanup; + } + + // Encryption + nRet = ckmc_cipher_initialize(params, KEY_ALIAS, NULL, true, &context); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "ckmc_cipher_initialize", KeyMngrGetError(nRet)); + goto cleanup; + } + + aad_written = aad_buffer.size; + while (aad_written < sizeof(aad)) { + aad_buffer.data = &aad[aad_written]; + aad_buffer.size = DATA_CHUNK; + if (aad_written + DATA_CHUNK > sizeof(aad)) + aad_buffer.size = sizeof(aad) - aad_written; + + nRet = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_AAD, &aad_buffer); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "Preconditon for ITc_ckmc_cipher_api_p (ckmc_param_list_set_buffer)", KeyMngrGetError(nRet)); + goto cleanup; + } + + nRet = ckmc_cipher_initialize(params, KEY_ALIAS, NULL, true, &context); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "ckmc_cipher_initialize", KeyMngrGetError(nRet)); + goto cleanup; + } + aad_written += aad_buffer.size; + } + + while (plaintext_written < sizeof(plaintext)) { + plaintext_buffer.data = &plaintext[plaintext_written]; + plaintext_buffer.size = DATA_CHUNK; + if (plaintext_written + DATA_CHUNK > sizeof(plaintext)) + plaintext_buffer.size = sizeof(plaintext) - plaintext_written; + + nRet = ckmc_cipher_update(context, plaintext_buffer, &encrypted[encrypted_idx]); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "ckmc_cipher_update", KeyMngrGetError(nRet)); + goto cleanup; + } + encrypted_idx++; + plaintext_written += plaintext_buffer.size; + } + + nRet = ckmc_cipher_finalize(context, NULL, &tag); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "ckmc_cipher_finalize", KeyMngrGetError(nRet)); + goto cleanup; + } + + ckmc_cipher_free(context); + context = NULL; + + // Decryption + aad_buffer.data = aad; + aad_buffer.size = DATA_CHUNK; + nRet = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_AAD, &aad_buffer); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "ckmc_param_list_set_buffer", KeyMngrGetError(nRet)); + goto cleanup; + } + + nRet = ckmc_cipher_initialize(params, KEY_ALIAS, NULL, false, &context); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "ckmc_cipher_initialize", KeyMngrGetError(nRet)); + goto cleanup; + } + + aad_written = aad_buffer.size; + while (aad_written < sizeof(aad)) { + aad_buffer.data = &aad[aad_written]; + aad_buffer.size = DATA_CHUNK; + if (aad_written + DATA_CHUNK > sizeof(aad)) + aad_buffer.size = sizeof(aad) - aad_written; + + nRet = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_AAD, &aad_buffer); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "Preconditon for ITc_ckmc_cipher_api_p (ckmc_param_list_set_buffer)", KeyMngrGetError(nRet)); + goto cleanup; + } + + nRet = ckmc_cipher_initialize(params, KEY_ALIAS, NULL, false, &context); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "ckmc_cipher_initialize", KeyMngrGetError(nRet)); + goto cleanup; + } + aad_written += aad_buffer.size; + } + + for (size_t i = 0; i < BLOCKS; i++) { + nRet = ckmc_cipher_update(context, *encrypted[i], &decrypted[i]); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "ckmc_cipher_update", KeyMngrGetError(nRet)); + goto cleanup; + } + } + + nRet = ckmc_cipher_finalize(context, tag, &tmp); + if (nRet != CKMC_ERROR_NONE) { + PRINT_RESULT_NORETURN(CKMC_ERROR_NONE, nRet, "ckmc_cipher_finalize", KeyMngrGetError(nRet)); + goto cleanup; + } + if (tmp != NULL) { + PRINT_RESULT_NORETURN((tmp == NULL), true, "ckmc_cipher_finalize", "unexpected output"); + goto cleanup; + } + + // Comparison + size_t pIdx = 0; + for (size_t i = 0; i < BLOCKS; i++) { + nRet = memcmp(decrypted[i]->data, &plaintext[pIdx], decrypted[i]->size); + if (nRet != 0) { + PRINT_RESULT_NORETURN(0, nRet, "memcmp", "Buffers not equal"); + nRet = CKMC_ERROR_INVALID_PARAMETER; + goto cleanup; + } + pIdx += decrypted[i]->size; + } + nRet = CKMC_ERROR_NONE; + +cleanup: + ckmc_remove_alias(KEY_ALIAS); + ckmc_param_list_free(params); + ckmc_cipher_free(context); + for (size_t i = 0; i < BLOCKS; i++) { + ckmc_buffer_free(encrypted[i]); + ckmc_buffer_free(decrypted[i]); + } + ckmc_buffer_free(tag); + ckmc_buffer_free(tmp); + return nRet == CKMC_ERROR_NONE ? 0 : 1; +} + //& purpose: Creates AES key and stores it inside key manager based on the policy. //& type: auto /** @@ -2364,6 +2574,87 @@ int ITc_ckmc_alias_info_is_password_protected_p(void) RemoveAlias(pszAlias2); } +//& purpose: Gets the backend identifier from ckmc_alias_info_s structure. +//& type: auto +/** +* @testcase ITc_ckmc_alias_info_get_backend_p +* @since 6.0 +* @author SRPOL(k.jackiewicz) +* @reviewer SRPOL(d.michaluk) +* @type auto +* @scenario Gets the backend identifier from ckmc_alias_info_s structure. +* @apicovered ckmc_alias_info_get_backend +* @passcase When ckmc_alias_info_get_backend API returns 0 +* @failcase If ckmc_alias_info_get_backend returns non zero value +* @precondition NA +* @postcondition NA +*/ +int ITc_ckmc_alias_info_get_backend_p(void) +{ + START_TEST; + + int nRet = -1; + char* pszAlias1 = "Alias1"; + char* pszAlias2 = "Alias2"; + ckmc_backend_id_e backendId; + + //precondition start + SaveKey(pszAlias1, &nRet); + PRINT_RESULT(CKMC_ERROR_NONE, nRet, "Precondition1 failed for ITc_ckmc_get_key_alias_info_list_p", KeyMngrGetError(nRet)); + + SaveKey(pszAlias2, &nRet); + PRINT_RESULT_CLEANUP(CKMC_ERROR_NONE, nRet, "Precondition2 failed for ITc_ckmc_get_key_alias_info_list_p", KeyMngrGetError(nRet), RemoveAlias(pszAlias1)); + //precondition end + + ckmc_alias_info_list_s *pszAliasList = NULL; + nRet = ckmc_get_key_alias_info_list(&pszAliasList); + PRINT_RESULT_CLEANUP(CKMC_ERROR_NONE, nRet, "ckmc_get_key_alias_info_list", KeyMngrGetError(nRet), RemoveAlias(pszAlias1);RemoveAlias(pszAlias2)); + CHECK_HANDLE_CLEANUP(pszAliasList, "ckmc_get_key_alias_info_list", RemoveAlias(pszAlias1);RemoveAlias(pszAlias2)); + + nRet = ckmc_alias_info_get_backend(pszAliasList->info, &backendId); + PRINT_RESULT_CLEANUP(CKMC_ERROR_NONE, nRet, "ckmc_alias_info_get_backend", KeyMngrGetError(nRet), RemoveAlias(pszAlias1);RemoveAlias(pszAlias2);ckmc_alias_info_list_all_free(pszAliasList)); + + ckmc_alias_info_list_all_free(pszAliasList); + RemoveAlias(pszAlias1); + RemoveAlias(pszAlias2); + + return 0; +} + +//& purpose: Gets the backend info. +//& type: auto +/** +* @testcase ITc_ckmc_get_backend_info_p +* @since 6.0 +* @author SRPOL(k.jackiewicz) +* @reviewer SRPOL(d.michaluk) +* @type auto +* @scenario Gets the backend info +* @apicovered ckmc_get_backend_info, ckmc_backend_get_max_chunk_size, ckmc_backend_info_free +* @passcase When API returns 0 +* @failcase If API returns non zero value +* @precondition NA +* @postcondition NA +*/ +int ITc_ckmc_get_backend_info_p(void) +{ + START_TEST; + + int nRet = -1; + ckmc_backend_info_h info; + size_t maxChunk; + + nRet = ckmc_get_backend_info(CKMC_BACKEND_SW, &info); + PRINT_RESULT(CKMC_ERROR_NONE, nRet, "ckmc_get_backend_info", KeyMngrGetError(nRet)); + + nRet = ckmc_backend_get_max_chunk_size(info, &maxChunk); + PRINT_RESULT_CLEANUP(CKMC_ERROR_NONE, nRet, "ckmc_backend_get_max_chunk_size", KeyMngrGetError(nRet), ckmc_backend_info_free(info)); + + ckmc_backend_info_free(info); + + return 0; +} + //& purpose: Gets the alias from #ckmc_alias_info_s structure. //& type: auto /** diff --git a/src/itc/key-manager/tct-key-manager-native_mobile.h b/src/itc/key-manager/tct-key-manager-native_mobile.h index d45d255de..a4487e54f 100755 --- a/src/itc/key-manager/tct-key-manager-native_mobile.h +++ b/src/itc/key-manager/tct-key-manager-native_mobile.h @@ -58,6 +58,7 @@ extern int ITc_ckmc_cert_list_free_p(void); extern int ITc_ckmc_encrypt_decrypt_data_p(void); extern int ITc_ckmc_import_export_wrapped_key_p(void); extern int ITc_ckmc_key_derive_p(void); +extern int ITc_ckmc_cipher_api_p(void); extern int ITc_ckmc_create_key_aes_p(void); extern int ITc_ckmc_param_list_new_free_p(void); extern int ITc_ckmc_generate_new_params_p(void); @@ -69,6 +70,8 @@ extern int ITc_ckmc_alias_info_list_all_free_p(void); extern int ITc_ckmc_get_cert_alias_info_list_p(void); extern int ITc_ckmc_get_data_alias_info_list_p(void); extern int ITc_ckmc_alias_info_is_password_protected_p(void); +extern int ITc_ckmc_alias_info_get_backend_p(void); +extern int ITc_ckmc_get_backend_info_p(void); extern int ITc_ckmc_alias_info_get_alias_p(void); testcase tc_array[] = { @@ -108,6 +111,7 @@ testcase tc_array[] = { {"ITc_ckmc_encrypt_decrypt_data_p",ITc_ckmc_encrypt_decrypt_data_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_import_export_wrapped_key_p",ITc_ckmc_import_export_wrapped_key_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_key_derive_p",ITc_ckmc_key_derive_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, + {"ITc_ckmc_cipher_api_p",ITc_ckmc_cipher_api_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_create_key_aes_p",ITc_ckmc_create_key_aes_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_param_list_new_free_p",ITc_ckmc_param_list_new_free_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_generate_new_params_p",ITc_ckmc_generate_new_params_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, @@ -119,6 +123,8 @@ testcase tc_array[] = { {"ITc_ckmc_get_cert_alias_info_list_p", ITc_ckmc_get_cert_alias_info_list_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_get_data_alias_info_list_p", ITc_ckmc_get_data_alias_info_list_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_alias_info_is_password_protected_p", ITc_ckmc_alias_info_is_password_protected_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, + {"ITc_ckmc_alias_info_get_backend_p", ITc_ckmc_alias_info_get_backend_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, + {"ITc_ckmc_get_backend_info_p", ITc_ckmc_get_backend_info_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_alias_info_get_alias_p", ITc_ckmc_alias_info_get_alias_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {NULL, NULL} }; diff --git a/src/itc/key-manager/tct-key-manager-native_tizeniot.h b/src/itc/key-manager/tct-key-manager-native_tizeniot.h index d45d255de..a4487e54f 100755 --- a/src/itc/key-manager/tct-key-manager-native_tizeniot.h +++ b/src/itc/key-manager/tct-key-manager-native_tizeniot.h @@ -58,6 +58,7 @@ extern int ITc_ckmc_cert_list_free_p(void); extern int ITc_ckmc_encrypt_decrypt_data_p(void); extern int ITc_ckmc_import_export_wrapped_key_p(void); extern int ITc_ckmc_key_derive_p(void); +extern int ITc_ckmc_cipher_api_p(void); extern int ITc_ckmc_create_key_aes_p(void); extern int ITc_ckmc_param_list_new_free_p(void); extern int ITc_ckmc_generate_new_params_p(void); @@ -69,6 +70,8 @@ extern int ITc_ckmc_alias_info_list_all_free_p(void); extern int ITc_ckmc_get_cert_alias_info_list_p(void); extern int ITc_ckmc_get_data_alias_info_list_p(void); extern int ITc_ckmc_alias_info_is_password_protected_p(void); +extern int ITc_ckmc_alias_info_get_backend_p(void); +extern int ITc_ckmc_get_backend_info_p(void); extern int ITc_ckmc_alias_info_get_alias_p(void); testcase tc_array[] = { @@ -108,6 +111,7 @@ testcase tc_array[] = { {"ITc_ckmc_encrypt_decrypt_data_p",ITc_ckmc_encrypt_decrypt_data_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_import_export_wrapped_key_p",ITc_ckmc_import_export_wrapped_key_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_key_derive_p",ITc_ckmc_key_derive_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, + {"ITc_ckmc_cipher_api_p",ITc_ckmc_cipher_api_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_create_key_aes_p",ITc_ckmc_create_key_aes_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_param_list_new_free_p",ITc_ckmc_param_list_new_free_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_generate_new_params_p",ITc_ckmc_generate_new_params_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, @@ -119,6 +123,8 @@ testcase tc_array[] = { {"ITc_ckmc_get_cert_alias_info_list_p", ITc_ckmc_get_cert_alias_info_list_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_get_data_alias_info_list_p", ITc_ckmc_get_data_alias_info_list_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_alias_info_is_password_protected_p", ITc_ckmc_alias_info_is_password_protected_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, + {"ITc_ckmc_alias_info_get_backend_p", ITc_ckmc_alias_info_get_backend_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, + {"ITc_ckmc_get_backend_info_p", ITc_ckmc_get_backend_info_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_alias_info_get_alias_p", ITc_ckmc_alias_info_get_alias_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {NULL, NULL} }; diff --git a/src/itc/key-manager/tct-key-manager-native_tv.h b/src/itc/key-manager/tct-key-manager-native_tv.h index d45d255de..a4487e54f 100755 --- a/src/itc/key-manager/tct-key-manager-native_tv.h +++ b/src/itc/key-manager/tct-key-manager-native_tv.h @@ -58,6 +58,7 @@ extern int ITc_ckmc_cert_list_free_p(void); extern int ITc_ckmc_encrypt_decrypt_data_p(void); extern int ITc_ckmc_import_export_wrapped_key_p(void); extern int ITc_ckmc_key_derive_p(void); +extern int ITc_ckmc_cipher_api_p(void); extern int ITc_ckmc_create_key_aes_p(void); extern int ITc_ckmc_param_list_new_free_p(void); extern int ITc_ckmc_generate_new_params_p(void); @@ -69,6 +70,8 @@ extern int ITc_ckmc_alias_info_list_all_free_p(void); extern int ITc_ckmc_get_cert_alias_info_list_p(void); extern int ITc_ckmc_get_data_alias_info_list_p(void); extern int ITc_ckmc_alias_info_is_password_protected_p(void); +extern int ITc_ckmc_alias_info_get_backend_p(void); +extern int ITc_ckmc_get_backend_info_p(void); extern int ITc_ckmc_alias_info_get_alias_p(void); testcase tc_array[] = { @@ -108,6 +111,7 @@ testcase tc_array[] = { {"ITc_ckmc_encrypt_decrypt_data_p",ITc_ckmc_encrypt_decrypt_data_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_import_export_wrapped_key_p",ITc_ckmc_import_export_wrapped_key_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_key_derive_p",ITc_ckmc_key_derive_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, + {"ITc_ckmc_cipher_api_p",ITc_ckmc_cipher_api_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_create_key_aes_p",ITc_ckmc_create_key_aes_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_param_list_new_free_p",ITc_ckmc_param_list_new_free_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_generate_new_params_p",ITc_ckmc_generate_new_params_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, @@ -119,6 +123,8 @@ testcase tc_array[] = { {"ITc_ckmc_get_cert_alias_info_list_p", ITc_ckmc_get_cert_alias_info_list_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_get_data_alias_info_list_p", ITc_ckmc_get_data_alias_info_list_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_alias_info_is_password_protected_p", ITc_ckmc_alias_info_is_password_protected_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, + {"ITc_ckmc_alias_info_get_backend_p", ITc_ckmc_alias_info_get_backend_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, + {"ITc_ckmc_get_backend_info_p", ITc_ckmc_get_backend_info_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_alias_info_get_alias_p", ITc_ckmc_alias_info_get_alias_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {NULL, NULL} }; diff --git a/src/itc/key-manager/tct-key-manager-native_wearable.h b/src/itc/key-manager/tct-key-manager-native_wearable.h index d45d255de..a4487e54f 100755 --- a/src/itc/key-manager/tct-key-manager-native_wearable.h +++ b/src/itc/key-manager/tct-key-manager-native_wearable.h @@ -58,6 +58,7 @@ extern int ITc_ckmc_cert_list_free_p(void); extern int ITc_ckmc_encrypt_decrypt_data_p(void); extern int ITc_ckmc_import_export_wrapped_key_p(void); extern int ITc_ckmc_key_derive_p(void); +extern int ITc_ckmc_cipher_api_p(void); extern int ITc_ckmc_create_key_aes_p(void); extern int ITc_ckmc_param_list_new_free_p(void); extern int ITc_ckmc_generate_new_params_p(void); @@ -69,6 +70,8 @@ extern int ITc_ckmc_alias_info_list_all_free_p(void); extern int ITc_ckmc_get_cert_alias_info_list_p(void); extern int ITc_ckmc_get_data_alias_info_list_p(void); extern int ITc_ckmc_alias_info_is_password_protected_p(void); +extern int ITc_ckmc_alias_info_get_backend_p(void); +extern int ITc_ckmc_get_backend_info_p(void); extern int ITc_ckmc_alias_info_get_alias_p(void); testcase tc_array[] = { @@ -108,6 +111,7 @@ testcase tc_array[] = { {"ITc_ckmc_encrypt_decrypt_data_p",ITc_ckmc_encrypt_decrypt_data_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_import_export_wrapped_key_p",ITc_ckmc_import_export_wrapped_key_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_key_derive_p",ITc_ckmc_key_derive_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, + {"ITc_ckmc_cipher_api_p",ITc_ckmc_cipher_api_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_create_key_aes_p",ITc_ckmc_create_key_aes_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_param_list_new_free_p",ITc_ckmc_param_list_new_free_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_generate_new_params_p",ITc_ckmc_generate_new_params_p,ITs_key_manager_startup,ITs_key_manager_cleanup}, @@ -119,6 +123,8 @@ testcase tc_array[] = { {"ITc_ckmc_get_cert_alias_info_list_p", ITc_ckmc_get_cert_alias_info_list_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_get_data_alias_info_list_p", ITc_ckmc_get_data_alias_info_list_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_alias_info_is_password_protected_p", ITc_ckmc_alias_info_is_password_protected_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, + {"ITc_ckmc_alias_info_get_backend_p", ITc_ckmc_alias_info_get_backend_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, + {"ITc_ckmc_get_backend_info_p", ITc_ckmc_get_backend_info_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {"ITc_ckmc_alias_info_get_alias_p", ITc_ckmc_alias_info_get_alias_p, ITs_key_manager_startup,ITs_key_manager_cleanup}, {NULL, NULL} }; 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 33d5cc7b6..cc056607f 100755 --- a/src/utc/key-manager/tct-key-manager-core_mobile.h +++ b/src/utc/key-manager/tct-key-manager-core_mobile.h @@ -58,6 +58,8 @@ extern int utc_ckmc_export_wrapped_key_p(void); extern int utc_ckmc_export_wrapped_key_n(void); extern int utc_ckmc_key_derive_p(void); extern int utc_ckmc_key_derive_n(void); +extern int utc_ckmc_cipher_api_p(void); +extern int utc_ckmc_cipher_api_n(void); extern int utc_ckmc_save_key_p(void); extern int utc_ckmc_save_key_n(void); extern int utc_ckmc_remove_key_p(void); @@ -165,6 +167,10 @@ extern int utc_ckmc_alias_info_get_alias_p(void); extern int utc_ckmc_alias_info_get_alias_n(void); extern int utc_ckmc_alias_info_is_password_protected_p(void); extern int utc_ckmc_alias_info_is_password_protected_n(void); +extern int utc_ckmc_alias_info_get_backend_p(void); +extern int utc_ckmc_alias_info_get_backend_n(void); +extern int utc_ckmc_get_backend_info_p(void); +extern int utc_ckmc_get_backend_info_n(void); extern int utc_ckmc_alias_info_list_all_free_p(void); extern int utc_ckmc_get_key_alias_info_list_p(void); extern int utc_ckmc_get_key_alias_info_list_n(void); @@ -207,6 +213,8 @@ testcase tc_array[] = { {"utc_ckmc_export_wrapped_key_n",utc_ckmc_export_wrapped_key_n,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, {"utc_ckmc_key_derive_p",utc_ckmc_key_derive_p,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, {"utc_ckmc_key_derive_n",utc_ckmc_key_derive_n,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, + {"utc_ckmc_cipher_api_p",utc_ckmc_cipher_api_p,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, + {"utc_ckmc_cipher_api_n",utc_ckmc_cipher_api_n,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, {"utc_ckmc_save_key_p",utc_ckmc_save_key_p,utc_key_manager_store_startup,utc_key_manager_store_cleanup}, {"utc_ckmc_save_key_n",utc_ckmc_save_key_n,utc_key_manager_store_startup,utc_key_manager_store_cleanup}, {"utc_ckmc_remove_key_p",utc_ckmc_remove_key_p,utc_key_manager_store_startup,utc_key_manager_store_cleanup}, @@ -314,6 +322,10 @@ testcase tc_array[] = { {"utc_ckmc_alias_info_get_alias_n",utc_ckmc_alias_info_get_alias_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_alias_info_is_password_protected_p",utc_ckmc_alias_info_is_password_protected_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_alias_info_is_password_protected_n",utc_ckmc_alias_info_is_password_protected_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_alias_info_get_backend_p",utc_ckmc_alias_info_get_backend_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_alias_info_get_backend_n",utc_ckmc_alias_info_get_backend_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_get_backend_info_p",utc_ckmc_get_backend_info_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_get_backend_info_n",utc_ckmc_get_backend_info_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_alias_info_list_all_free_p",utc_ckmc_alias_info_list_all_free_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_get_key_alias_info_list_p",utc_ckmc_get_key_alias_info_list_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_get_key_alias_info_list_n",utc_ckmc_get_key_alias_info_list_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, 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 33d5cc7b6..cc056607f 100755 --- a/src/utc/key-manager/tct-key-manager-core_tizeniot.h +++ b/src/utc/key-manager/tct-key-manager-core_tizeniot.h @@ -58,6 +58,8 @@ extern int utc_ckmc_export_wrapped_key_p(void); extern int utc_ckmc_export_wrapped_key_n(void); extern int utc_ckmc_key_derive_p(void); extern int utc_ckmc_key_derive_n(void); +extern int utc_ckmc_cipher_api_p(void); +extern int utc_ckmc_cipher_api_n(void); extern int utc_ckmc_save_key_p(void); extern int utc_ckmc_save_key_n(void); extern int utc_ckmc_remove_key_p(void); @@ -165,6 +167,10 @@ extern int utc_ckmc_alias_info_get_alias_p(void); extern int utc_ckmc_alias_info_get_alias_n(void); extern int utc_ckmc_alias_info_is_password_protected_p(void); extern int utc_ckmc_alias_info_is_password_protected_n(void); +extern int utc_ckmc_alias_info_get_backend_p(void); +extern int utc_ckmc_alias_info_get_backend_n(void); +extern int utc_ckmc_get_backend_info_p(void); +extern int utc_ckmc_get_backend_info_n(void); extern int utc_ckmc_alias_info_list_all_free_p(void); extern int utc_ckmc_get_key_alias_info_list_p(void); extern int utc_ckmc_get_key_alias_info_list_n(void); @@ -207,6 +213,8 @@ testcase tc_array[] = { {"utc_ckmc_export_wrapped_key_n",utc_ckmc_export_wrapped_key_n,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, {"utc_ckmc_key_derive_p",utc_ckmc_key_derive_p,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, {"utc_ckmc_key_derive_n",utc_ckmc_key_derive_n,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, + {"utc_ckmc_cipher_api_p",utc_ckmc_cipher_api_p,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, + {"utc_ckmc_cipher_api_n",utc_ckmc_cipher_api_n,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, {"utc_ckmc_save_key_p",utc_ckmc_save_key_p,utc_key_manager_store_startup,utc_key_manager_store_cleanup}, {"utc_ckmc_save_key_n",utc_ckmc_save_key_n,utc_key_manager_store_startup,utc_key_manager_store_cleanup}, {"utc_ckmc_remove_key_p",utc_ckmc_remove_key_p,utc_key_manager_store_startup,utc_key_manager_store_cleanup}, @@ -314,6 +322,10 @@ testcase tc_array[] = { {"utc_ckmc_alias_info_get_alias_n",utc_ckmc_alias_info_get_alias_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_alias_info_is_password_protected_p",utc_ckmc_alias_info_is_password_protected_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_alias_info_is_password_protected_n",utc_ckmc_alias_info_is_password_protected_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_alias_info_get_backend_p",utc_ckmc_alias_info_get_backend_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_alias_info_get_backend_n",utc_ckmc_alias_info_get_backend_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_get_backend_info_p",utc_ckmc_get_backend_info_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_get_backend_info_n",utc_ckmc_get_backend_info_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_alias_info_list_all_free_p",utc_ckmc_alias_info_list_all_free_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_get_key_alias_info_list_p",utc_ckmc_get_key_alias_info_list_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_get_key_alias_info_list_n",utc_ckmc_get_key_alias_info_list_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, 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 33d5cc7b6..cc056607f 100755 --- a/src/utc/key-manager/tct-key-manager-core_tv.h +++ b/src/utc/key-manager/tct-key-manager-core_tv.h @@ -58,6 +58,8 @@ extern int utc_ckmc_export_wrapped_key_p(void); extern int utc_ckmc_export_wrapped_key_n(void); extern int utc_ckmc_key_derive_p(void); extern int utc_ckmc_key_derive_n(void); +extern int utc_ckmc_cipher_api_p(void); +extern int utc_ckmc_cipher_api_n(void); extern int utc_ckmc_save_key_p(void); extern int utc_ckmc_save_key_n(void); extern int utc_ckmc_remove_key_p(void); @@ -165,6 +167,10 @@ extern int utc_ckmc_alias_info_get_alias_p(void); extern int utc_ckmc_alias_info_get_alias_n(void); extern int utc_ckmc_alias_info_is_password_protected_p(void); extern int utc_ckmc_alias_info_is_password_protected_n(void); +extern int utc_ckmc_alias_info_get_backend_p(void); +extern int utc_ckmc_alias_info_get_backend_n(void); +extern int utc_ckmc_get_backend_info_p(void); +extern int utc_ckmc_get_backend_info_n(void); extern int utc_ckmc_alias_info_list_all_free_p(void); extern int utc_ckmc_get_key_alias_info_list_p(void); extern int utc_ckmc_get_key_alias_info_list_n(void); @@ -207,6 +213,8 @@ testcase tc_array[] = { {"utc_ckmc_export_wrapped_key_n",utc_ckmc_export_wrapped_key_n,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, {"utc_ckmc_key_derive_p",utc_ckmc_key_derive_p,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, {"utc_ckmc_key_derive_n",utc_ckmc_key_derive_n,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, + {"utc_ckmc_cipher_api_p",utc_ckmc_cipher_api_p,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, + {"utc_ckmc_cipher_api_n",utc_ckmc_cipher_api_n,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, {"utc_ckmc_save_key_p",utc_ckmc_save_key_p,utc_key_manager_store_startup,utc_key_manager_store_cleanup}, {"utc_ckmc_save_key_n",utc_ckmc_save_key_n,utc_key_manager_store_startup,utc_key_manager_store_cleanup}, {"utc_ckmc_remove_key_p",utc_ckmc_remove_key_p,utc_key_manager_store_startup,utc_key_manager_store_cleanup}, @@ -314,6 +322,10 @@ testcase tc_array[] = { {"utc_ckmc_alias_info_get_alias_n",utc_ckmc_alias_info_get_alias_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_alias_info_is_password_protected_p",utc_ckmc_alias_info_is_password_protected_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_alias_info_is_password_protected_n",utc_ckmc_alias_info_is_password_protected_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_alias_info_get_backend_p",utc_ckmc_alias_info_get_backend_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_alias_info_get_backend_n",utc_ckmc_alias_info_get_backend_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_get_backend_info_p",utc_ckmc_get_backend_info_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_get_backend_info_n",utc_ckmc_get_backend_info_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_alias_info_list_all_free_p",utc_ckmc_alias_info_list_all_free_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_get_key_alias_info_list_p",utc_ckmc_get_key_alias_info_list_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_get_key_alias_info_list_n",utc_ckmc_get_key_alias_info_list_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, 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 33d5cc7b6..cc056607f 100755 --- a/src/utc/key-manager/tct-key-manager-core_wearable.h +++ b/src/utc/key-manager/tct-key-manager-core_wearable.h @@ -58,6 +58,8 @@ extern int utc_ckmc_export_wrapped_key_p(void); extern int utc_ckmc_export_wrapped_key_n(void); extern int utc_ckmc_key_derive_p(void); extern int utc_ckmc_key_derive_n(void); +extern int utc_ckmc_cipher_api_p(void); +extern int utc_ckmc_cipher_api_n(void); extern int utc_ckmc_save_key_p(void); extern int utc_ckmc_save_key_n(void); extern int utc_ckmc_remove_key_p(void); @@ -165,6 +167,10 @@ extern int utc_ckmc_alias_info_get_alias_p(void); extern int utc_ckmc_alias_info_get_alias_n(void); extern int utc_ckmc_alias_info_is_password_protected_p(void); extern int utc_ckmc_alias_info_is_password_protected_n(void); +extern int utc_ckmc_alias_info_get_backend_p(void); +extern int utc_ckmc_alias_info_get_backend_n(void); +extern int utc_ckmc_get_backend_info_p(void); +extern int utc_ckmc_get_backend_info_n(void); extern int utc_ckmc_alias_info_list_all_free_p(void); extern int utc_ckmc_get_key_alias_info_list_p(void); extern int utc_ckmc_get_key_alias_info_list_n(void); @@ -207,6 +213,8 @@ testcase tc_array[] = { {"utc_ckmc_export_wrapped_key_n",utc_ckmc_export_wrapped_key_n,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, {"utc_ckmc_key_derive_p",utc_ckmc_key_derive_p,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, {"utc_ckmc_key_derive_n",utc_ckmc_key_derive_n,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, + {"utc_ckmc_cipher_api_p",utc_ckmc_cipher_api_p,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, + {"utc_ckmc_cipher_api_n",utc_ckmc_cipher_api_n,utc_key_manager_crypto_startup,utc_key_manager_crypto_cleanup}, {"utc_ckmc_save_key_p",utc_ckmc_save_key_p,utc_key_manager_store_startup,utc_key_manager_store_cleanup}, {"utc_ckmc_save_key_n",utc_ckmc_save_key_n,utc_key_manager_store_startup,utc_key_manager_store_cleanup}, {"utc_ckmc_remove_key_p",utc_ckmc_remove_key_p,utc_key_manager_store_startup,utc_key_manager_store_cleanup}, @@ -314,6 +322,10 @@ testcase tc_array[] = { {"utc_ckmc_alias_info_get_alias_n",utc_ckmc_alias_info_get_alias_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_alias_info_is_password_protected_p",utc_ckmc_alias_info_is_password_protected_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_alias_info_is_password_protected_n",utc_ckmc_alias_info_is_password_protected_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_alias_info_get_backend_p",utc_ckmc_alias_info_get_backend_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_alias_info_get_backend_n",utc_ckmc_alias_info_get_backend_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_get_backend_info_p",utc_ckmc_get_backend_info_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, + {"utc_ckmc_get_backend_info_n",utc_ckmc_get_backend_info_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_alias_info_list_all_free_p",utc_ckmc_alias_info_list_all_free_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_get_key_alias_info_list_p",utc_ckmc_get_key_alias_info_list_p,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, {"utc_ckmc_get_key_alias_info_list_n",utc_ckmc_get_key_alias_info_list_n,utc_key_manager_type_startup,utc_key_manager_type_cleanup}, diff --git a/src/utc/key-manager/utc-key-manager-crypto.c b/src/utc/key-manager/utc-key-manager-crypto.c index e4f05c634..c29fac375 100755 --- a/src/utc/key-manager/utc-key-manager-crypto.c +++ b/src/utc/key-manager/utc-key-manager-crypto.c @@ -24,7 +24,6 @@ #include #include - FILE *g_fpLog; #define _PRINT_LOG(...) {\ @@ -1714,3 +1713,239 @@ int utc_ckmc_key_derive_n(void) return 0; } + +/** + * @testcase utc_ckmc_cipher_api_p + * @since_tizen 6.0 + * @description Encrypts and decrypts data using cipher API. + * @scenario Creates AES key, encrypts and decrypts data using the key and cipher API and compares the decrypted data with the original. + */ +int utc_ckmc_cipher_api_p(void) +{ + const ckmc_policy_s unexportable = {"", false}; + ckmc_raw_buffer_s plaintext_buffer; + ckmc_raw_buffer_s aad_buffer; + ckmc_raw_buffer_s iv_buffer; + ckmc_cipher_ctx_h context = NULL; + ckmc_param_list_h params = NULL; + unsigned char plaintext[400] = {0, }; + unsigned char aad[sizeof(plaintext)/2] = {0, }; + unsigned char iv[12] = {0, }; + const size_t DATA_CHUNK = 100; + size_t aad_written = 0; + size_t plaintext_written = 0; + const size_t BLOCKS = (sizeof(plaintext) + DATA_CHUNK - 1) / DATA_CHUNK; + size_t encrypted_idx = 0; + ckmc_raw_buffer_s *encrypted[BLOCKS]; + ckmc_raw_buffer_s *decrypted[BLOCKS]; + ckmc_raw_buffer_s *tag = NULL; + ckmc_raw_buffer_s *tmp = NULL; + int ret; + const char* KEY_ALIAS = "AES-key"; + + for (size_t i = 0; i < sizeof(plaintext); i++) { + plaintext[i] = i & 0xff; + if (i < sizeof(aad)) + aad[i] = (i + 10) & 0xff; + if (i < sizeof(iv)) + iv[i] = (i + 20) & 0xff; + } + + for (size_t i = 0; i < BLOCKS; i++) { + encrypted[i] = NULL; + decrypted[i] = NULL; + } + + ckmc_remove_alias(KEY_ALIAS); + ret = ckmc_create_key_aes(256, KEY_ALIAS, unexportable); + assert_eq(ret, CKMC_ERROR_NONE); + + ret = ckmc_generate_new_params(CKMC_ALGO_AES_GCM, ¶ms); + assert_eq(ret, CKMC_ERROR_NONE); + + iv_buffer.data = iv; + iv_buffer.size = sizeof(iv); + ret = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_IV, &iv_buffer); + assert_eq(ret, CKMC_ERROR_NONE); + + aad_buffer.data = aad; + aad_buffer.size = DATA_CHUNK; + ret = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_AAD, &aad_buffer); + assert_eq(ret, CKMC_ERROR_NONE); + + // Encryption + ret = ckmc_cipher_initialize(params, KEY_ALIAS, NULL, true, &context); + assert_eq(ret, CKMC_ERROR_NONE); + + aad_written = aad_buffer.size; + while (aad_written < sizeof(aad)) { + aad_buffer.data = &aad[aad_written]; + aad_buffer.size = DATA_CHUNK; + if (aad_written + DATA_CHUNK > sizeof(aad)) + aad_buffer.size = sizeof(aad) - aad_written; + + ret = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_AAD, &aad_buffer); + assert_eq(ret, CKMC_ERROR_NONE); + + ret = ckmc_cipher_initialize(params, KEY_ALIAS, NULL, true, &context); + assert_eq(ret, CKMC_ERROR_NONE); + + aad_written += aad_buffer.size; + } + + while (plaintext_written < sizeof(plaintext)) { + plaintext_buffer.data = &plaintext[plaintext_written]; + plaintext_buffer.size = DATA_CHUNK; + if (plaintext_written + DATA_CHUNK > sizeof(plaintext)) + plaintext_buffer.size = sizeof(plaintext) - plaintext_written; + + ret = ckmc_cipher_update(context, plaintext_buffer, &encrypted[encrypted_idx]); + assert_eq(ret, CKMC_ERROR_NONE); + encrypted_idx++; + + plaintext_written += plaintext_buffer.size; + } + + ret = ckmc_cipher_finalize(context, NULL, &tag); + assert_eq(ret, CKMC_ERROR_NONE); + + ckmc_cipher_free(context); + context = NULL; +// + // Decryption + aad_buffer.data = aad; + aad_buffer.size = DATA_CHUNK; + ret = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_AAD, &aad_buffer); + assert_eq(ret, CKMC_ERROR_NONE); + + ret = ckmc_cipher_initialize(params, KEY_ALIAS, NULL, false, &context); + assert_eq(ret, CKMC_ERROR_NONE); + + aad_written = aad_buffer.size; + while (aad_written < sizeof(aad)) { + aad_buffer.data = &aad[aad_written]; + aad_buffer.size = DATA_CHUNK; + if (aad_written + DATA_CHUNK > sizeof(aad)) + aad_buffer.size = sizeof(aad) - aad_written; + + ret = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_AAD, &aad_buffer); + assert_eq(ret, CKMC_ERROR_NONE); + + ret = ckmc_cipher_initialize(params, KEY_ALIAS, NULL, false, &context); + assert_eq(ret, CKMC_ERROR_NONE); + + aad_written += aad_buffer.size; + } + + for (size_t i = 0; i < BLOCKS; i++) { + ret = ckmc_cipher_update(context, *encrypted[i], &decrypted[i]); + assert_eq(ret, CKMC_ERROR_NONE); + } + ret = ckmc_cipher_finalize(context, tag, &tmp); + assert_eq(ret, CKMC_ERROR_NONE); + assert_eq(tmp, NULL); + + // Comparison + size_t pIdx = 0; + for (size_t i = 0; i < BLOCKS; i++) { + ret = memcmp(decrypted[i]->data, &plaintext[pIdx], decrypted[i]->size); + assert_eq(ret, 0); + pIdx += decrypted[i]->size; + } + + ckmc_remove_alias(KEY_ALIAS); + ckmc_param_list_free(params); + ckmc_cipher_free(context); + for (size_t i = 0; i < BLOCKS; i++) { + ckmc_buffer_free(encrypted[i]); + ckmc_buffer_free(decrypted[i]); + } + ckmc_buffer_free(tag); + ckmc_buffer_free(tmp); + + return 0; +} + +/** + * @testcase utc_ckmc_cipher_api_n + * @since_tizen 6.0 + * @description Cipher API with invalid paramters. + * @scenario Cipher API with invalid paramters. + */ +int utc_ckmc_cipher_api_n(void) +{ + const ckmc_policy_s unexportable = {"", false}; + ckmc_raw_buffer_s plaintext_buffer; + ckmc_raw_buffer_s iv_buffer; + ckmc_cipher_ctx_h context = NULL; + ckmc_param_list_h params = NULL; + unsigned char plaintext[400] = {0, }; + unsigned char iv[12] = {0, }; + ckmc_raw_buffer_s *encrypted; + ckmc_raw_buffer_s *tag = NULL; + int ret; + const char* KEY_ALIAS = "AES-key"; + + ckmc_remove_alias(KEY_ALIAS); + ret = ckmc_create_key_aes(256, KEY_ALIAS, unexportable); + assert_eq(ret, CKMC_ERROR_NONE); + + ret = ckmc_generate_new_params(CKMC_ALGO_AES_GCM, ¶ms); + assert_eq(ret, CKMC_ERROR_NONE); + + iv_buffer.data = iv; + iv_buffer.size = sizeof(iv); + ret = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_IV, &iv_buffer); + assert_eq(ret, CKMC_ERROR_NONE); + + // Encryption + ret = ckmc_cipher_initialize(NULL, KEY_ALIAS, NULL, true, &context); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + ret = ckmc_cipher_initialize(params, NULL, NULL, true, &context); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + ret = ckmc_cipher_initialize(params, "non-existent", NULL, true, &context); + assert_eq(ret, CKMC_ERROR_DB_ALIAS_UNKNOWN); + ret = ckmc_cipher_initialize(params, KEY_ALIAS, NULL, true, NULL); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + + ret = ckmc_cipher_initialize(params, KEY_ALIAS, NULL, true, &context); + assert_eq(ret, CKMC_ERROR_NONE); + + ret = ckmc_cipher_initialize(params, KEY_ALIAS, NULL, true, &context); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + + plaintext_buffer.data = plaintext; + plaintext_buffer.size = sizeof(plaintext); + ret = ckmc_cipher_update(NULL, plaintext_buffer, &encrypted); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + ret = ckmc_cipher_update(context, plaintext_buffer, NULL); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + + ret = ckmc_cipher_update(context, plaintext_buffer, &encrypted); + assert_eq(ret, CKMC_ERROR_NONE); + + ret = ckmc_cipher_initialize(params, KEY_ALIAS, NULL, true, &context); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + + ret = ckmc_cipher_finalize(NULL, NULL, &tag); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + ret = ckmc_cipher_finalize(context, NULL, NULL); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + + ret = ckmc_cipher_finalize(context, NULL, &tag); + assert_eq(ret, CKMC_ERROR_NONE); + + ret = ckmc_cipher_update(context, plaintext_buffer, &encrypted); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + + ret = ckmc_cipher_initialize(params, KEY_ALIAS, NULL, true, &context); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + + ckmc_remove_alias(KEY_ALIAS); + ckmc_param_list_free(params); + ckmc_cipher_free(context); + ckmc_buffer_free(encrypted); + ckmc_buffer_free(tag); + + return 0; +} diff --git a/src/utc/key-manager/utc-key-manager-type.c b/src/utc/key-manager/utc-key-manager-type.c index 663fd15e6..4eba444e9 100755 --- a/src/utc/key-manager/utc-key-manager-type.c +++ b/src/utc/key-manager/utc-key-manager-type.c @@ -1980,6 +1980,124 @@ int utc_ckmc_alias_info_is_password_protected_n(void) return 0; } +/** + * @testcase utc_ckmc_alias_info_get_backend_p + * @since_tizen 6.0 + * @description Check backend indentifier for key + * @scenario Save key to db and check associated backend id + */ +int utc_ckmc_alias_info_get_backend_p(void) +{ + ckmc_alias_info_list_s *ppalias_list, *tmp; + ckmc_key_s test_key; + ckmc_policy_s test_policy; + int ret; + char* current_alias; + const char* alias = "utc_ckmc_alias_info_get_backend_p_test_alias"; + bool foundAlias = false; + + test_key.raw_key = (unsigned char *)RSA_PUB_KEY_PEM2; + test_key.key_size = strlen(RSA_PUB_KEY_PEM2); + test_key.key_type = CKMC_KEY_RSA_PUBLIC; + test_key.password = NULL; + + test_policy.password = NULL; + test_policy.extractable = true; + + ret = ckmc_save_key(alias, test_key, test_policy); + assert_eq(ret, CKMC_ERROR_NONE); + + ret = ckmc_get_key_alias_info_list(&ppalias_list); + assert_eq(ret, CKMC_ERROR_NONE); + + tmp = ppalias_list; + + while (tmp) { + ret = ckmc_alias_info_get_alias(tmp->info, ¤t_alias); + assert_eq(ret, CKMC_ERROR_NONE); + if (strstr(current_alias, alias)) { + foundAlias = true; + ckmc_backend_id_e backend; + ret = ckmc_alias_info_get_backend(tmp->info, &backend); + assert_eq(ret, CKMC_ERROR_NONE); + assert(backend == CKMC_BACKEND_SW || backend == CKMC_BACKEND_TZ); + break; + } + tmp = tmp->next; + } + ckmc_alias_info_list_all_free(ppalias_list); + ckmc_remove_alias(alias); + assert_eq(foundAlias, true); + return 0; +} + +/** + * @testcase utc_ckmc_alias_info_get_backend_n + * @since_tizen 6.0 + * @description Check an error when getting a parameter from empty struct + * @scenario Check an error when getting a parameter from empty struct + */ +int utc_ckmc_alias_info_get_backend_n(void) +{ + ckmc_backend_id_e backend; + int retCode = ckmc_alias_info_get_backend(NULL, &backend); + assert_eq(retCode, CKMC_ERROR_INVALID_PARAMETER); + return 0; +} + +/** + * @testcase utc_ckmc_get_backend_info_p + * @since_tizen 6.0 + * @description Get backend info + * @scenario Get backend info and read max chunk size + */ +int utc_ckmc_get_backend_info_p(void) +{ + + ckmc_backend_info_h info; + size_t size; + int ret; + + ret = ckmc_get_backend_info(CKMC_BACKEND_SW, &info); + assert_eq(ret, CKMC_ERROR_NONE); + + ret = ckmc_backend_get_max_chunk_size(info, &size); + assert_eq(ret, CKMC_ERROR_NONE); + + ckmc_backend_info_free(info); + return 0; +} + +/** + * @testcase utc_ckmc_get_backend_info_n + * @since_tizen 6.0 + * @description Check errors when using invalid parameters + * @scenario Check errors when using invalid parameters + */ +int utc_ckmc_get_backend_info_n(void) +{ + ckmc_backend_info_h info; + size_t size; + int ret; + + ret = ckmc_get_backend_info((ckmc_backend_id_e)2, &info); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + + ret = ckmc_get_backend_info(CKMC_BACKEND_SW, NULL); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + + ret = ckmc_get_backend_info(CKMC_BACKEND_SW, &info); + assert_eq(ret, CKMC_ERROR_NONE); + + ret = ckmc_backend_get_max_chunk_size(NULL, &size); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + ret = ckmc_backend_get_max_chunk_size(info, NULL); + assert_eq(ret, CKMC_ERROR_INVALID_PARAMETER); + + ckmc_backend_info_free(info); + return 0; +} + /** * @testcase utc_ckmc_alias_info_list_all_free_p * @since_tizen 5.5