Simulated product dispenser

Dependencies:   HTS221

Fork of mbed-cloud-workshop-connect-HTS221 by Jim Carver

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers arm_uc_certificate_cfstore_api.c Source File

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