Simple interface for Mbed Cloud Client
Embed:
(wiki syntax)
Show/hide line numbers
arm_uc_certificate_cfstore_api.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 "update-client-control-center/arm_uc_certificate.h" 00020 #include "update-client-common/arm_uc_config.h" 00021 00022 #ifndef ARM_UC_USE_CFSTORE 00023 #define ARM_UC_USE_CFSTORE 0 00024 #endif 00025 00026 #if ARM_UC_USE_CFSTORE 00027 00028 #include <string.h> 00029 00030 static const uint8_t* arm_uc_certificate = NULL; 00031 static uint16_t arm_uc_certificate_size = 0; 00032 static const uint8_t* arm_uc_fingerprint = NULL; 00033 static uint16_t arm_uc_fingerprint_size = 0; 00034 00035 static arm_uc_error_t arm_uc_cfstore_cert_storer(const arm_uc_buffer_t* cert, 00036 const arm_uc_buffer_t* fingerprint, 00037 void (*callback)(arm_uc_error_t, const arm_uc_buffer_t*)) 00038 { 00039 if (cert == NULL || 00040 cert->ptr == NULL || 00041 fingerprint == NULL || 00042 fingerprint->ptr == NULL) 00043 { 00044 return (arm_uc_error_t){ARM_UC_CM_ERR_INVALID_PARAMETER}; 00045 } 00046 if (cert->size == 0 || fingerprint->size == 0) 00047 { 00048 return (arm_uc_error_t){ARM_UC_CM_ERR_INVALID_PARAMETER}; 00049 } 00050 00051 arm_uc_error_t err = (arm_uc_error_t){ARM_UC_CM_ERR_NONE}; 00052 00053 arm_uc_certificate = cert->ptr; 00054 arm_uc_certificate_size = cert->size; 00055 arm_uc_fingerprint = fingerprint->ptr; 00056 arm_uc_fingerprint_size = fingerprint->size; 00057 00058 if (err.code == ARM_UC_CM_ERR_NONE && callback) 00059 { 00060 callback(err, fingerprint); 00061 } 00062 00063 return err; 00064 } 00065 00066 static arm_uc_error_t arm_uc_cfstore_cert_fetcher(arm_uc_buffer_t* certificate, 00067 const arm_uc_buffer_t* fingerprint, 00068 const arm_uc_buffer_t* DERCertificateList, 00069 void (*callback)(arm_uc_error_t, const arm_uc_buffer_t*, const arm_uc_buffer_t*)) 00070 { 00071 arm_uc_error_t err = {ARM_UC_CM_ERR_INVALID_PARAMETER}; 00072 00073 if (fingerprint->size != arm_uc_fingerprint_size) 00074 { 00075 err.code = ARM_UC_CM_ERR_NOT_FOUND; 00076 } 00077 else if (fingerprint != NULL && 00078 fingerprint->ptr != NULL && 00079 fingerprint->size == arm_uc_fingerprint_size && 00080 certificate != NULL) 00081 { 00082 if (0 == memcmp(fingerprint->ptr, arm_uc_fingerprint, arm_uc_fingerprint_size)) 00083 { 00084 err.code = ARM_UC_CM_ERR_NONE; 00085 certificate->ptr = (uint8_t*) arm_uc_certificate; 00086 certificate->size = arm_uc_certificate_size; 00087 certificate->size_max = arm_uc_certificate_size; 00088 } 00089 else 00090 { 00091 err.code = ARM_UC_CM_ERR_NOT_FOUND; 00092 } 00093 } 00094 00095 if (err.error == ERR_NONE && callback) 00096 { 00097 callback(err, certificate, fingerprint); 00098 } 00099 00100 return err; 00101 } 00102 00103 const struct arm_uc_certificate_api arm_uc_certificate_cfstore_api = { 00104 .fetch = arm_uc_cfstore_cert_fetcher, 00105 .store = arm_uc_cfstore_cert_storer, 00106 }; 00107 00108 #endif // ARM_UC_USE_KCM
Generated on Tue Jul 12 2022 19:01:32 by 1.7.2