1Mbed Crypto storage specification 2================================= 3 4This document specifies how Mbed Crypto uses storage. 5 6Mbed Crypto may be upgraded on an existing device with the storage preserved. Therefore: 7 81. Any change may break existing installations and may require an upgrade path. 91. This document retains historical information about all past released versions. Do not remove information from this document unless it has always been incorrect or it is about a version that you are sure was never released. 10 11Mbed Crypto 0.1.0 12----------------- 13 14Tags: mbedcrypto-0.1.0b, mbedcrypto-0.1.0b2 15 16Released in November 2018. <br> 17Integrated in Mbed OS 5.11. 18 19Supported backends: 20 21* [PSA ITS](#file-namespace-on-its-for-0.1.0) 22* [C stdio](#file-namespace-on-stdio-for-0.1.0) 23 24Supported features: 25 26* [Persistent transparent keys](#key-file-format-for-0.1.0) designated by a [slot number](#key-names-for-0.1.0). 27* [Nonvolatile random seed](#nonvolatile-random-seed-file-format-for-0.1.0) on ITS only. 28 29This is a beta release, and we do not promise backward compatibility, with one exception: 30 31> On Mbed OS, if a device has a nonvolatile random seed file produced with Mbed OS 5.11.x and is upgraded to a later version of Mbed OS, the nonvolatile random seed file is preserved or upgraded. 32 33We do not make any promises regarding key storage, or regarding the nonvolatile random seed file on other platforms. 34 35### Key names for 0.1.0 36 37Information about each key is stored in a dedicated file whose name is constructed from the key identifier. The way in which the file name is constructed depends on the storage backend. The content of the file is described [below](#key-file-format-for-0.1.0). 38 39The valid values for a key identifier are the range from 1 to 0xfffeffff. This limitation on the range is not documented in user-facing documentation: according to the user-facing documentation, arbitrary 32-bit values are valid. 40 41The code uses the following constant in an internal header (note that despite the name, this value is actually one plus the maximum permitted value): 42 43 #define PSA_MAX_PERSISTENT_KEY_IDENTIFIER 0xffff0000 44 45There is a shared namespace for all callers. 46 47### Key file format for 0.1.0 48 49All integers are encoded in little-endian order in 8-bit bytes. 50 51The layout of a key file is: 52 53* magic (8 bytes): `"PSA\0KEY\0"` 54* version (4 bytes): 0 55* type (4 bytes): `psa_key_type_t` value 56* policy usage flags (4 bytes): `psa_key_usage_t` value 57* policy usage algorithm (4 bytes): `psa_algorithm_t` value 58* key material length (4 bytes) 59* key material: output of `psa_export_key` 60* Any trailing data is rejected on load. 61 62### Nonvolatile random seed file format for 0.1.0 63 64The nonvolatile random seed file contains a seed for the random generator. If present, it is rewritten at each boot as part of the random generator initialization. 65 66The file format is just the seed as a byte string with no metadata or encoding of any kind. 67 68### File namespace on ITS for 0.1.0 69 70Assumption: ITS provides a 32-bit file identifier namespace. The Crypto service can use arbitrary file identifiers and no other part of the system accesses the same file identifier namespace. 71 72* File 0: unused. 73* Files 1 through 0xfffeffff: [content](#key-file-format-for-0.1.0) of the [key whose identifier is the file identifier](#key-names-for-0.1.0). 74* File 0xffffff52 (`PSA_CRYPTO_ITS_RANDOM_SEED_UID`): [nonvolatile random seed](#nonvolatile-random-seed-file-format-for-0.1.0). 75* Files 0xffff0000 through 0xffffff51, 0xffffff53 through 0xffffffff: unused. 76 77### File namespace on stdio for 0.1.0 78 79Assumption: C stdio, allowing names containing lowercase letters, digits and underscores, of length up to 23. 80 81An undocumented build-time configuration value `CRYPTO_STORAGE_FILE_LOCATION` allows storing the key files in a directory other than the current directory. This value is simply prepended to the file name (so it must end with a directory separator to put the keys in a different directory). 82 83* `CRYPTO_STORAGE_FILE_LOCATION "psa_key_slot_0"`: used as a temporary file. Must be writable. May be overwritten or deleted if present. 84* `sprintf(CRYPTO_STORAGE_FILE_LOCATION "psa_key_slot_%lu", key_id)` [content](#key-file-format-for-0.1.0) of the [key whose identifier](#key-names-for-0.1.0) is `key_id`. 85* Other files: unused. 86 87Mbed Crypto 1.0.0 88----------------- 89 90Tags: mbedcrypto-1.0.0d4, mbedcrypto-1.0.0 91 92Released in February 2019. <br> 93Integrated in Mbed OS 5.12. 94 95Supported integrations: 96 97* [PSA platform](#file-namespace-on-a-psa-platform-for-1.0.0) 98* [library using PSA ITS](#file-namespace-on-its-as-a-library-for-1.0.0) 99* [library using C stdio](#file-namespace-on-stdio-for-1.0.0) 100 101Supported features: 102 103* [Persistent transparent keys](#key-file-format-for-1.0.0) designated by a [key identifier and owner](#key-names-for-1.0.0). 104* [Nonvolatile random seed](#nonvolatile-random-seed-file-format-for-1.0.0) on ITS only. 105 106Backward compatibility commitments: TBD 107 108### Key names for 1.0.0 109 110Information about each key is stored in a dedicated file designated by the key identifier. In integrations where there is no concept of key owner (in particular, in library integrations), the key identifier is exactly the key identifier as defined in the PSA Cryptography API specification (`psa_key_id_t`). In integrations where there is a concept of key owner (integration into a service for example), the key identifier is made of an owner identifier (its semantics and type are integration specific) and of the key identifier (`psa_key_id_t`) from the key owner point of view. 111 112The way in which the file name is constructed from the key identifier depends on the storage backend. The content of the file is described [below](#key-file-format-for-1.0.0). 113 114* Library integration: the key file name is just the key identifier as defined in the PSA crypto specification. This is a 32-bit value. 115* PSA service integration: the key file name is `(uint64_t)owner_uid << 32 | key_id` where `key_id` is the key identifier from the owner point of view and `owner_uid` (of type `int32_t`) is the calling partition identifier provided to the server by the partition manager. This is a 64-bit value. 116 117### Key file format for 1.0.0 118 119The layout is identical to [0.1.0](#key-file-format-for-0.1.0) so far. However note that the encoding of key types, algorithms and key material has changed, therefore the storage format is not compatible (despite using the same value in the version field so far). 120 121### Nonvolatile random seed file format for 1.0.0 122 123The nonvolatile random seed file contains a seed for the random generator. If present, it is rewritten at each boot as part of the random generator initialization. 124 125The file format is just the seed as a byte string with no metadata or encoding of any kind. 126 127This is unchanged since [the feature was introduced in Mbed Crypto 0.1.0](#nonvolatile-random-seed-file-format-for-0.1.0). 128 129### File namespace on a PSA platform for 1.0.0 130 131Assumption: ITS provides a 64-bit file identifier namespace. The Crypto service can use arbitrary file identifiers and no other part of the system accesses the same file identifier namespace. 132 133Assumption: the owner identifier is a nonzero value of type `int32_t`. 134 135* Files 0 through 0xffffff51, 0xffffff53 through 0xffffffff: unused, reserved for internal use of the crypto library or crypto service. 136* File 0xffffff52 (`PSA_CRYPTO_ITS_RANDOM_SEED_UID`): [nonvolatile random seed](#nonvolatile-random-seed-file-format-for-0.1.0). 137* Files 0x100000000 through 0xffffffffffff: [content](#key-file-format-for-1.0.0) of the [key whose identifier is the file identifier](#key-names-for-1.0.0). The upper 32 bits determine the owner. 138 139### File namespace on ITS as a library for 1.0.0 140 141Assumption: ITS provides a 64-bit file identifier namespace. The entity using the crypto library can use arbitrary file identifiers and no other part of the system accesses the same file identifier namespace. 142 143This is a library integration, so there is no owner. The key file identifier is identical to the key identifier. 144 145* File 0: unused. 146* Files 1 through 0xfffeffff: [content](#key-file-format-for-1.0.0) of the [key whose identifier is the file identifier](#key-names-for-1.0.0). 147* File 0xffffff52 (`PSA_CRYPTO_ITS_RANDOM_SEED_UID`): [nonvolatile random seed](#nonvolatile-random-seed-file-format-for-1.0.0). 148* Files 0xffff0000 through 0xffffff51, 0xffffff53 through 0xffffffff, 0x100000000 through 0xffffffffffffffff: unused. 149 150### File namespace on stdio for 1.0.0 151 152This is a library integration, so there is no owner. The key file identifier is identical to the key identifier. 153 154[Identical to 0.1.0](#file-namespace-on-stdio-for-0.1.0). 155 156### Upgrade from 0.1.0 to 1.0.0. 157 158* Delete files 1 through 0xfffeffff, which contain keys in a format that is no longer supported. 159 160### Suggested changes to make before 1.0.0 161 162The library integration and the PSA platform integration use different sets of file names. This is annoyingly non-uniform. For example, if we want to store non-key files, we have room in different ranges (0 through 0xffffffff on a PSA platform, 0xffff0000 through 0xffffffffffffffff in a library integration). 163 164It would simplify things to always have a 32-bit owner, with a nonzero value, and thus reserve the range 0–0xffffffff for internal library use. 165 166Mbed Crypto 1.1.0 167----------------- 168 169Tags: mbedcrypto-1.1.0 170 171Released in early June 2019. <br> 172Integrated in Mbed OS 5.13. 173 174Changes since [1.0.0](#mbed-crypto-1.0.0): 175 176* The stdio backend for storage has been replaced by an implementation of [PSA ITS over stdio](#file-namespace-on-stdio-for-1.1.0). 177* [Some changes in the key file format](#key-file-format-for-1.1.0). 178 179### File namespace on stdio for 1.1.0 180 181Assumption: C stdio, allowing names containing lowercase letters, digits and underscores, of length up to 23. 182 183An undocumented build-time configuration value `PSA_ITS_STORAGE_PREFIX` allows storing the key files in a directory other than the current directory. This value is simply prepended to the file name (so it must end with a directory separator to put the keys in a different directory). 184 185* `PSA_ITS_STORAGE_PREFIX "tempfile.psa_its"`: used as a temporary file. Must be writable. May be overwritten or deleted if present. 186* `sprintf(PSA_ITS_STORAGE_PREFIX "%016llx.psa_its", key_id)`: a key or non-key file. The `key_id` in the name is the 64-bit file identifier, which is the [key identifier](#key-names-for-mbed-tls-2.25.0) for a key file or some reserved identifier for a non-key file (currently: only the [nonvolatile random seed](#nonvolatile-random-seed-file-format-for-1.0.0)). The contents of the file are: 187 * Magic header (8 bytes): `"PSA\0ITS\0"` 188 * File contents. 189 190### Key file format for 1.1.0 191 192The key file format is identical to [1.0.0](#key-file-format-for-1.0.0), except for the following changes: 193 194* A new policy field, marked as [NEW:1.1.0] below. 195* The encoding of key types, algorithms and key material has changed, therefore the storage format is not compatible (despite using the same value in the version field so far). 196 197A self-contained description of the file layout follows. 198 199All integers are encoded in little-endian order in 8-bit bytes. 200 201The layout of a key file is: 202 203* magic (8 bytes): `"PSA\0KEY\0"` 204* version (4 bytes): 0 205* type (4 bytes): `psa_key_type_t` value 206* policy usage flags (4 bytes): `psa_key_usage_t` value 207* policy usage algorithm (4 bytes): `psa_algorithm_t` value 208* policy enrollment algorithm (4 bytes): `psa_algorithm_t` value [NEW:1.1.0] 209* key material length (4 bytes) 210* key material: output of `psa_export_key` 211* Any trailing data is rejected on load. 212 213Mbed Crypto TBD 214--------------- 215 216Tags: TBD 217 218Released in TBD 2019. <br> 219Integrated in Mbed OS TBD. 220 221### Changes introduced in TBD 222 223* The layout of a key file now has a lifetime field before the type field. 224* Key files can store references to keys in a secure element. In such key files, the key material contains the slot number. 225 226### File namespace on a PSA platform on TBD 227 228Assumption: ITS provides a 64-bit file identifier namespace. The Crypto service can use arbitrary file identifiers and no other part of the system accesses the same file identifier namespace. 229 230Assumption: the owner identifier is a nonzero value of type `int32_t`. 231 232* Files 0 through 0xfffeffff: unused. 233* Files 0xffff0000 through 0xffffffff: reserved for internal use of the crypto library or crypto service. See [non-key files](#non-key-files-on-tbd). 234* Files 0x100000000 through 0xffffffffffff: [content](#key-file-format-for-1.0.0) of the [key whose identifier is the file identifier](#key-names-for-1.0.0). The upper 32 bits determine the owner. 235 236### File namespace on ITS as a library on TBD 237 238Assumption: ITS provides a 64-bit file identifier namespace. The entity using the crypto library can use arbitrary file identifiers and no other part of the system accesses the same file identifier namespace. 239 240This is a library integration, so there is no owner. The key file identifier is identical to the key identifier. 241 242* File 0: unused. 243* Files 1 through 0xfffeffff: [content](#key-file-format-for-1.0.0) of the [key whose identifier is the file identifier](#key-names-for-1.0.0). 244* Files 0xffff0000 through 0xffffffff: reserved for internal use of the crypto library or crypto service. See [non-key files](#non-key-files-on-tbd). 245* Files 0x100000000 through 0xffffffffffffffff: unused. 246 247### Non-key files on TBD 248 249File identifiers in the range 0xffff0000 through 0xffffffff are reserved for internal use in Mbed Crypto. 250 251* Files 0xfffffe02 through 0xfffffeff (`PSA_CRYPTO_SE_DRIVER_ITS_UID_BASE + lifetime`): secure element driver storage. The content of the file is the secure element driver's persistent data. 252* File 0xffffff52 (`PSA_CRYPTO_ITS_RANDOM_SEED_UID`): [nonvolatile random seed](#nonvolatile-random-seed-file-format-for-1.0.0). 253* File 0xffffff54 (`PSA_CRYPTO_ITS_TRANSACTION_UID`): [transaction file](#transaction-file-format-for-tbd). 254* Other files are unused and reserved for future use. 255 256### Key file format for TBD 257 258All integers are encoded in little-endian order in 8-bit bytes except where otherwise indicated. 259 260The layout of a key file is: 261 262* magic (8 bytes): `"PSA\0KEY\0"`. 263* version (4 bytes): 0. 264* lifetime (4 bytes): `psa_key_lifetime_t` value. 265* type (4 bytes): `psa_key_type_t` value. 266* policy usage flags (4 bytes): `psa_key_usage_t` value. 267* policy usage algorithm (4 bytes): `psa_algorithm_t` value. 268* policy enrollment algorithm (4 bytes): `psa_algorithm_t` value. 269* key material length (4 bytes). 270* key material: 271 * For a transparent key: output of `psa_export_key`. 272 * For an opaque key (unified driver interface): driver-specific opaque key blob. 273 * For an opaque key (key in a secure element): slot number (8 bytes), in platform endianness. 274* Any trailing data is rejected on load. 275 276### Transaction file format for TBD 277 278The transaction file contains data about an ongoing action that cannot be completed atomically. It exists only if there is an ongoing transaction. 279 280All integers are encoded in platform endianness. 281 282All currently existing transactions concern a key in a secure element. 283 284The layout of a transaction file is: 285 286* type (2 bytes): the [transaction type](#transaction-types-on-tbd). 287* unused (2 bytes) 288* lifetime (4 bytes): `psa_key_lifetime_t` value that corresponds to a key in a secure element. 289* slot number (8 bytes): `psa_key_slot_number_t` value. This is the unique designation of the key for the secure element driver. 290* key identifier (4 bytes in a library integration, 8 bytes on a PSA platform): the internal representation of the key identifier. On a PSA platform, this encodes the key owner in the same way as [in file identifiers for key files](#file-namespace-on-a-psa-platform-on-tbd)). 291 292#### Transaction types on TBD 293 294* 0x0001: key creation. The following locations may or may not contain data about the key that is being created: 295 * The slot in the secure element designated by the slot number. 296 * The file containing the key metadata designated by the key identifier. 297 * The driver persistent data. 298* 0x0002: key destruction. The following locations may or may not still contain data about the key that is being destroyed: 299 * The slot in the secure element designated by the slot number. 300 * The file containing the key metadata designated by the key identifier. 301 * The driver persistent data. 302 303Mbed Crypto TBD 304--------------- 305 306Tags: TBD 307 308Released in TBD 2020. <br> 309Integrated in Mbed OS TBD. 310 311### Changes introduced in TBD 312 313* The type field has been split into a type and a bits field of 2 bytes each. 314 315### Key file format for TBD 316 317All integers are encoded in little-endian order in 8-bit bytes except where otherwise indicated. 318 319The layout of a key file is: 320 321* magic (8 bytes): `"PSA\0KEY\0"`. 322* version (4 bytes): 0. 323* lifetime (4 bytes): `psa_key_lifetime_t` value. 324* type (2 bytes): `psa_key_type_t` value. 325* bits (2 bytes): `psa_key_bits_t` value. 326* policy usage flags (4 bytes): `psa_key_usage_t` value. 327* policy usage algorithm (4 bytes): `psa_algorithm_t` value. 328* policy enrollment algorithm (4 bytes): `psa_algorithm_t` value. 329* key material length (4 bytes). 330* key material: 331 * For a transparent key: output of `psa_export_key`. 332 * For an opaque key (unified driver interface): driver-specific opaque key blob. 333 * For an opaque key (key in a secure element): slot number (8 bytes), in platform endianness. 334* Any trailing data is rejected on load. 335 336Mbed TLS 2.25.0 337--------------- 338 339Tags: `mbedtls-2.25.0`, `mbedtls-2.26.0`, `mbedtls-2.27.0`, `mbedtls-2.28.0`, `mbedtls-3.0.0`, `mbedtls-3.1.0` 340 341First released in December 2020. 342 343Note: this is the first version that is officially supported. The version number is still 0. 344 345Backward compatibility commitments: we promise backward compatibility for stored keys when Mbed TLS is upgraded from x to y if x >= 2.25 and y < 4. See [`BRANCHES.md`](../../BRANCHES.md) for more details. 346 347Supported integrations: 348 349* [PSA platform](#file-namespace-on-a-psa-platform-on-mbed-tls-2.25.0) 350* [library using PSA ITS](#file-namespace-on-its-as-a-library-on-mbed-tls-2.25.0) 351* [library using C stdio](#file-namespace-on-stdio-for-mbed-tls-2.25.0) 352 353Supported features: 354 355* [Persistent keys](#key-file-format-for-mbed-tls-2.25.0) designated by a [key identifier and owner](#key-names-for-mbed-tls-2.25.0). Keys can be: 356 * Transparent, stored in the export format. 357 * Opaque, using the unified driver interface with statically registered drivers (`MBEDTLS_PSA_CRYPTO_DRIVERS`). The driver determines the content of the opaque key blob. 358 * Opaque, using the deprecated secure element interface with dynamically registered drivers (`MBEDTLS_PSA_CRYPTO_SE_C`). The driver picks a slot number which is stored in the place of the key material. 359* [Nonvolatile random seed](#nonvolatile-random-seed-file-format-for-mbed-tls-2.25.0) on ITS only. 360 361### Changes introduced in Mbed TLS 2.25.0 362 363* The numerical encodings of `psa_key_type_t`, `psa_key_usage_t` and `psa_algorithm_t` have changed. 364 365### File namespace on a PSA platform on Mbed TLS 2.25.0 366 367Assumption: ITS provides a 64-bit file identifier namespace. The Crypto service can use arbitrary file identifiers and no other part of the system accesses the same file identifier namespace. 368 369Assumption: the owner identifier is a nonzero value of type `int32_t`. 370 371* Files 0 through 0xfffeffff: unused. 372* Files 0xffff0000 through 0xffffffff: reserved for internal use of the crypto library or crypto service. See [non-key files](#non-key-files-on-mbed-tls-2.25.0). 373* Files 0x100000000 through 0xffffffffffff: [content](#key-file-format-for-mbed-tls-2.25.0) of the [key whose identifier is the file identifier](#key-names-for-mbed-tls-2.25.0). The upper 32 bits determine the owner. 374 375### File namespace on ITS as a library on Mbed TLS 2.25.0 376 377Assumption: ITS provides a 64-bit file identifier namespace. The entity using the crypto library can use arbitrary file identifiers and no other part of the system accesses the same file identifier namespace. 378 379This is a library integration, so there is no owner. The key file identifier is identical to the key identifier. 380 381* File 0: unused. 382* Files 1 through 0xfffeffff: [content](#key-file-format-for-mbed-tls-2.25.0) of the [key whose identifier is the file identifier](#key-names-for-mbed-tls-2.25.0). 383* Files 0xffff0000 through 0xffffffff: reserved for internal use of the crypto library or crypto service. See [non-key files](#non-key-files-on-mbed-tls-2.25.0). 384* Files 0x100000000 through 0xffffffffffffffff: unused. 385 386### File namespace on stdio for Mbed TLS 2.25.0 387 388Assumption: C stdio, allowing names containing lowercase letters, digits and underscores, of length up to 23. 389 390An undocumented build-time configuration value `PSA_ITS_STORAGE_PREFIX` allows storing the key files in a directory other than the current directory. This value is simply prepended to the file name (so it must end with a directory separator to put the keys in a different directory). 391 392* `PSA_ITS_STORAGE_PREFIX "tempfile.psa_its"`: used as a temporary file. Must be writable. May be overwritten or deleted if present. 393* `sprintf(PSA_ITS_STORAGE_PREFIX "%016llx.psa_its", key_id)`: a key or non-key file. The `key_id` in the name is the 64-bit file identifier, which is the [key identifier](#key-names-for-mbed-tls-2.25.0) for a key file or some reserved identifier for a [non-key file](#non-key-files-on-mbed-tls-2.25.0). The contents of the file are: 394 * Magic header (8 bytes): `"PSA\0ITS\0"` 395 * File contents. 396 397### Key names for Mbed TLS 2.25.0 398 399Information about each key is stored in a dedicated file designated by the key identifier. In integrations where there is no concept of key owner (in particular, in library integrations), the key identifier is exactly the key identifier as defined in the PSA Cryptography API specification (`psa_key_id_t`). In integrations where there is a concept of key owner (integration into a service for example), the key identifier is made of an owner identifier (its semantics and type are integration specific) and of the key identifier (`psa_key_id_t`) from the key owner point of view. 400 401The way in which the file name is constructed from the key identifier depends on the storage backend. The content of the file is described [below](#key-file-format-for-mbed-tls-2.25.0). 402 403* Library integration: the key file name is just the key identifier as defined in the PSA crypto specification. This is a 32-bit value which must be in the range 0x00000001..0x3fffffff (`PSA_KEY_ID_USER_MIN`..`PSA_KEY_ID_USER_MAX`). 404* PSA service integration: the key file name is `(uint64_t)owner_uid << 32 | key_id` where `key_id` is the key identifier from the owner point of view and `owner_uid` (of type `int32_t`) is the calling partition identifier provided to the server by the partition manager. This is a 64-bit value. 405 406### Key file format for Mbed TLS 2.25.0 407 408All integers are encoded in little-endian order in 8-bit bytes except where otherwise indicated. 409 410The layout of a key file is: 411 412* magic (8 bytes): `"PSA\0KEY\0"`. 413* version (4 bytes): 0. 414* lifetime (4 bytes): `psa_key_lifetime_t` value. 415* type (2 bytes): `psa_key_type_t` value. 416* bits (2 bytes): `psa_key_bits_t` value. 417* policy usage flags (4 bytes): `psa_key_usage_t` value. 418* policy usage algorithm (4 bytes): `psa_algorithm_t` value. 419* policy enrollment algorithm (4 bytes): `psa_algorithm_t` value. 420* key material length (4 bytes). 421* key material: 422 * For a transparent key: output of `psa_export_key`. 423 * For an opaque key (unified driver interface): driver-specific opaque key blob. 424 * For an opaque key (key in a dynamic secure element): slot number (8 bytes), in platform endianness. 425* Any trailing data is rejected on load. 426 427### Non-key files on Mbed TLS 2.25.0 428 429File identifiers that are outside the range of persistent key identifiers are reserved for internal use by the library. The only identifiers currently in use have the owner id (top 32 bits) set to 0. 430 431* Files 0xfffffe02 through 0xfffffeff (`PSA_CRYPTO_SE_DRIVER_ITS_UID_BASE + lifetime`): dynamic secure element driver storage. The content of the file is the secure element driver's persistent data. 432* File 0xffffff52 (`PSA_CRYPTO_ITS_RANDOM_SEED_UID`): [nonvolatile random seed](#nonvolatile-random-seed-file-format-for-mbed-tls-2.25.0). 433* File 0xffffff54 (`PSA_CRYPTO_ITS_TRANSACTION_UID`): [transaction file](#transaction-file-format-for-mbed-tls-2.25.0). 434* Other files are unused and reserved for future use. 435 436### Nonvolatile random seed file format for Mbed TLS 2.25.0 437 438[Identical to Mbed Crypto 0.1.0](#nonvolatile-random-seed-file-format-for-0.1.0). 439 440### Transaction file format for Mbed TLS 2.25.0 441 442The transaction file contains data about an ongoing action that cannot be completed atomically. It exists only if there is an ongoing transaction. 443 444All integers are encoded in platform endianness. 445 446All currently existing transactions concern a key in a dynamic secure element. 447 448The layout of a transaction file is: 449 450* type (2 bytes): the [transaction type](#transaction-types-on-mbed-tls-2.25.0). 451* unused (2 bytes) 452* lifetime (4 bytes): `psa_key_lifetime_t` value that corresponds to a key in a secure element. 453* slot number (8 bytes): `psa_key_slot_number_t` value. This is the unique designation of the key for the secure element driver. 454* key identifier (4 bytes in a library integration, 8 bytes on a PSA platform): the internal representation of the key identifier. On a PSA platform, this encodes the key owner in the same way as [in file identifiers for key files](#file-namespace-on-a-psa-platform-on-mbed-tls-2.25.0)). 455 456#### Transaction types on Mbed TLS 2.25.0 457 458* 0x0001: key creation. The following locations may or may not contain data about the key that is being created: 459 * The slot in the secure element designated by the slot number. 460 * The file containing the key metadata designated by the key identifier. 461 * The driver persistent data. 462* 0x0002: key destruction. The following locations may or may not still contain data about the key that is being destroyed: 463 * The slot in the secure element designated by the slot number. 464 * The file containing the key metadata designated by the key identifier. 465 * The driver persistent data. 466