| < draft-ietf-suit-manifest-05.txt | draft-ietf-suit-manifest-06.txt > | |||
|---|---|---|---|---|
| SUIT B. Moran | SUIT B. Moran | |||
| Internet-Draft H. Tschofenig | Internet-Draft H. Tschofenig | |||
| Intended status: Standards Track Arm Limited | Intended status: Standards Track Arm Limited | |||
| Expires: November 28, 2020 H. Birkholz | Expires: December 4, 2020 H. Birkholz | |||
| Fraunhofer SIT | Fraunhofer SIT | |||
| K. Zandberg | K. Zandberg | |||
| Inria | Inria | |||
| May 27, 2020 | June 02, 2020 | |||
| A Concise Binary Object Representation (CBOR)-based Serialization Format | A Concise Binary Object Representation (CBOR)-based Serialization Format | |||
| for the Software Updates for Internet of Things (SUIT) Manifest | for the Software Updates for Internet of Things (SUIT) Manifest | |||
| draft-ietf-suit-manifest-05 | draft-ietf-suit-manifest-06 | |||
| Abstract | Abstract | |||
| This specification describes the format of a manifest. A manifest is | This specification describes the format of a manifest. A manifest is | |||
| a bundle of metadata about the firmware for an IoT device, where to | a bundle of metadata about the firmware for an IoT device, where to | |||
| find the firmware, the devices to which it applies, and cryptographic | find the firmware, the devices to which it applies, and cryptographic | |||
| information protecting the manifest. Firmware updates and secure | information protecting the manifest. Firmware updates and secure | |||
| boot both tend to use sequences of common operations, so the manifest | boot both tend to use sequences of common operations, so the manifest | |||
| encodes those sequences of operations, rather than declaring the | encodes those sequences of operations, rather than declaring the | |||
| metadata. The manifest also serves as a building block for secure | metadata. The manifest also serves as a building block for secure | |||
| skipping to change at page 1, line 42 ¶ | skipping to change at page 1, line 42 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on November 28, 2020. | This Internet-Draft will expire on December 4, 2020. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 31 ¶ | skipping to change at page 2, line 31 ¶ | |||
| the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
| outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
| not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
| it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
| than English. | than English. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Conventions and Terminology . . . . . . . . . . . . . . . . . 6 | 2. Conventions and Terminology . . . . . . . . . . . . . . . . . 6 | |||
| 3. How to use this Document . . . . . . . . . . . . . . . . . . 8 | 3. How to use this Document . . . . . . . . . . . . . . . . . . 7 | |||
| 4. Background . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 4. Background . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4.1. IoT Firmware Update Constraints . . . . . . . . . . . . . 8 | 4.1. IoT Firmware Update Constraints . . . . . . . . . . . . . 8 | |||
| 4.2. Update Workflow Model . . . . . . . . . . . . . . . . . . 9 | 4.2. Update Workflow Model . . . . . . . . . . . . . . . . . . 8 | |||
| 5. Severed Fields . . . . . . . . . . . . . . . . . . . . . . . 10 | 5. Severed Fields . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6. Interpreter Behavior . . . . . . . . . . . . . . . . . . . . 11 | 6. Interpreter Behavior . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.1. Interpreter Setup . . . . . . . . . . . . . . . . . . . . 11 | 6.1. Interpreter Setup . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.2. Required Checks . . . . . . . . . . . . . . . . . . . . . 12 | 6.2. Required Checks . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 6.3. Interpreter Fundamental Properties . . . . . . . . . . . 13 | 6.3. Interpreter Fundamental Properties . . . . . . . . . . . 12 | |||
| 6.4. Abstract Machine Description . . . . . . . . . . . . . . 13 | 6.4. Abstract Machine Description . . . . . . . . . . . . . . 13 | |||
| 6.5. Serialized Processing Interpreter . . . . . . . . . . . . 15 | 6.5. Serialized Processing Interpreter . . . . . . . . . . . . 14 | |||
| 6.6. Parallel Processing Interpreter . . . . . . . . . . . . . 15 | 6.6. Parallel Processing Interpreter . . . . . . . . . . . . . 15 | |||
| 6.7. Processing Dependencies . . . . . . . . . . . . . . . . . 16 | 6.7. Processing Dependencies . . . . . . . . . . . . . . . . . 15 | |||
| 7. Creating Manifests . . . . . . . . . . . . . . . . . . . . . 16 | 7. Creating Manifests . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 7.1. Compatibility Check Template . . . . . . . . . . . . . . 17 | 7.1. Compatibility Check Template . . . . . . . . . . . . . . 16 | |||
| 7.2. Secure Boot Template . . . . . . . . . . . . . . . . . . 17 | 7.2. Secure Boot Template . . . . . . . . . . . . . . . . . . 16 | |||
| 7.3. Firmware Download Template . . . . . . . . . . . . . . . 18 | 7.3. Firmware Download Template . . . . . . . . . . . . . . . 17 | |||
| 7.4. Load from External Storage Template . . . . . . . . . . . 18 | 7.4. Load from External Storage Template . . . . . . . . . . . 17 | |||
| 7.5. Load & Decompress from External Storage Template . . . . 19 | 7.5. Load & Decompress from External Storage Template . . . . 18 | |||
| 7.6. Dependency Template . . . . . . . . . . . . . . . . . . . 19 | 7.6. Dependency Template . . . . . . . . . . . . . . . . . . . 18 | |||
| 8. Envelope . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 8. Envelope . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 8.1. Authenticated Manifests . . . . . . . . . . . . . . . . . 20 | 8.1. Authenticated Manifests . . . . . . . . . . . . . . . . . 19 | |||
| 8.2. Encrypted Manifests . . . . . . . . . . . . . . . . . . . 21 | 8.2. Encrypted Manifests . . . . . . . . . . . . . . . . . . . 20 | |||
| 8.3. Delegation Info . . . . . . . . . . . . . . . . . . . . . 21 | 8.3. Delegation Info . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 8.4. Severable Fields . . . . . . . . . . . . . . . . . . . . 21 | 8.4. Severable Fields . . . . . . . . . . . . . . . . . . . . 20 | |||
| 8.5. Human-Readable Text . . . . . . . . . . . . . . . . . . . 21 | 8.5. Human-Readable Text . . . . . . . . . . . . . . . . . . . 20 | |||
| 8.6. COSWID . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 8.6. COSWID . . . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 8.7. Encoding Considerations . . . . . . . . . . . . . . . . . 21 | 8.7. Encoding Considerations . . . . . . . . . . . . . . . . . 21 | |||
| 8.8. SUIT_Envelope CDDL . . . . . . . . . . . . . . . . . . . 22 | 8.8. SUIT_Envelope CDDL . . . . . . . . . . . . . . . . . . . 22 | |||
| 9. Manifest . . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 9. Manifest . . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 9.1. suit-manifest-version . . . . . . . . . . . . . . . . . . 24 | 9.1. suit-manifest-version . . . . . . . . . . . . . . . . . . 24 | |||
| 9.2. suit-manifest-sequence-number . . . . . . . . . . . . . . 24 | 9.2. suit-manifest-sequence-number . . . . . . . . . . . . . . 24 | |||
| 9.3. suit-common . . . . . . . . . . . . . . . . . . . . . . . 24 | 9.3. suit-reference-uri . . . . . . . . . . . . . . . . . . . 24 | |||
| 9.4. suit-reference-uri . . . . . . . . . . . . . . . . . . . 25 | 9.4. suit-text . . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 9.5. SUIT_Command_Sequence . . . . . . . . . . . . . . . . . . 25 | 9.5. suit-coswid . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 9.6. suit-text . . . . . . . . . . . . . . . . . . . . . . . . 26 | 9.6. Dependencies . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 9.7. suit-coswid . . . . . . . . . . . . . . . . . . . . . . . 26 | 9.7. SUIT_Component_Reference . . . . . . . . . . . . . . . . 25 | |||
| 9.8. SUIT_Manifest CDDL . . . . . . . . . . . . . . . . . . . 26 | 9.8. SUIT_Command_Sequence . . . . . . . . . . . . . . . . . . 26 | |||
| 9.9. Dependencies . . . . . . . . . . . . . . . . . . . . . . 27 | 9.8.1. suit-common . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 9.10. SUIT_Component_Reference . . . . . . . . . . . . . . . . 28 | 9.8.2. SUIT_Parameters . . . . . . . . . . . . . . . . . . . 29 | |||
| 9.11. Parameters . . . . . . . . . . . . . . . . . . . . . . . 28 | 9.8.3. SUIT_Condition . . . . . . . . . . . . . . . . . . . 34 | |||
| 9.11.1. suit-parameter-vendor-identifier . . . . . . . . . . 30 | 9.8.4. SUIT_Directive . . . . . . . . . . . . . . . . . . . 40 | |||
| 9.11.2. suit-parameter-class-identifier . . . . . . . . . . 30 | 9.9. SUIT_Manifest CDDL . . . . . . . . . . . . . . . . . . . 50 | |||
| 9.11.3. suit-parameter-image-digest . . . . . . . . . . . . 30 | 10. Access Control Lists . . . . . . . . . . . . . . . . . . . . 50 | |||
| 9.11.4. suit-parameter-image-size . . . . . . . . . . . . . 30 | 11. SUIT Digest Container . . . . . . . . . . . . . . . . . . . . 51 | |||
| 9.11.5. suit-parameter-use-before . . . . . . . . . . . . . 30 | 12. Creating Conditional Sequences . . . . . . . . . . . . . . . 52 | |||
| 9.11.6. suit-parameter-component-offset . . . . . . . . . . 31 | 13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 54 | |||
| 9.11.7. suit-parameter-encryption-info . . . . . . . . . . . 31 | 13.1. SUIT Directives . . . . . . . . . . . . . . . . . . . . 54 | |||
| 9.11.8. suit-parameter-compression-info . . . . . . . . . . 31 | 13.2. SUIT Conditions . . . . . . . . . . . . . . . . . . . . 55 | |||
| 9.11.9. suit-parameter-unpack-info . . . . . . . . . . . . . 31 | 13.3. SUIT Parameters . . . . . . . . . . . . . . . . . . . . 56 | |||
| 9.11.10. suit-parameter-uri . . . . . . . . . . . . . . . . . 31 | 13.4. SUIT Text Values . . . . . . . . . . . . . . . . . . . . 58 | |||
| 9.11.11. suit-parameter-source-component . . . . . . . . . . 31 | 13.5. SUIT Algorithm Identifiers . . . . . . . . . . . . . . . 58 | |||
| 9.11.12. suit-parameter-run-args . . . . . . . . . . . . . . 31 | 14. Security Considerations . . . . . . . . . . . . . . . . . . . 58 | |||
| 9.11.13. suit-parameter-device-identifier . . . . . . . . . . 32 | 15. Mailing List Information . . . . . . . . . . . . . . . . . . 58 | |||
| 9.11.14. suit-parameter-minimum-battery . . . . . . . . . . . 32 | 16. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 59 | |||
| 9.11.15. suit-parameter-update-priority . . . . . . . . . . . 32 | 17. References . . . . . . . . . . . . . . . . . . . . . . . . . 59 | |||
| 9.11.16. suit-parameter-version . . . . . . . . . . . . . . . 32 | 17.1. Normative References . . . . . . . . . . . . . . . . . . 59 | |||
| 9.11.17. suit-parameter-wait-info . . . . . . . . . . . . . . 32 | 17.2. Informative References . . . . . . . . . . . . . . . . . 60 | |||
| 9.11.18. suit-parameter-uri-list . . . . . . . . . . . . . . 32 | 17.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 61 | |||
| 9.11.19. suit-parameter-strict-order . . . . . . . . . . . . 32 | A. Full CDDL . . . . . . . . . . . . . . . . . . . . . . . . . . 62 | |||
| 9.11.20. suit-parameter-soft-failure . . . . . . . . . . . . 32 | B. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 | |||
| 9.11.21. suit-parameter-custom . . . . . . . . . . . . . . . 33 | B.1. Example 0: Secure Boot . . . . . . . . . . . . . . . . . 70 | |||
| 9.11.22. SUIT_Parameters CDDL . . . . . . . . . . . . . . . . 33 | ||||
| 9.12. SUIT_Command_Sequence . . . . . . . . . . . . . . . . . . 34 | ||||
| 9.12.1. SUIT_Condition . . . . . . . . . . . . . . . . . . . 35 | ||||
| 9.12.2. SUIT_Directive . . . . . . . . . . . . . . . . . . . 41 | ||||
| 9.12.3. suit-directive-set-component-index . . . . . . . . . 43 | ||||
| 9.12.4. suit-directive-set-dependency-index . . . . . . . . 43 | ||||
| 9.12.5. suit-directive-abort . . . . . . . . . . . . . . . . 43 | ||||
| 9.12.6. suit-directive-try-each . . . . . . . . . . . . . . 44 | ||||
| 9.12.7. suit-directive-process-dependency . . . . . . . . . 44 | ||||
| 9.12.8. suit-directive-set-parameters . . . . . . . . . . . 45 | ||||
| 9.12.9. suit-directive-override-parameters . . . . . . . . . 45 | ||||
| 9.12.10. suit-directive-fetch . . . . . . . . . . . . . . . . 45 | ||||
| 9.12.11. suit-directive-copy . . . . . . . . . . . . . . . . 46 | ||||
| 9.12.12. suit-directive-run . . . . . . . . . . . . . . . . . 47 | ||||
| 9.12.13. suit-directive-wait . . . . . . . . . . . . . . . . 47 | ||||
| 9.12.14. suit-directive-run-sequence . . . . . . . . . . . . 48 | ||||
| 9.12.15. suit-directive-swap . . . . . . . . . . . . . . . . 49 | ||||
| 9.13. SUIT_Text_Map . . . . . . . . . . . . . . . . . . . . . . 51 | ||||
| 10. Access Control Lists . . . . . . . . . . . . . . . . . . . . 52 | ||||
| 11. SUIT Digest Container . . . . . . . . . . . . . . . . . . . . 52 | ||||
| 12. Creating Conditional Sequences . . . . . . . . . . . . . . . 53 | ||||
| 13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 55 | ||||
| 13.1. SUIT Directives . . . . . . . . . . . . . . . . . . . . 55 | ||||
| 13.2. SUIT Conditions . . . . . . . . . . . . . . . . . . . . 56 | ||||
| 13.3. SUIT Parameters . . . . . . . . . . . . . . . . . . . . 57 | ||||
| 13.4. SUIT Text Values . . . . . . . . . . . . . . . . . . . . 59 | ||||
| 13.5. SUIT Algorithm Identifiers . . . . . . . . . . . . . . . 59 | ||||
| 14. Security Considerations . . . . . . . . . . . . . . . . . . . 59 | ||||
| 15. Mailing List Information . . . . . . . . . . . . . . . . . . 59 | ||||
| 16. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 60 | ||||
| 17. References . . . . . . . . . . . . . . . . . . . . . . . . . 60 | ||||
| 17.1. Normative References . . . . . . . . . . . . . . . . . . 60 | ||||
| 17.2. Informative References . . . . . . . . . . . . . . . . . 61 | ||||
| 17.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 62 | ||||
| A. Full CDDL . . . . . . . . . . . . . . . . . . . . . . . . . . 63 | ||||
| B. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 | ||||
| B.1. Example 0: Secure Boot . . . . . . . . . . . . . . . . . 71 | ||||
| B.2. Example 1: Simultaneous Download and Installation of | B.2. Example 1: Simultaneous Download and Installation of | |||
| Payload . . . . . . . . . . . . . . . . . . . . . . . . . 73 | Payload . . . . . . . . . . . . . . . . . . . . . . . . . 72 | |||
| B.3. Example 2: Simultaneous Download, Installation, and | B.3. Example 2: Simultaneous Download, Installation, and | |||
| Secure Boot . . . . . . . . . . . . . . . . . . . . . . . 76 | Secure Boot . . . . . . . . . . . . . . . . . . . . . . . 75 | |||
| B.4. Example 3: Load from External Storage . . . . . . . . . . 78 | B.4. Example 3: Load from External Storage . . . . . . . . . . 77 | |||
| B.5. Example 4: Load and Decompress from External Storage . . 81 | B.5. Example 4: Load and Decompress from External Storage . . 80 | |||
| B.6. Example 5: Compatibility Test, Download, Installation, | B.6. Example 5: Compatibility Test, Download, Installation, | |||
| and Secure Boot . . . . . . . . . . . . . . . . . . . . . 83 | and Secure Boot . . . . . . . . . . . . . . . . . . . . . 82 | |||
| B.7. Example 6: Two Images . . . . . . . . . . . . . . . . . . 86 | ||||
| C. Design Rational . . . . . . . . . . . . . . . . . . . . . . . 89 | B.7. Example 6: Two Images . . . . . . . . . . . . . . . . . . 85 | |||
| D. Implementation Confirmance Matrix . . . . . . . . . . . . . . 90 | C. Design Rational . . . . . . . . . . . . . . . . . . . . . . . 88 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 94 | D. Implementation Confirmance Matrix . . . . . . . . . . . . . . 89 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 93 | ||||
| 1. Introduction | 1. Introduction | |||
| A firmware update mechanism is an essential security feature for IoT | A firmware update mechanism is an essential security feature for IoT | |||
| devices to deal with vulnerabilities. While the transport of | devices to deal with vulnerabilities. While the transport of | |||
| firmware images to the devices themselves is important there are | firmware images to the devices themselves is important there are | |||
| already various techniques available. Equally important is the | already various techniques available. Equally important is the | |||
| inclusion of metadata about the conveyed firmware image (in the form | inclusion of metadata about the conveyed firmware image (in the form | |||
| of a manifest) and the use of a security wrapper to provide end-to- | of a manifest) and the use of a security wrapper to provide end-to- | |||
| end security protection to detect modifications and (optionally) to | end security protection to detect modifications and (optionally) to | |||
| skipping to change at page 17, line 22 ¶ | skipping to change at page 16, line 30 ¶ | |||
| NOTE: A digest should always be set using Override Parameters, since | NOTE: A digest should always be set using Override Parameters, since | |||
| this prevents a less-privileged dependent from replacing the digest. | this prevents a less-privileged dependent from replacing the digest. | |||
| 7.1. Compatibility Check Template | 7.1. Compatibility Check Template | |||
| The compatibility check ensures that devices only install compatible | The compatibility check ensures that devices only install compatible | |||
| images. In this template all information is contained in the common | images. In this template all information is contained in the common | |||
| block and the following sequence of operations are used: | block and the following sequence of operations are used: | |||
| - Set Component Index directive (see Section 9.12.3) | - Set Component Index directive (see Section 9.8.4.1) | |||
| - Set Parameters directive (see Section 9.12.8) for Vendor ID and | - Set Parameters directive (see Section 9.8.4.6) for Vendor ID and | |||
| Class ID (see Section 9.11) | Class ID (see Section 9.8.2) | |||
| - Check Vendor Identifier condition (see Section 9.12.1.1) | - Check Vendor Identifier condition (see Section 9.8.3.1) | |||
| - Check Class Identifier condication (see Section 9.12.1.1) | - Check Class Identifier condication (see Section 9.8.3.1) | |||
| 7.2. Secure Boot Template | 7.2. Secure Boot Template | |||
| This template performs a secure boot operation. | This template performs a secure boot operation. | |||
| The following operations are placed into the common block: | The following operations are placed into the common block: | |||
| - Set Component Index directive (see Section 9.12.3) | - Set Component Index directive (see Section 9.8.4.1) | |||
| - Override Parameters directive (see Section 9.12.9) for Image | - Override Parameters directive (see Section 9.8.4.7) for Image | |||
| Digest and Image Size (see Section 9.11) | Digest and Image Size (see Section 9.8.2) | |||
| Then, the run block contains the following operations: | Then, the run block contains the following operations: | |||
| - Set Component Index directive (see Section 9.12.3) | - Set Component Index directive (see Section 9.8.4.1) | |||
| - Check Image Match condition (see Section 9.8.3.2) | ||||
| - Check Image Match condition (see Section 9.12.1.2) | ||||
| - Run directive (see Section 9.12.14) | - Run directive (see Section 9.8.4.12) | |||
| According to Section 6.4, the Run directive applies to the component | According to Section 6.4, the Run directive applies to the component | |||
| referenced by the current Component Index. Hence, the Set Component | referenced by the current Component Index. Hence, the Set Component | |||
| Index directive has to be used to target a specific component. | Index directive has to be used to target a specific component. | |||
| 7.3. Firmware Download Template | 7.3. Firmware Download Template | |||
| This template triggers the download of firmware. | This template triggers the download of firmware. | |||
| The following operations are placed into the common block: | The following operations are placed into the common block: | |||
| - Set Component Index directive (see Section 9.12.3) | - Set Component Index directive (see Section 9.8.4.1) | |||
| - Override Parameters directive (see Section 9.12.9) for Image | - Override Parameters directive (see Section 9.8.4.7) for Image | |||
| Digest and Image Size (see Section 9.11) | Digest and Image Size (see Section 9.8.2) | |||
| Then, the install block contains the following operations: | Then, the install block contains the following operations: | |||
| - Set Component Index directive (see Section 9.12.3) | - Set Component Index directive (see Section 9.8.4.1) | |||
| - Set Parameters directive (see Section 9.12.8) for URI (see | - Set Parameters directive (see Section 9.8.4.6) for URI (see | |||
| Section 9.11) | Section 9.8.2) | |||
| - Fetch directive (see Section 9.12.10) | - Fetch directive (see Section 9.8.4.8) | |||
| The Fetch directive needs the URI parameter to be set to determine | The Fetch directive needs the URI parameter to be set to determine | |||
| where the image is retrieved from. Additionally, the destination of | where the image is retrieved from. Additionally, the destination of | |||
| where the component shall be stored has to be configured. The URI is | where the component shall be stored has to be configured. The URI is | |||
| configured via the Set Parameters directive while the destination is | configured via the Set Parameters directive while the destination is | |||
| configured via the Set Component Index directive. | configured via the Set Component Index directive. | |||
| 7.4. Load from External Storage Template | 7.4. Load from External Storage Template | |||
| This directive loads an firmware image from external storage. | This directive loads an firmware image from external storage. | |||
| The following operations are placed into the load block: | The following operations are placed into the load block: | |||
| - Set Component Index directive (see Section 9.12.3) | - Set Component Index directive (see Section 9.8.4.1) | |||
| - Set Parameters directive (see Section 9.12.8) for Component Index | ||||
| (see Section 9.11) | ||||
| - Copy directive (see Section 9.12.11) | - Set Parameters directive (see Section 9.8.4.6) for Component Index | |||
| (see Section 9.8.2) | ||||
| - Copy directive (see Section 9.8.4.9) | ||||
| As outlined in Section 6.4, the Copy directive needs a source and a | As outlined in Section 6.4, the Copy directive needs a source and a | |||
| destination to be configured. The source is configured via Component | destination to be configured. The source is configured via Component | |||
| Index (with the Set Parameters directive) and the destination is | Index (with the Set Parameters directive) and the destination is | |||
| configured via the Set Component Index directive. | configured via the Set Component Index directive. | |||
| 7.5. Load & Decompress from External Storage Template | 7.5. Load & Decompress from External Storage Template | |||
| The following operations are placed into the load block: | The following operations are placed into the load block: | |||
| - Set Component Index directive (see Section 9.12.3) | - Set Component Index directive (see Section 9.8.4.1) | |||
| - Set Parameters directive (see Section 9.12.8) for Component Index | - Set Parameters directive (see Section 9.8.4.6) for Component Index | |||
| and Compression Info (see Section 9.11) | and Compression Info (see Section 9.8.2) | |||
| - Copy directive (see Section 9.12.11) | - Copy directive (see Section 9.8.4.9) | |||
| This example is similar to the previous case but additionally | This example is similar to the previous case but additionally | |||
| performs decompression. Hence, the only difference is in setting the | performs decompression. Hence, the only difference is in setting the | |||
| Compression Info parameter. | Compression Info parameter. | |||
| 7.6. Dependency Template | 7.6. Dependency Template | |||
| The following operations are placed into the dependency resolution | The following operations are placed into the dependency resolution | |||
| block: | block: | |||
| - Set Dependency Index directive (see Section 9.12.4) | - Set Dependency Index directive (see Section 9.8.4.2) | |||
| - Set Parameters directive (see Section 9.12.8) for URI (see | - Set Parameters directive (see Section 9.8.4.6) for URI (see | |||
| Section 9.11) | Section 9.8.2) | |||
| - Fetch directive (see Section 9.12.10) | - Fetch directive (see Section 9.8.4.8) | |||
| - Check Image Match condition (see Section 9.12.1.2) | - Check Image Match condition (see Section 9.8.3.2) | |||
| - Process Dependency directive (see Section 9.12.7) | - Process Dependency directive (see Section 9.8.4.5) | |||
| Then, the validate block contains the following operations: | Then, the validate block contains the following operations: | |||
| - Set Dependency Index directive (see Section 9.12.4) | - Set Dependency Index directive (see Section 9.8.4.2) | |||
| - Check Image Match condition (see Section 9.12.1.2) | - Check Image Match condition (see Section 9.8.3.2) | |||
| - Process Dependency directive (see Section 9.12.7) | - Process Dependency directive (see Section 9.8.4.5) | |||
| NOTE: Any changes made to parameters in a dependency persist in the | NOTE: Any changes made to parameters in a dependency persist in the | |||
| dependent. | dependent. | |||
| 8. Envelope | 8. Envelope | |||
| The diagram below shows high-level structure of the SUIT manifest | The diagram below shows high-level structure of the SUIT manifest | |||
| embedded in the envelope, the top-level structure. | embedded in the envelope, the top-level structure. | |||
| +------------------------+ | +------------------------+ | |||
| skipping to change at page 21, line 26 ¶ | skipping to change at page 20, line 29 ¶ | |||
| The SUIT_Manifest structure describes the payload(s) to be installed | The SUIT_Manifest structure describes the payload(s) to be installed | |||
| and any dependencies on other manifests. | and any dependencies on other manifests. | |||
| The suit-manifest-encryption-info structure contains information | The suit-manifest-encryption-info structure contains information | |||
| required to decrypt a ciphertext manifest and the suit-manifest- | required to decrypt a ciphertext manifest and the suit-manifest- | |||
| encrypted structure contains the ciphertext. | encrypted structure contains the ciphertext. | |||
| 8.3. Delegation Info | 8.3. Delegation Info | |||
| The suit-delegation field may carry one or multiple CBOR Web Tokens | The suit-delegation field may carry one or multiple CBOR Web Tokens | |||
| (CWTs). They can be used to perform enhanced authorization | (CWTs) [RFC8392]. They can be used to perform enhanced authorization | |||
| decisions. | decisions. | |||
| 8.4. Severable Fields | 8.4. Severable Fields | |||
| Each of suit-dependency-resolution, suit-payload-fetch, and suit- | Each of suit-dependency-resolution, suit-payload-fetch, and suit- | |||
| payload-installation contain the severable contents of the | payload-installation contain the severable contents of the | |||
| identically named portions of the manifest, described in Section 9. | identically named portions of the manifest, described in Section 9. | |||
| 8.5. Human-Readable Text | 8.5. Human-Readable Text | |||
| suit-text contains all the human-readable information that describes | suit-text contains all the human-readable information that describes | |||
| any and all parts of the manifest, its payload(s) and its | any and all parts of the manifest, its payload(s) and its | |||
| resource(s). | resource(s). The text section is typically severable, allowing | |||
| manifests to be distributed without the text, since end-nodes do not | ||||
| require text. The meaning of each field is described below. | ||||
| Each section MAY be present. If present, each section MUST be as | ||||
| described. Negative integer IDs are reserved for application- | ||||
| specific text values. | ||||
| +---------------------------------+---------------------------------+ | ||||
| | CDDL Structure | Description | | ||||
| +---------------------------------+---------------------------------+ | ||||
| | suit-text-manifest-description | Free text description of the | | ||||
| | | manifest | | ||||
| | | | | ||||
| | suit-text-update-description | Free text description of the | | ||||
| | | update | | ||||
| | | | | ||||
| | suit-text-vendor-name | Free text vendor name | | ||||
| | | | | ||||
| | suit-text-model-name | Free text model name | | ||||
| | | | | ||||
| | suit-text-vendor-domain | The domain used to create the | | ||||
| | | vendor-id condition | | ||||
| | | | | ||||
| | suit-text-model-info | The information used to create | | ||||
| | | the class-id condition | | ||||
| | | | | ||||
| | suit-text-component-description | Free text description of each | | ||||
| | | component in the manifest | | ||||
| | | | | ||||
| | suit-text-manifest-json-source | The JSON-formatted document | | ||||
| | | that was used to create the | | ||||
| | | manifest | | ||||
| | | | | ||||
| | suit-text-manifest-yaml-source | The yaml-formatted document | | ||||
| | | that was used to create the | | ||||
| | | manifest | | ||||
| | | | | ||||
| | suit-text-version-dependencies | List of component versions | | ||||
| | | required by the manifest | | ||||
| +---------------------------------+---------------------------------+ | ||||
| 8.6. COSWID | 8.6. COSWID | |||
| suit-coswid contains a Concise Software Identifier. This may be | suit-coswid contains a Concise Software Identifier. This may be | |||
| discarded by the Recipient if not needed. | discarded by the Recipient, if not needed. | |||
| 8.7. Encoding Considerations | 8.7. Encoding Considerations | |||
| The map indices in the envelope encoding are reset to 1 for each map | The map indices in the envelope encoding are reset to 1 for each map | |||
| within the structure. This is to keep the indices as small as | within the structure. This is to keep the indices as small as | |||
| possible. The goal is to keep the index objects to single bytes | possible. The goal is to keep the index objects to single bytes | |||
| (CBOR positive integers 1-23). | (CBOR positive integers 1-23). | |||
| Wherever enumerations are used, they are started at 1. This allows | Wherever enumerations are used, they are started at 1. This allows | |||
| detection of several common software errors that are caused by | detection of several common software errors that are caused by | |||
| skipping to change at page 23, line 50 ¶ | skipping to change at page 23, line 50 ¶ | |||
| 9. Manifest | 9. Manifest | |||
| The manifest contains: | The manifest contains: | |||
| - a version number (see Section 9.1) | - a version number (see Section 9.1) | |||
| - a sequence number (see Section 9.2) | - a sequence number (see Section 9.2) | |||
| - a common structure with information that is shared between command | - a common structure with information that is shared between command | |||
| sequences (see Section 9.3) | sequences (see Section 9.8.1) | |||
| - a list of commands that the Recipient should perform (see | - a list of commands that the Recipient should perform (see | |||
| Section 9.5) | Section 9.8) | |||
| - a reference to the full manifest (see Section 9.4) | - a reference to the full manifest (see Section 9.3) | |||
| - a digest of human-readable text describing the manifest found in | - a digest of human-readable text describing the manifest found in | |||
| the SUIT_Envelope (see Section 9.6) | the SUIT_Envelope (see Section 9.4) | |||
| - a digest of the Concise Software Identifier found in the | - a digest of the Concise Software Identifier found in the | |||
| SUIT_Envelope (see Section 9.7) | SUIT_Envelope (see Section 9.5) | |||
| Several fields in the Manifest can be either a CBOR structure or a | Several fields in the Manifest can be either a CBOR structure or a | |||
| SUIT_Digest. In each of these cases, the SUIT_Digest provides for a | SUIT_Digest. In each of these cases, the SUIT_Digest provides for a | |||
| severable field. Severable fields are RECOMMENDED to implement. In | severable field. Severable fields are RECOMMENDED to implement. In | |||
| particular, the human-readable text SHOULD be severable, since most | particular, the human-readable text SHOULD be severable, since most | |||
| useful text elements occupy more space than a SUIT_Digest, but are | useful text elements occupy more space than a SUIT_Digest, but are | |||
| not needed by the Recipient. Because SUIT_Digest is a CBOR Array and | not needed by the Recipient. Because SUIT_Digest is a CBOR Array and | |||
| each severable element is a CBOR bstr, it is straight-forward for a | each severable element is a CBOR bstr, it is straight-forward for a | |||
| Recipient to determine whether an element has been severed. The key | Recipient to determine whether an element has been severed. The key | |||
| used for a severable element is the same in the SUIT_Manifest and in | used for a severable element is the same in the SUIT_Manifest and in | |||
| skipping to change at page 24, line 45 ¶ | skipping to change at page 24, line 45 ¶ | |||
| The suit-manifest-sequence-number is a monotonically increasing anti- | The suit-manifest-sequence-number is a monotonically increasing anti- | |||
| rollback counter. It also helps devices to determine which in a set | rollback counter. It also helps devices to determine which in a set | |||
| of manifests is the "root" manifest in a given update. Each manifest | of manifests is the "root" manifest in a given update. Each manifest | |||
| MUST have a sequence number higher than each of its dependencies. | MUST have a sequence number higher than each of its dependencies. | |||
| Each Recipient MUST reject any manifest that has a sequence number | Each Recipient MUST reject any manifest that has a sequence number | |||
| lower than its current sequence number. It MAY be convenient to use | lower than its current sequence number. It MAY be convenient to use | |||
| a UTC timestamp in seconds as the sequence number. suit-manifest- | a UTC timestamp in seconds as the sequence number. suit-manifest- | |||
| sequence-number is REQUIRED to implement. | sequence-number is REQUIRED to implement. | |||
| 9.3. suit-common | 9.3. suit-reference-uri | |||
| suit-common encodes all the information that is shared between each | ||||
| of the command sequences, including: suit-dependencies, suit- | ||||
| components, suit-dependency-components, and suit-common-sequence. | ||||
| suit-common is REQUIRED to implement. | ||||
| suit-dependencies is a list of SUIT_Dependency blocks that specify | ||||
| manifests that must be present before the current manifest can be | ||||
| processed. suit-dependencies is OPTIONAL to implement. | ||||
| In order to distinguish between components that are affected by the | ||||
| current manifest and components that are affected by a dependency, | ||||
| they are kept in separate lists. Components affected by the current | ||||
| manifest only list the component identifier. Components affected by | ||||
| a dependency include the component identifier and the index of the | ||||
| dependency that defines the component. | ||||
| suit-components is a list of SUIT_Component blocks that specify the | ||||
| component identifiers that will be affected by the content of the | ||||
| current manifest. suit-components is OPTIONAL to implement, but at | ||||
| least one manifest MUST contain a suit-components block. | ||||
| suit-dependency-components is a list of SUIT_Component_Reference | ||||
| blocks that specify component identifiers that will be affected by | ||||
| the content of a dependency of the current manifest. suit-dependency- | ||||
| components is OPTIONAL to implement. | ||||
| suit-common-sequence is a SUIT_Command_Sequence to execute prior to | ||||
| executing any other command sequence. Typical actions in suit- | ||||
| common-sequence include setting expected device identity and image | ||||
| digests when they are conditional (see Section 12 for more | ||||
| information on conditional sequences). suit-common-sequence is | ||||
| RECOMMENDED to implement. | ||||
| 9.4. suit-reference-uri | ||||
| suit-reference-uri is a text string that encodes a URI where a full | suit-reference-uri is a text string that encodes a URI where a full | |||
| version of this manifest can be found. This is convenient for | version of this manifest can be found. This is convenient for | |||
| allowing management systems to show the severed elements of a | allowing management systems to show the severed elements of a | |||
| manifest when this URI is reported by a device after installation. | manifest when this URI is reported by a device after installation. | |||
| 9.5. SUIT_Command_Sequence | 9.4. suit-text | |||
| suit-dependency-resolution is a SUIT_Command_Sequence to execute in | ||||
| order to perform dependency resolution. Typical actions include | ||||
| configuring URIs of dependency manifests, fetching dependency | ||||
| manifests, and validating dependency manifests' contents. suit- | ||||
| dependency-resolution is REQUIRED to implement and to use when suit- | ||||
| dependencies is present. | ||||
| suit-payload-fetch is a SUIT_Command_Sequence to execute in order to | ||||
| obtain a payload. Some manifests may include these actions in the | ||||
| suit-install section instead if they operate in a streaming | ||||
| installation mode. This is particularly relevant for constrained | ||||
| devices without any temporary storage for staging the update. suit- | ||||
| payload-fetch is OPTIONAL to implement. | ||||
| suit-install is a SUIT_Command_Sequence to execute in order to | ||||
| install a payload. Typical actions include verifying a payload | ||||
| stored in temporary storage, copying a staged payload from temporary | ||||
| storage, and unpacking a payload. suit-install is OPTIONAL to | ||||
| implement. | ||||
| suit-validate is a SUIT_Command_Sequence to execute in order to | ||||
| validate that the result of applying the update is correct. Typical | ||||
| actions involve image validation and manifest validation. suit- | ||||
| validate is REQUIRED to implement. If the manifest contains | ||||
| dependencies, one process-dependency invocation per dependency or one | ||||
| process-dependency invocation targeting all dependencies SHOULD be | ||||
| present in validate. | ||||
| suit-load is a SUIT_Command_Sequence to execute in order to prepare a | ||||
| payload for execution. Typical actions include copying an image from | ||||
| permanent storage into RAM, optionally including actions such as | ||||
| decryption or decompression. suit-load is OPTIONAL to implement. | ||||
| suit-run is a SUIT_Command_Sequence to execute in order to run an | ||||
| image. suit-run typically contains a single instruction: either the | ||||
| "run" directive for the bootable manifest or the "process | ||||
| dependencies" directive for any dependents of the bootable manifest. | ||||
| suit-run is OPTIONAL to implement. Only one manifest in an update | ||||
| may contain the "run" directive. | ||||
| 9.6. suit-text | ||||
| suit-text is a digest that uniquely identifies the content of the | suit-text is a digest that uniquely identifies the content of the | |||
| Text that is packaged in the SUIT_Envelope. suit-text is OPTIONAL to | Text that is packaged in the SUIT_Envelope. suit-text is OPTIONAL to | |||
| implement. | implement. | |||
| 9.7. suit-coswid | 9.5. suit-coswid | |||
| suit-coswid is a digest that uniquely identifies the content of the | suit-coswid is a digest that uniquely identifies the content of the | |||
| concise-software-identifier that is packaged in the SUIT_Envelope. | concise-software-identifier that is packaged in the SUIT_Envelope. | |||
| suit-coswid is OPTIONAL to implement. | suit-coswid is OPTIONAL to implement. | |||
| 9.8. SUIT_Manifest CDDL | 9.6. Dependencies | |||
| The following CDDL fragment defines the manifest. | ||||
| SUIT_Manifest = { | ||||
| suit-manifest-version => 1, | ||||
| suit-manifest-sequence-number => uint, | ||||
| suit-common => bstr .cbor SUIT_Common, | ||||
| ? suit-reference-uri => #6.32(tstr), | ||||
| * $$SUIT_Severable_Command_Sequences, | ||||
| * $$SUIT_Command_Sequences, | ||||
| * $$SUIT_Protected_Elements, | ||||
| } | ||||
| $$SUIT_Severable_Command_Sequences //= (suit-dependency-resolution => | ||||
| SUIT_Severable_Command_Segment) | ||||
| $$SUIT_Severable_Command_Segments //= (suit-payload-fetch => | ||||
| SUIT_Severable_Command_Sequence) | ||||
| $$SUIT_Severable_Command_Segments //= (suit-install => | ||||
| SUIT_Severable_Command_Sequence) | ||||
| SUIT_Severable_Command_Sequence = | ||||
| SUIT_Digest / bstr .cbor SUIT_Command_Sequence | ||||
| $$SUIT_Command_Sequences //= ( suit-validate => | ||||
| bstr .cbor SUIT_Command_Sequence ) | ||||
| $$SUIT_Command_Sequences //= ( suit-load => | ||||
| bstr .cbor SUIT_Command_Sequence ) | ||||
| $$SUIT_Command_Sequences //= ( suit-run => | ||||
| bstr .cbor SUIT_Command_Sequence ) | ||||
| $$SUIT_Protected_Elements //= ( suit-text => SUIT_Digest ) | ||||
| $$SUIT_Protected_Elements //= ( suit-coswid => SUIT_Digest ) | ||||
| SUIT_Common = { | ||||
| ? suit-dependencies => bstr .cbor SUIT_Dependencies, | ||||
| ? suit-components => bstr .cbor SUIT_Components, | ||||
| ? suit-dependency-components | ||||
| => bstr .cbor SUIT_Component_References, | ||||
| ? suit-common-sequence => bstr .cbor SUIT_Command_Sequence, | ||||
| } | ||||
| 9.9. Dependencies | ||||
| SUIT_Dependency specifies a manifest that describes a dependency of | SUIT_Dependency specifies a manifest that describes a dependency of | |||
| the current manifest. | the current manifest. | |||
| The following CDDL describes the SUIT_Dependency structure. | The following CDDL describes the SUIT_Dependency structure. | |||
| SUIT_Dependency = { | SUIT_Dependency = { | |||
| suit-dependency-digest => SUIT_Digest, | suit-dependency-digest => SUIT_Digest, | |||
| ? suit-dependency-prefix => SUIT_Component_Identifier, | ? suit-dependency-prefix => SUIT_Component_Identifier, | |||
| } | } | |||
| skipping to change at page 28, line 29 ¶ | skipping to change at page 25, line 48 ¶ | |||
| different algorithm, or trading COSE_Sign for COSE_Mac. | different algorithm, or trading COSE_Sign for COSE_Mac. | |||
| The suit-dependency-prefix element contains a | The suit-dependency-prefix element contains a | |||
| SUIT_Component_Identifier. This specifies the scope at which the | SUIT_Component_Identifier. This specifies the scope at which the | |||
| dependency operates. This allows the dependency to be forwarded on | dependency operates. This allows the dependency to be forwarded on | |||
| to a component that is capable of parsing its own manifests. It also | to a component that is capable of parsing its own manifests. It also | |||
| allows one manifest to be deployed to multiple dependent devices | allows one manifest to be deployed to multiple dependent devices | |||
| without those devices needing consistent component hierarchy. This | without those devices needing consistent component hierarchy. This | |||
| element is OPTIONAL. | element is OPTIONAL. | |||
| 9.10. SUIT_Component_Reference | 9.7. SUIT_Component_Reference | |||
| The SUIT_Component_Reference describes an image that is defined by | The SUIT_Component_Reference describes an image that is defined by | |||
| another manifest. This is useful for overriding the behavior of | another manifest. This is useful for overriding the behavior of | |||
| another manifest, for example by directing the recipient to look at a | another manifest, for example by directing the recipient to look at a | |||
| different URI for the image or by changing the expected format, such | different URI for the image or by changing the expected format, such | |||
| as when a gateway performs decryption on behalf of a constrained | as when a gateway performs decryption on behalf of a constrained | |||
| device. The following CDDL describes the SUIT_Component_Reference. | device. The following CDDL describes the SUIT_Component_Reference. | |||
| SUIT_Component_Reference = { | SUIT_Component_Reference = { | |||
| suit-component-identifier => SUIT_Component_Identifier, | suit-component-identifier => SUIT_Component_Identifier, | |||
| suit-component-dependency-index => uint | suit-component-dependency-index => uint | |||
| } | } | |||
| 9.11. Parameters | 9.8. SUIT_Command_Sequence | |||
| A SUIT_Command_Sequence defines a series of actions that the | ||||
| Recipient MUST take to accomplish a particular goal. These goals are | ||||
| defined in the manifest and include: | ||||
| 1. Dependency Resolution: suit-dependency-resolution is a | ||||
| SUIT_Command_Sequence to execute in order to perform dependency | ||||
| resolution. Typical actions include configuring URIs of | ||||
| dependency manifests, fetching dependency manifests, and | ||||
| validating dependency manifests' contents. suit-dependency- | ||||
| resolution is REQUIRED to implement and to use when suit- | ||||
| dependencies is present. | ||||
| 2. Payload Fetch: suit-payload-fetch is a SUIT_Command_Sequence to | ||||
| execute in order to obtain a payload. Some manifests may include | ||||
| these actions in the suit-install section instead if they operate | ||||
| in a streaming installation mode. This is particularly relevant | ||||
| for constrained devices without any temporary storage for staging | ||||
| the update. suit-payload-fetch is OPTIONAL to implement. | ||||
| 3. Payload Installation: suit-install is a SUIT_Command_Sequence to | ||||
| execute in order to install a payload. Typical actions include | ||||
| verifying a payload stored in temporary storage, copying a staged | ||||
| payload from temporary storage, and unpacking a payload. suit- | ||||
| install is OPTIONAL to implement. | ||||
| 4. Image Validation: suit-validate is a SUIT_Command_Sequence to | ||||
| execute in order to validate that the result of applying the | ||||
| update is correct. Typical actions involve image validation and | ||||
| manifest validation. suit-validate is REQUIRED to implement. If | ||||
| the manifest contains dependencies, one process-dependency | ||||
| invocation per dependency or one process-dependency invocation | ||||
| targeting all dependencies SHOULD be present in validate. | ||||
| 5. Image Loading: suit-load is a SUIT_Command_Sequence to execute in | ||||
| order to prepare a payload for execution. Typical actions | ||||
| include copying an image from permanent storage into RAM, | ||||
| optionally including actions such as decryption or decompression. | ||||
| suit-load is OPTIONAL to implement. | ||||
| 6. Run or Boot: suit-run is a SUIT_Command_Sequence to execute in | ||||
| order to run an image. suit-run typically contains a single | ||||
| instruction: either the "run" directive for the bootable manifest | ||||
| or the "process dependencies" directive for any dependents of the | ||||
| bootable manifest. suit-run is OPTIONAL to implement. Only one | ||||
| manifest in an update may contain the "run" directive. | ||||
| Each of these follows exactly the same structure to ensure that the | ||||
| parser is as simple as possible. | ||||
| Lists of commands are constructed from two kinds of element: | ||||
| 1. Conditions that MUST be true-any failure is treated as a failure | ||||
| of the update/load/boot | ||||
| 2. Directives that MUST be executed. | ||||
| The lists of commands are logically structured into sequences of zero | ||||
| or more conditions followed by zero or more directives. The | ||||
| *logical* structure is described by the following CDDL: | ||||
| Command_Sequence = { | ||||
| conditions => [ * Condition], | ||||
| directives => [ * Directive] | ||||
| } | ||||
| This introduces significant complexity in the parser, however, so the | ||||
| structure is flattened to make parsing simpler: | ||||
| SUIT_Command_Sequence = [ + (SUIT_Condition/SUIT_Directive) ] | ||||
| Each condition is a command code identifier, followed by Nil. Each | ||||
| directive is composed of: | ||||
| 1. A command code identifier | ||||
| 2. An argument block or Nil | ||||
| Argument blocks are defined for each type of directive. | ||||
| Many conditions and directives apply to a given component, and these | ||||
| generally grouped together. Therefore, a special command to set the | ||||
| current component index is provided with a matching command to set | ||||
| the current dependency index. This index is a numeric index into the | ||||
| component ID tables defined at the beginning of the document. For | ||||
| the purpose of setting the index, the two component ID tables are | ||||
| considered to be concatenated together. | ||||
| To facilitate optional conditions, a special directive is provided. | ||||
| It runs several new lists of conditions/directives, one after | ||||
| another, that are contained as an argument to the directive. By | ||||
| default, it assumes that a failure of a condition should not indicate | ||||
| a failure of the update/boot, but a parameter is provided to override | ||||
| this behavior. | ||||
| 9.8.1. suit-common | ||||
| suit-common encodes all the information that is shared between each | ||||
| of the command sequences, including: suit-dependencies, suit- | ||||
| components, suit-dependency-components, and suit-common-sequence. | ||||
| suit-common is REQUIRED to implement. | ||||
| suit-dependencies is a list of SUIT_Dependency blocks that specify | ||||
| manifests that must be present before the current manifest can be | ||||
| processed. suit-dependencies is OPTIONAL to implement. | ||||
| In order to distinguish between components that are affected by the | ||||
| current manifest and components that are affected by a dependency, | ||||
| they are kept in separate lists. Components affected by the current | ||||
| manifest only list the component identifier. Components affected by | ||||
| a dependency include the component identifier and the index of the | ||||
| dependency that defines the component. | ||||
| suit-components is a list of SUIT_Component blocks that specify the | ||||
| component identifiers that will be affected by the content of the | ||||
| current manifest. suit-components is OPTIONAL to implement, but at | ||||
| least one manifest MUST contain a suit-components block. | ||||
| suit-dependency-components is a list of SUIT_Component_Reference | ||||
| blocks that specify component identifiers that will be affected by | ||||
| the content of a dependency of the current manifest. suit-dependency- | ||||
| components is OPTIONAL to implement. | ||||
| suit-common-sequence is a SUIT_Command_Sequence to execute prior to | ||||
| executing any other command sequence. Typical actions in suit- | ||||
| common-sequence include setting expected device identity and image | ||||
| digests when they are conditional (see Section 12 for more | ||||
| information on conditional sequences). suit-common-sequence is | ||||
| RECOMMENDED to implement. | ||||
| 9.8.2. SUIT_Parameters | ||||
| Many conditions and directives require additional information. That | Many conditions and directives require additional information. That | |||
| information is contained within parameters that can be set in a | information is contained within parameters that can be set in a | |||
| consistent way. This allows reduction of manifest size and | consistent way. This allows reduction of manifest size and | |||
| replacement of parameters from one manifest to the next. | replacement of parameters from one manifest to the next. | |||
| The defined manifest parameters are described below. | The defined manifest parameters are described below. | |||
| +----------------+----------------------------------+---------------+ | +----------------+----------------------------------+---------------+ | |||
| | Name | CDDL Structure | Reference | | | Name | CDDL Structure | Reference | | |||
| +----------------+----------------------------------+---------------+ | +----------------+----------------------------------+---------------+ | |||
| | Vendor ID | suit-parameter-vendor-identifier | Section | | | Vendor ID | suit-parameter-vendor-identifier | Section | | |||
| | | | 9.11.1 | | | | | 9.8.2.1 | | |||
| | | | | | | | | | | |||
| | Class ID | suit-parameter-class-identifier | Section | | | Class ID | suit-parameter-class-identifier | Section | | |||
| | | | 9.11.2 | | | | | 9.8.2.2 | | |||
| | | | | | | | | | | |||
| | Image Digest | suit-parameter-image-digest | Section | | | Image Digest | suit-parameter-image-digest | Section | | |||
| | | | 9.11.3 | | | | | 9.8.2.3 | | |||
| | | | | | | | | | | |||
| | Image Size | suit-parameter-image-size | Section | | | Image Size | suit-parameter-image-size | Section | | |||
| | | | 9.11.4 | | | | | 9.8.2.4 | | |||
| | | | | | | | | | | |||
| | Use Before | suit-parameter-use-before | Section | | | Use Before | suit-parameter-use-before | Section | | |||
| | | | 9.11.5 | | | | | 9.8.2.5 | | |||
| | | | | | | | | | | |||
| | Component | suit-parameter-component-offset | Section | | | Component | suit-parameter-component-offset | Section | | |||
| | Offset | | 9.11.6 | | | Offset | | 9.8.2.6 | | |||
| | | | | | | | | | | |||
| | Encryption | suit-parameter-encryption-info | Section | | | Encryption | suit-parameter-encryption-info | Section | | |||
| | Info | | 9.11.7 | | | Info | | 9.8.2.7 | | |||
| | | | | | | | | | | |||
| | Compression | suit-parameter-compression-info | Section | | | Compression | suit-parameter-compression-info | Section | | |||
| | Info | | 9.11.8 | | | Info | | 9.8.2.8 | | |||
| | | | | | | | | | | |||
| | Unpack Info | suit-parameter-unpack-info | Section | | | Unpack Info | suit-parameter-unpack-info | Section | | |||
| | | | 9.11.9 | | | | | 9.8.2.9 | | |||
| | | | | | | | | | | |||
| | URI | suit-parameter-uri | Section | | | URI | suit-parameter-uri | Section | | |||
| | | | 9.11.10 | | | | | 9.8.2.10 | | |||
| | | | | | | | | | | |||
| | Source | suit-parameter-source-component | Section | | | Source | suit-parameter-source-component | Section | | |||
| | Component | | 9.11.11 | | | Component | | 9.8.2.11 | | |||
| | | | | | | | | | | |||
| | Run Args | suit-parameter-run-args | Section | | | Run Args | suit-parameter-run-args | Section | | |||
| | | | 9.11.12 | | | | | 9.8.2.12 | | |||
| | | | | | | | | | | |||
| | Device ID | suit-parameter-device-identifier | Section | | | Device ID | suit-parameter-device-identifier | Section | | |||
| | | | 9.11.13 | | | | | 9.8.2.13 | | |||
| | | | | | | | | | | |||
| | Minimum | suit-parameter-minimum-battery | Section | | | Minimum | suit-parameter-minimum-battery | Section | | |||
| | Battery | | 9.11.14 | | | Battery | | 9.8.2.14 | | |||
| | | | | | | | | | | |||
| | Update | suit-parameter-update-priority | Section | | | Update | suit-parameter-update-priority | Section | | |||
| | Priority | | 9.11.15 | | | Priority | | 9.8.2.15 | | |||
| | | | | | | | | | | |||
| | Version | suit-parameter-version | Section | | | Version | suit-parameter-version | Section | | |||
| | | | 9.11.16 | | | | | 9.8.2.16 | | |||
| | | | | | | | | | | |||
| | Wait Info | suit-parameter-wait-info | Section | | | Wait Info | suit-parameter-wait-info | Section | | |||
| | | | 9.11.17 | | | | | 9.8.2.17 | | |||
| | | | | | | | | | | |||
| | URI List | suit-parameter-uri-list | Section | | | URI List | suit-parameter-uri-list | Section | | |||
| | | | 9.11.18 | | | | | 9.8.2.18 | | |||
| | | | | | | | | | | |||
| | Strict Order | suit-parameter-strict-order | Section | | | Strict Order | suit-parameter-strict-order | Section | | |||
| | | | 9.11.19 | | | | | 9.8.2.19 | | |||
| | | | | | | | | | | |||
| | Soft Failure | suit-parameter-soft-failure | Section | | | Soft Failure | suit-parameter-soft-failure | Section | | |||
| | | | 9.11.20 | | | | | 9.8.2.20 | | |||
| | | | | | | | | | | |||
| | Custom | suit-parameter-custom | Section | | | Custom | suit-parameter-custom | Section | | |||
| | | | 9.11.21 | | | | | 9.8.2.21 | | |||
| +----------------+----------------------------------+---------------+ | +----------------+----------------------------------+---------------+ | |||
| CBOR-encoded object parameters are still wrapped in a bstr. This is | CBOR-encoded object parameters are still wrapped in a bstr. This is | |||
| because it allows a parser that is aggregating parameters to | because it allows a parser that is aggregating parameters to | |||
| reference the object with a single pointer and traverse it without | reference the object with a single pointer and traverse it without | |||
| understanding the contents. This is important for modularization and | understanding the contents. This is important for modularization and | |||
| division of responsibility within a pull parser. The same | division of responsibility within a pull parser. The same | |||
| consideration does not apply to Directives because those elements are | consideration does not apply to Directives because those elements are | |||
| invoked with their arguments immediately | invoked with their arguments immediately | |||
| 9.11.1. suit-parameter-vendor-identifier | 9.8.2.1. suit-parameter-vendor-identifier | |||
| A RFC 4122 UUID representing the vendor of the device or component. | A RFC 4122 UUID representing the vendor of the device or component. | |||
| 9.11.2. suit-parameter-class-identifier | 9.8.2.2. suit-parameter-class-identifier | |||
| A RFC 4122 UUID representing the class of the device or component | A RFC 4122 UUID representing the class of the device or component | |||
| 9.11.3. suit-parameter-image-digest | 9.8.2.3. suit-parameter-image-digest | |||
| A fingerprint computed over the image itself encoded in the | A fingerprint computed over the image itself encoded in the | |||
| SUIT_Digest structure. | SUIT_Digest structure. | |||
| 9.11.4. suit-parameter-image-size | 9.8.2.4. suit-parameter-image-size | |||
| The size of the firmware image in bytes. | The size of the firmware image in bytes. | |||
| 9.11.5. suit-parameter-use-before | 9.8.2.5. suit-parameter-use-before | |||
| An expire date for the use of the manifest encoded as a POSIX | An expire date for the use of the manifest encoded as a POSIX | |||
| timestamp. | timestamp. | |||
| 9.11.6. suit-parameter-component-offset | 9.8.2.6. suit-parameter-component-offset | |||
| Offset of the component | Offset of the component | |||
| 9.11.7. suit-parameter-encryption-info | 9.8.2.7. suit-parameter-encryption-info | |||
| Encryption Info defines the mechanism that Fetch or Copy should use | Encryption Info defines the mechanism that Fetch or Copy should use | |||
| to decrypt the data they transfer. SUIT_Parameter_Encryption_Info is | to decrypt the data they transfer. SUIT_Parameter_Encryption_Info is | |||
| encoded as a COSE_Encrypt_Tagged or a COSE_Encrypt0_Tagged, wrapped | encoded as a COSE_Encrypt_Tagged or a COSE_Encrypt0_Tagged, wrapped | |||
| in a bstr. | in a bstr. | |||
| 9.11.8. suit-parameter-compression-info | 9.8.2.8. suit-parameter-compression-info | |||
| Compression Info defines any information that is required for a | Compression Info defines any information that is required for a | |||
| device to perform decompression operations. Typically, this includes | device to perform decompression operations. Typically, this includes | |||
| the algorithm identifier. This document defines the use of ZLIB | the algorithm identifier. This document defines the use of ZLIB | |||
| [RFC1950], Brotli [RFC7932], and ZSTD [I-D.kucherawy-rfc8478bis]. | [RFC1950], Brotli [RFC7932], and ZSTD [I-D.kucherawy-rfc8478bis]. | |||
| Additional compression formats can be registered through the IANA- | Additional compression formats can be registered through the IANA- | |||
| maintained registry. | maintained registry. | |||
| 9.11.9. suit-parameter-unpack-info | 9.8.2.9. suit-parameter-unpack-info | |||
| SUIT_Unpack_Info defines the information required for a device to | SUIT_Unpack_Info defines the information required for a device to | |||
| interpret a packed format. This document defines the use of the | interpret a packed format. This document defines the use of the | |||
| following binary encodings: Intel HEX [HEX], Motorola S-record | following binary encodings: Intel HEX [HEX], Motorola S-record | |||
| [SREC], Executable and Linkable Format (ELF) [ELF], and Common Object | [SREC], Executable and Linkable Format (ELF) [ELF], and Common Object | |||
| File Format (COFF) [COFF]. | File Format (COFF) [COFF]. | |||
| Additional packing formats can be registered through the IANA- | Additional packing formats can be registered through the IANA- | |||
| maintained registry. | maintained registry. | |||
| 9.11.10. suit-parameter-uri | 9.8.2.10. suit-parameter-uri | |||
| A URI from which to fetch a resource | A URI from which to fetch a resource | |||
| 9.11.11. suit-parameter-source-component | 9.8.2.11. suit-parameter-source-component | |||
| A Component Index | A Component Index | |||
| 9.11.12. suit-parameter-run-args | 9.8.2.12. suit-parameter-run-args | |||
| An encoded set of arguments for Run | An encoded set of arguments for Run | |||
| 9.11.13. suit-parameter-device-identifier | 9.8.2.13. suit-parameter-device-identifier | |||
| A RFC4122 UUID representing the device or component | A RFC4122 UUID representing the device or component | |||
| 9.11.14. suit-parameter-minimum-battery | 9.8.2.14. suit-parameter-minimum-battery | |||
| A minimum battery level in mWh | A minimum battery level in mWh | |||
| 9.11.15. suit-parameter-update-priority | 9.8.2.15. suit-parameter-update-priority | |||
| The priority of the update | The priority of the update | |||
| 9.11.16. suit-parameter-version | 9.8.2.16. suit-parameter-version | |||
| TBD. | TBD. | |||
| 9.11.17. suit-parameter-wait-info | 9.8.2.17. suit-parameter-wait-info | |||
| TBD. | TBD. | |||
| 9.11.18. suit-parameter-uri-list | 9.8.2.18. suit-parameter-uri-list | |||
| TBD. | TBD. | |||
| 9.11.19. suit-parameter-strict-order | 9.8.2.19. suit-parameter-strict-order | |||
| The Strict Order Parameter allows a manifest to govern when | The Strict Order Parameter allows a manifest to govern when | |||
| directives can be executed out-of-order. This allows for systems | directives can be executed out-of-order. This allows for systems | |||
| that have a sensitivity to order of updates to choose the order in | that have a sensitivity to order of updates to choose the order in | |||
| which they are executed. It also allows for more advanced systems to | which they are executed. It also allows for more advanced systems to | |||
| parallelize their handling of updates. Strict Order defaults to | parallelize their handling of updates. Strict Order defaults to | |||
| True. It MAY be set to False when the order of operations does not | True. It MAY be set to False when the order of operations does not | |||
| matter. When arriving at the end of a command sequence, ALL commands | matter. When arriving at the end of a command sequence, ALL commands | |||
| MUST have completed, regardless of the state of | MUST have completed, regardless of the state of | |||
| SUIT_Parameter_Strict_Order. If SUIT_Parameter_Strict_Order is | SUIT_Parameter_Strict_Order. If SUIT_Parameter_Strict_Order is | |||
| returned to True, ALL preceding commands MUST complete before the | returned to True, ALL preceding commands MUST complete before the | |||
| next command is executed. | next command is executed. | |||
| 9.11.20. suit-parameter-soft-failure | 9.8.2.20. suit-parameter-soft-failure | |||
| When executing a command sequence inside SUIT_Directive_Try_Each and | When executing a command sequence inside SUIT_Directive_Try_Each and | |||
| a condition failure occurs, the manifest processor aborts the | a condition failure occurs, the manifest processor aborts the | |||
| sequence. If Soft Failure is True, it returns Success. Otherwise, | sequence. If Soft Failure is True, it returns Success. Otherwise, | |||
| it returns the original condition failure. | it returns the original condition failure. | |||
| SUIT_Parameter_Soft_Failure is scoped to the enclosing | SUIT_Parameter_Soft_Failure is scoped to the enclosing | |||
| SUIT_Command_Sequence. Its value is discarded when | SUIT_Command_Sequence. Its value is discarded when | |||
| SUIT_Command_Sequence terminates. | SUIT_Command_Sequence terminates. | |||
| 9.11.21. suit-parameter-custom | 9.8.2.21. suit-parameter-custom | |||
| TBD. | TBD. | |||
| 9.11.22. SUIT_Parameters CDDL | 9.8.2.22. SUIT_Parameters CDDL | |||
| The following CDDL describes all SUIT_Parameters. | The following CDDL describes all SUIT_Parameters. | |||
| SUIT_Parameters //= (suit-parameter-vendor-identifier => RFC4122_UUID) | SUIT_Parameters //= (suit-parameter-vendor-identifier => RFC4122_UUID) | |||
| SUIT_Parameters //= (suit-parameter-class-identifier => RFC4122_UUID) | SUIT_Parameters //= (suit-parameter-class-identifier => RFC4122_UUID) | |||
| SUIT_Parameters //= (suit-parameter-image-digest | SUIT_Parameters //= (suit-parameter-image-digest | |||
| => bstr .cbor SUIT_Digest) | => bstr .cbor SUIT_Digest) | |||
| SUIT_Parameters //= (suit-parameter-image-size => uint) | SUIT_Parameters //= (suit-parameter-image-size => uint) | |||
| SUIT_Parameters //= (suit-parameter-use-before => uint) | SUIT_Parameters //= (suit-parameter-use-before => uint) | |||
| SUIT_Parameters //= (suit-parameter-component-offset => uint) | SUIT_Parameters //= (suit-parameter-component-offset => uint) | |||
| skipping to change at page 34, line 23 ¶ | skipping to change at page 34, line 36 ¶ | |||
| SUIT_Unpack_Info = { | SUIT_Unpack_Info = { | |||
| suit-unpack-algorithm => SUIT_Unpack_Algorithms, | suit-unpack-algorithm => SUIT_Unpack_Algorithms, | |||
| ? suit-unpack-parameters => bstr | ? suit-unpack-parameters => bstr | |||
| } | } | |||
| SUIT_Unpack_Algorithms /= SUIT_Unpack_Algorithm_Hex | SUIT_Unpack_Algorithms /= SUIT_Unpack_Algorithm_Hex | |||
| SUIT_Unpack_Algorithms /= SUIT_Unpack_Algorithm_Elf | SUIT_Unpack_Algorithms /= SUIT_Unpack_Algorithm_Elf | |||
| SUIT_Unpack_Algorithms /= SUIT_Unpack_Algorithm_Coff | SUIT_Unpack_Algorithms /= SUIT_Unpack_Algorithm_Coff | |||
| SUIT_Unpack_Algorithms /= SUIT_Unpack_Algorithm_Srec | SUIT_Unpack_Algorithms /= SUIT_Unpack_Algorithm_Srec | |||
| 9.12. SUIT_Command_Sequence | 9.8.3. SUIT_Condition | |||
| A SUIT_Command_Sequence defines a series of actions that the | ||||
| Recipient MUST take to accomplish a particular goal. These goals are | ||||
| defined in the manifest and include: | ||||
| 1. Dependency Resolution | ||||
| 2. Payload Fetch | ||||
| 3. Payload Installation | ||||
| 4. Image Validation | ||||
| 5. Image Loading | ||||
| 6. Run or Boot | ||||
| Each of these follows exactly the same structure to ensure that the | ||||
| parser is as simple as possible. | ||||
| Lists of commands are constructed from two kinds of element: | ||||
| 1. Conditions that MUST be true-any failure is treated as a failure | ||||
| of the update/load/boot | ||||
| 2. Directives that MUST be executed. | ||||
| The lists of commands are logically structured into sequences of zero | ||||
| or more conditions followed by zero or more directives. The | ||||
| *logical* structure is described by the following CDDL: | ||||
| Command_Sequence = { | ||||
| conditions => [ * Condition], | ||||
| directives => [ * Directive] | ||||
| } | ||||
| This introduces significant complexity in the parser, however, so the | ||||
| structure is flattened to make parsing simpler: | ||||
| SUIT_Command_Sequence = [ + (SUIT_Condition/SUIT_Directive) ] | ||||
| Each condition is a command code identifier, followed by Nil. Each | ||||
| directive is composed of: | ||||
| 1. A command code identifier | ||||
| 2. An argument block or Nil | ||||
| Argument blocks are defined for each type of directive. | ||||
| Many conditions and directives apply to a given component, and these | ||||
| generally grouped together. Therefore, a special command to set the | ||||
| current component index is provided with a matching command to set | ||||
| the current dependency index. This index is a numeric index into the | ||||
| component ID tables defined at the beginning of the document. For | ||||
| the purpose of setting the index, the two component ID tables are | ||||
| considered to be concatenated together. | ||||
| To facilitate optional conditions, a special directive is provided. | ||||
| It runs several new lists of conditions/directives, one after | ||||
| another, that are contained as an argument to the directive. By | ||||
| default, it assumes that a failure of a condition should not indicate | ||||
| a failure of the update/boot, but a parameter is provided to override | ||||
| this behavior. | ||||
| 9.12.1. SUIT_Condition | ||||
| Conditions are used to define mandatory properties of a system in | Conditions are used to define mandatory properties of a system in | |||
| order for an update to be applied. They can be pre-conditions or | order for an update to be applied. They can be pre-conditions or | |||
| post-conditions of any directive or series of directives, depending | post-conditions of any directive or series of directives, depending | |||
| on where they are placed in the list. Conditions never take | on where they are placed in the list. Conditions never take | |||
| arguments; conditions should test using parameters instead. | arguments; conditions should test using parameters instead. | |||
| Conditions include: | Conditions include: | |||
| +----------------+----------------------------------+---------------+ | +----------------+----------------------------------+---------------+ | |||
| | Name | CDDL Structure | Reference | | | Name | CDDL Structure | Reference | | |||
| +----------------+----------------------------------+---------------+ | +----------------+----------------------------------+---------------+ | |||
| | Vendor | suit-condition-vendor-identifier | Section | | | Vendor | suit-condition-vendor-identifier | Section | | |||
| | Identifier | | 9.12.1.1 | | | Identifier | | 9.8.3.1 | | |||
| | | | | | | | | | | |||
| | Class | suit-condition-class-identifier | Section | | | Class | suit-condition-class-identifier | Section | | |||
| | Identifier | | 9.12.1.1 | | | Identifier | | 9.8.3.1 | | |||
| | | | | | | | | | | |||
| | Device | suit-condition-device-identifier | Section | | | Device | suit-condition-device-identifier | Section | | |||
| | Identifier | | 9.12.1.1 | | | Identifier | | 9.8.3.1 | | |||
| | | | | | | | | | | |||
| | Image Match | suit-condition-image-match | Section | | | Image Match | suit-condition-image-match | Section | | |||
| | | | 9.12.1.2 | | | | | 9.8.3.2 | | |||
| | | | | | | | | | | |||
| | Image Not | suit-condition-image-not-match | Section | | | Image Not | suit-condition-image-not-match | Section | | |||
| | Match | | 9.12.1.3 | | | Match | | 9.8.3.3 | | |||
| | | | | | | | | | | |||
| | Use Before | suit-condition-use-before | Section | | | Use Before | suit-condition-use-before | Section | | |||
| | | | 9.12.1.4 | | | | | 9.8.3.4 | | |||
| | | | | | | | | | | |||
| | Component | suit-condition-component-offset | Section | | | Component | suit-condition-component-offset | Section | | |||
| | Offset | | 9.12.1.5 | | | Offset | | 9.8.3.5 | | |||
| | | | | | | | | | | |||
| | Minimum | suit-condition-minimum-battery | Section | | | Minimum | suit-condition-minimum-battery | Section | | |||
| | Battery | | 9.12.1.6 | | | Battery | | 9.8.3.6 | | |||
| | | | | | | | | | | |||
| | Update | suit-condition-update-authorized | Section | | | Update | suit-condition-update-authorized | Section | | |||
| | Authorized | | 9.12.1.7 | | | Authorized | | 9.8.3.7 | | |||
| | | | | | | | | | | |||
| | Version | suit-condition-version | Section | | | Version | suit-condition-version | Section | | |||
| | | | 9.12.1.8 | | | | | 9.8.3.8 | | |||
| | | | | | | | | | | |||
| | Custom | SUIT_Condition_Custom | Section | | | Custom | SUIT_Condition_Custom | Section | | |||
| | Condition | | 9.12.1.9 | | | Condition | | 9.8.3.9 | | |||
| +----------------+----------------------------------+---------------+ | +----------------+----------------------------------+---------------+ | |||
| Each condition MUST report a result code on completion. If a | Each condition MUST report a result code on completion. If a | |||
| condition reports failure, then the current sequence of commands MUST | condition reports failure, then the current sequence of commands MUST | |||
| terminate. If a condition requires additional information, this MUST | terminate. If a condition requires additional information, this MUST | |||
| be specified in one or more parameters before the condition is | be specified in one or more parameters before the condition is | |||
| executed. If a Recipient attempts to process a condition that | executed. If a Recipient attempts to process a condition that | |||
| expects additional information and that information has not been set, | expects additional information and that information has not been set, | |||
| it MUST report a failure. If a Recipient encounters an unknown | it MUST report a failure. If a Recipient encounters an unknown | |||
| condition, it MUST report a failure. | condition, it MUST report a failure. | |||
| skipping to change at page 38, line 20 ¶ | skipping to change at page 37, line 20 ¶ | |||
| Class-specific information is composed of a variety of data, for | Class-specific information is composed of a variety of data, for | |||
| example: | example: | |||
| - Model number. | - Model number. | |||
| - Hardware revision. | - Hardware revision. | |||
| - Bootloader version (for immutable bootloaders). | - Bootloader version (for immutable bootloaders). | |||
| 9.12.1.1. suit-condition-vendor-identifier, suit-condition-class- | 9.8.3.1. suit-condition-vendor-identifier, suit-condition-class- | |||
| identifier, and suit-condition-device-identifier | identifier, and suit-condition-device-identifier | |||
| There are three identifier-based conditions: suit-condition-vendor- | There are three identifier-based conditions: suit-condition-vendor- | |||
| identifier, suit-condition-class-identifier, and suit-condition- | identifier, suit-condition-class-identifier, and suit-condition- | |||
| device-identifier. Each of these conditions match a RFC 4122 | device-identifier. Each of these conditions match a RFC 4122 | |||
| [RFC4122] UUID that MUST have already been set as a parameter. The | [RFC4122] UUID that MUST have already been set as a parameter. The | |||
| installing device MUST match the specified UUID in order to consider | installing device MUST match the specified UUID in order to consider | |||
| the manifest valid. These identifiers MAY be scoped by component. | the manifest valid. These identifiers MAY be scoped by component. | |||
| The Recipient uses the ID parameter that has already been set using | The Recipient uses the ID parameter that has already been set using | |||
| the Set Parameters directive. If no ID has been set, this condition | the Set Parameters directive. If no ID has been set, this condition | |||
| fails. suit-condition-class-identifier and suit-condition-vendor- | fails. suit-condition-class-identifier and suit-condition-vendor- | |||
| identifier are REQUIRED to implement. suit-condition-device- | identifier are REQUIRED to implement. suit-condition-device- | |||
| identifier is OPTIONAL to implement. | identifier is OPTIONAL to implement. | |||
| 9.12.1.2. suit-condition-image-match | 9.8.3.2. suit-condition-image-match | |||
| Verify that the current component matches the digest parameter for | Verify that the current component matches the digest parameter for | |||
| the current component. The digest is verified against the digest | the current component. The digest is verified against the digest | |||
| specified in the Component's parameters list. If no digest is | specified in the Component's parameters list. If no digest is | |||
| specified, the condition fails. suit-condition-image-match is | specified, the condition fails. suit-condition-image-match is | |||
| REQUIRED to implement. | REQUIRED to implement. | |||
| 9.12.1.3. suit-condition-image-not-match | 9.8.3.3. suit-condition-image-not-match | |||
| Verify that the current component does not match the supplied digest. | Verify that the current component does not match the supplied digest. | |||
| If no digest is specified, then the digest is compared against the | If no digest is specified, then the digest is compared against the | |||
| digest specified in the Component's parameters list. If no digest is | digest specified in the Component's parameters list. If no digest is | |||
| specified, the condition fails. suit-condition-image-not-match is | specified, the condition fails. suit-condition-image-not-match is | |||
| OPTIONAL to implement. | OPTIONAL to implement. | |||
| 9.12.1.4. suit-condition-use-before | 9.8.3.4. suit-condition-use-before | |||
| Verify that the current time is BEFORE the specified time. suit- | Verify that the current time is BEFORE the specified time. suit- | |||
| condition-use-before is used to specify the last time at which an | condition-use-before is used to specify the last time at which an | |||
| update should be installed. The recipient evaluates the current time | update should be installed. The recipient evaluates the current time | |||
| against the suit-parameter-use-before parameter, which must have | against the suit-parameter-use-before parameter, which must have | |||
| already been set as a parameter, encoded as a POSIX timestamp, that | already been set as a parameter, encoded as a POSIX timestamp, that | |||
| is seconds after 1970-01-01 00:00:00. Timestamp conditions MUST be | is seconds after 1970-01-01 00:00:00. Timestamp conditions MUST be | |||
| evaluated in 64 bits, regardless of encoded CBOR size. suit- | evaluated in 64 bits, regardless of encoded CBOR size. suit- | |||
| condition-use-before is OPTIONAL to implement. | condition-use-before is OPTIONAL to implement. | |||
| 9.12.1.5. suit-condition-component-offset | 9.8.3.5. suit-condition-component-offset | |||
| TBD. | TBD. | |||
| 9.12.1.6. suit-condition-minimum-battery | 9.8.3.6. suit-condition-minimum-battery | |||
| suit-condition-minimum-battery provides a mechanism to test a | suit-condition-minimum-battery provides a mechanism to test a | |||
| device's battery level before installing an update. This condition | device's battery level before installing an update. This condition | |||
| is for use in primary-cell applications, where the battery is only | is for use in primary-cell applications, where the battery is only | |||
| ever discharged. For batteries that are charged, suit-directive-wait | ever discharged. For batteries that are charged, suit-directive-wait | |||
| is more appropriate, since it defines a "wait" until the battery | is more appropriate, since it defines a "wait" until the battery | |||
| level is sufficient to install the update. suit-condition-minimum- | level is sufficient to install the update. suit-condition-minimum- | |||
| battery is specified in mWh. suit-condition-minimum-battery is | battery is specified in mWh. suit-condition-minimum-battery is | |||
| OPTIONAL to implement. | OPTIONAL to implement. | |||
| 9.12.1.7. suit-condition-update-authorized | 9.8.3.7. suit-condition-update-authorized | |||
| Request Authorization from the application and fail if not | Request Authorization from the application and fail if not | |||
| authorized. This can allow a user to decline an update. Argument is | authorized. This can allow a user to decline an update. Argument is | |||
| an integer priority level. Priorities are application defined. suit- | an integer priority level. Priorities are application defined. suit- | |||
| condition-update-authorized is OPTIONAL to implement. | condition-update-authorized is OPTIONAL to implement. | |||
| 9.12.1.8. suit-condition-version | 9.8.3.8. suit-condition-version | |||
| suit-condition-version allows comparing versions of firmware. | suit-condition-version allows comparing versions of firmware. | |||
| Verifying image digests is preferred to version checks because | Verifying image digests is preferred to version checks because | |||
| digests are more precise. The image can be compared as: | digests are more precise. The image can be compared as: | |||
| - Greater. | - Greater. | |||
| - Greater or Equal. | - Greater or Equal. | |||
| - Equal. | - Equal. | |||
| skipping to change at page 41, line 5 ¶ | skipping to change at page 40, line 5 ¶ | |||
| - 1.2-rc3 = [1,2,-1,3]. | - 1.2-rc3 = [1,2,-1,3]. | |||
| - 1.2-beta = [1,2,-2]. | - 1.2-beta = [1,2,-2]. | |||
| - 1.2-alpha = [1,2,-3]. | - 1.2-alpha = [1,2,-3]. | |||
| - 1.2-alpha4 = [1,2,-3,4]. | - 1.2-alpha4 = [1,2,-3,4]. | |||
| suit-condition-version is OPTIONAL to implement. | suit-condition-version is OPTIONAL to implement. | |||
| 9.12.1.9. SUIT_Condition_Custom | 9.8.3.9. SUIT_Condition_Custom | |||
| SUIT_Condition_Custom describes any proprietary, application specific | SUIT_Condition_Custom describes any proprietary, application specific | |||
| condition. This is encoded as a negative integer, chosen by the | condition. This is encoded as a negative integer, chosen by the | |||
| firmware developer. If additional information must be provided to | firmware developer. If additional information must be provided to | |||
| the condition, it should be encoded in a custom parameter (a nint) as | the condition, it should be encoded in a custom parameter (a nint) as | |||
| described in Section 9.11. SUIT_Condition_Custom is OPTIONAL to | described in Section 9.8.2. SUIT_Condition_Custom is OPTIONAL to | |||
| implement. | implement. | |||
| 9.12.1.10. SUIT_Condition CDDL | 9.8.3.10. SUIT_Condition CDDL | |||
| The following CDDL describes SUIT_Condition: | The following CDDL describes SUIT_Condition: | |||
| SUIT_Condition //= (suit-condition-vendor-identifier, nil) | SUIT_Condition //= (suit-condition-vendor-identifier, nil) | |||
| SUIT_Condition //= (suit-condition-class-identifier, nil) | SUIT_Condition //= (suit-condition-class-identifier, nil) | |||
| SUIT_Condition //= (suit-condition-device-identifier, nil) | SUIT_Condition //= (suit-condition-device-identifier, nil) | |||
| SUIT_Condition //= (suit-condition-image-match, nil) | SUIT_Condition //= (suit-condition-image-match, nil) | |||
| SUIT_Condition //= (suit-condition-image-not-match, nil) | SUIT_Condition //= (suit-condition-image-not-match, nil) | |||
| SUIT_Condition //= (suit-condition-use-before, nil) | SUIT_Condition //= (suit-condition-use-before, nil) | |||
| SUIT_Condition //= (suit-condition-component-offset, nil) | SUIT_Condition //= (suit-condition-component-offset, nil) | |||
| SUIT_Condition //= (suit-condition-minimum-battery, nil) | SUIT_Condition //= (suit-condition-minimum-battery, nil) | |||
| SUIT_Condition //= (suit-condition-update-authorized, nil) | SUIT_Condition //= (suit-condition-update-authorized, nil) | |||
| SUIT_Condition //= (suit-condition-version, nil) | SUIT_Condition //= (suit-condition-version, nil) | |||
| SUIT_Condition //= (suit-condition-component-offset, nil) | SUIT_Condition //= (suit-condition-component-offset, nil) | |||
| 9.12.2. SUIT_Directive | 9.8.4. SUIT_Directive | |||
| Directives are used to define the behavior of the recipient. | Directives are used to define the behavior of the recipient. | |||
| Directives include: | Directives include: | |||
| +---------------+-------------------------------------+-------------+ | +---------------+-------------------------------------+-------------+ | |||
| | Name | CDDL Structure | Reference | | | Name | CDDL Structure | Reference | | |||
| +---------------+-------------------------------------+-------------+ | +---------------+-------------------------------------+-------------+ | |||
| | Set Component | suit-directive-set-component-index | Section | | | Set Component | suit-directive-set-component-index | Section | | |||
| | Index | | 9.12.3 | | | Index | | 9.8.4.1 | | |||
| | | | | | | | | | | |||
| | Set | suit-directive-set-dependency-index | Section | | | Set | suit-directive-set-dependency-index | Section | | |||
| | Dependency | | 9.12.4 | | | Dependency | | 9.8.4.2 | | |||
| | Index | | | | | Index | | | | |||
| | | | | | | | | | | |||
| | Abort | suit-directive-abort | Section | | | Abort | suit-directive-abort | Section | | |||
| | | | 9.12.5 | | | | | 9.8.4.3 | | |||
| | | | | | | | | | | |||
| | Try Each | suit-directive-try-each | Section | | | Try Each | suit-directive-try-each | Section | | |||
| | | | 9.12.6 | | | | | 9.8.4.4 | | |||
| | | | | | | | | | | |||
| | Process | suit-directive-process-dependency | Section | | | Process | suit-directive-process-dependency | Section | | |||
| | Dependency | | 9.12.7 | | | Dependency | | 9.8.4.5 | | |||
| | | | | | | | | | | |||
| | Set | suit-directive-set-parameters | Section | | | Set | suit-directive-set-parameters | Section | | |||
| | Parameters | | 9.12.8 | | | Parameters | | 9.8.4.6 | | |||
| | | | | | | | | | | |||
| | Override | suit-directive-override-parameters | Section | | | Override | suit-directive-override-parameters | Section | | |||
| | Parameters | | 9.12.9 | | | Parameters | | 9.8.4.7 | | |||
| | | | | | | | | | | |||
| | Fetch | suit-directive-fetch | Section | | | Fetch | suit-directive-fetch | Section | | |||
| | | | 9.12.10 | | | | | 9.8.4.8 | | |||
| | | | | | | | | | | |||
| | Copy | suit-directive-copy | Section | | | Copy | suit-directive-copy | Section | | |||
| | | | 9.12.11 | | | | | 9.8.4.9 | | |||
| | | | | | | | | | | |||
| | Run | suit-directive-run | Section | | | Run | suit-directive-run | Section | | |||
| | | | 9.12.12 | | | | | 9.8.4.10 | | |||
| | | | | | | | | | | |||
| | Wait For | suit-directive-wait | Section | | | Wait For | suit-directive-wait | Section | | |||
| | Event | | 9.12.13 | | | Event | | 9.8.4.11 | | |||
| | | | | | | | | | | |||
| | Run Sequence | suit-directive-run-sequence | Section | | | Run Sequence | suit-directive-run-sequence | Section | | |||
| | | | 9.12.14 | | | | | 9.8.4.12 | | |||
| | | | | | | | | | | |||
| | Swap | suit-directive-swap | Section | | | Swap | suit-directive-swap | Section | | |||
| | | | 9.12.15 | | | | | 9.8.4.13 | | |||
| +---------------+-------------------------------------+-------------+ | +---------------+-------------------------------------+-------------+ | |||
| When a Recipient executes a Directive, it MUST report a result code. | When a Recipient executes a Directive, it MUST report a result code. | |||
| If the Directive reports failure, then the current Command Sequence | If the Directive reports failure, then the current Command Sequence | |||
| MUST terminate. | MUST terminate. | |||
| 9.12.3. suit-directive-set-component-index | 9.8.4.1. suit-directive-set-component-index | |||
| Set Component Index defines the component to which successive | Set Component Index defines the component to which successive | |||
| directives and conditions will apply. The supplied argument MUST be | directives and conditions will apply. The supplied argument MUST be | |||
| either a boolean or an unsigned integer index into the concatenation | either a boolean or an unsigned integer index into the concatenation | |||
| of suit-components and suit-dependency-components. If the following | of suit-components and suit-dependency-components. If the following | |||
| directives apply to ALL components, then the boolean value "True" is | directives apply to ALL components, then the boolean value "True" is | |||
| used instead of an index. True does not apply to dependency | used instead of an index. True does not apply to dependency | |||
| components. If the following directives apply to NO components, then | components. If the following directives apply to NO components, then | |||
| the boolean value "False" is used. When suit-directive-set- | the boolean value "False" is used. When suit-directive-set- | |||
| dependency-index is used, suit-directive-set-component-index = False | dependency-index is used, suit-directive-set-component-index = False | |||
| is implied. When suit-directive-set-component-index is used, suit- | is implied. When suit-directive-set-component-index is used, suit- | |||
| directive-set-dependency-index = False is implied. | directive-set-dependency-index = False is implied. | |||
| The following CDDL describes the argument to suit-directive-set- | The following CDDL describes the argument to suit-directive-set- | |||
| component-index. | component-index. | |||
| SUIT_Directive_Set_Component_Index_Argument = uint/bool | SUIT_Directive_Set_Component_Index_Argument = uint/bool | |||
| 9.12.4. suit-directive-set-dependency-index | 9.8.4.2. suit-directive-set-dependency-index | |||
| Set Dependency Index defines the manifest to which successive | Set Dependency Index defines the manifest to which successive | |||
| directives and conditions will apply. The supplied argument MUST be | directives and conditions will apply. The supplied argument MUST be | |||
| either a boolean or an unsigned integer index into the dependencies. | either a boolean or an unsigned integer index into the dependencies. | |||
| If the following directives apply to ALL dependencies, then the | If the following directives apply to ALL dependencies, then the | |||
| boolean value "True" is used instead of an index. If the following | boolean value "True" is used instead of an index. If the following | |||
| directives apply to NO dependencies, then the boolean value "False" | directives apply to NO dependencies, then the boolean value "False" | |||
| is used. When suit-directive-set-component-index is used, suit- | is used. When suit-directive-set-component-index is used, suit- | |||
| directive-set-dependency-index = False is implied. When suit- | directive-set-dependency-index = False is implied. When suit- | |||
| directive-set-dependency-index is used, suit-directive-set-component- | directive-set-dependency-index is used, suit-directive-set-component- | |||
| skipping to change at page 43, line 46 ¶ | skipping to change at page 42, line 46 ¶ | |||
| Typical operations that require suit-directive-set-dependency-index | Typical operations that require suit-directive-set-dependency-index | |||
| include setting a source URI, invoking "Fetch," or invoking "Process | include setting a source URI, invoking "Fetch," or invoking "Process | |||
| Dependency" for an individual dependency. | Dependency" for an individual dependency. | |||
| The following CDDL describes the argument to suit-directive-set- | The following CDDL describes the argument to suit-directive-set- | |||
| dependency-index. | dependency-index. | |||
| SUIT_Directive_Set_Manifest_Index_Argument = uint/bool | SUIT_Directive_Set_Manifest_Index_Argument = uint/bool | |||
| 9.12.5. suit-directive-abort | 9.8.4.3. suit-directive-abort | |||
| Unconditionally fail. This operation is typically used in | Unconditionally fail. This operation is typically used in | |||
| conjunction with suit-directive-try-each. | conjunction with suit-directive-try-each. | |||
| 9.12.6. suit-directive-try-each | 9.8.4.4. suit-directive-try-each | |||
| This command runs several SUIT_Command_Sequence, one after another, | This command runs several SUIT_Command_Sequence, one after another, | |||
| in a strict order. Use this command to implement a "try/catch-try/ | in a strict order. Use this command to implement a "try/catch-try/ | |||
| catch" sequence. Manifest processors MAY implement this command. | catch" sequence. Manifest processors MAY implement this command. | |||
| SUIT_Parameter_Soft_Failure is initialized to True at the beginning | SUIT_Parameter_Soft_Failure is initialized to True at the beginning | |||
| of each sequence. If one sequence aborts due to a condition failure, | of each sequence. If one sequence aborts due to a condition failure, | |||
| the next is started. If no sequence completes without condition | the next is started. If no sequence completes without condition | |||
| failure, then suit-directive-try-each returns an error. If a | failure, then suit-directive-try-each returns an error. If a | |||
| particular application calls for all sequences to fail and still | particular application calls for all sequences to fail and still | |||
| continue, then an empty sequence (nil) can be added to the Try Each | continue, then an empty sequence (nil) can be added to the Try Each | |||
| Argument. | Argument. | |||
| The following CDDL describes the SUIT_Try_Each argument. | The following CDDL describes the SUIT_Try_Each argument. | |||
| SUIT_Directive_Try_Each_Argument = [ | SUIT_Directive_Try_Each_Argument = [ | |||
| + bstr .cbor SUIT_Command_Sequence, | + bstr .cbor SUIT_Command_Sequence, | |||
| nil / bstr .cbor SUIT_Command_Sequence | nil / bstr .cbor SUIT_Command_Sequence | |||
| ] | ] | |||
| 9.12.7. suit-directive-process-dependency | 9.8.4.5. suit-directive-process-dependency | |||
| Execute the commands in the common section of the current dependency, | Execute the commands in the common section of the current dependency, | |||
| followed by the commands in the equivalent section of the current | followed by the commands in the equivalent section of the current | |||
| dependency. For example, if the current section is "fetch payload," | dependency. For example, if the current section is "fetch payload," | |||
| this will execute "common" in the current dependency, then "fetch | this will execute "common" in the current dependency, then "fetch | |||
| payload" in the current dependency. Once this is complete, the | payload" in the current dependency. Once this is complete, the | |||
| command following suit-directive-process-dependency will be | command following suit-directive-process-dependency will be | |||
| processed. | processed. | |||
| If the current dependency is False, this directive has no effect. If | If the current dependency is False, this directive has no effect. If | |||
| skipping to change at page 45, line 5 ¶ | skipping to change at page 44, line 5 ¶ | |||
| MUST have no effect. | MUST have no effect. | |||
| When SUIT_Process_Dependency completes, it forwards the last status | When SUIT_Process_Dependency completes, it forwards the last status | |||
| code that occurred in the dependency. | code that occurred in the dependency. | |||
| The argument to suit-directive-process-dependency is defined in the | The argument to suit-directive-process-dependency is defined in the | |||
| following CDDL. | following CDDL. | |||
| SUIT_Directive_Process_Dependency_Argument = nil | SUIT_Directive_Process_Dependency_Argument = nil | |||
| 9.12.8. suit-directive-set-parameters | 9.8.4.6. suit-directive-set-parameters | |||
| suit-directive-set-parameters allows the manifest to configure | suit-directive-set-parameters allows the manifest to configure | |||
| behavior of future directives by changing parameters that are read by | behavior of future directives by changing parameters that are read by | |||
| those directives. When dependencies are used, suit-directive-set- | those directives. When dependencies are used, suit-directive-set- | |||
| parameters also allows a manifest to modify the behavior of its | parameters also allows a manifest to modify the behavior of its | |||
| dependencies. | dependencies. | |||
| Available parameters are defined in Section 9.11. | Available parameters are defined in Section 9.8.2. | |||
| If a parameter is already set, suit-directive-set-parameters will | If a parameter is already set, suit-directive-set-parameters will | |||
| skip setting the parameter to its argument. This provides the core | skip setting the parameter to its argument. This provides the core | |||
| of the override mechanism, allowing dependent manifests to change the | of the override mechanism, allowing dependent manifests to change the | |||
| behavior of a manifest. | behavior of a manifest. | |||
| The argument to suit-directive-set-parameters is defined in the | The argument to suit-directive-set-parameters is defined in the | |||
| following CDDL. | following CDDL. | |||
| SUIT_Directive_Set_Parameters_Argument = {+ SUIT_Parameters} | SUIT_Directive_Set_Parameters_Argument = {+ SUIT_Parameters} | |||
| N.B.: A directive code is reserved for an optimization: a way to set | N.B.: A directive code is reserved for an optimization: a way to set | |||
| a parameter to the contents of another parameter, optionally with | a parameter to the contents of another parameter, optionally with | |||
| another component ID. | another component ID. | |||
| 9.12.9. suit-directive-override-parameters | 9.8.4.7. suit-directive-override-parameters | |||
| suit-directive-override-parameters replaces any listed parameters | suit-directive-override-parameters replaces any listed parameters | |||
| that are already set with the values that are provided in its | that are already set with the values that are provided in its | |||
| argument. This allows a manifest to prevent replacement of critical | argument. This allows a manifest to prevent replacement of critical | |||
| parameters. | parameters. | |||
| Available parameters are defined in Section 9.11. | Available parameters are defined in Section 9.8.2. | |||
| The argument to suit-directive-override-parameters is defined in the | The argument to suit-directive-override-parameters is defined in the | |||
| following CDDL. | following CDDL. | |||
| SUIT_Directive_Override_Parameters_Argument = {+ SUIT_Parameters} | SUIT_Directive_Override_Parameters_Argument = {+ SUIT_Parameters} | |||
| 9.12.10. suit-directive-fetch | 9.8.4.8. suit-directive-fetch | |||
| suit-directive-fetch instructs the manifest processor to obtain one | suit-directive-fetch instructs the manifest processor to obtain one | |||
| or more manifests or payloads, as specified by the manifest index and | or more manifests or payloads, as specified by the manifest index and | |||
| component index, respectively. | component index, respectively. | |||
| suit-directive-fetch can target one or more manifests and one or more | suit-directive-fetch can target one or more manifests and one or more | |||
| payloads. suit-directive-fetch retrieves each component and each | payloads. suit-directive-fetch retrieves each component and each | |||
| manifest listed in component-index and manifest-index, respectively. | manifest listed in component-index and manifest-index, respectively. | |||
| If component-index or manifest-index is True, instead of an integer, | If component-index or manifest-index is True, instead of an integer, | |||
| then all current manifest components/manifests are fetched. The | then all current manifest components/manifests are fetched. The | |||
| skipping to change at page 46, line 28 ¶ | skipping to change at page 45, line 28 ¶ | |||
| SUIT_Parameter_Compression_Info, SUIT_Parameter_Unpack_Info. These | SUIT_Parameter_Compression_Info, SUIT_Parameter_Unpack_Info. These | |||
| three parameters each activate and configure a processing step that | three parameters each activate and configure a processing step that | |||
| can be applied to the data that is transferred during suit-directive- | can be applied to the data that is transferred during suit-directive- | |||
| fetch. | fetch. | |||
| The argument to suit-directive-fetch is defined in the following | The argument to suit-directive-fetch is defined in the following | |||
| CDDL. | CDDL. | |||
| SUIT_Directive_Fetch_Argument = nil/bstr | SUIT_Directive_Fetch_Argument = nil/bstr | |||
| 9.12.11. suit-directive-copy | 9.8.4.9. suit-directive-copy | |||
| suit-directive-copy instructs the manifest processor to obtain one or | suit-directive-copy instructs the manifest processor to obtain one or | |||
| more payloads, as specified by the component index. suit-directive- | more payloads, as specified by the component index. suit-directive- | |||
| copy retrieves each component listed in component-index, | copy retrieves each component listed in component-index, | |||
| respectively. If component-index is True, instead of an integer, | respectively. If component-index is True, instead of an integer, | |||
| then all current manifest components are copied. The current | then all current manifest components are copied. The current | |||
| manifest's dependent-components are not automatically copied. In | manifest's dependent-components are not automatically copied. In | |||
| order to copy these, they MUST be specified in a component-index | order to copy these, they MUST be specified in a component-index | |||
| integer. | integer. | |||
| skipping to change at page 47, line 9 ¶ | skipping to change at page 46, line 9 ¶ | |||
| *N.B.* Fetch and Copy are very similar. Merging them into one | *N.B.* Fetch and Copy are very similar. Merging them into one | |||
| command may be appropriate. | command may be appropriate. | |||
| suit-directive-copy reads its source from | suit-directive-copy reads its source from | |||
| SUIT_Parameter_Source_Component. | SUIT_Parameter_Source_Component. | |||
| The argument to suit-directive-copy is defined in the following CDDL. | The argument to suit-directive-copy is defined in the following CDDL. | |||
| SUIT_Directive_Copy_Argument = nil | SUIT_Directive_Copy_Argument = nil | |||
| 9.12.12. suit-directive-run | 9.8.4.10. suit-directive-run | |||
| suit-directive-run directs the manifest processor to transfer | suit-directive-run directs the manifest processor to transfer | |||
| execution to the current Component Index. When this is invoked, the | execution to the current Component Index. When this is invoked, the | |||
| manifest processor MAY be unloaded and execution continues in the | manifest processor MAY be unloaded and execution continues in the | |||
| Component Index. Arguments provided to Run are forwarded to the | Component Index. Arguments provided to Run are forwarded to the | |||
| executable code located in Component Index, in an application- | executable code located in Component Index, in an application- | |||
| specific way. For example, this could form the Linux Kernel Command | specific way. For example, this could form the Linux Kernel Command | |||
| Line if booting a Linux device. | Line if booting a Linux device. | |||
| If the executable code at Component Index is constructed in such a | If the executable code at Component Index is constructed in such a | |||
| way that it does not unload the manifest processor, then the manifest | way that it does not unload the manifest processor, then the manifest | |||
| processor may resume execution after the executable completes. This | processor may resume execution after the executable completes. This | |||
| allows the manifest processor to invoke suitable helpers and to | allows the manifest processor to invoke suitable helpers and to | |||
| verify them with image conditions. | verify them with image conditions. | |||
| The argument to suit-directive-run is defined in the following CDDL. | The argument to suit-directive-run is defined in the following CDDL. | |||
| SUIT_Directive_Run_Argument = nil/bstr | SUIT_Directive_Run_Argument = nil/bstr | |||
| 9.12.13. suit-directive-wait | 9.8.4.11. suit-directive-wait | |||
| suit-directive-wait directs the manifest processor to pause until a | suit-directive-wait directs the manifest processor to pause until a | |||
| specified event occurs. Some possible events include: | specified event occurs. Some possible events include: | |||
| 1. Authorization | 1. Authorization | |||
| 2. External Power | 2. External Power | |||
| 3. Network availability | 3. Network availability | |||
| skipping to change at page 48, line 28 ¶ | skipping to change at page 47, line 28 ¶ | |||
| SUIT_Wait_Event_Argument_Network = int ; Network State | SUIT_Wait_Event_Argument_Network = int ; Network State | |||
| SUIT_Wait_Event_Argument_Other_Device_Version = [ | SUIT_Wait_Event_Argument_Other_Device_Version = [ | |||
| other-device: bstr, | other-device: bstr, | |||
| other-device-version: [+int] | other-device-version: [+int] | |||
| ] | ] | |||
| SUIT_Wait_Event_Argument_Time = uint ; Timestamp | SUIT_Wait_Event_Argument_Time = uint ; Timestamp | |||
| SUIT_Wait_Event_Argument_Time_Of_Day = uint ; Time of Day | SUIT_Wait_Event_Argument_Time_Of_Day = uint ; Time of Day | |||
| ; (seconds since 00:00:00) | ; (seconds since 00:00:00) | |||
| SUIT_Wait_Event_Argument_Day_Of_Week = uint ; Days since Sunday | SUIT_Wait_Event_Argument_Day_Of_Week = uint ; Days since Sunday | |||
| 9.12.14. suit-directive-run-sequence | 9.8.4.12. suit-directive-run-sequence | |||
| To enable conditional commands, and to allow several strictly ordered | To enable conditional commands, and to allow several strictly ordered | |||
| sequences to be executed out-of-order, suit-directive-run-sequence | sequences to be executed out-of-order, suit-directive-run-sequence | |||
| allows the manifest processor to execute its argument as a | allows the manifest processor to execute its argument as a | |||
| SUIT_Command_Sequence. The argument must be wrapped in a bstr. | SUIT_Command_Sequence. The argument must be wrapped in a bstr. | |||
| When a sequence is executed, any failure of a condition causes | When a sequence is executed, any failure of a condition causes | |||
| immediate termination of the sequence. | immediate termination of the sequence. | |||
| The following CDDL describes the SUIT_Run_Sequence argument. | The following CDDL describes the SUIT_Run_Sequence argument. | |||
| skipping to change at page 49, line 5 ¶ | skipping to change at page 48, line 5 ¶ | |||
| When suit-directive-run-sequence completes, it forwards the last | When suit-directive-run-sequence completes, it forwards the last | |||
| status code that occurred in the sequence. If the Soft Failure | status code that occurred in the sequence. If the Soft Failure | |||
| parameter is true, then suit-directive-run-sequence only fails when a | parameter is true, then suit-directive-run-sequence only fails when a | |||
| directive in the argument sequence fails. | directive in the argument sequence fails. | |||
| SUIT_Parameter_Soft_Failure defaults to False when suit-directive- | SUIT_Parameter_Soft_Failure defaults to False when suit-directive- | |||
| run-sequence begins. Its value is discarded when suit-directive-run- | run-sequence begins. Its value is discarded when suit-directive-run- | |||
| sequence terminates. | sequence terminates. | |||
| 9.12.15. suit-directive-swap | 9.8.4.13. suit-directive-swap | |||
| suit-directive-swap instructs the manifest processor to move the | suit-directive-swap instructs the manifest processor to move the | |||
| source to the destination and the destination to the source | source to the destination and the destination to the source | |||
| simultaneously. Swap has nearly identical semantics to suit- | simultaneously. Swap has nearly identical semantics to suit- | |||
| directive-copy except that suit-directive-swap replaces the source | directive-copy except that suit-directive-swap replaces the source | |||
| with the current contents of the destination in an application- | with the current contents of the destination in an application- | |||
| defined way. If SUIT_Parameter_Compression_Info or | defined way. If SUIT_Parameter_Compression_Info or | |||
| SUIT_Parameter_Encryption_Info are present, they must be handled in a | SUIT_Parameter_Encryption_Info are present, they must be handled in a | |||
| symmetric way, so that the source is decompressed into the | symmetric way, so that the source is decompressed into the | |||
| destination and the destination is compressed into the source. The | destination and the destination is compressed into the source. The | |||
| source is decrypted into the destination and the destination is | source is decrypted into the destination and the destination is | |||
| encrypted into the source. suit-directive-swap is OPTIONAL to | encrypted into the source. suit-directive-swap is OPTIONAL to | |||
| implement. | implement. | |||
| 9.12.15.1. SUIT_Directive CDDL | 9.8.4.14. SUIT_Directive CDDL | |||
| The following CDDL describes SUIT_Directive: | The following CDDL describes SUIT_Directive: | |||
| SUIT_Directive //= (suit-directive-set-component-index, uint/bool) | SUIT_Directive //= (suit-directive-set-component-index, uint/bool) | |||
| SUIT_Directive //= (suit-directive-set-dependency-index, uint/bool) | SUIT_Directive //= (suit-directive-set-dependency-index, uint/bool) | |||
| SUIT_Directive //= (suit-directive-run-sequence, | SUIT_Directive //= (suit-directive-run-sequence, | |||
| bstr .cbor SUIT_Command_Sequence) | bstr .cbor SUIT_Command_Sequence) | |||
| SUIT_Directive //= (suit-directive-try-each, | SUIT_Directive //= (suit-directive-try-each, | |||
| SUIT_Directive_Try_Each_Argument) | SUIT_Directive_Try_Each_Argument) | |||
| SUIT_Directive //= (suit-directive-process-dependency, nil) | SUIT_Directive //= (suit-directive-process-dependency, nil) | |||
| skipping to change at page 51, line 5 ¶ | skipping to change at page 50, line 5 ¶ | |||
| SUIT_Wait_Event_Argument_Network = int ; Network State | SUIT_Wait_Event_Argument_Network = int ; Network State | |||
| SUIT_Wait_Event_Argument_Other_Device_Version = [ | SUIT_Wait_Event_Argument_Other_Device_Version = [ | |||
| other-device: bstr, | other-device: bstr, | |||
| other-device-version: [+int] | other-device-version: [+int] | |||
| ] | ] | |||
| SUIT_Wait_Event_Argument_Time = uint ; Timestamp | SUIT_Wait_Event_Argument_Time = uint ; Timestamp | |||
| SUIT_Wait_Event_Argument_Time_Of_Day = uint ; Time of Day | SUIT_Wait_Event_Argument_Time_Of_Day = uint ; Time of Day | |||
| ; (seconds since 00:00:00) | ; (seconds since 00:00:00) | |||
| SUIT_Wait_Event_Argument_Day_Of_Week = uint ; Days since Sunday | SUIT_Wait_Event_Argument_Day_Of_Week = uint ; Days since Sunday | |||
| 9.13. SUIT_Text_Map | 9.9. SUIT_Manifest CDDL | |||
| The SUIT_Text_Map contains all text descriptions needed for this | The following CDDL fragment defines the manifest. | |||
| manifest. The text section is typically severable, allowing | ||||
| manifests to be distributed without the text, since end-nodes do not | ||||
| require text. The meaning of each field is described below. | ||||
| Each section MAY be present. If present, each section MUST be as | SUIT_Manifest = { | |||
| described. Negative integer IDs are reserved for application- | suit-manifest-version => 1, | |||
| specific text values. | suit-manifest-sequence-number => uint, | |||
| suit-common => bstr .cbor SUIT_Common, | ||||
| ? suit-reference-uri => #6.32(tstr), | ||||
| * $$SUIT_Severable_Command_Sequences, | ||||
| * $$SUIT_Command_Sequences, | ||||
| * $$SUIT_Protected_Elements, | ||||
| } | ||||
| +---------------------------------+---------------------------------+ | $$SUIT_Severable_Command_Sequences //= (suit-dependency-resolution => | |||
| | CDDL Structure | Description | | SUIT_Severable_Command_Segment) | |||
| +---------------------------------+---------------------------------+ | $$SUIT_Severable_Command_Segments //= (suit-payload-fetch => | |||
| | suit-text-manifest-description | Free text description of the | | SUIT_Severable_Command_Sequence) | |||
| | | manifest | | $$SUIT_Severable_Command_Segments //= (suit-install => | |||
| | | | | SUIT_Severable_Command_Sequence) | |||
| | suit-text-update-description | Free text description of the | | ||||
| | | update | | SUIT_Severable_Command_Sequence = | |||
| | | | | SUIT_Digest / bstr .cbor SUIT_Command_Sequence | |||
| | suit-text-vendor-name | Free text vendor name | | ||||
| | | | | $$SUIT_Command_Sequences //= ( suit-validate => | |||
| | suit-text-model-name | Free text model name | | bstr .cbor SUIT_Command_Sequence ) | |||
| | | | | $$SUIT_Command_Sequences //= ( suit-load => | |||
| | suit-text-vendor-domain | The domain used to create the | | bstr .cbor SUIT_Command_Sequence ) | |||
| | | vendor-id condition | | $$SUIT_Command_Sequences //= ( suit-run => | |||
| | | | | bstr .cbor SUIT_Command_Sequence ) | |||
| | suit-text-model-info | The information used to create | | ||||
| | | the class-id condition | | $$SUIT_Protected_Elements //= ( suit-text => SUIT_Digest ) | |||
| | | | | $$SUIT_Protected_Elements //= ( suit-coswid => SUIT_Digest ) | |||
| | suit-text-component-description | Free text description of each | | ||||
| | | component in the manifest | | SUIT_Common = { | |||
| | | | | ? suit-dependencies => bstr .cbor SUIT_Dependencies, | |||
| | suit-text-manifest-json-source | The JSON-formatted document | | ? suit-components => bstr .cbor SUIT_Components, | |||
| | | that was used to create the | | ? suit-dependency-components | |||
| | | manifest | | => bstr .cbor SUIT_Component_References, | |||
| | | | | ? suit-common-sequence => bstr .cbor SUIT_Command_Sequence, | |||
| | suit-text-manifest-yaml-source | The yaml-formatted document | | } | |||
| | | that was used to create the | | ||||
| | | manifest | | ||||
| | | | | ||||
| | suit-text-version-dependencies | List of component versions | | ||||
| | | required by the manifest | | ||||
| +---------------------------------+---------------------------------+ | ||||
| 10. Access Control Lists | 10. Access Control Lists | |||
| To manage permissions in the manifest, there are three models that | To manage permissions in the manifest, there are three models that | |||
| can be used. | can be used. | |||
| First, the simplest model requires that all manifests are | First, the simplest model requires that all manifests are | |||
| authenticated by a single trusted key. This mode has the advantage | authenticated by a single trusted key. This mode has the advantage | |||
| that only a root manifest needs to be authenticated, since all of its | that only a root manifest needs to be authenticated, since all of its | |||
| dependencies have digests included in the root manifest. | dependencies have digests included in the root manifest. | |||
| skipping to change at page 58, line 4 ¶ | skipping to change at page 57, line 4 ¶ | |||
| | 26 | Minimum Battery | | | 26 | Minimum Battery | | |||
| | | | | | | | | |||
| | 27 | Update Authorized | | | 27 | Update Authorized | | |||
| | | | | | | | | |||
| | 28 | Version | | | 28 | Version | | |||
| | | | | | | | | |||
| | nint | Custom Condition | | | nint | Custom Condition | | |||
| +-------+-------------------+ | +-------+-------------------+ | |||
| 13.3. SUIT Parameters | 13.3. SUIT Parameters | |||
| +-------+------------------+--------------------+ | +-------+------------------+ | |||
| | Label | Name | | | | Label | Name | | |||
| +-------+------------------+--------------------+ | +-------+------------------+ | |||
| | 1 | Vendor ID | | | | 1 | Vendor ID | | |||
| | | | | | | | | | |||
| | 2 | Class ID | | | | 2 | Class ID | | |||
| | | | | | | | | | |||
| | 3 | Image Digest | | | | 3 | Image Digest | | |||
| | | | | | | | | | |||
| | 4 | Use Before | | | | 4 | Use Before | | |||
| | | | | | | | | | |||
| | 5 | Component Offset | | | | 5 | Component Offset | | |||
| | | | | | | | | | |||
| | 12 | Strict Order | | | | 12 | Strict Order | | |||
| | | | | | | | | | |||
| | 13 | Soft Failure | | | | 13 | Soft Failure | | |||
| | | | | | | | | | |||
| | 14 | Image Size | | | | 14 | Image Size | | |||
| | | | | | | | | | |||
| | 18 | Encryption Info | | | | 18 | Encryption Info | | |||
| | | | | | | | | | |||
| | 19 | Compression Info | | | | 19 | Compression Info | | |||
| | | | | | | | | | |||
| | 20 | Unpack Info | | | | 20 | Unpack Info | | |||
| | | | | | | | | | |||
| | 21 | URI | suit-parameter-uri | | | 21 | URI | | |||
| | | | | | | | | | |||
| | 22 | Source Component | | | | 22 | Source Component | | |||
| | | | | | | | | | |||
| | 23 | Run Args | | | | 23 | Run Args | | |||
| | | | | | | | | | |||
| | 24 | Device ID | | | | 24 | Device ID | | |||
| | | | | | | | | | |||
| | 26 | Minimum Battery | | | | 26 | Minimum Battery | | |||
| | | | | | | | | | |||
| | 27 | Update Priority | | | | 27 | Update Priority | | |||
| | | | | | | | | | |||
| | 28 | Version | | | | 28 | Version | | |||
| | | | | | | | | | |||
| | 29 | Wait Info | | | | 29 | Wait Info | | |||
| | | | | | | | | | |||
| | 30 | URI List | | | | 30 | URI List | | |||
| | | | | | | | | | |||
| | nint | Custom | | | | nint | Custom | | |||
| +-------+------------------+--------------------+ | +-------+------------------+ | |||
| 13.4. SUIT Text Values | 13.4. SUIT Text Values | |||
| +-------+--------------------------------+ | +-------+--------------------------------+ | |||
| | Label | Name | | | Label | Name | | |||
| +-------+--------------------------------+ | +-------+--------------------------------+ | |||
| | 1 | Manifest Description | | | 1 | Manifest Description | | |||
| | | | | | | | | |||
| | 2 | Update Description | | | 2 | Update Description | | |||
| | | | | | | | | |||
| skipping to change at page 61, line 28 ¶ | skipping to change at page 60, line 28 ¶ | |||
| [ELF] Wikipedia, ., "Executable and Linkable Format (ELF)", | [ELF] Wikipedia, ., "Executable and Linkable Format (ELF)", | |||
| 2020, <https://en.wikipedia.org/wiki/ | 2020, <https://en.wikipedia.org/wiki/ | |||
| Executable_and_Linkable_Format>. | Executable_and_Linkable_Format>. | |||
| [HEX] Wikipedia, ., "Intel HEX", 2020, | [HEX] Wikipedia, ., "Intel HEX", 2020, | |||
| <https://en.wikipedia.org/wiki/Intel_HEX>. | <https://en.wikipedia.org/wiki/Intel_HEX>. | |||
| [I-D.ietf-suit-architecture] | [I-D.ietf-suit-architecture] | |||
| Moran, B., Tschofenig, H., Brown, D., and M. Meriac, "A | Moran, B., Tschofenig, H., Brown, D., and M. Meriac, "A | |||
| Firmware Update Architecture for Internet of Things", | Firmware Update Architecture for Internet of Things", | |||
| draft-ietf-suit-architecture-09 (work in progress), May | draft-ietf-suit-architecture-11 (work in progress), May | |||
| 2020. | 2020. | |||
| [I-D.ietf-suit-information-model] | [I-D.ietf-suit-information-model] | |||
| Moran, B., Tschofenig, H., and H. Birkholz, "An | Moran, B., Tschofenig, H., and H. Birkholz, "An | |||
| Information Model for Firmware Updates in IoT Devices", | Information Model for Firmware Updates in IoT Devices", | |||
| draft-ietf-suit-information-model-05 (work in progress), | draft-ietf-suit-information-model-06 (work in progress), | |||
| January 2020. | June 2020. | |||
| [I-D.ietf-teep-architecture] | [I-D.ietf-teep-architecture] | |||
| Pei, M., Tschofenig, H., Thaler, D., and D. Wheeler, | Pei, M., Tschofenig, H., Thaler, D., and D. Wheeler, | |||
| "Trusted Execution Environment Provisioning (TEEP) | "Trusted Execution Environment Provisioning (TEEP) | |||
| Architecture", draft-ietf-teep-architecture-08 (work in | Architecture", draft-ietf-teep-architecture-08 (work in | |||
| progress), April 2020. | progress), April 2020. | |||
| [I-D.kucherawy-rfc8478bis] | [I-D.kucherawy-rfc8478bis] | |||
| Collet, Y. and M. Kucherawy, "Zstandard Compression and | Collet, Y. and M. Kucherawy, "Zstandard Compression and | |||
| the application/zstd Media Type", draft-kucherawy- | the application/zstd Media Type", draft-kucherawy- | |||
| skipping to change at page 62, line 9 ¶ | skipping to change at page 61, line 9 ¶ | |||
| [RFC1950] Deutsch, P. and J-L. Gailly, "ZLIB Compressed Data Format | [RFC1950] Deutsch, P. and J-L. Gailly, "ZLIB Compressed Data Format | |||
| Specification version 3.3", RFC 1950, | Specification version 3.3", RFC 1950, | |||
| DOI 10.17487/RFC1950, May 1996, | DOI 10.17487/RFC1950, May 1996, | |||
| <https://www.rfc-editor.org/info/rfc1950>. | <https://www.rfc-editor.org/info/rfc1950>. | |||
| [RFC7932] Alakuijala, J. and Z. Szabadka, "Brotli Compressed Data | [RFC7932] Alakuijala, J. and Z. Szabadka, "Brotli Compressed Data | |||
| Format", RFC 7932, DOI 10.17487/RFC7932, July 2016, | Format", RFC 7932, DOI 10.17487/RFC7932, July 2016, | |||
| <https://www.rfc-editor.org/info/rfc7932>. | <https://www.rfc-editor.org/info/rfc7932>. | |||
| [RFC8392] Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, | ||||
| "CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392, | ||||
| May 2018, <https://www.rfc-editor.org/info/rfc8392>. | ||||
| [SREC] Wikipedia, ., "SREC (file format)", 2020, | [SREC] Wikipedia, ., "SREC (file format)", 2020, | |||
| <https://en.wikipedia.org/wiki/SREC_(file_format)>. | <https://en.wikipedia.org/wiki/SREC_(file_format)>. | |||
| 17.3. URIs | 17.3. URIs | |||
| [1] mailto:suit@ietf.org | [1] mailto:suit@ietf.org | |||
| [2] https://www1.ietf.org/mailman/listinfo/suit | [2] https://www1.ietf.org/mailman/listinfo/suit | |||
| [3] https://www.ietf.org/mail-archive/web/suit/current/index.html | [3] https://www.ietf.org/mail-archive/web/suit/current/index.html | |||
| skipping to change at page 91, line 5 ¶ | skipping to change at page 90, line 5 ¶ | |||
| benefits allows even a highly constrained platform to use advanced | benefits allows even a highly constrained platform to use advanced | |||
| update capabilities. | update capabilities. | |||
| D. Implementation Confirmance Matrix | D. Implementation Confirmance Matrix | |||
| This section summarizes the functionality a minimal implementation | This section summarizes the functionality a minimal implementation | |||
| needs to offer to claim conformance to this specification. | needs to offer to claim conformance to this specification. | |||
| The subsequent table shows the conditions. | The subsequent table shows the conditions. | |||
| +-------------------+------------------+----------------+ | +-------------------+-----------------+----------------+ | |||
| | Name | Reference | Implementation | | | Name | Reference | Implementation | | |||
| +-------------------+------------------+----------------+ | +-------------------+-----------------+----------------+ | |||
| | Vendor Identifier | Section 9.12.1.1 | REQUIRED | | | Vendor Identifier | Section 9.8.3.1 | REQUIRED | | |||
| | | | | | | | | | | |||
| | Class Identifier | Section 9.12.1.1 | REQUIRED | | | Class Identifier | Section 9.8.3.1 | REQUIRED | | |||
| | | | | | | | | | | |||
| | Device Identifier | Section 9.12.1.1 | OPTIONAL | | | Device Identifier | Section 9.8.3.1 | OPTIONAL | | |||
| | | | | | | | | | | |||
| | Image Match | Section 9.12.1.2 | REQUIRED | | | Image Match | Section 9.8.3.2 | REQUIRED | | |||
| | | | | | | | | | | |||
| | Image Not Match | Section 9.12.1.3 | OPTIONAL | | | Image Not Match | Section 9.8.3.3 | OPTIONAL | | |||
| | | | | | | | | | | |||
| | Use Before | Section 9.12.1.4 | OPTIONAL | | | Use Before | Section 9.8.3.4 | OPTIONAL | | |||
| | | | | | | | | | | |||
| | Component Offset | Section 9.12.1.5 | OPTIONAL | | | Component Offset | Section 9.8.3.5 | OPTIONAL | | |||
| | | | | | | | | | | |||
| | Minimum Battery | Section 9.12.1.6 | OPTIONAL | | | Minimum Battery | Section 9.8.3.6 | OPTIONAL | | |||
| | | | | | | | | | | |||
| | Update Authorized | Section 9.12.1.7 | OPTIONAL | | | Update Authorized | Section 9.8.3.7 | OPTIONAL | | |||
| | | | | | | | | | | |||
| | Version | Section 9.12.1.8 | OPTIONAL | | | Version | Section 9.8.3.8 | OPTIONAL | | |||
| | | | | | | | | | | |||
| | Custom Condition | Section 9.12.1.9 | OPTIONAL | | | Custom Condition | Section 9.8.3.9 | OPTIONAL | | |||
| +-------------------+------------------+----------------+ | +-------------------+-----------------+----------------+ | |||
| The subsequent table shows the directives. | The subsequent table shows the directives. | |||
| +-------------------+---------------+-------------------------------+ | +-------------------+----------------+------------------------------+ | |||
| | Name | Reference | Implementation | | | Name | Reference | Implementation | | |||
| +-------------------+---------------+-------------------------------+ | +-------------------+----------------+------------------------------+ | |||
| | Set Component | Section | REQUIRED if more than one | | | Set Component | Section | REQUIRED if more than one | | |||
| | Index | 9.12.3 | component | | | Index | 9.8.4.1 | component | | |||
| | | | | | | | | | | |||
| | Set Dependency | Section | REQUIRED if dependencies used | | | Set Dependency | Section | REQUIRED if dependencies | | |||
| | Index | 9.12.4 | | | | Index | 9.8.4.2 | used | | |||
| | | | | | | | | | | |||
| | Abort | Section | OPTIONAL | | | Abort | Section | OPTIONAL | | |||
| | | 9.12.5 | | | | | 9.8.4.3 | | | |||
| | | | | | | | | | | |||
| | Try Each | Section | OPTIONAL | | | Try Each | Section | OPTIONAL | | |||
| | | 9.12.6 | | | | | 9.8.4.4 | | | |||
| | | | | | | | | | | |||
| | Process | Section | OPTIONAL | | | Process | Section | OPTIONAL | | |||
| | Dependency | 9.12.7 | | | | Dependency | 9.8.4.5 | | | |||
| | | | | | | | | | | |||
| | Set Parameters | Section | OPTIONAL | | | Set Parameters | Section | OPTIONAL | | |||
| | | 9.12.8 | | | | | 9.8.4.6 | | | |||
| | | | | | | | | | | |||
| | Override | Section | REQUIRED | | | Override | Section | REQUIRED | | |||
| | Parameters | 9.12.9 | | | | Parameters | 9.8.4.7 | | | |||
| | | | | | | | | | | |||
| | Fetch | Section | REQUIRED for Updater | | | Fetch | Section | REQUIRED for Updater | | |||
| | | 9.12.10 | | | | | 9.8.4.8 | | | |||
| | | | | | | | | | | |||
| | Copy | Section | OPTIONAL | | | Copy | Section | OPTIONAL | | |||
| | | 9.12.11 | | | | | 9.8.4.9 | | | |||
| | | | | | | | | | | |||
| | Run | Section | REQUIRED for Bootloader | | | Run | Section | REQUIRED for Bootloader | | |||
| | | 9.12.12 | | | | | 9.8.4.10 | | | |||
| | | | | | | | | | | |||
| | Wait For Event | Section | OPTIONAL | | | Wait For Event | Section | OPTIONAL | | |||
| | | 9.12.13 | | | | | 9.8.4.11 | | | |||
| | | | | | | | | | | |||
| | Run Sequence | Section | OPTIONAL | | | Run Sequence | Section | OPTIONAL | | |||
| | | 9.12.14 | | | | | 9.8.4.12 | | | |||
| | | | | | | | | | | |||
| | Swap | Section | OPTIONAL | | | Swap | Section | OPTIONAL | | |||
| | | 9.12.15 | | | | | 9.8.4.13 | | | |||
| +-------------------+---------------+-------------------------------+ | +-------------------+----------------+------------------------------+ | |||
| TThe subsequent table shows the parameters | TThe subsequent table shows the parameters | |||
| +------------------+-----------------+----------------+ | +------------------+------------------+----------------+ | |||
| | Name | Reference | Implementation | | | Name | Reference | Implementation | | |||
| +------------------+-----------------+----------------+ | +------------------+------------------+----------------+ | |||
| | Vendor ID | Section 9.11.1 | TBD | | | Vendor ID | Section 9.8.2.1 | TBD | | |||
| | | | | | | | | | | |||
| | Class ID | Section 9.11.2 | TBD | | | Class ID | Section 9.8.2.2 | TBD | | |||
| | | | | | | | | | | |||
| | Image Digest | Section 9.11.3 | TBD | | | Image Digest | Section 9.8.2.3 | TBD | | |||
| | | | | | | | | | | |||
| | Image Size | Section 9.11.4 | TBD | | | Image Size | Section 9.8.2.4 | TBD | | |||
| | | | | | | | | | | |||
| | Use Before | Section 9.11.5 | TBD | | | Use Before | Section 9.8.2.5 | TBD | | |||
| | | | | | | | | | | |||
| | Component Offset | Section 9.11.6 | TBD | | | Component Offset | Section 9.8.2.6 | TBD | | |||
| | | | | | | | | | | |||
| | Encryption Info | Section 9.11.7 | TBD | | | Encryption Info | Section 9.8.2.7 | TBD | | |||
| | | | | | | | | | | |||
| | Compression Info | Section 9.11.8 | TBD | | | Compression Info | Section 9.8.2.8 | TBD | | |||
| | | | | | | | | | | |||
| | Unpack Info | Section 9.11.9 | TBD | | | Unpack Info | Section 9.8.2.9 | TBD | | |||
| | | | | | | | | | | |||
| | URI | Section 9.11.10 | TBD | | | URI | Section 9.8.2.10 | TBD | | |||
| | | | | | | | | | | |||
| | Source Component | Section 9.11.11 | TBD | | | Source Component | Section 9.8.2.11 | TBD | | |||
| | | | | | | | | | | |||
| | Run Args | Section 9.11.12 | TBD | | | Run Args | Section 9.8.2.12 | TBD | | |||
| | | | | | | | | | | |||
| | Device ID | Section 9.11.13 | TBD | | | Device ID | Section 9.8.2.13 | TBD | | |||
| | | | | | | | | | | |||
| | Minimum Battery | Section 9.11.14 | TBD | | | Minimum Battery | Section 9.8.2.14 | TBD | | |||
| | | | | | | | | | | |||
| | Update Priority | Section 9.11.15 | TBD | | | Update Priority | Section 9.8.2.15 | TBD | | |||
| | | | | | | | | | | |||
| | Version | Section 9.11.16 | TBD | | | Version | Section 9.8.2.16 | TBD | | |||
| | | | | | | | | | | |||
| | Wait Info | Section 9.11.17 | TBD | | | Wait Info | Section 9.8.2.17 | TBD | | |||
| | | | | | | | | | | |||
| | URI List | Section 9.11.18 | TBD | | | URI List | Section 9.8.2.18 | TBD | | |||
| | | | | | | | | | | |||
| | Strict Order | Section 9.11.19 | TBD | | | Strict Order | Section 9.8.2.19 | TBD | | |||
| | | | | | | | | | | |||
| | Soft Failure | Section 9.11.20 | TBD | | | Soft Failure | Section 9.8.2.20 | TBD | | |||
| | | | | | | | | | | |||
| | Custom | Section 9.11.21 | TBD | | | Custom | Section 9.8.2.21 | TBD | | |||
| +------------------+-----------------+----------------+ | +------------------+------------------+----------------+ | |||
| Authors' Addresses | Authors' Addresses | |||
| Brendan Moran | Brendan Moran | |||
| Arm Limited | Arm Limited | |||
| EMail: Brendan.Moran@arm.com | EMail: Brendan.Moran@arm.com | |||
| Hannes Tschofenig | Hannes Tschofenig | |||
| Arm Limited | Arm Limited | |||
| End of changes. 162 change blocks. | ||||
| 635 lines changed or deleted | 584 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||