Simulated product dispenser
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