Toyomasa Watarai
/
Mbed-example-WS-W27
simple-mbed-cloud-client/mbed-cloud-client/update-client-hub/modules/manifest-manager/update-client-manifest-manager/update-client-manifest-manager-context.h@0:119624335925, 2018-06-30 (annotated)
- Committer:
- MACRUM
- Date:
- Sat Jun 30 01:40:30 2018 +0000
- Revision:
- 0:119624335925
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MACRUM | 0:119624335925 | 1 | // ---------------------------------------------------------------------------- |
MACRUM | 0:119624335925 | 2 | // Copyright 2016-2017 ARM Ltd. |
MACRUM | 0:119624335925 | 3 | // |
MACRUM | 0:119624335925 | 4 | // SPDX-License-Identifier: Apache-2.0 |
MACRUM | 0:119624335925 | 5 | // |
MACRUM | 0:119624335925 | 6 | // Licensed under the Apache License, Version 2.0 (the "License"); |
MACRUM | 0:119624335925 | 7 | // you may not use this file except in compliance with the License. |
MACRUM | 0:119624335925 | 8 | // You may obtain a copy of the License at |
MACRUM | 0:119624335925 | 9 | // |
MACRUM | 0:119624335925 | 10 | // http://www.apache.org/licenses/LICENSE-2.0 |
MACRUM | 0:119624335925 | 11 | // |
MACRUM | 0:119624335925 | 12 | // Unless required by applicable law or agreed to in writing, software |
MACRUM | 0:119624335925 | 13 | // distributed under the License is distributed on an "AS IS" BASIS, |
MACRUM | 0:119624335925 | 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
MACRUM | 0:119624335925 | 15 | // See the License for the specific language governing permissions and |
MACRUM | 0:119624335925 | 16 | // limitations under the License. |
MACRUM | 0:119624335925 | 17 | // ---------------------------------------------------------------------------- |
MACRUM | 0:119624335925 | 18 | |
MACRUM | 0:119624335925 | 19 | #ifndef ARM_UC_MM_CONTEXT_TYPES_H |
MACRUM | 0:119624335925 | 20 | #define ARM_UC_MM_CONTEXT_TYPES_H |
MACRUM | 0:119624335925 | 21 | |
MACRUM | 0:119624335925 | 22 | #include "update-client-manifest-manager/update-client-manifest-types.h" |
MACRUM | 0:119624335925 | 23 | #include "update-client-manifest-manager/../source/arm_uc_mmConfig.h" |
MACRUM | 0:119624335925 | 24 | #include "update-client-common/arm_uc_error.h" |
MACRUM | 0:119624335925 | 25 | #include "update-client-common/arm_uc_types.h" |
MACRUM | 0:119624335925 | 26 | #include "update-client-common/arm_uc_scheduler.h" |
MACRUM | 0:119624335925 | 27 | #include "update-client-manifest-manager/arm-pal-kv.h" |
MACRUM | 0:119624335925 | 28 | |
MACRUM | 0:119624335925 | 29 | |
MACRUM | 0:119624335925 | 30 | struct arm_uc_mmInitContext_t { |
MACRUM | 0:119624335925 | 31 | uint64_t timestamp; |
MACRUM | 0:119624335925 | 32 | uint32_t state; |
MACRUM | 0:119624335925 | 33 | arm_uc_buffer_t manifest; |
MACRUM | 0:119624335925 | 34 | arm_uc_buffer_t keyPath; |
MACRUM | 0:119624335925 | 35 | uint32_t loopCounters[1]; |
MACRUM | 0:119624335925 | 36 | |
MACRUM | 0:119624335925 | 37 | arm_uc_callback_t callbackStorage; // initialized in hub |
MACRUM | 0:119624335925 | 38 | struct { |
MACRUM | 0:119624335925 | 39 | unsigned root:1; |
MACRUM | 0:119624335925 | 40 | unsigned depidx:3; |
MACRUM | 0:119624335925 | 41 | unsigned missingDep:1; |
MACRUM | 0:119624335925 | 42 | }; |
MACRUM | 0:119624335925 | 43 | uint8_t rootManifestBasePath[sizeof(MANIFEST_PREFIX ".." ) + CFSTORE_HASH_ID_SIZE]; |
MACRUM | 0:119624335925 | 44 | uint8_t pathBuffer[220]; |
MACRUM | 0:119624335925 | 45 | uint8_t manifestBuffer[640]; |
MACRUM | 0:119624335925 | 46 | uint8_t currentHash [MAX_HASH_BYTES]; |
MACRUM | 0:119624335925 | 47 | |
MACRUM | 0:119624335925 | 48 | }; |
MACRUM | 0:119624335925 | 49 | |
MACRUM | 0:119624335925 | 50 | struct arm_uc_mm_get_latest_ts_context { |
MACRUM | 0:119624335925 | 51 | uint64_t current_ts; |
MACRUM | 0:119624335925 | 52 | uint64_t* max_ts; |
MACRUM | 0:119624335925 | 53 | uint32_t state; |
MACRUM | 0:119624335925 | 54 | arm_uc_buffer_t current_data; |
MACRUM | 0:119624335925 | 55 | arm_uc_buffer_t max_ts_key; |
MACRUM | 0:119624335925 | 56 | }; |
MACRUM | 0:119624335925 | 57 | |
MACRUM | 0:119624335925 | 58 | enum arm_uc_mm_pk_sig_state { |
MACRUM | 0:119624335925 | 59 | UCMM_PKSIG_STATE_INVALID = 0, |
MACRUM | 0:119624335925 | 60 | UCMM_PKSIG_STATE_FIND_CA, |
MACRUM | 0:119624335925 | 61 | UCMM_PKSIG_STATE_FINDING_CA, |
MACRUM | 0:119624335925 | 62 | UCMM_PKSIG_STATE_CHECK, |
MACRUM | 0:119624335925 | 63 | UCMM_PKSIG_STATE_IDLE, |
MACRUM | 0:119624335925 | 64 | }; |
MACRUM | 0:119624335925 | 65 | |
MACRUM | 0:119624335925 | 66 | typedef struct arm_uc_mm_validate_signature_context{ |
MACRUM | 0:119624335925 | 67 | enum arm_uc_mm_pk_sig_state state; |
MACRUM | 0:119624335925 | 68 | void (* applicationEventHandler)(uint32_t); |
MACRUM | 0:119624335925 | 69 | arm_uc_buffer_t fingerprint; |
MACRUM | 0:119624335925 | 70 | arm_uc_buffer_t certList; |
MACRUM | 0:119624335925 | 71 | arm_uc_buffer_t cert; |
MACRUM | 0:119624335925 | 72 | arm_uc_buffer_t* manifest; |
MACRUM | 0:119624335925 | 73 | arm_uc_error_t storedError; |
MACRUM | 0:119624335925 | 74 | uint32_t sigIndex; |
MACRUM | 0:119624335925 | 75 | } arm_uc_mm_validate_signature_context_t; |
MACRUM | 0:119624335925 | 76 | |
MACRUM | 0:119624335925 | 77 | #define ARM_UC_MM_FW_STATE_LIST\ |
MACRUM | 0:119624335925 | 78 | ENUM_FIXED(ARM_UC_MM_FW_STATE_INVALID,0)\ |
MACRUM | 0:119624335925 | 79 | ENUM_AUTO(ARM_UC_MM_FW_STATE_IDLE)\ |
MACRUM | 0:119624335925 | 80 | ENUM_AUTO(ARM_UC_MM_FW_STATE_BEGIN)\ |
MACRUM | 0:119624335925 | 81 | ENUM_AUTO(ARM_UC_MM_FW_STATE_FIND_ROOT)\ |
MACRUM | 0:119624335925 | 82 | ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_TS)\ |
MACRUM | 0:119624335925 | 83 | ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_NAME)\ |
MACRUM | 0:119624335925 | 84 | ENUM_AUTO(ARM_UC_MM_FW_STATE_FIND_NEXT_ROOT)\ |
MACRUM | 0:119624335925 | 85 | ENUM_AUTO(ARM_UC_MM_FW_STATE_FORMAT_ROOT_PREFIX)\ |
MACRUM | 0:119624335925 | 86 | ENUM_AUTO(ARM_UC_MM_FW_STATE_FIND_MANIFEST)\ |
MACRUM | 0:119624335925 | 87 | ENUM_AUTO(ARM_UC_MM_FW_STATE_READ_MANIFEST)\ |
MACRUM | 0:119624335925 | 88 | ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_ROOT)\ |
MACRUM | 0:119624335925 | 89 | ENUM_AUTO(ARM_UC_MM_FW_STATE_FIND_URI)\ |
MACRUM | 0:119624335925 | 90 | ENUM_AUTO(ARM_UC_MM_FW_STATE_READ_URI)\ |
MACRUM | 0:119624335925 | 91 | ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_URI_KEY)\ |
MACRUM | 0:119624335925 | 92 | ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_HASH)\ |
MACRUM | 0:119624335925 | 93 | ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_DEP_URI)\ |
MACRUM | 0:119624335925 | 94 | ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_DEP_HASH)\ |
MACRUM | 0:119624335925 | 95 | ENUM_AUTO(ARM_UC_MM_FW_STATE_GET_FW_REF)\ |
MACRUM | 0:119624335925 | 96 | ENUM_AUTO(ARM_UC_MM_FW_STATE_NOTIFY)\ |
MACRUM | 0:119624335925 | 97 | ENUM_AUTO(ARM_UC_MM_FW_STATE_ROOT_NOTIFY_WAIT)\ |
MACRUM | 0:119624335925 | 98 | ENUM_AUTO(ARM_UC_MM_FW_STATE_NEXT_IMAGE)\ |
MACRUM | 0:119624335925 | 99 | ENUM_AUTO(ARM_UC_MM_FW_STATE_DONE)\ |
MACRUM | 0:119624335925 | 100 | |
MACRUM | 0:119624335925 | 101 | |
MACRUM | 0:119624335925 | 102 | enum arm_uc_mm_fw_state { |
MACRUM | 0:119624335925 | 103 | #define ENUM_AUTO(name) name, |
MACRUM | 0:119624335925 | 104 | #define ENUM_FIXED(name, val) name = val, |
MACRUM | 0:119624335925 | 105 | ARM_UC_MM_FW_STATE_LIST |
MACRUM | 0:119624335925 | 106 | #undef ENUM_AUTO |
MACRUM | 0:119624335925 | 107 | #undef ENUM_FIXED |
MACRUM | 0:119624335925 | 108 | }; |
MACRUM | 0:119624335925 | 109 | |
MACRUM | 0:119624335925 | 110 | struct arm_uc_mm_fw_context_t { |
MACRUM | 0:119624335925 | 111 | struct arm_uc_mm_get_latest_ts_context getLatestTs; |
MACRUM | 0:119624335925 | 112 | uint64_t ts; |
MACRUM | 0:119624335925 | 113 | arm_uc_manifest_handle_t* ID; |
MACRUM | 0:119624335925 | 114 | enum arm_uc_mm_fw_state state; |
MACRUM | 0:119624335925 | 115 | struct manifest_firmware_info_t* info; |
MACRUM | 0:119624335925 | 116 | arm_uc_callback_t callbackStorage; // initialized in hub |
MACRUM | 0:119624335925 | 117 | arm_uc_buffer_t current_data; |
MACRUM | 0:119624335925 | 118 | char hashIDbuffer[CFSTORE_HASH_ID_SIZE]; |
MACRUM | 0:119624335925 | 119 | uint8_t keyBuffer[ARM_PAL_KV_KEY_MAX_PATH]; |
MACRUM | 0:119624335925 | 120 | }; |
MACRUM | 0:119624335925 | 121 | |
MACRUM | 0:119624335925 | 122 | #define ARM_UC_MM_INS_STATE_LIST\ |
MACRUM | 0:119624335925 | 123 | ENUM_FIXED(ARM_UC_MM_INS_STATE_INVALID,0)\ |
MACRUM | 0:119624335925 | 124 | ENUM_AUTO(ARM_UC_MM_INS_STATE_IDLE)\ |
MACRUM | 0:119624335925 | 125 | ENUM_AUTO(ARM_UC_MM_INS_STATE_BEGIN)\ |
MACRUM | 0:119624335925 | 126 | ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_BASIC_PARAMS)\ |
MACRUM | 0:119624335925 | 127 | ENUM_AUTO(ARM_UC_MM_INS_STATE_HASH_VERIFY)\ |
MACRUM | 0:119624335925 | 128 | ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_SIG_LOOP)\ |
MACRUM | 0:119624335925 | 129 | ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_SIG_START)\ |
MACRUM | 0:119624335925 | 130 | ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_SIG_WAIT)\ |
MACRUM | 0:119624335925 | 131 | ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_PARAMS)\ |
MACRUM | 0:119624335925 | 132 | ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_APP)\ |
MACRUM | 0:119624335925 | 133 | ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_FAIL)\ |
MACRUM | 0:119624335925 | 134 | ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_DONE)\ |
MACRUM | 0:119624335925 | 135 | ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_BEGIN)\ |
MACRUM | 0:119624335925 | 136 | ENUM_AUTO(ARM_UC_MM_INS_STATE_MATCHING)\ |
MACRUM | 0:119624335925 | 137 | ENUM_AUTO(ARM_UC_MM_INS_STATE_MATCH_FETCHING)\ |
MACRUM | 0:119624335925 | 138 | ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_MANIFEST_BEGIN)\ |
MACRUM | 0:119624335925 | 139 | ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_MANIFEST)\ |
MACRUM | 0:119624335925 | 140 | ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_FW_URI)\ |
MACRUM | 0:119624335925 | 141 | ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_FW_HASH)\ |
MACRUM | 0:119624335925 | 142 | ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_AES)\ |
MACRUM | 0:119624335925 | 143 | ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_DEPS)\ |
MACRUM | 0:119624335925 | 144 | ENUM_AUTO(ARM_UC_MM_INS_STATE_DEPSTART)\ |
MACRUM | 0:119624335925 | 145 | ENUM_AUTO(ARM_UC_MM_INS_STATE_DEP_WAITING)\ |
MACRUM | 0:119624335925 | 146 | ENUM_AUTO(ARM_UC_MM_INS_STATE_COMPLETION)\ |
MACRUM | 0:119624335925 | 147 | ENUM_AUTO(ARM_UC_MM_INS_STATE_COMPLETION_FINDING)\ |
MACRUM | 0:119624335925 | 148 | ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_TS_START)\ |
MACRUM | 0:119624335925 | 149 | ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_TS)\ |
MACRUM | 0:119624335925 | 150 | ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_TS_START)\ |
MACRUM | 0:119624335925 | 151 | ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_TS)\ |
MACRUM | 0:119624335925 | 152 | ENUM_AUTO(ARM_UC_MM_INS_STATE_DEP_CHECK)\ |
MACRUM | 0:119624335925 | 153 | ENUM_AUTO(ARM_UC_MM_INS_STATE_DEP_CHECKING)\ |
MACRUM | 0:119624335925 | 154 | ENUM_AUTO(ARM_UC_MM_INS_STATE_DEP_DELETE)\ |
MACRUM | 0:119624335925 | 155 | ENUM_AUTO(ARM_UC_MM_INS_STATE_DONE)\ |
MACRUM | 0:119624335925 | 156 | ENUM_AUTO(ARM_UC_MM_INS_STATE_ALERT)\ |
MACRUM | 0:119624335925 | 157 | |
MACRUM | 0:119624335925 | 158 | |
MACRUM | 0:119624335925 | 159 | enum arm_uc_mm_insert_state { |
MACRUM | 0:119624335925 | 160 | #define ENUM_AUTO(name) name, |
MACRUM | 0:119624335925 | 161 | #define ENUM_FIXED(name, val) name = val, |
MACRUM | 0:119624335925 | 162 | ARM_UC_MM_INS_STATE_LIST |
MACRUM | 0:119624335925 | 163 | #undef ENUM_AUTO |
MACRUM | 0:119624335925 | 164 | #undef ENUM_FIXED |
MACRUM | 0:119624335925 | 165 | }; |
MACRUM | 0:119624335925 | 166 | |
MACRUM | 0:119624335925 | 167 | struct arm_uc_mmInsertContext_t { |
MACRUM | 0:119624335925 | 168 | struct arm_uc_mm_get_latest_ts_context getLatestTs; |
MACRUM | 0:119624335925 | 169 | arm_uc_mm_validate_signature_context_t signatureContext; |
MACRUM | 0:119624335925 | 170 | uint64_t max_ts; |
MACRUM | 0:119624335925 | 171 | uint64_t current_ts; |
MACRUM | 0:119624335925 | 172 | arm_uc_manifest_handle_t* ID; |
MACRUM | 0:119624335925 | 173 | enum arm_uc_mm_insert_state state; |
MACRUM | 0:119624335925 | 174 | arm_uc_callback_t callbackStorage; // initialized in hub |
MACRUM | 0:119624335925 | 175 | arm_uc_buffer_t manifest; |
MACRUM | 0:119624335925 | 176 | arm_uc_mm_crypto_flags_t cryptoMode; |
MACRUM | 0:119624335925 | 177 | arm_uc_buffer_t certificateStorage; |
MACRUM | 0:119624335925 | 178 | uint32_t loopCounters[1]; |
MACRUM | 0:119624335925 | 179 | }; |
MACRUM | 0:119624335925 | 180 | |
MACRUM | 0:119624335925 | 181 | struct arm_uc_mmContext_t { |
MACRUM | 0:119624335925 | 182 | // Operational Contexts |
MACRUM | 0:119624335925 | 183 | union { |
MACRUM | 0:119624335925 | 184 | struct arm_uc_mmInitContext_t init; |
MACRUM | 0:119624335925 | 185 | struct arm_uc_mm_fw_context_t getFw; |
MACRUM | 0:119624335925 | 186 | struct arm_uc_mmInsertContext_t insert; |
MACRUM | 0:119624335925 | 187 | }; |
MACRUM | 0:119624335925 | 188 | }; |
MACRUM | 0:119624335925 | 189 | typedef struct arm_uc_mmContext_t arm_uc_mmContext_t; |
MACRUM | 0:119624335925 | 190 | |
MACRUM | 0:119624335925 | 191 | |
MACRUM | 0:119624335925 | 192 | enum arm_uc_mmState_t { |
MACRUM | 0:119624335925 | 193 | ARM_UC_MM_STATE_INVALID=0, |
MACRUM | 0:119624335925 | 194 | ARM_UC_MM_STATE_IDLE, |
MACRUM | 0:119624335925 | 195 | ARM_UC_MM_STATE_INIT, |
MACRUM | 0:119624335925 | 196 | ARM_UC_MM_STATE_INSERTING, |
MACRUM | 0:119624335925 | 197 | ARM_UC_MM_STATE_STORING_CA, |
MACRUM | 0:119624335925 | 198 | ARM_UC_MM_STATE_FWINFO, |
MACRUM | 0:119624335925 | 199 | ARM_UC_MM_STATE_TEST, |
MACRUM | 0:119624335925 | 200 | }; |
MACRUM | 0:119624335925 | 201 | |
MACRUM | 0:119624335925 | 202 | typedef void (*ARM_UC_mmTestHook_t)(const char*, arm_uc_mmContext_t*, uint32_t, uint32_t, arm_uc_error_t); |
MACRUM | 0:119624335925 | 203 | |
MACRUM | 0:119624335925 | 204 | struct arm_uc_mmPersistentContext_t { |
MACRUM | 0:119624335925 | 205 | enum arm_uc_mmState_t state; |
MACRUM | 0:119624335925 | 206 | arm_uc_error_t reportedError; |
MACRUM | 0:119624335925 | 207 | const char* errorFile; |
MACRUM | 0:119624335925 | 208 | uint32_t errorLine; |
MACRUM | 0:119624335925 | 209 | struct arm_uc_mmContext_t** ctx; |
MACRUM | 0:119624335925 | 210 | arm_uc_callback_t applicationCallbackStorage; // initialized in mmCommon |
MACRUM | 0:119624335925 | 211 | void (*applicationEventHandler)(uint32_t); |
MACRUM | 0:119624335925 | 212 | arm_uc_error_t (*testFSM)(uint32_t event); |
MACRUM | 0:119624335925 | 213 | #if ARM_UC_MM_ENABLE_TEST_VECTORS |
MACRUM | 0:119624335925 | 214 | ARM_UC_mmTestHook_t testHook; |
MACRUM | 0:119624335925 | 215 | #endif |
MACRUM | 0:119624335925 | 216 | }; |
MACRUM | 0:119624335925 | 217 | |
MACRUM | 0:119624335925 | 218 | typedef struct arm_uc_mmPersistentContext_t arm_uc_mmPersistentContext_t; |
MACRUM | 0:119624335925 | 219 | extern arm_uc_mmPersistentContext_t arm_uc_mmPersistentContext; |
MACRUM | 0:119624335925 | 220 | |
MACRUM | 0:119624335925 | 221 | static inline arm_uc_mmContext_t* arm_uc_mmBuf2Context(arm_uc_buffer_t* b) { |
MACRUM | 0:119624335925 | 222 | return (arm_uc_mmContext_t*)b->ptr; |
MACRUM | 0:119624335925 | 223 | } |
MACRUM | 0:119624335925 | 224 | |
MACRUM | 0:119624335925 | 225 | static inline arm_uc_error_t arm_uc_mmContextBufSizeCheck(arm_uc_buffer_t* b) { |
MACRUM | 0:119624335925 | 226 | arm_uc_error_t err = { .code = MFST_ERR_NONE }; |
MACRUM | 0:119624335925 | 227 | if (b->size_max < sizeof(arm_uc_mmContext_t)) { |
MACRUM | 0:119624335925 | 228 | err.code = MFST_ERR_SIZE; |
MACRUM | 0:119624335925 | 229 | return err; |
MACRUM | 0:119624335925 | 230 | } |
MACRUM | 0:119624335925 | 231 | return err; |
MACRUM | 0:119624335925 | 232 | } |
MACRUM | 0:119624335925 | 233 | |
MACRUM | 0:119624335925 | 234 | |
MACRUM | 0:119624335925 | 235 | #endif // ARM_UC_MM_CONTEXT_TYPES_H |