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
/**
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
/**
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);
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[] = {
{"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},
{"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}
};
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);
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[] = {
{"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},
{"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}
};
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);
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[] = {
{"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},
{"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}
};
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);
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[] = {
{"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},
{"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}
};
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);
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);
{"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},
{"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},
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);
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);
{"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},
{"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},
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);
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);
{"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},
{"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},
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);
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);
{"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},
{"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},
#include <stddef.h>
#include <stdlib.h>
-
FILE *g_fpLog;
#define _PRINT_LOG(...) {\
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;
+}
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