diff options
author | intae, jeon <intae.jeon@samsung.com> | 2016-09-06 14:07:15 +0900 |
---|---|---|
committer | intae, jeon <intae.jeon@samsung.com> | 2016-09-29 09:37:48 +0900 |
commit | d465156043d9119e32dea109ffa4a9f976d306fd (patch) | |
tree | e20c5074931bc5934718dc31a275354a642f00e1 | |
parent | 550ed24a3bdc46edd42a9703ef84ff3d247de3c9 (diff) | |
download | email-service-accepted/tizen/common/20160929.163123.tar.gz email-service-accepted/tizen/common/20160929.163123.tar.bz2 email-service-accepted/tizen/common/20160929.163123.zip |
modify email account backup/restore API and key managet migration for OS upgradesubmit/tizen/20160929.020418accepted/tizen/wearable/20160929.233704accepted/tizen/mobile/20160929.233700accepted/tizen/ivi/20160929.233708accepted/tizen/common/20160929.163123
Change-Id: I77e78a458b2d6d90994e649f035390380ff0c3b6
Signed-off-by: intae, jeon <intae.jeon@samsung.com>
-rwxr-xr-x | email-common-use/include/email-errors.h | 2 | ||||
-rwxr-xr-x | email-common-use/include/email-internal-types.h | 2 | ||||
-rwxr-xr-x | email-core/CMakeLists.txt | 2 | ||||
-rwxr-xr-x | email-core/email-core-account.c | 85 | ||||
-rw-r--r-- | email-core/email-core-key-manager.c | 344 | ||||
-rw-r--r-- | email-core/include/email-core-key-manager.h | 9 | ||||
-rwxr-xr-x | packaging/email-service.spec | 7 | ||||
-rwxr-xr-x | utilities/test-application/testapp-account.c | 4 |
8 files changed, 406 insertions, 49 deletions
diff --git a/email-common-use/include/email-errors.h b/email-common-use/include/email-errors.h index b3c2e88..d1e2d84 100755 --- a/email-common-use/include/email-errors.h +++ b/email-common-use/include/email-errors.h @@ -65,6 +65,7 @@ #define EMAIL_ERROR_TASK_BINDER_NOT_FOUND -1023 /**< No matched task binder was found */ #define EMAIL_ERROR_TASK_NOT_FOUND -1168 /**< No matched task was found */ #define EMAIL_ERROR_HANDLE_NOT_FOUND -1169 /**< No matched handle was found */ +#define EMAIL_ERROR_KEY_NOT_FOUND -1170 /**< No matched key was found */ #define EMAIL_ERROR_ALARM_DATA_NOT_FOUND -1933 /**< No matched alarm data was found */ /* Error codes for specification for maximum data */ @@ -82,6 +83,7 @@ #define EMAIL_ERROR_GCONF_FAILURE -1058 /**< The error occurred on accessing Gconf */ #define EMAIL_ERROR_FILE -1059 /**< File related error */ #define EMAIL_ERROR_SERVER_STORAGE_FULL -2101 /**< There is no more storage in server */ +#define EMAIL_ERROR_KEY_MANAGER_FAILURE -2102 /**< The error occurred on key-manager*/ /* Error codes for network */ #define EMAIL_ERROR_SOCKET_FAILURE -1031 /**< Socket operation failed */ diff --git a/email-common-use/include/email-internal-types.h b/email-common-use/include/email-internal-types.h index 1061a8b..98620b9 100755 --- a/email-common-use/include/email-internal-types.h +++ b/email-common-use/include/email-internal-types.h @@ -48,7 +48,7 @@ extern "C" /* Feature definitions */ /* #define __FEATURE_USING_ACCOUNT_SVC_FOR_ACCOUNT_MANAGEMENT__ */ #define __FEATURE_USING_ACCOUNT_SVC_FOR_SYNC_STATUS__ -// #define __FEATURE_BACKUP_ACCOUNT__ +#define __FEATURE_BACKUP_ACCOUNT__ #define __FEATURE_MOVE_TO_OUTBOX_FIRST__ #define __FEATURE_PARTIAL_BODY_FOR_POP3__ /* #define __FEATURE_KEEP_CONNECTION__ */ diff --git a/email-core/CMakeLists.txt b/email-core/CMakeLists.txt index 6436b50..6a111cc 100755 --- a/email-core/CMakeLists.txt +++ b/email-core/CMakeLists.txt @@ -236,7 +236,7 @@ INCLUDE(FindPkgConfig) SET(PKG_MODULES glib-2.0 dlog dbus-1 gthread-2.0 key-manager tpkp-curl uw-imap-toolkit vconf vconf-internal-keys contacts-service2 openssl accounts-svc alarm-service notification libcurl libxml-2.0 - cert-svc-vcore badge capi-appfw-application icu-i18n gmime-2.6 storage dpm) + cert-svc-vcore badge capi-appfw-application icu-i18n gmime-2.6 storage dpm cryptsvc) pkg_check_modules(core_pkgs REQUIRED ${PKG_MODULES}) diff --git a/email-core/email-core-account.c b/email-core/email-core-account.c index e21f977..cd049e3 100755 --- a/email-core/email-core-account.c +++ b/email-core/email-core-account.c @@ -39,6 +39,8 @@ #include <curl/curl.h> #include <sys/shm.h> #include <tpkp_curl.h> +#include <ckmc/ckmc-manager.h> + #include "email-convert.h" #include "email-types.h" @@ -55,12 +57,15 @@ #include "email-core-signal.h" #include "email-core-imap-mailbox.h" #include "email-core-container.h" +#include "email-core-key-manager.h" #include "imap4r1.h" #include "account.h" #include "account-types.h" +#define EMAIL_SERVICE_BNR_ACCOUNT_KEY "email_service_backup_restore_account_key" + char *g_default_mbox_alias[MAILBOX_COUNT] = { EMAIL_INBOX_DISPLAY_NAME, EMAIL_DRAFTBOX_DISPLAY_NAME, @@ -627,6 +632,7 @@ INTERNAL_FUNC int emcore_create_account(char *multi_user_name, email_account_t * } } + error_code = account_create(&account_handle); if (error_code != ACCOUNT_ERROR_NONE) { EM_DEBUG_EXCEPTION("account_create failed [%d]", error_code); @@ -960,13 +966,14 @@ FINISH_OFF: INTERNAL_FUNC int emcore_backup_accounts(char *multi_user_name, const char *file_path, int *error_code) { - EM_DEBUG_FUNC_BEGIN_SEC("file_path [%s], error_code [%p]", file_path, error_code); + EM_DEBUG_LOG("file_path [%s], error_code [%p]", file_path, error_code); int local_error_code = EMAIL_ERROR_NONE, local_error_code_2 = EMAIL_ERROR_NONE, ret_code = false; int select_num, i, target_buff_length = 0; int normal_email_account_count = 0; char *target_buffer = NULL; + unsigned char *output_data = NULL; emstorage_account_tbl_t *account_list = NULL; - int fd = 0; + int fd = -1; if (!file_path) { local_error_code = EMAIL_ERROR_INVALID_PARAM; @@ -1018,13 +1025,40 @@ INTERNAL_FUNC int emcore_backup_accounts(char *multi_user_name, const char *file EM_DEBUG_LOG("target_buff_length [%d]", target_buff_length); - ssm_delete_file(file_path, SSM_FLAG_SECRET_OPERATION, NULL); - - if (ssm_write_buffer(target_buffer, target_buff_length, file_path, SSM_FLAG_SECRET_OPERATION, NULL) < 0) { - EM_DEBUG_EXCEPTION("ssm_write_buffer failed [%d]", local_error_code); - local_error_code = EMAIL_ERROR_SYSTEM_FAILURE; - goto FINISH_OFF; + local_error_code = em_open(file_path, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR, &fd); + if (local_error_code != EMAIL_ERROR_NONE) { + EM_DEBUG_EXCEPTION("em_open failed - %d [%s] : ", local_error_code, file_path); + goto FINISH_OFF; } + + + int tmp = emcore_check_key_in_key_manager(EMAIL_SERVICE_BNR_ACCOUNT_KEY); + + if (tmp == EMAIL_ERROR_KEY_NOT_FOUND){ + EM_DEBUG_LOG("Key not exist"); + + int ret = 0; + + ret = emcore_save_key_in_key_manager(EMAIL_SERVICE_BNR_ACCOUNT_KEY); + + if(ret != EMAIL_ERROR_NONE){ + EM_DEBUG_EXCEPTION("save key failed %d", ret); + goto FINISH_OFF; + } + + } else if (tmp == EMAIL_ERROR_INVALID_PARAM) { + + EM_DEBUG_EXCEPTION("Invalid parameter"); + goto FINISH_OFF; + + } + int output_length = 0; + emcore_encryption_data_in_key_manager(EMAIL_SERVICE_BNR_ACCOUNT_KEY, target_buffer, target_buff_length, &output_data, &output_length); + + EM_DEBUG_LOG("output length %d", output_length); + int write_length = write(fd, (char *)output_data, output_length); + EM_DEBUG_LOG("write length : %d", write_length); + } ret_code = true; @@ -1032,6 +1066,7 @@ FINISH_OFF: EM_SAFE_CLOSE(fd); EM_SAFE_FREE(target_buffer); + EM_SAFE_FREE(output_data); if (account_list) emstorage_free_account(&account_list, select_num, &local_error_code_2); @@ -1046,15 +1081,13 @@ FINISH_OFF: INTERNAL_FUNC int emcore_restore_accounts(char *multi_user_name, const char *file_path) { EM_DEBUG_FUNC_BEGIN_SEC("file_path [%s]", file_path); - int err = EMAIL_ERROR_NONE, buffer_length = 0, read_length = 0; + int err = EMAIL_ERROR_NONE; int account_count = 0, i = 0, account_stream_length = 0; char *temp_buffer = NULL, *account_stream = NULL, *buffer_ptr = NULL; email_account_t temp_account = {0}; email_account_t *account_list = NULL; - char errno_buf[ERRNO_BUF_SIZE] = {0}; char *encrypt_buffer = NULL; - ssm_file_info_t sfi; if (!emcore_notify_storage_event(NOTI_ACCOUNT_RESTORE_START, 0, 0, NULL, 0)) EM_DEBUG_EXCEPTION("emcore_notify_storage_event[NOTI_ACCOUNT_RESTORE_START] failed"); @@ -1081,31 +1114,14 @@ INTERNAL_FUNC int emcore_restore_accounts(char *multi_user_name, const char *fil } } - if (ssm_getinfo(file_path, &sfi, SSM_FLAG_SECRET_OPERATION, NULL) < 0) { - EM_DEBUG_EXCEPTION("ssm_getinfo() failed."); - err = EMAIL_ERROR_SYSTEM_FAILURE; - goto FINISH_OFF; - } - - buffer_length = sfi.originSize; - EM_DEBUG_LOG("account buffer_length[%d]", buffer_length); - if ((encrypt_buffer = (char *)em_malloc(buffer_length + 1)) == NULL) { - EM_DEBUG_EXCEPTION("em_mallocfailed..."); - err = EMAIL_ERROR_OUT_OF_MEMORY; - goto FINISH_OFF; - } - - if (ssm_read(file_path, temp_buffer, buffer_length, (size_t *)&read_length, SSM_FLAG_SECRET_OPERATION, NULL) < 0) { - EM_DEBUG_EXCEPTION("ssm_read() failed."); - err = EMAIL_ERROR_SYSTEM_FAILURE; - goto FINISH_OFF; - } + int output_length = 0; + char *output_data = NULL; - EM_DEBUG_LOG("read_length[%d]", read_length); + emcore_decryption_data_from_file_in_key_manager(EMAIL_SERVICE_BNR_ACCOUNT_KEY, file_path, &output_data, &output_length); - if (buffer_length == read_length) { - memcpy((void *)&account_count, temp_buffer, sizeof(int)); - buffer_ptr = temp_buffer + sizeof(int); + if (output_length > 0) { + memcpy((void *)&account_count, output_data, sizeof(int)); + buffer_ptr = output_data + sizeof(int); EM_DEBUG_LOG("account_count[%d]", account_count); @@ -1176,6 +1192,7 @@ FINISH_OFF: EM_SAFE_FREE(account_stream); EM_SAFE_FREE(temp_buffer); EM_SAFE_FREE(encrypt_buffer); + EM_SAFE_FREE(output_data); EM_DEBUG_FUNC_END("err [%d]", err); return err; diff --git a/email-core/email-core-key-manager.c b/email-core/email-core-key-manager.c index ef78895..6615dad 100644 --- a/email-core/email-core-key-manager.c +++ b/email-core/email-core-key-manager.c @@ -27,11 +27,20 @@ */ #include <ckmc/ckmc-manager.h> +#include <ckmc/ckmc-type.h> +#include <SecCryptoSvc.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <fcntl.h> #include "email-core-utils.h" #include "email-debug-log.h" #include "email-utilities.h" + +#define EMAIL_SERVICE_CS_DERIVE_PASS "email_service_cs_derive_pass" + /* Adding '/' method for system daemon */ /* static char *add_shared_owner_prefix(const char *name) @@ -50,7 +59,22 @@ static char *add_shared_owner_prefix(const char *name) return ckm_alias; } */ +static char *__get_key_manager_alias(const char* name) +{ + int ret = 0; + char *ckmc_alias = NULL; + + ret = ckmc_alias_new("/User", name, &ckmc_alias); + if (ret != CKMC_ERROR_NONE) { + EM_DEBUG_LOG("ckmc_alias_new failed"); + return NULL; + + } + EM_DEBUG_LOG("alias : [%s]", ckmc_alias); + return ckmc_alias; + +} /* Add new data */ INTERNAL_FUNC int emcore_add_password_in_key_manager(char *data_name, char *stored_data) { @@ -68,8 +92,7 @@ INTERNAL_FUNC int emcore_add_password_in_key_manager(char *data_name, char *stor return err; } -// alias = add_shared_owner_prefix(data_name); - alias = g_strdup(data_name); + alias = __get_key_manager_alias(data_name); EM_DEBUG_LOG("alias : [%s]", alias); email_policy.password = NULL; @@ -110,8 +133,7 @@ INTERNAL_FUNC int emcore_get_password_in_key_manager(char *data_name, char **sto return err; } -// alias = add_shared_owner_prefix(data_name); - alias = g_strdup(data_name); + alias = __get_key_manager_alias(data_name); EM_DEBUG_LOG("alias : [%s]", alias); ckmc_ret = ckmc_get_data(alias, NULL, &email_data); @@ -153,13 +175,13 @@ INTERNAL_FUNC int emcore_remove_password_in_key_manager(char *data_name) return err; } -// alias = add_shared_owner_prefix(data_name); - alias = g_strdup(data_name); + alias = __get_key_manager_alias(data_name); EM_DEBUG_LOG("alias : [%s]", alias); ckmc_ret = ckmc_remove_alias(alias); if (ckmc_ret != CKMC_ERROR_NONE) { EM_DEBUG_EXCEPTION("ckmc_remove_alias failed : [%d]", ckmc_ret); + err = EMAIL_ERROR_SECURED_STORAGE_FAILURE; goto FINISH_OFF; } @@ -223,3 +245,313 @@ FINISH_OFF: EM_DEBUG_FUNC_END(); return err; } + +/* check key in key manager */ +INTERNAL_FUNC int emcore_check_key_in_key_manager(const char *data_name) +{ + EM_DEBUG_FUNC_BEGIN(); + int err = EMAIL_ERROR_NONE; + int ckmc_ret = CKMC_ERROR_NONE; + char *alias = NULL; + ckmc_key_s *email_key = NULL; + + if (data_name == NULL) { + EM_DEBUG_EXCEPTION("Invalid parameter"); + err = EMAIL_ERROR_INVALID_PARAM; + return err; + } + + alias = __get_key_manager_alias(data_name); + + if (alias == NULL) { + EM_DEBUG_EXCEPTION("Invalid parameter"); + err = EMAIL_ERROR_INVALID_PARAM; + return err; + } + + + ckmc_ret = ckmc_get_key(alias, NULL, &email_key); + if (ckmc_ret == CKMC_ERROR_DB_ALIAS_UNKNOWN) { + EM_DEBUG_EXCEPTION("email error key not found"); + err = EMAIL_ERROR_KEY_NOT_FOUND; + goto FINISH_OFF; + } + + +FINISH_OFF: + if (email_key != NULL) { + ckmc_key_free(email_key); + } + + + EM_SAFE_FREE(alias); + + EM_DEBUG_FUNC_END(); + return err; +} + + + +/* save key in key manager */ +INTERNAL_FUNC int emcore_save_key_in_key_manager(const char *data_name) +{ + EM_DEBUG_FUNC_BEGIN(); + int err = EMAIL_ERROR_NONE; + int ckmc_ret = CKMC_ERROR_NONE; + ckmc_key_s email_key; + ckmc_policy_s email_policy; + + const char *pass = EMAIL_SERVICE_CS_DERIVE_PASS; + unsigned char *pass_key = NULL; + char *alias = NULL; + + if (data_name == NULL) { + EM_DEBUG_EXCEPTION("Invalid parameter"); + err = EMAIL_ERROR_INVALID_PARAM; + return err; + } + + + int cs_ret = cs_derive_key_with_pass(pass, strlen(pass), 32, &pass_key); + + if (cs_ret != CS_ERROR_NONE) { + EM_DEBUG_LOG("creat key failed"); + err = EMAIL_ERROR_KEY_MANAGER_FAILURE; + goto FINISH_OFF; + } + + email_key.raw_key = (unsigned char *)pass_key; + email_key.key_size = 32; + email_key.key_type = CKMC_KEY_AES; + email_key.password = NULL; + + email_policy.password = NULL; + email_policy.extractable = false; + + alias = __get_key_manager_alias(data_name); + + ckmc_ret = ckmc_save_key(alias, email_key, email_policy); + + if (ckmc_ret != CKMC_ERROR_NONE) { + EM_DEBUG_EXCEPTION("email error key not save : %s", get_error_message(ckmc_ret)); + err = EMAIL_ERROR_KEY_MANAGER_FAILURE; + goto FINISH_OFF; + } + + +FINISH_OFF: + + + EM_SAFE_FREE(alias); + EM_DEBUG_FUNC_END(); + return err; +} + + + +/* encrypte data */ +INTERNAL_FUNC int emcore_encryption_data_in_key_manager(const char *data_name, char *input_data, int input_length, unsigned char **output_data, int *output_length) +{ + EM_DEBUG_FUNC_BEGIN(); + int err = EMAIL_ERROR_NONE; + int ckmc_ret = CKMC_ERROR_NONE; + + ckmc_raw_buffer_s plaintext; + ckmc_raw_buffer_s *encrypted = NULL; + ckmc_param_list_h params = NULL; + + unsigned char iv[16] = {0, }; + ckmc_raw_buffer_s iv_buffer; + iv_buffer.data = iv; + iv_buffer.size = sizeof(iv); + + + plaintext.data = (unsigned char *)input_data; + plaintext.size = input_length; + + if (data_name == NULL) { + EM_DEBUG_EXCEPTION("Invalid parameter"); + err = EMAIL_ERROR_INVALID_PARAM; + return err; + } + + + ckmc_ret = ckmc_generate_new_params(CKMC_ALGO_AES_CBC, ¶ms); + if (ckmc_ret != CKMC_ERROR_NONE) { + + EM_DEBUG_LOG("ckmc_generate_new_params failed"); + err = EMAIL_ERROR_KEY_MANAGER_FAILURE; + return err; + + } + + + ckmc_ret = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_IV, &iv_buffer); + if (ckmc_ret != CKMC_ERROR_NONE) { + + EM_DEBUG_LOG("ckmc_param_list_set_buffer failed"); + err = EMAIL_ERROR_KEY_MANAGER_FAILURE; + return err; + + } + + + char *alias = __get_key_manager_alias(data_name); + ckmc_ret = ckmc_encrypt_data(params, alias, NULL, plaintext, &encrypted); + if (ckmc_ret != CKMC_ERROR_NONE) { + + EM_DEBUG_LOG("ckmc_encrypt_data failed"); + err = EMAIL_ERROR_KEY_MANAGER_FAILURE; + goto FINISH_OFF; + + } + + *output_data = encrypted->data; + *output_length = encrypted->size; + + if (encrypted->data != NULL) + encrypted->data = NULL; + + + + + +FINISH_OFF: + + if (encrypted != NULL) + ckmc_buffer_free(encrypted); + + if (params != NULL) + ckmc_param_list_free(params); + + + + EM_SAFE_FREE(alias); + EM_DEBUG_FUNC_END(); + return err; +} + + + +/* decrypte data from file */ +INTERNAL_FUNC int emcore_decryption_data_from_file_in_key_manager(const char *data_name, const char *file_path, char **output_data, int *output_length) +{ + EM_DEBUG_FUNC_BEGIN(); + int err = EMAIL_ERROR_NONE; + int ckmc_ret = CKMC_ERROR_NONE; + int buffer_length = 0; + ckmc_raw_buffer_s *encrypted = NULL; + ckmc_raw_buffer_s *decrypted = NULL; + ckmc_param_list_h params = NULL; + + char *alias = NULL; + char errno_buf[ERRNO_BUF_SIZE] = {0}; + unsigned char iv[16] = {0, }; + ckmc_raw_buffer_s iv_buffer; + iv_buffer.data = iv; + iv_buffer.size = sizeof(iv); + + if (data_name == NULL && file_path == NULL) { + EM_DEBUG_EXCEPTION("Invalid parameter"); + err = EMAIL_ERROR_INVALID_PARAM; + return err; + } + + + int fd = 0; + struct stat st_buf; + + if (stat(file_path, &st_buf) < 0) { + EM_DEBUG_EXCEPTION("stat(\"%s\") failed...", file_path); + err = EMAIL_ERROR_SYSTEM_FAILURE; + goto FINISH_OFF; + } + + err = em_open(file_path, O_RDONLY, 0, &fd); + if (err != EMAIL_ERROR_NONE) { + EM_DEBUG_EXCEPTION("em_open failed : [%d] [%s]", err, file_path); + goto FINISH_OFF; + } + + + buffer_length = st_buf.st_size; + EM_DEBUG_LOG("account buffer_length[%d]", buffer_length); + + + encrypted = (ckmc_raw_buffer_s*)malloc(sizeof(ckmc_raw_buffer_s)); + + if ((encrypted->data = (unsigned char *)em_malloc(buffer_length + 1)) == NULL) { + EM_DEBUG_EXCEPTION("em_malloc failed..."); + err = EMAIL_ERROR_OUT_OF_MEMORY; + goto FINISH_OFF; + + } + + + if (read(fd, encrypted->data, buffer_length) < 0) { + EM_DEBUG_EXCEPTION("read failed : [%s]", EM_STRERROR(errno_buf)); + err = EMAIL_ERROR_SYSTEM_FAILURE; + goto FINISH_OFF; + } + encrypted->size = buffer_length; + + + ckmc_ret = ckmc_generate_new_params(CKMC_ALGO_AES_CBC, ¶ms); + if (ckmc_ret != CKMC_ERROR_NONE) { + + EM_DEBUG_LOG("ckmc_generate_new_params failed"); + err = EMAIL_ERROR_KEY_MANAGER_FAILURE; + goto FINISH_OFF; + + } + + + ckmc_ret = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_IV, &iv_buffer); + if (ckmc_ret != CKMC_ERROR_NONE) { + + EM_DEBUG_LOG("ckmc_param_list_set_buffer failed"); + err = EMAIL_ERROR_KEY_MANAGER_FAILURE; + goto FINISH_OFF; + + } + + alias = __get_key_manager_alias(data_name); + ckmc_ret = ckmc_decrypt_data(params, alias, NULL, *encrypted, &decrypted); + if (ckmc_ret != CKMC_ERROR_NONE) { + + EM_DEBUG_LOG("ckmc_encrypt_data failed"); + err = EMAIL_ERROR_KEY_MANAGER_FAILURE; + goto FINISH_OFF; + + } + + *output_data = (char *)decrypted->data; + *output_length = decrypted->size; + + if (decrypted->data != NULL) + decrypted->data = NULL; + + + + + +FINISH_OFF: + + if (encrypted != NULL) + ckmc_buffer_free(encrypted); + + + if (decrypted != NULL) + ckmc_buffer_free(decrypted); + + if (params != NULL) + ckmc_param_list_free(params); + + + EM_SAFE_CLOSE(fd); + EM_SAFE_FREE(alias); + EM_DEBUG_FUNC_END(); + return err; +} + + diff --git a/email-core/include/email-core-key-manager.h b/email-core/include/email-core-key-manager.h index 02e3267..5545025 100644 --- a/email-core/include/email-core-key-manager.h +++ b/email-core/include/email-core-key-manager.h @@ -22,6 +22,7 @@ #ifndef __EMAIL_CORE_KEY_MANAGER_H__ #define __EMAIL_CORE_KEY_MANAGER_H__ + #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ @@ -29,10 +30,14 @@ extern "C" { INTERNAL_FUNC int emcore_add_password_in_key_manager(char *data_name, char *stored_data); INTERNAL_FUNC int emcore_get_password_in_key_manager(char *data_name, char **stored_data); INTERNAL_FUNC int emcore_remove_password_in_key_manager(char *data_name); -INTERNAL_FUNC int emcore_get_certificate_in_key_manager(char *alias, char *password, - const unsigned char **cert_data, +INTERNAL_FUNC int emcore_get_certificate_in_key_manager(char *alias, char *password, + const unsigned char **cert_data, int *cert_size); +INTERNAL_FUNC int emcore_check_key_in_key_manager(const char *alias); +INTERNAL_FUNC int emcore_save_key_in_key_manager(const char *alias); +INTERNAL_FUNC int emcore_encryption_data_in_key_manager(const char *data_name, char *input_data, int input_length, unsigned char **output_data, int *output_length); +INTERNAL_FUNC int emcore_decryption_data_from_file_in_key_manager(const char *data_name, const char *file_path, char **output_data, int *output_length); #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/packaging/email-service.spec b/packaging/email-service.spec index 9367c78..8203d84 100755 --- a/packaging/email-service.spec +++ b/packaging/email-service.spec @@ -63,10 +63,11 @@ BuildRequires: pkgconfig(capi-system-device) BuildRequires: pkgconfig(libtzplatform-config) BuildRequires: pkgconfig(libsmack) BuildRequires: pkgconfig(sqlite3) +BuildRequires: pkgconfig(cryptsvc) Requires: libtzplatform-config -# OS update +# OS upgrade %define upgrade_script_path /usr/share/upgrade/scripts %define upgrade_data_path /usr/share/upgrade/data @@ -110,7 +111,7 @@ if [ -d %{_datarootdir}/license/email-service]; then rm -rf %{_datarootdir}/license/email-service fi -# OS update +# OS upgrade mkdir -p %{buildroot}%{upgrade_script_path} mkdir -p %{buildroot}%{upgrade_data_path} cp -f 500.%{name}.patch.sh %{buildroot}%{upgrade_script_path} @@ -166,7 +167,7 @@ systemctl daemon-reload %attr(0775,root,root) /etc/rc.d/init.d/email-service %{_bindir}/email-service_init_db.sh -# OS update +# OS upgrade %{upgrade_script_path}/500.%{name}.patch.sh %{upgrade_data_path}/%{name}.sql diff --git a/utilities/test-application/testapp-account.c b/utilities/test-application/testapp-account.c index 6bcaa45..79f634f 100755 --- a/utilities/test-application/testapp-account.c +++ b/utilities/test-application/testapp-account.c @@ -772,7 +772,7 @@ FINISH_OFF: static gboolean testapp_test_backup_account() { - char *file_name = (char *)tzplatform_mkpath(TZ_SYS_DATA, "email/accounts_file"); + const char *file_name = tzplatform_mkpath(TZ_USER_DATA, "email/accounts_file"); int error_code; error_code = email_backup_accounts_into_secure_storage(file_name); testapp_print("\n email_backup_accounts_into_secure_storage returned [%d]\n", error_code); @@ -780,7 +780,7 @@ static gboolean testapp_test_backup_account() } static gboolean testapp_test_restore_account() { - char *file_name = (char *)tzplatform_mkpath(TZ_SYS_DATA,"email/accounts_file"); + const char *file_name = tzplatform_mkpath(TZ_USER_DATA,"email/accounts_file"); int error_code; error_code = email_restore_accounts_from_secure_storage(file_name); testapp_print("\n email_restore_accounts_from_secure_storage returned [%d]\n", error_code); |