Simple interface for Mbed Cloud Client
Embed:
(wiki syntax)
Show/hide line numbers
CloudClientStorage.c
00001 // ---------------------------------------------------------------------------- 00002 // Copyright 2016-2017 ARM Ltd. 00003 // 00004 // SPDX-License-Identifier: Apache-2.0 00005 // 00006 // Licensed under the Apache License, Version 2.0 (the "License"); 00007 // you may not use this file except in compliance with the License. 00008 // You may obtain a copy of the License at 00009 // 00010 // http://www.apache.org/licenses/LICENSE-2.0 00011 // 00012 // Unless required by applicable law or agreed to in writing, software 00013 // distributed under the License is distributed on an "AS IS" BASIS, 00014 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00015 // See the License for the specific language governing permissions and 00016 // limitations under the License. 00017 // ---------------------------------------------------------------------------- 00018 00019 #include <string.h> 00020 #include "key_config_manager.h" 00021 #include "CloudClientStorage.h" 00022 #include "mbed-trace/mbed_trace.h" 00023 00024 #define TRACE_GROUP "mClt" 00025 00026 ccs_status_e uninitialize_storage(void) 00027 { 00028 tr_debug("CloudClientStorage::uninitialize_storage"); 00029 00030 kcm_status_e status = kcm_finalize(); 00031 if(status != KCM_STATUS_SUCCESS) { 00032 tr_error("CloudClientStorage::uninitialize_storage - error %d", status); 00033 return CCS_STATUS_ERROR; 00034 } 00035 return CCS_STATUS_SUCCESS; 00036 } 00037 00038 ccs_status_e initialize_storage(void) 00039 { 00040 tr_debug("CloudClientStorage::initialize_storage"); 00041 kcm_status_e status = kcm_init(); 00042 if(status != KCM_STATUS_SUCCESS) { 00043 tr_error("CloudClientStorage::::initialize_storage - error %d", status); 00044 return CCS_STATUS_ERROR; 00045 } 00046 return CCS_STATUS_SUCCESS; 00047 } 00048 00049 ccs_status_e get_config_parameter(const char* key, uint8_t *buffer, const size_t buffer_size, size_t *value_length) 00050 { 00051 if (key == NULL || buffer == NULL || buffer_size == 0) { 00052 tr_error("CloudClientStorage::get_config_parameter error, invalid parameters"); 00053 return CCS_STATUS_ERROR; 00054 } 00055 00056 tr_debug("CloudClientStorage::get_config_parameter [%s]", key); 00057 00058 // Get parameter value to buffer 00059 kcm_status_e kcm_status = kcm_item_get_data((const uint8_t*)key, 00060 strlen(key), 00061 KCM_CONFIG_ITEM, 00062 buffer, 00063 buffer_size, 00064 value_length); 00065 00066 if (kcm_status != KCM_STATUS_SUCCESS) { 00067 tr_debug("CloudClientStorage::get_config_parameter [%s] kcm get error %d", key, kcm_status); 00068 return CCS_STATUS_ERROR; 00069 } 00070 00071 return CCS_STATUS_SUCCESS; 00072 } 00073 00074 ccs_status_e get_config_parameter_string(const char* key, uint8_t *buffer, const size_t buffer_size) 00075 { 00076 size_t len = 0; 00077 ccs_status_e status = get_config_parameter(key, buffer, buffer_size - 1, &len); 00078 00079 if (status == CCS_STATUS_SUCCESS) { 00080 // Null terminate after buffer value 00081 buffer[len] = 0; 00082 } 00083 00084 return status; 00085 } 00086 00087 00088 ccs_status_e set_config_parameter(const char* key, const uint8_t *buffer, const size_t buffer_size) 00089 { 00090 if (key == NULL || buffer == NULL || buffer_size == 0) { 00091 tr_error("CloudClientStorage::set_config_parameter error, invalid parameters"); 00092 return CCS_STATUS_ERROR; 00093 } 00094 00095 tr_debug("CloudClientStorage::set_config_parameter [%s]", key); 00096 00097 // Set parameter to storage 00098 kcm_status_e kcm_status = kcm_item_store((const uint8_t*)key, 00099 strlen(key), 00100 KCM_CONFIG_ITEM, 00101 false, 00102 buffer, 00103 buffer_size, 00104 NULL); 00105 00106 if (kcm_status != KCM_STATUS_SUCCESS) { 00107 tr_debug("CloudClientStorage::set_config_parameter [%s] kcm get error %d", key, kcm_status); 00108 return CCS_STATUS_ERROR; 00109 } 00110 00111 return CCS_STATUS_SUCCESS; 00112 } 00113 00114 ccs_status_e delete_config_parameter(const char* key) 00115 { 00116 if (key == NULL) { 00117 tr_error("CloudClientStorage::delete_config_parameter error, invalid parameters"); 00118 return CCS_STATUS_ERROR; 00119 } 00120 00121 tr_debug("CloudClientStorage::delete_config_parameter [%s]", key); 00122 00123 // Delete parameter from storage 00124 kcm_status_e kcm_status = kcm_item_delete((const uint8_t*)key, 00125 strlen(key), 00126 KCM_CONFIG_ITEM); 00127 00128 if (kcm_status != KCM_STATUS_SUCCESS) { 00129 tr_debug("CloudClientStorage::delete_config_parameter [%s] kcm get error %d", key, kcm_status); 00130 return CCS_STATUS_ERROR; 00131 } 00132 00133 return CCS_STATUS_SUCCESS; 00134 } 00135 00136 ccs_status_e size_config_parameter(const char* key, size_t* size_out) 00137 { 00138 if (key == NULL) { 00139 tr_error("CloudClientStorage::size_config_parameter error, invalid parameters"); 00140 return CCS_STATUS_ERROR; 00141 } 00142 00143 tr_debug("CloudClientStorage::size_config_parameter [%s]", key); 00144 00145 // Delete parameter from storage 00146 kcm_status_e kcm_status = kcm_item_get_data_size((const uint8_t*)key, 00147 strlen(key), 00148 KCM_CONFIG_ITEM, 00149 size_out); 00150 00151 if (kcm_status != KCM_STATUS_SUCCESS) { 00152 tr_debug("CloudClientStorage::size_config_parameter [%s] kcm get error %d", key, kcm_status); 00153 return CCS_STATUS_ERROR; 00154 } 00155 00156 return CCS_STATUS_SUCCESS; 00157 } 00158 00159 ccs_status_e get_config_private_key(const char* key, uint8_t *buffer, const size_t buffer_size, size_t *value_length) 00160 { 00161 if (key == NULL || buffer == NULL || buffer_size == 0) { 00162 tr_error("CloudClientStorage::get_connector_private_key error, invalid parameters"); 00163 return CCS_STATUS_ERROR; 00164 } 00165 00166 tr_debug("CloudClientStorage::get_connector_private_key [%s]", key); 00167 00168 // Get private key from storage 00169 kcm_status_e kcm_status = kcm_item_get_data((const uint8_t*)key, 00170 strlen(key), 00171 KCM_PRIVATE_KEY_ITEM, 00172 buffer, 00173 buffer_size, 00174 value_length); 00175 00176 if (kcm_status != KCM_STATUS_SUCCESS) { 00177 tr_debug("CloudClientStorage::get_connector_private_key [%s] kcm get error %d", key, kcm_status); 00178 return CCS_STATUS_ERROR; 00179 } 00180 00181 return CCS_STATUS_SUCCESS; 00182 } 00183 00184 ccs_status_e set_config_private_key(const char* key, const uint8_t *buffer, const size_t buffer_size) 00185 { 00186 if (key == NULL || buffer == NULL || buffer_size == 0) { 00187 tr_error("CloudClientStorage::set_connector_private_key error, invalid parameters"); 00188 return CCS_STATUS_ERROR; 00189 } 00190 00191 tr_debug("CloudClientStorage::set_connector_private_key kcm [%s]", key); 00192 00193 // Set private key to storage 00194 kcm_status_e kcm_status = kcm_item_store((const uint8_t*)key, 00195 strlen(key), 00196 KCM_PRIVATE_KEY_ITEM, 00197 false, 00198 buffer, 00199 buffer_size, 00200 NULL); 00201 00202 if (kcm_status == KCM_CRYPTO_STATUS_PRIVATE_KEY_VERIFICATION_FAILED) { 00203 tr_error("CloudClientStorage::set_connector_private_key kcm validation error"); 00204 return CCS_STATUS_VALIDATION_FAIL; 00205 } 00206 else if (kcm_status != KCM_STATUS_SUCCESS) { 00207 tr_debug("CloudClientStorage::set_connector_private_key kcm [%s] get error %d", key, kcm_status); 00208 return CCS_STATUS_ERROR; 00209 } 00210 00211 return CCS_STATUS_SUCCESS; 00212 } 00213 00214 ccs_status_e delete_config_private_key(const char* key) 00215 { 00216 if (key == NULL) { 00217 tr_error("CloudClientStorage::delete_config_private_key error, invalid parameters"); 00218 return CCS_STATUS_ERROR; 00219 } 00220 00221 tr_debug("CloudClientStorage::delete_config_private_key [%s]", key); 00222 00223 // Delete private key from storage 00224 kcm_status_e kcm_status = kcm_item_delete((const uint8_t*)key, 00225 strlen(key), 00226 KCM_PRIVATE_KEY_ITEM); 00227 00228 if (kcm_status != KCM_STATUS_SUCCESS) { 00229 tr_debug("CloudClientStorage::delete_config_private_key [%s] kcm get error %d", key, kcm_status); 00230 return CCS_STATUS_ERROR; 00231 } 00232 00233 return CCS_STATUS_SUCCESS; 00234 } 00235 00236 ccs_status_e get_config_public_key(const char* key, uint8_t *buffer, const size_t buffer_size, size_t *value_length) 00237 { 00238 if (key == NULL || buffer == NULL || buffer_size == 0) { 00239 tr_error("CloudClientStorage::get_config_public_key error, invalid parameters"); 00240 return CCS_STATUS_ERROR; 00241 } 00242 00243 tr_debug("CloudClientStorage::get_config_public_key [%s]", key); 00244 00245 // Get parameter value to buffer 00246 kcm_status_e kcm_status = kcm_item_get_data((const uint8_t*)key, 00247 strlen(key), 00248 KCM_PUBLIC_KEY_ITEM, 00249 buffer, 00250 buffer_size, 00251 value_length); 00252 00253 if (kcm_status != KCM_STATUS_SUCCESS) { 00254 tr_debug("CloudClientStorage::get_config_public_key [%s] kcm get error %d", key, kcm_status); 00255 return CCS_STATUS_ERROR; 00256 } 00257 00258 return CCS_STATUS_SUCCESS; 00259 } 00260 00261 ccs_status_e set_config_public_key(const char* key, const uint8_t *buffer, const size_t buffer_size) 00262 { 00263 if (key == NULL || buffer == NULL || buffer_size == 0) { 00264 tr_error("CloudClientStorage::set_config_public_key error, invalid parameters"); 00265 return CCS_STATUS_ERROR; 00266 } 00267 00268 tr_debug("CloudClientStorage::set_config_public_key - kcm [%s]", key); 00269 00270 // Set public key to storage 00271 kcm_status_e kcm_status = kcm_item_store((const uint8_t*)key, 00272 strlen(key), 00273 KCM_PUBLIC_KEY_ITEM, 00274 false, 00275 buffer, 00276 buffer_size, 00277 NULL); 00278 00279 if (kcm_status == KCM_CRYPTO_STATUS_PUBLIC_KEY_VERIFICATION_FAILED) { 00280 tr_error("CloudClientStorage::set_config_public_key - kcm validation error"); 00281 return CCS_STATUS_VALIDATION_FAIL; 00282 } 00283 else if (kcm_status != KCM_STATUS_SUCCESS) { 00284 tr_debug("CloudClientStorage::set_config_public_key - kcm [%s] get error %d", key, kcm_status); 00285 return CCS_STATUS_ERROR; 00286 } 00287 00288 return CCS_STATUS_SUCCESS; 00289 } 00290 00291 ccs_status_e delete_config_public_key(const char* key) 00292 { 00293 if (key == NULL) { 00294 tr_error("CloudClientStorage::delete_config_public_key error, invalid parameters"); 00295 return CCS_STATUS_ERROR; 00296 } 00297 00298 tr_debug("CloudClientStorage::delete_config_public_key [%s]", key); 00299 00300 // Delete the public key 00301 kcm_status_e kcm_status = kcm_item_delete((const uint8_t*)key, 00302 strlen(key), 00303 KCM_PUBLIC_KEY_ITEM); 00304 00305 if (kcm_status != KCM_STATUS_SUCCESS) { 00306 tr_debug("CloudClientStorage::delete_config_public_key [%s] kcm get error %d", key, kcm_status); 00307 return CCS_STATUS_ERROR; 00308 } 00309 00310 return CCS_STATUS_SUCCESS; 00311 } 00312 00313 ccs_status_e get_config_certificate(const char* key, uint8_t *buffer, const size_t buffer_size, size_t *value_length) 00314 { 00315 if (key == NULL || buffer == NULL || buffer_size == 0) { 00316 tr_error("CloudClientStorage::get_config_certificate error, invalid parameters"); 00317 return CCS_STATUS_ERROR; 00318 } 00319 00320 tr_debug("CloudClientStorage::get_config_certificate kcm [%s]", key); 00321 00322 // Get parameter value to buffer 00323 kcm_status_e kcm_status = kcm_item_get_data((const uint8_t*)key, 00324 strlen(key), 00325 KCM_CERTIFICATE_ITEM, 00326 buffer, 00327 buffer_size, 00328 value_length); 00329 00330 if (kcm_status != KCM_STATUS_SUCCESS) { 00331 tr_debug("CloudClientStorage::get_config_certificate kcm [%s] get error %d", key, kcm_status); 00332 return CCS_STATUS_ERROR; 00333 } 00334 00335 return CCS_STATUS_SUCCESS; 00336 } 00337 00338 ccs_status_e set_config_certificate(const char* key, const uint8_t *buffer, const size_t buffer_size) 00339 { 00340 if (key == NULL || buffer == NULL || buffer_size == 0) { 00341 tr_error("CloudClientStorage::set_config_certificate error, invalid parameters"); 00342 return CCS_STATUS_ERROR; 00343 } 00344 00345 tr_debug("CloudClientStorage::set_config_certificate kcm [%s]", key); 00346 00347 // Get parameter value to buffer 00348 kcm_status_e kcm_status = kcm_item_store((const uint8_t*)key, 00349 strlen(key), 00350 KCM_CERTIFICATE_ITEM, 00351 false, 00352 buffer, 00353 buffer_size, 00354 NULL); 00355 00356 if (kcm_status != KCM_STATUS_SUCCESS) { 00357 tr_debug("CloudClientStorage::set_config_certificate kcm [%s] get error %d", key, kcm_status); 00358 return CCS_STATUS_ERROR; 00359 } 00360 00361 return CCS_STATUS_SUCCESS; 00362 } 00363 00364 ccs_status_e delete_config_certificate(const char* key) 00365 { 00366 if (key == NULL) { 00367 tr_error("CloudClientStorage::delete_config_certificate error, invalid parameters"); 00368 return CCS_STATUS_ERROR; 00369 } 00370 00371 tr_debug("CloudClientStorage::delete_config_certificate kcm [%s]", key); 00372 00373 // Get parameter value to buffer 00374 kcm_status_e kcm_status = kcm_item_delete((const uint8_t*)key, 00375 strlen(key), 00376 KCM_CERTIFICATE_ITEM); 00377 00378 if (kcm_status != KCM_STATUS_SUCCESS) { 00379 tr_debug("CloudClientStorage::delete_config_certificate kcm [%s] get error %d", key, kcm_status); 00380 return CCS_STATUS_ERROR; 00381 } 00382 00383 return CCS_STATUS_SUCCESS; 00384 }
Generated on Tue Jul 12 2022 19:01:33 by 1.7.2