4 * Copyright (c) 2015 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Sunghyun Kwon <sh0701.kwon@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
23 * email-core-task-manager.c
25 * Created on: 2015. 7. 24.
26 * Author: sh0701.kwon@samsung.com
29 #include <ckmc/ckmc-manager.h>
31 #include "email-core-utils.h"
32 #include "email-debug-log.h"
33 #include "email-utilities.h"
35 /* Adding '/' method for system daemon */
37 static char *add_shared_owner_prefix(const char *name)
39 EM_DEBUG_FUNC_BEGIN();
40 char *ckm_alias = NULL;
43 EM_DEBUG_EXCEPTION("Invalid parameter");
47 ckm_alias = g_strconcat(ckmc_owner_id_system, ckmc_owner_id_separator, name, NULL);
55 INTERNAL_FUNC int emcore_add_password_in_key_manager(char *data_name, char *stored_data)
57 EM_DEBUG_FUNC_BEGIN();
58 int err = EMAIL_ERROR_NONE;
59 int ckmc_ret = CKMC_ERROR_NONE;
61 ckmc_policy_s email_policy;
62 ckmc_raw_buffer_s email_data;
63 char errno_buf[ERRNO_BUF_SIZE] = {0};
65 if (data_name == NULL || stored_data == NULL) {
66 EM_DEBUG_EXCEPTION("Invalid parameter");
67 err = EMAIL_ERROR_INVALID_PARAM;
71 // alias = add_shared_owner_prefix(data_name);
72 alias = g_strdup(data_name);
73 EM_DEBUG_LOG("alias : [%s]", alias);
75 email_policy.password = NULL;
76 email_policy.extractable = true;
78 // EM_DEBUG_LOG("stored_data : [%s]", stored_data);
80 email_data.data = (unsigned char *)stored_data;
81 email_data.size = strlen(stored_data);
83 ckmc_ret = ckmc_save_data(alias, email_data, email_policy);
84 if (ckmc_ret != CKMC_ERROR_NONE) {
85 EM_DEBUG_EXCEPTION("ckmc_save_data failed [%d][%s]", errno, EM_STRERROR(errno_buf));
86 err = EMAIL_ERROR_SECURED_STORAGE_FAILURE;
98 /* Get the stored data */
99 INTERNAL_FUNC int emcore_get_password_in_key_manager(char *data_name, char **stored_data)
101 EM_DEBUG_FUNC_BEGIN();
102 int err = EMAIL_ERROR_NONE;
103 int ckmc_ret = CKMC_ERROR_NONE;
105 ckmc_raw_buffer_s *email_data = NULL;
107 if (data_name == NULL) {
108 EM_DEBUG_EXCEPTION("Invalid parameter");
109 err = EMAIL_ERROR_INVALID_PARAM;
113 // alias = add_shared_owner_prefix(data_name);
114 alias = g_strdup(data_name);
115 EM_DEBUG_LOG("alias : [%s]", alias);
117 ckmc_ret = ckmc_get_data(alias, NULL, &email_data);
118 if (ckmc_ret != CKMC_ERROR_NONE) {
119 EM_DEBUG_EXCEPTION("ckmc_get_data failed : [%d]", ckmc_ret);
120 err = EMAIL_ERROR_SECURED_STORAGE_FAILURE;
124 EM_DEBUG_LOG_DEV("stored_data : [%s]", email_data->data);
125 EM_DEBUG_LOG_DEV("stored_data length : [%d]", email_data->size);
130 if (email_data) *stored_data = g_strndup((const gchar *)email_data->data, email_data->size);
134 ckmc_buffer_free(email_data);
142 /* Remove the stored data */
143 INTERNAL_FUNC int emcore_remove_password_in_key_manager(char *data_name)
145 EM_DEBUG_FUNC_BEGIN();
146 int err = EMAIL_ERROR_NONE;
147 int ckmc_ret = CKMC_ERROR_NONE;
150 if (data_name == NULL) {
151 EM_DEBUG_EXCEPTION("Invalid parameter");
152 err = EMAIL_ERROR_INVALID_PARAM;
156 // alias = add_shared_owner_prefix(data_name);
157 alias = g_strdup(data_name);
158 EM_DEBUG_LOG("alias : [%s]", alias);
160 ckmc_ret = ckmc_remove_alias(alias);
161 if (ckmc_ret != CKMC_ERROR_NONE) {
162 EM_DEBUG_EXCEPTION("ckmc_remove_alias failed : [%d]", ckmc_ret);
163 err = EMAIL_ERROR_SECURED_STORAGE_FAILURE;
174 INTERNAL_FUNC int emcore_get_certificate_in_key_manager(char *alias, char *password,
175 const unsigned char **cert_data,
178 EM_DEBUG_FUNC_BEGIN();
179 int err = EMAIL_ERROR_NONE;
182 EM_DEBUG_EXCEPTION("Invalid parameter");
183 err = EMAIL_ERROR_INVALID_PARAM;
187 int ckmc_ret = CKMC_ERROR_NONE;
188 unsigned char *p_cert_data = NULL;
189 ckmc_cert_s *output_cert = NULL;
191 ckmc_ret = ckmc_get_cert(alias, password, &output_cert);
192 if (ckmc_ret != CKMC_ERROR_NONE) {
193 EM_DEBUG_EXCEPTION("ckmc_get_cert failed : [%d]", ckmc_ret);
194 err = EMAIL_ERROR_SECURED_STORAGE_FAILURE;
198 EM_DEBUG_LOG("Cert size : [%d]", output_cert->cert_size);
199 EM_DEBUG_LOG("Cert format : [%d]", output_cert->data_format);
200 EM_DEBUG_LOG_DEV("Cert string : [%s]", output_cert->raw_cert);
202 p_cert_data = em_malloc(output_cert->cert_size + 1);
203 if (p_cert_data == NULL) {
204 EM_DEBUG_EXCEPTION("em_mallocfailed");
205 err = EMAIL_ERROR_OUT_OF_MEMORY;
209 memcpy(p_cert_data, output_cert->raw_cert, output_cert->cert_size);
211 *cert_data = p_cert_data;
212 *cert_size = output_cert->cert_size;
217 ckmc_cert_free(output_cert);
219 if (err != EMAIL_ERROR_NONE) {
220 EM_SAFE_FREE(p_cert_data);