Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-cloud-workshop-connect-HTS221 by
update-client-manifest-manager-context.h
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 #ifndef ARM_UC_MM_CONTEXT_TYPES_H 00020 #define ARM_UC_MM_CONTEXT_TYPES_H 00021 00022 #include "update-client-manifest-manager/update-client-manifest-types.h" 00023 #include "update-client-manifest-manager/../source/arm_uc_mmConfig.h" 00024 #include "update-client-common/arm_uc_error.h" 00025 #include "update-client-common/arm_uc_types.h" 00026 #include "update-client-common/arm_uc_scheduler.h" 00027 #include "update-client-manifest-manager/arm-pal-kv.h" 00028 00029 00030 struct arm_uc_mmInitContext_t { 00031 uint64_t timestamp; 00032 uint32_t state; 00033 arm_uc_buffer_t manifest; 00034 arm_uc_buffer_t keyPath; 00035 uint32_t loopCounters[1]; 00036 00037 arm_uc_callback_t callbackStorage; // initialized in hub 00038 struct { 00039 unsigned root:1; 00040 unsigned depidx:3; 00041 unsigned missingDep:1; 00042 }; 00043 uint8_t rootManifestBasePath[sizeof(MANIFEST_PREFIX ".." ) + CFSTORE_HASH_ID_SIZE]; 00044 uint8_t pathBuffer[220]; 00045 uint8_t manifestBuffer[640]; 00046 uint8_t currentHash [MAX_HASH_BYTES]; 00047 00048 }; 00049 00050 struct arm_uc_mm_get_latest_ts_context { 00051 uint64_t current_ts; 00052 uint64_t* max_ts; 00053 uint32_t state; 00054 arm_uc_buffer_t current_data; 00055 arm_uc_buffer_t max_ts_key; 00056 }; 00057 00058 enum arm_uc_mm_pk_sig_state { 00059 UCMM_PKSIG_STATE_INVALID = 0, 00060 UCMM_PKSIG_STATE_FIND_CA, 00061 UCMM_PKSIG_STATE_FINDING_CA, 00062 UCMM_PKSIG_STATE_CHECK, 00063 UCMM_PKSIG_STATE_IDLE, 00064 }; 00065 00066 typedef struct arm_uc_mm_validate_signature_context{ 00067 enum arm_uc_mm_pk_sig_state state; 00068 void (* applicationEventHandler)(uint32_t); 00069 arm_uc_buffer_t fingerprint; 00070 arm_uc_buffer_t certList; 00071 arm_uc_buffer_t cert; 00072 arm_uc_buffer_t* manifest; 00073 arm_uc_error_t storedError; 00074 uint32_t sigIndex; 00075 } arm_uc_mm_validate_signature_context_t; 00076 00077 #define ARM_UC_MM_FW_STATE_LIST\ 00078 ENUM_FIXED(ARM_UC_MM_FW_STATE_INVALID,0)\ 00079 ENUM_AUTO(ARM_UC_MM_FW_STATE_IDLE)\ 00080 ENUM_AUTO(ARM_UC_MM_FW_STATE_BEGIN)\ 00081 ENUM_AUTO(ARM_UC_MM_FW_STATE_FIND_ROOT)\ 00082 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_TS)\ 00083 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_NAME)\ 00084 ENUM_AUTO(ARM_UC_MM_FW_STATE_FIND_NEXT_ROOT)\ 00085 ENUM_AUTO(ARM_UC_MM_FW_STATE_FORMAT_ROOT_PREFIX)\ 00086 ENUM_AUTO(ARM_UC_MM_FW_STATE_FIND_MANIFEST)\ 00087 ENUM_AUTO(ARM_UC_MM_FW_STATE_READ_MANIFEST)\ 00088 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_ROOT)\ 00089 ENUM_AUTO(ARM_UC_MM_FW_STATE_FIND_URI)\ 00090 ENUM_AUTO(ARM_UC_MM_FW_STATE_READ_URI)\ 00091 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_URI_KEY)\ 00092 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_HASH)\ 00093 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_DEP_URI)\ 00094 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_DEP_HASH)\ 00095 ENUM_AUTO(ARM_UC_MM_FW_STATE_GET_FW_REF)\ 00096 ENUM_AUTO(ARM_UC_MM_FW_STATE_NOTIFY)\ 00097 ENUM_AUTO(ARM_UC_MM_FW_STATE_ROOT_NOTIFY_WAIT)\ 00098 ENUM_AUTO(ARM_UC_MM_FW_STATE_NEXT_IMAGE)\ 00099 ENUM_AUTO(ARM_UC_MM_FW_STATE_DONE)\ 00100 00101 00102 enum arm_uc_mm_fw_state { 00103 #define ENUM_AUTO(name) name, 00104 #define ENUM_FIXED(name, val) name = val, 00105 ARM_UC_MM_FW_STATE_LIST 00106 #undef ENUM_AUTO 00107 #undef ENUM_FIXED 00108 }; 00109 00110 struct arm_uc_mm_fw_context_t { 00111 struct arm_uc_mm_get_latest_ts_context getLatestTs; 00112 uint64_t ts; 00113 arm_uc_manifest_handle_t* ID; 00114 enum arm_uc_mm_fw_state state; 00115 struct manifest_firmware_info_t* info; 00116 arm_uc_callback_t callbackStorage; // initialized in hub 00117 arm_uc_buffer_t current_data; 00118 char hashIDbuffer[CFSTORE_HASH_ID_SIZE]; 00119 uint8_t keyBuffer[ARM_PAL_KV_KEY_MAX_PATH]; 00120 }; 00121 00122 #define ARM_UC_MM_INS_STATE_LIST\ 00123 ENUM_FIXED(ARM_UC_MM_INS_STATE_INVALID,0)\ 00124 ENUM_AUTO(ARM_UC_MM_INS_STATE_IDLE)\ 00125 ENUM_AUTO(ARM_UC_MM_INS_STATE_BEGIN)\ 00126 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_BASIC_PARAMS)\ 00127 ENUM_AUTO(ARM_UC_MM_INS_STATE_HASH_VERIFY)\ 00128 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_SIG_LOOP)\ 00129 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_SIG_START)\ 00130 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_SIG_WAIT)\ 00131 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_PARAMS)\ 00132 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_APP)\ 00133 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_FAIL)\ 00134 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_DONE)\ 00135 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_BEGIN)\ 00136 ENUM_AUTO(ARM_UC_MM_INS_STATE_MATCHING)\ 00137 ENUM_AUTO(ARM_UC_MM_INS_STATE_MATCH_FETCHING)\ 00138 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_MANIFEST_BEGIN)\ 00139 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_MANIFEST)\ 00140 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_FW_URI)\ 00141 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_FW_HASH)\ 00142 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_AES)\ 00143 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_DEPS)\ 00144 ENUM_AUTO(ARM_UC_MM_INS_STATE_DEPSTART)\ 00145 ENUM_AUTO(ARM_UC_MM_INS_STATE_DEP_WAITING)\ 00146 ENUM_AUTO(ARM_UC_MM_INS_STATE_COMPLETION)\ 00147 ENUM_AUTO(ARM_UC_MM_INS_STATE_COMPLETION_FINDING)\ 00148 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_TS_START)\ 00149 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_TS)\ 00150 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_TS_START)\ 00151 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_TS)\ 00152 ENUM_AUTO(ARM_UC_MM_INS_STATE_DEP_CHECK)\ 00153 ENUM_AUTO(ARM_UC_MM_INS_STATE_DEP_CHECKING)\ 00154 ENUM_AUTO(ARM_UC_MM_INS_STATE_DEP_DELETE)\ 00155 ENUM_AUTO(ARM_UC_MM_INS_STATE_DONE)\ 00156 ENUM_AUTO(ARM_UC_MM_INS_STATE_ALERT)\ 00157 00158 00159 enum arm_uc_mm_insert_state { 00160 #define ENUM_AUTO(name) name, 00161 #define ENUM_FIXED(name, val) name = val, 00162 ARM_UC_MM_INS_STATE_LIST 00163 #undef ENUM_AUTO 00164 #undef ENUM_FIXED 00165 }; 00166 00167 struct arm_uc_mmInsertContext_t { 00168 struct arm_uc_mm_get_latest_ts_context getLatestTs; 00169 arm_uc_mm_validate_signature_context_t signatureContext; 00170 uint64_t max_ts; 00171 uint64_t current_ts; 00172 arm_uc_manifest_handle_t* ID; 00173 enum arm_uc_mm_insert_state state; 00174 arm_uc_callback_t callbackStorage; // initialized in hub 00175 arm_uc_buffer_t manifest; 00176 arm_uc_mm_crypto_flags_t cryptoMode; 00177 arm_uc_buffer_t certificateStorage; 00178 uint32_t loopCounters[1]; 00179 }; 00180 00181 struct arm_uc_mmContext_t { 00182 // Operational Contexts 00183 union { 00184 struct arm_uc_mmInitContext_t init; 00185 struct arm_uc_mm_fw_context_t getFw; 00186 struct arm_uc_mmInsertContext_t insert; 00187 }; 00188 }; 00189 typedef struct arm_uc_mmContext_t arm_uc_mmContext_t; 00190 00191 00192 enum arm_uc_mmState_t { 00193 ARM_UC_MM_STATE_INVALID=0, 00194 ARM_UC_MM_STATE_IDLE, 00195 ARM_UC_MM_STATE_INIT, 00196 ARM_UC_MM_STATE_INSERTING, 00197 ARM_UC_MM_STATE_STORING_CA, 00198 ARM_UC_MM_STATE_FWINFO, 00199 ARM_UC_MM_STATE_TEST, 00200 }; 00201 00202 typedef void (*ARM_UC_mmTestHook_t)(const char*, arm_uc_mmContext_t*, uint32_t, uint32_t, arm_uc_error_t); 00203 00204 struct arm_uc_mmPersistentContext_t { 00205 enum arm_uc_mmState_t state; 00206 arm_uc_error_t reportedError; 00207 const char* errorFile; 00208 uint32_t errorLine; 00209 struct arm_uc_mmContext_t** ctx; 00210 arm_uc_callback_t applicationCallbackStorage; // initialized in mmCommon 00211 void (*applicationEventHandler)(uint32_t); 00212 arm_uc_error_t (*testFSM)(uint32_t event); 00213 #if ARM_UC_MM_ENABLE_TEST_VECTORS 00214 ARM_UC_mmTestHook_t testHook; 00215 #endif 00216 }; 00217 00218 typedef struct arm_uc_mmPersistentContext_t arm_uc_mmPersistentContext_t; 00219 extern arm_uc_mmPersistentContext_t arm_uc_mmPersistentContext; 00220 00221 static inline arm_uc_mmContext_t* arm_uc_mmBuf2Context(arm_uc_buffer_t* b) { 00222 return (arm_uc_mmContext_t*)b->ptr; 00223 } 00224 00225 static inline arm_uc_error_t arm_uc_mmContextBufSizeCheck(arm_uc_buffer_t* b) { 00226 arm_uc_error_t err = { .code = MFST_ERR_NONE }; 00227 if (b->size_max < sizeof(arm_uc_mmContext_t)) { 00228 err.code = MFST_ERR_SIZE; 00229 return err; 00230 } 00231 return err; 00232 } 00233 00234 00235 #endif // ARM_UC_MM_CONTEXT_TYPES_H
Generated on Tue Jul 12 2022 19:12:17 by
1.7.2
