<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.19 (Ruby 2.5.1) -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc rfcedstyle="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>
<?rfc toc_levels="4"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-suit-manifest-32" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.46.0 -->
  <front>
    <title abbrev="CBOR-based SUIT Manifest">A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-suit-manifest-32"/>
    <author initials="B." surname="Moran" fullname="Brendan Moran">
      <organization>Arm Limited</organization>
      <address>
        <email>brendan.moran.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization/>
      <address>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization>Fraunhofer SIT</organization>
      <address>
        <email>henk.birkholz@sit.fraunhofer.de</email>
      </address>
    </author>
    <author initials="K." surname="Zandberg" fullname="Koen Zandberg">
      <organization>Inria</organization>
      <address>
        <email>koen.zandberg@inria.fr</email>
      </address>
    </author>
    <author initials="Ø." surname="Rønningstad" fullname="Øyvind Rønningstad">
      <organization>Nordic Semiconductor</organization>
      <address>
        <email>oyvind.ronningstad@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="December" day="09"/>
    <area>Security</area>
    <workgroup>SUIT</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 92?>
<t>This specification describes the format of a manifest.  A manifest is
a bundle of metadata about code/data obtained by a recipient (chiefly
the firmware for an Internet of Things (IoT) device), where to find the code/data, the
devices to which it applies, and cryptographic information protecting
the manifest. Software updates and Trusted Invocation both tend to use
sequences of common operations, so the manifest encodes those sequences
of operations, rather than declaring the metadata.</t>
    </abstract>
  </front>
  <middle>
    <?line 101?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>A firmware update mechanism is an essential security feature for IoT devices to deal with vulnerabilities. The transport of firmware images to the devices themselves is important security aspect. Luckily, there are already various device management solutions available offering the distribution of firmware images to IoT devices. Equally important is the 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-end security protection to detect modifications and (optionally) to make reverse engineering more difficult. Firmware signing allows the author, who builds the firmware image, to be sure that no other party (including potential adversaries) can install firmware updates on IoT devices without adequate privileges. For confidentiality protected firmware images it is additionally required to encrypt the firmware image and to distribute the content encryption key securely. The support for firmware and payload encryption via the SUIT manifest format is described in a companion document <xref target="I-D.ietf-suit-firmware-encryption"/>. Starting security protection at the author is a risk mitigation technique so firmware images and manifests can be stored on untrusted repositories; it also reduces the scope of a compromise of any repository or intermediate system to be no worse than a denial of service.</t>
      <t>A manifest is a bundle of metadata about the firmware for an IoT device, where to
find the firmware, and the devices to which it applies.</t>
      <t>This specification defines the SUIT manifest format.
It is intended to meet several goals:</t>
      <ul spacing="normal">
        <li>Meet the requirements defined in <xref target="RFC9124"/>.</li>
        <li>Simple to parse on a constrained node.</li>
        <li>Simple to process on a constrained node.</li>
        <li>Compact encoding.</li>
        <li>Comprehensible by an intermediate system.</li>
        <li>Expressive enough to enable advanced use cases on advanced nodes.</li>
        <li>Extensible.</li>
      </ul>
      <t>The SUIT manifest can be used for a variety of purposes throughout its lifecycle, such as:</t>
      <ul spacing="normal">
        <li>a Network Operator to reason about compatibility of a firmware, such as timing and acceptance of firmware updates.</li>
        <li>a Device Operator to reason about the impact of a firmware.</li>
        <li>a device to reason about the authority &amp; authenticity of a firmware prior to installation.</li>
        <li>a device to reason about the applicability of a firmware.</li>
        <li>a device to reason about the installation of a firmware.</li>
        <li>a device to reason about the authenticity &amp; encoding of a firmware at boot.</li>
      </ul>
      <t>Each of these uses happens at a different stage of the manifest lifecycle, so each has different requirements.</t>
      <t>It is assumed that the reader is familiar with the high-level firmware update architecture <xref target="RFC9019"/> and the threats, requirements, and user stories in <xref target="RFC9124"/>.</t>
      <t>The design of this specification is based on an observation that the vast majority of operations that a device can perform during an update or Trusted Invocation are composed of a small group of operations:</t>
      <ul spacing="normal">
        <li>Copy some data from one place to another</li>
        <li>Transform some data</li>
        <li>Digest some data and compare to an expected value</li>
        <li>Compare some system parameters to an expected value</li>
        <li>Run some code</li>
      </ul>
      <t>In this document, these operations are called commands. Commands are classed as either conditions or directives. Conditions have no side-effects, while directives do have side-effects. Conceptually, a sequence of commands is like a script but the language is tailored to software updates and Trusted Invocation.</t>
      <t>The available commands support simple steps, such as copying a firmware image from one place to another, checking that a firmware image is correct, verifying that the specified firmware is the correct firmware for the device, or unpacking a firmware. By using these steps in different orders and changing the parameters they use, a broad range of use cases can be supported. The SUIT manifest uses this observation to optimize metadata for consumption by constrained devices.</t>
      <t>While the SUIT manifest is informed by and optimized for firmware update and Trusted Invocation use cases, there is nothing in the SUIT Information Model <xref target="RFC9124"/> that restricts its use to only those use cases. Other use cases include the management of trusted applications (TAs) in a Trusted Execution Environment (TEE), as discussed in <xref target="RFC9397"/>.</t>
    </section>
    <section anchor="conventions-and-terminology">
      <name>Conventions and Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>Additionally, the following terminology is used throughout this document:</t>
      <ul spacing="normal">
        <li>SUIT: Software Update for the Internet of Things, also the IETF working group for this standard.</li>
        <li>Payload: A piece of information to be delivered. Typically Firmware for the purposes of SUIT.</li>
        <li>Resource: A piece of information that is used to construct a payload.</li>
        <li>Manifest: A manifest is a bundle of metadata about the firmware for an IoT device, where to
find the firmware, and the devices to which it applies.</li>
        <li>Envelope: A container with the manifest, an authentication wrapper with cryptographic information protecting the manifest, authorization information, and severable elements. Severable elements can be removed from the manifest without impacting its security, see <xref target="severable-fields"/>.</li>
        <li>Update: One or more manifests that describe one or more payloads.</li>
        <li>Update Authority: The owner of a cryptographic key used to sign updates, trusted by Recipients.</li>
        <li>Recipient: The system, typically an IoT device, that receives and processes a manifest.</li>
        <li>Manifest Processor: A component of the Recipient that consumes Manifests and executes the commands in the Manifest.</li>
        <li>Component: An updatable logical block of the Firmware, Software, configuration, or data of the Recipient.</li>
        <li>Component Set: A group of interdependent Components that must be updated simultaneously.</li>
        <li>Command: A Condition or a Directive.</li>
        <li>Condition: A test for a property of the Recipient or its Components.</li>
        <li>Directive: An action for the Recipient to perform.</li>
        <li>Trusted Invocation: A process by which a system ensures that only trusted code is executed, for example secure boot or launching a Trusted Application.</li>
        <li>A/B images: Dividing a Recipient's storage into two or more bootable images, at different offsets, such that the active image can write to the inactive image(s).</li>
        <li>Record: The result of a Command and any metadata about it.</li>
        <li>Report: A list of Records.</li>
        <li>Procedure: The process of invoking one or more sequences of commands.</li>
        <li>Update Procedure: A procedure that updates a Recipient by fetching dependencies and images, and installing them.</li>
        <li>Invocation Procedure: A procedure in which a Recipient verifies dependencies and images, loading images, and invokes one or more image.</li>
        <li>Software: Instructions and data that allow a Recipient to perform a useful function.</li>
        <li>Firmware: Software that is typically changed infrequently, stored in nonvolatile memory, and small enough to apply to <xref target="RFC7228"/> Class 0-2 devices.</li>
        <li>Image: Information that a Recipient uses to perform its function, typically firmware/software, configuration, or resource data such as text or images. Also, a Payload, once installed is an Image.</li>
        <li>Slot: One of several possible storage locations for a given Component, typically used in A/B image systems</li>
        <li>Abort: An event in which the Manifest Processor immediately halts execution of the current Procedure. It creates a Record of an error condition.</li>
        <li>Pull parser: A parser that traverses the data and extracts information on an as-needed basis.</li>
        <li>Severable element: An element of the manifest that supports elision of hashed data. If a hash of the data is included in the manifest and the data is included in the envelope, then that data may be elided.</li>
      </ul>
    </section>
    <section anchor="how-to-use-this-document">
      <name>How to use this Document</name>
      <t>This specification covers five aspects of firmware update:</t>
      <ul spacing="normal">
        <li>
          <xref target="background"/> describes the device constraints, use cases, and design principles that informed the structure of the manifest.</li>
        <li>
          <xref target="metadata-structure-overview"/> gives a general overview of the metadata structure to inform the following sections</li>
        <li>
          <xref target="interpreter-behavior"/> describes what actions a Manifest processor should take.</li>
        <li>
          <xref target="creating-manifests"/> describes the process of creating a Manifest.</li>
        <li>
          <xref target="metadata-structure"/> specifies the content of the Envelope and the Manifest.</li>
      </ul>
      <t>To implement an updatable device, see <xref target="interpreter-behavior"/> and <xref target="metadata-structure"/>.
To implement a tool that generates updates, see <xref target="creating-manifests"/> and <xref target="metadata-structure"/>.</t>
      <t>The IANA consideration section, see <xref target="iana"/>, provides instructions to IANA to create several registries. This section also provides the CBOR labels for the structures defined in this document.</t>
      <t>The complete CDDL (<xref target="RFC8610"/>) definition is provided in <xref target="full-cddl"/>, examples are given in <xref target="examples"/> and a design rationale is offered in <xref target="design-rationale"/>. Finally, <xref target="implementation-matrix"/> summarizes the mandatory-to-implement features of this specification.</t>
      <t>Additional specifications describe functionality needed to implement all of the requirements of <xref target="RFC9124"/>, such as:</t>
      <ul spacing="normal">
        <li>Firmware encryption <xref target="I-D.ietf-suit-firmware-encryption"/></li>
        <li>Update management <xref target="I-D.ietf-suit-update-management"/></li>
        <li>Dependency manifests <xref target="I-D.ietf-suit-trust-domains"/></li>
        <li>Secure reporting of the update status <xref target="I-D.ietf-suit-report"/></li>
      </ul>
      <t>A technique to compress firmware images may be standardized in the future.</t>
    </section>
    <section anchor="background">
      <name>Background</name>
      <t>Distributing software updates to diverse devices with diverse trust anchors in a coordinated system presents unique challenges. Devices have a broad set of constraints, requiring different metadata to make appropriate decisions. There may be many actors in production IoT systems, each of whom has some authority. Distributing firmware in such a multi-party environment presents additional challenges. Each party requires a different subset of data. Some data may not be accessible to all parties. Multiple signatures may be required from parties with different authorities. This topic is covered in more depth in <xref target="RFC9019"/>. The security aspects are described in <xref target="RFC9124"/>.</t>
      <section anchor="iot-firmware-update-constraints">
        <name>IoT Firmware Update Constraints</name>
        <t>The various constraints of IoT devices and the range of use cases that need to be supported create a broad set of requirements. For example, devices with:</t>
        <ul spacing="normal">
          <li>limited processing power and storage may require a simple representation of metadata.</li>
          <li>bandwidth constraints may require firmware compression or partial update support.</li>
          <li>bootloader complexity constraints may require simple selection between two bootable images.</li>
          <li>small internal storage may require external storage support.</li>
          <li>multiple microcontrollers may require coordinated update of all applications.</li>
          <li>large storage and complex functionality may require parallel update of many software components.</li>
          <li>extra information may need to be conveyed in the manifest in the earlier stages of the device lifecycle before those data items are stripped when the manifest is delivered to a constrained device.</li>
        </ul>
        <t>Supporting the requirements introduced by the constraints on IoT devices requires the flexibility to represent a diverse set of possible metadata, but also requires that the encoding is kept simple.</t>
      </section>
      <section anchor="suit-workflow-model">
        <name>SUIT Workflow Model</name>
        <t>There are several fundamental assumptions that inform the model of Update Procedure workflow:</t>
        <ul spacing="normal">
          <li>Compatibility must be checked before any other operation is performed.</li>
          <li>In some applications, payloads must be fetched and validated prior to installation.</li>
        </ul>
        <t>There are several fundamental assumptions that inform the model of the Invocation Procedure workflow:</t>
        <ul spacing="normal">
          <li>Compatibility must be checked before any other operation is performed.</li>
          <li>All payloads must be validated prior to loading.</li>
          <li>All loaded images must be validated prior to execution.</li>
        </ul>
        <t>Based on these assumptions, the manifest is structured to work with a pull parser, where each section of the manifest is used in sequence. The expected workflow for a Recipient installing an update can be broken down into five steps:</t>
        <ol spacing="normal" type="1">
          <li>Verify the signature of the manifest.</li>
          <li>Verify the applicability of the manifest.</li>
          <li>Fetch payload(s).</li>
          <li>Install payload(s).</li>
          <li>Verify image(s).</li>
        </ol>
        <t>When installation is complete, similar information can be used for validating and invoking images in a further three steps:</t>
        <ol spacing="normal" type="1">
          <li>Verify image(s).</li>
          <li>Load image(s).</li>
          <li>Invoke image(s).</li>
        </ol>
        <t>If verification and invocation is implemented in a bootloader, then the bootloader <bcp14>MUST</bcp14> also verify the signature of the manifest and the applicability of the manifest in order to implement secure boot workflows. Because signature verifications can be costly in constrained applications, the bootloader may add its own authentication, e.g. a Message Authentication Code (MAC), to the manifest in order to prevent further signature verifications and save energy, provided that the bootloader can protect its authentication key.</t>
      </section>
    </section>
    <section anchor="metadata-structure-overview">
      <name>Metadata Structure Overview</name>
      <t>This section provides a high level overview of the manifest structure. The full description of the manifest structure is in <xref target="manifest-structure"/></t>
      <t>The manifest is structured from several key components:</t>
      <ol spacing="normal" type="1">
        <li>The Envelope (see <xref target="ovr-envelope"/>) contains the Authentication Block, the Manifest, any Severable Elements, and any Integrated Payloads.</li>
        <li>The Authentication Block (see <xref target="ovr-auth"/>) contains a list of signatures or MACs of the manifest.</li>
        <li>
          <t>The Manifest (see <xref target="ovr-manifest"/>) contains all critical, non-severable metadata that the Recipient requires. It is further broken down into:  </t>
          <ol spacing="normal" type="1">
            <li>Critical metadata, such as sequence number.</li>
            <li>Common metadata, such as affected components.</li>
            <li>Command sequences, directing the Recipient how to install and use the payload(s).</li>
            <li>Integrity check values for severable elements.</li>
          </ol>
        </li>
        <li>Severable elements (see <xref target="ovr-severable"/>).</li>
        <li>Integrated payloads (see <xref target="ovr-integrated"/>).</li>
      </ol>
      <t>The diagram below illustrates the hierarchy of the Envelope.</t>
      <artwork><![CDATA[
+-------------------------+
| Envelope                |
+-------------------------+
| Authentication Block    |
| Manifest           --------------> +------------------------------+
| Severable Elements      |          | Manifest                     |
| Integrated Payloads     |          +------------------------------+
+-------------------------+          | Structure Version            |
                                     | Sequence Number              |
                                     | Reference to Full Manifest   |
                               +------ Common Structure             |
                               | +---- Command Sequences            |
+-------------------------+    | |   | Digests of Envelope Elements |
| Common Structure        | <--+ |   +------------------------------+
+-------------------------+      |
| Components IDs          |      +-> +-----------------------+
| Common Command Sequence ---------> | Command Sequence      |
+-------------------------+          +-----------------------+
                                     | List of ( pairs of (  |
                                     |   * command code      |
                                     |   * argument /        |
                                     |      reporting policy |
                                     | ))                    |
                                     +-----------------------+
]]></artwork>
      <section anchor="ovr-envelope">
        <name>Envelope</name>
        <t>The SUIT Envelope is a container that encloses the Authentication Block, the Manifest, any Severable Elements, and any integrated payloads. The Envelope is used instead of conventional cryptographic envelopes, such as COSE_Envelope because it allows modular processing, severing of elements, and integrated payloads in a way that avoids substantial complexity that would be needed with existing solutions. See <xref target="design-rationale-envelope"/> for a description of the reasoning for this.</t>
        <t>See <xref target="envelope"/> for more detail.</t>
      </section>
      <section anchor="ovr-auth">
        <name>Authentication Block</name>
        <t>The Authentication Block contains a bstr-wrapped SUIT Digest Container, see <xref target="SUIT_Digest"/>, and one or more <xref target="RFC9052"/> CBOR Object Signing and Encryption (COSE) authentication blocks. These blocks are one of:</t>
        <ul spacing="normal">
          <li>COSE_Sign_Tagged</li>
          <li>COSE_Sign1_Tagged</li>
          <li>COSE_Mac_Tagged</li>
          <li>COSE_Mac0_Tagged</li>
        </ul>
        <t>Each of these objects is used in detached payload mode. The payload is the bstr-wrapped SUIT_Digest.</t>
        <t>See <xref target="authentication-info"/> for more detail.</t>
      </section>
      <section anchor="ovr-manifest">
        <name>Manifest</name>
        <t>The Manifest contains most metadata about one or more images. The Manifest is divided into Critical Metadata, Common Metadata, Command Sequences, and Integrity Check Values.</t>
        <t>See <xref target="manifest-structure"/> for more detail.</t>
        <section anchor="ovr-critical">
          <name>Critical Metadata</name>
          <t>Some metadata needs to be accessed before the manifest is processed. This metadata can be used to determine which manifest is newest and whether the structure version is supported. It also <bcp14>MAY</bcp14> provide a URI for obtaining a canonical copy of the manifest and Envelope.</t>
          <t>See <xref target="manifest-version"/>, <xref target="manifest-seqnr"/>, and <xref target="manifest-reference-uri"/> for more detail.</t>
        </section>
        <section anchor="ovr-common">
          <name>Common</name>
          <t>Some metadata is used repeatedly and in more than one command sequence. In order to reduce the size of the manifest, this metadata is collected into the Common section. Common is composed of two parts: a list of components referenced by the manifest, and a command sequence to execute prior to each other command sequence. The common command sequence is typically used to set commonly used values and perform compatibility checks. The common command sequence <bcp14>MUST NOT</bcp14> have any side-effects outside of setting parameter values.</t>
          <t>See <xref target="manifest-common"/> for more detail.</t>
        </section>
        <section anchor="ovr-commands">
          <name>Command Sequences</name>
          <t>Command sequences provide the instructions that a Recipient requires in order to install or use an image. These sequences tell a device to set parameter values, test system parameters, copy data from one place to another, transform data, digest data, and run code.</t>
          <t>Command sequences are broken up into three groups: Common Command Sequence (see <xref target="ovr-common"/>), update commands, and secure boot commands.</t>
          <t>Update Command Sequences are: Payload Fetch, Payload Installation and, System Validation. An Update Procedure is the complete set of each Update Command Sequence, each preceded by the Common Command Sequence.</t>
          <t>Invocation Command Sequences are: System Validation, Image Loading, and Image Invocation. An Invocation Procedure is the complete set of each Invocation Command Sequence, each preceded by the Common Command Sequence.</t>
          <t>Command Sequences are grouped into these sets to ensure that there is common coordination between dependencies and dependents on when to execute each command (dependencies are not defined in this specification).</t>
          <t>See <xref target="manifest-commands"/> for more detail.</t>
        </section>
        <section anchor="ovr-integrity">
          <name>Integrity Check Values</name>
          <t>To enable severable elements <xref target="ovr-severable"/>, there needs to be a mechanism to verify the integrity of the severed data. While the severed data stays outside the manifest, for efficiency reasons, Integrity Check Values are used to include the digest of the data in the manifest. Note that Integrated Payloads, see <xref target="ovr-integrated"/>, are integrity-checked using Command Sequences.</t>
          <t>See <xref target="integrity-checks"/> for more detail.</t>
        </section>
        <section anchor="ovr-text">
          <name>Human-Readable Text</name>
          <t>Text is typically a Severable Element (<xref target="ovr-severable"/>). It contains all the text that describes the update. Because text is explicitly for human consumption, it is all grouped together so that it can be Severed easily. The text section has space both for describing the manifest as a whole and for describing each individual component.</t>
          <t>See <xref target="manifest-digest-text"/> for more detail.</t>
        </section>
      </section>
      <section anchor="ovr-severable">
        <name>&nbsp;Severable Elements</name>
        <t>Severable Elements are elements of the Envelope (<xref target="ovr-envelope"/>) that have Integrity Check Values (<xref target="ovr-integrity"/>) in the Manifest (<xref target="ovr-manifest"/>). This is a form of elision of hashed data. The elements in the envelope are verified by Integrity Check Values and therefore cannot be replaced with other elements even if they are authenticated elements.</t>
        <t>Because of this organisation, these elements can be discarded or "Severed" from the Envelope without changing the signature of the Manifest. This allows savings based on the size of the Envelope in several scenarios, for example:</t>
        <ul spacing="normal">
          <li>A management system severs the Text sections before sending an Envelope to a constrained Recipient, which saves Recipient bandwidth.</li>
          <li>A Recipient severs the Installation section after installing the Update, which saves storage space.</li>
        </ul>
        <t>See <xref target="severable-fields"/> for more detail.</t>
      </section>
      <section anchor="ovr-integrated">
        <name>Integrated Payloads</name>
        <t>In some cases, it is beneficial to include a payload in the Envelope of a manifest. For example:</t>
        <ul spacing="normal">
          <li>When an update is delivered via a comparatively unconstrained medium, such as a removable mass storage device, it may be beneficial to bundle updates into single files.</li>
          <li>When a manifest transports a small payload, such as an encrypted key, that payload may be placed in the manifest's envelope.</li>
        </ul>
        <t>See <xref target="template-integrated-payload"/> for more detail.</t>
      </section>
    </section>
    <section anchor="interpreter-behavior">
      <name>Manifest Processor Behavior</name>
      <t>This section describes the behavior of the manifest processor and focuses primarily on interpreting commands in the manifest. However, there are several other important behaviors of the manifest processor: encoding version detection, rollback protection, and authenticity verification are chief among these.</t>
      <section anchor="interpreter-setup">
        <name>Manifest Processor Setup</name>
        <t>Prior to executing any command sequence, the manifest processor or its host application <bcp14>MUST</bcp14> inspect the manifest version field and fail when it encounters an unsupported encoding version. Next, the manifest processor or its host application <bcp14>MUST</bcp14> extract the manifest sequence number and perform a rollback check using this sequence number. The exact logic of rollback protection may vary by application, but it has the following properties:</t>
        <ul spacing="normal">
          <li>Whenever the manifest processor can choose between several manifests, it <bcp14>MUST</bcp14> select the latest valid, authentic manifest.</li>
          <li>If the latest valid, authentic manifest fails, it <bcp14>MAY</bcp14> select the next latest valid, authentic manifest, according to application-specific policy.</li>
        </ul>
        <t>Here, valid means that a manifest has a supported encoding version and it has not been excluded for other reasons. Reasons for excluding typically involve first executing the manifest and may include:</t>
        <ul spacing="normal">
          <li>Test failed (e.g. Vendor ID/Class ID).</li>
          <li>Unsupported command encountered.</li>
          <li>Unsupported parameter encountered.</li>
          <li>Unsupported Component Identifier encountered.</li>
          <li>Payload not available.</li>
          <li>Application crashed when executed.</li>
          <li>Watchdog timeout occurred.</li>
          <li>Payload verification failed.</li>
          <li>Missing required component from a Component Set.</li>
          <li>Required parameter not supplied.</li>
        </ul>
        <t>These failure reasons <bcp14>MAY</bcp14> be combined with retry mechanisms prior to marking a manifest as invalid.</t>
        <t>Selecting an older manifest in the event of failure of the latest valid manifest is one possible strategy to provide robustness of the firmware update process. It may not be appropriate for all applications. In particular Trusted Execution Environments <bcp14>MAY</bcp14> require a failure to invoke a new installation, rather than a rollback approach. See <xref section="4.2.1" sectionFormat="comma" target="RFC9124"/> for more discussion on the security considerations that apply to rollback.</t>
        <t>Following these initial tests, the manifest processor clears all parameter storage. This ensures that the manifest processor begins without any leaked data.</t>
      </section>
      <section anchor="required-checks">
        <name>&nbsp;Required Checks</name>
        <t>The <bcp14>RECOMMENDED</bcp14> process is to verify the signature of the manifest prior to parsing/executing any section of the manifest. This guards the parser against arbitrary input by unauthenticated third parties, but it costs extra energy when a Recipient receives an incompatible manifest.</t>
        <t>When validating authenticity of manifests, the manifest processor <bcp14>MAY</bcp14> use an ACL (see <xref target="access-control-lists"/>) to determine the extent of the rights conferred by that authenticity.</t>
        <t>Once a valid, authentic manifest has been selected, the manifest processor <bcp14>MUST</bcp14> examine the component list and
check that the number of components listed in the manifest is not larger than the number in the target system.</t>
        <t>For each listed component, the manifest processor <bcp14>MUST</bcp14> provide storage for the supported parameters. If the manifest processor does not have sufficient temporary storage to process the parameters for all components, it <bcp14>MAY</bcp14> process components serially for each command sequence. See <xref target="serial-processing"/> for more details.</t>
        <t>The manifest processor <bcp14>SHOULD</bcp14> check that the shared sequence contains at least Check Vendor Identifier command and at least one Check Class Identifier command.</t>
        <t>Because the shared sequence contains Check Vendor Identifier and Check Class Identifier command(s), no custom commands are permitted in the shared sequence. This ensures that any custom commands are only executed by devices that understand them.</t>
        <t>If the manifest contains more than one component, each command sequence <bcp14>MUST</bcp14> begin with a Set Component Index <xref target="suit-directive-set-component-index"/>.</t>
        <t>If a Recipient supports groups of interdependent components (a Component Set), then it <bcp14>SHOULD</bcp14> verify that all Components in the Component Set are specified by one update, that is:</t>
        <ol spacing="normal" type="1">
          <li>the manifest Author has sufficient permissions for the requested operations (see <xref target="access-control-lists"/>) and</li>
          <li>the manifest specifies a digest and a payload for every Component in the Component Set.</li>
        </ol>
      </section>
      <section anchor="interpreter-fundamental-properties">
        <name>Interpreter Fundamental Properties</name>
        <t>The interpreter has a small set of design goals:</t>
        <ol spacing="normal" type="1">
          <li>Executing an update <bcp14>MUST</bcp14> either result in an error, or a correct system state that can be checked against known digests.</li>
          <li>Executing a Trusted Invocation <bcp14>MUST</bcp14> either result in an error, or an invoked image.</li>
          <li>Executing the same manifest on multiple Recipients <bcp14>MUST</bcp14> result in the same system state.</li>
        </ol>
        <t>NOTE: when using A/B images, the manifest functions as two (or more) logical manifests, each of which applies to a system in a particular starting state. With that provision, design goal 3 holds.</t>
        <section anchor="resilience-to-disruption">
          <name>Resilience to Disruption</name>
          <t>As required in <xref section="3" sectionFormat="of" target="RFC9019"/> and as an extension of design goal 1, devices must remain operable after a disruption, such as a power failure or network interruption, interrupts the update process.</t>
          <t>The manifest processor must be resilient to these faults. In order to enable this resilience, systems implementing the manifest processor <bcp14>MUST</bcp14> make the following guarantees:</t>
          <t>One of:
1. A fallback/recovery image is provided so that a disrupted system can apply the SUIT Manifest again.
2. Manifest Authors <bcp14>MUST</bcp14> construct Manifests in such a way that repeated partial invocations of any Manifest always results in a correct system state. Typically this is done by using Try-Each and Conditions to bypass operations that have already been completed.
3. A journal of manifest operations is stored in nonvolatile memory. The journal enables the parser to re-create the state just prior to the disruption. This journal can, for example, be a SUIT Report or a journaling file system.</t>
          <artwork><![CDATA[
AND
]]></artwork>
          <ol spacing="normal" type="1">
            <li>Where a command is not repeatable because of the way in which it alters system state (e.g. swapping images or in-place delta) it <bcp14>MUST</bcp14> be resumable or revertible. This applies to commands that modify at least one source component as well as the destination component.</li>
          </ol>
        </section>
      </section>
      <section anchor="command-behavior">
        <name>Abstract Machine Description</name>
        <t>The heart of the manifest is the list of commands, which are processed by a Manifest Processor -- a form of interpreter. This Manifest Processor can be modeled as a simple abstract machine. This machine consists of several data storage locations that are modified by commands.</t>
        <t>There are two types of commands, namely those that modify state (directives) and those that perform tests (conditions). Parameters are used as the inputs to commands. Some directives offer control flow operations. Directives target a specific component. A component is a unit of code or data that can be targeted by an update. Components are identified by Component Identifiers, but referenced in commands by Component Index; Component Identifiers are arrays of binary strings and a Component Index is an index into the array of Component Identifiers.</t>
        <t>Conditions <bcp14>MUST NOT</bcp14> have any side-effects other than informing the interpreter of success or failure. The Interpreter does not Abort if the Soft Failure flag (<xref target="suit-parameter-soft-failure"/>) is set when a Condition reports failure.</t>
        <t>Directives <bcp14>MAY</bcp14> have side-effects in the parameter table, the interpreter state, or the current component. The Interpreter <bcp14>MUST</bcp14> Abort if a Directive reports failure regardless of the Soft Failure flag.</t>
        <t>To simplify the logic describing the command semantics, the object "current" is used. It represents the component identified by the Component Index:</t>
        <artwork><![CDATA[
current := components[component-index]
]]></artwork>
        <t>As a result, Set Component Index is described as current := components[arg].</t>
        <t>The following table describes the semantics of each operation. The pseudo-code semantics are inspired by the Python programming language.</t>
        <table>
          <thead>
            <tr>
              <th align="left">pseudo-code operation</th>
              <th align="left">Semantics</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">assert(test)</td>
              <td align="left">When test is false, causes an error return</td>
            </tr>
            <tr>
              <td align="left">store(dest, source)</td>
              <td align="left">Writes source into dest</td>
            </tr>
            <tr>
              <td align="left">expression0 for-each e in l else expression1</td>
              <td align="left">Performs expression0 once for each element in iterable l; performs expression1 if no break is encountered</td>
            </tr>
            <tr>
              <td align="left">break</td>
              <td align="left">halt a for-each loop</td>
            </tr>
            <tr>
              <td align="left">now()</td>
              <td align="left">return the current UTC time</td>
            </tr>
            <tr>
              <td align="left">expression if test</td>
              <td align="left">performs expression if test is true</td>
            </tr>
          </tbody>
        </table>
        <t>The following table describes the behavior of each command. "params" represents the parameters for the current component. Most commands operate on a component.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Command Name</th>
              <th align="left">Semantic of the Operation</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Check Vendor Identifier</td>
              <td align="left">assert(binary-match(current, current.params[vendor-id]))</td>
            </tr>
            <tr>
              <td align="left">Check Class Identifier</td>
              <td align="left">assert(binary-match(current, current.params[class-id]))</td>
            </tr>
            <tr>
              <td align="left">Verify Image</td>
              <td align="left">assert(binary-match(digest(current), current.params[digest]))</td>
            </tr>
            <tr>
              <td align="left">Check Content</td>
              <td align="left">assert(binary-match(current, current.params[content]))</td>
            </tr>
            <tr>
              <td align="left">Set Component Index</td>
              <td align="left">current := components[arg]</td>
            </tr>
            <tr>
              <td align="left">Override Parameters</td>
              <td align="left">current.params[k] := v for-each k,v in arg</td>
            </tr>
            <tr>
              <td align="left">Invoke</td>
              <td align="left">invoke(current)</td>
            </tr>
            <tr>
              <td align="left">Fetch</td>
              <td align="left">store(current, fetch(current.params[uri]))</td>
            </tr>
            <tr>
              <td align="left">Write</td>
              <td align="left">store(current, current.params[content])</td>
            </tr>
            <tr>
              <td align="left">Use Before</td>
              <td align="left">assert(now() &lt; arg)</td>
            </tr>
            <tr>
              <td align="left">Check Component Slot</td>
              <td align="left">assert(current.slot-index == arg)</td>
            </tr>
            <tr>
              <td align="left">Check Device Identifier</td>
              <td align="left">assert(binary-match(current, current.params[device-id]))</td>
            </tr>
            <tr>
              <td align="left">Abort</td>
              <td align="left">assert(0)</td>
            </tr>
            <tr>
              <td align="left">Try Each</td>
              <td align="left">(break if (exec(seq) is not error)) for-each seq in arg else assert(0)</td>
            </tr>
            <tr>
              <td align="left">Copy</td>
              <td align="left">store(current, current.params[src-component])</td>
            </tr>
            <tr>
              <td align="left">Swap</td>
              <td align="left">swap(current, current.params[src-component])</td>
            </tr>
            <tr>
              <td align="left">Run Sequence</td>
              <td align="left">exec(arg)</td>
            </tr>
            <tr>
              <td align="left">Invoke with Arguments</td>
              <td align="left">invoke(current, arg)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="index-true">
        <name>Special Cases of Component Index</name>
        <t>Component Index can take on one of three types:</t>
        <ol spacing="normal" type="1">
          <li>Integer</li>
          <li>Array of integers</li>
          <li>True</li>
        </ol>
        <t>Integers <bcp14>MUST</bcp14> always be supported by Set Component Index. Arrays of integers <bcp14>MUST</bcp14> be supported by Set Component Index if the Recipient supports 3 or more components. True <bcp14>MUST</bcp14> be supported by Set Component Index if the Recipient supports 2 or more components. Each of these operates on the list of components declared in the manifest.</t>
        <t>Integer indices are the default case as described in the previous section. An array of integers represents a list of the components (Set Component Index) to which each subsequent command applies. The value True replaces the list of component indices with the full list of components, as defined in the manifest.</t>
        <t>When a command is executed, it</t>
        <ol spacing="normal" type="1">
          <li>operates on the component identified by the component index if that index is an integer, or</li>
          <li>it operates on each component identified by an array of indicies, or</li>
          <li>it operates on every component if the index is the boolean True.</li>
        </ol>
        <t>This is described by the following pseudocode:</t>
        <artwork><![CDATA[
if component-index is True:
    current-list = components
else if component-index is array:
    current-list = [ components[idx] for idx in component-index ]
else:
    current-list = [ components[component-index] ]
for current in current-list:
    cmd(current)
]]></artwork>
        <t>Try Each and Run Sequence are affected in the same way as other commands: they are invoked once for each possible Component. This means that the sequences that are arguments to Try Each and Run Sequence are not invoked with Component Index = True, nor are they invoked with array indices. They are only invoked with integer indices. The interpreter loops over the whole sequence, setting the Component Index to each index in turn.</t>
      </section>
      <section anchor="serial-processing">
        <name>Serialized Processing Interpreter</name>
        <t>In highly constrained devices, where storage for parameters is limited, the manifest processor <bcp14>MAY</bcp14> handle one component at a time, traversing the manifest tree once for each listed component. In this mode, the interpreter ignores any commands executed while the component index is not the current component. This reduces the overall volatile storage required to process the update so that the only limit on number of components is the size of the manifest. However, this approach requires additional processing power.</t>
        <t>In order to operate in this mode, the manifest processor loops on each section for every supported component, simply ignoring commands when the current component is not selected.</t>
        <t>When a serialized Manifest Processor encounters a component index of True, it does not ignore any commands. It applies them to the current component on each iteration.</t>
      </section>
      <section anchor="parallel-processing">
        <name>Parallel Processing Interpreter</name>
        <t>To enable parallel or out-of-order processing of Command Sequences, Recipients <bcp14>MAY</bcp14> make use of the Strict Order parameter. The Strict Order parameter indicates to the Manifest Processor that Commands <bcp14>MUST</bcp14> be executed strictly in order. When the Strict Order parameter is False, this indicates to the Manifest Processor that Commands <bcp14>MAY</bcp14> be executed in parallel and/or out of order.</t>
        <t>To perform parallel processing, once the Strict Order parameter is set to False, the Recipient <bcp14>MAY</bcp14> add each command to an issue queue for parallel processing or an issue pool for out-of-order processing. The Manifest Processor then executes these pending commands in whatever order or parallelism it deems appropriate. Once there are no more commands to add to the issue queue/pool, the Manifest Processor drains the issue queue/pool by issuing all pending commands and waits for every issued command to complete. The Manifest Processor <bcp14>MAY</bcp14> issue commands before it has completed adding all remaining commands to the issue queue/pool.</t>
        <t>While adding commands to the issue queue or pool, if the Manifest Processor encounters any of the following commands, it <bcp14>MUST</bcp14> treat the command as a barrier, draining the issue queue/pool and waiting for all issued commands to complete.</t>
        <ul spacing="normal">
          <li>Override Parameters.</li>
          <li>Set Strict Order = True.</li>
          <li>Set Component Index.</li>
        </ul>
        <t>Extensions <bcp14>MAY</bcp14> alter this list. Once all issued commands have completed, the Manifest Processor issues the barrier command, after which it may resume parallel processing if Strict Order is still False.</t>
        <t>A Component <bcp14>MUST NOT</bcp14> be both a target of an operation and a source of data (for example, in Copy or Swap) in a Command Sequence where Strict Order is False. This would cause a race condition if the Component is written to, then later read from. The Manifest Processor <bcp14>MUST</bcp14> issue an Abort if it detects this exception.</t>
        <t>To perform more useful parallel operations, a manifest author may collect sequences of commands in a Run Sequence command. Then, each of these sequences <bcp14>MAY</bcp14> be run in parallel. There are several invocation options for Run Sequence:</t>
        <ul spacing="normal">
          <li>Component Index is a positive integer, Strict Order is False: Strict Order is set to True before the sequence argument is run. The sequence argument <bcp14>MUST</bcp14> begin with set-component-index.</li>
          <li>Component Index is true or an array of positive integers, Strict Order is False: The sequence argument is run once for each component (or each component in the array); the Manifest Processor presets the component index and Strict Order = True before each iteration of the sequence argument.</li>
          <li>Component Index is a positive integer, Strict Order is True: No special considerations</li>
          <li>Component Index is True or an array of positive integers, Strict Order is True: The sequence argument is run once for each component (or each component in the array); the Manifest Processor presets the component index before each iteration of the sequence argument.</li>
        </ul>
        <t>These rules isolate each sequence from each other sequence, ensuring that they operate as expected. When Strict Order = False, any further Set Component Index directives in the Run Sequence command sequence argument <bcp14>MUST</bcp14> cause an Abort. This allows the interpreter that issues Run Sequence commands to check that the first element is correct, then issue the sequence to a parallel execution context to handle the remainder of the sequence.</t>
      </section>
    </section>
    <section anchor="creating-manifests">
      <name>Creating Manifests</name>
      <t>Manifests are created using tools for constructing COSE structures, calculating cryptographic values and compiling desired system state into a sequence of operations required to achieve that state. The process of constructing COSE structures and the calculation of cryptographic values is covered in <xref target="RFC9052"/>.</t>
      <t>Compiling desired system state into a sequence of operations can be accomplished in many ways. Several templates are provided below to cover common use-cases. These templates can be combined to produce more complex behavior.</t>
      <t>The author <bcp14>MUST</bcp14> ensure that all parameters consumed by a command are set prior to invoking that command. Where Component Index = True, this means that the parameters consumed by each command <bcp14>MUST</bcp14> have been set for each Component.</t>
      <t>This section details a set of templates for creating manifests. These templates explain which parameters, commands, and orders of commands are necessary to achieve a stated goal.</t>
      <t>NOTE: On systems that support only a single component, Set Component Index has no effect and can be omitted.</t>
      <t>NOTE: <strong>A digest <bcp14>MUST</bcp14> always be set using Override Parameters.</strong></t>
      <section anchor="template-compatibility-check">
        <name>Compatibility Check Template</name>
        <t>The goal of the compatibility check template ensure that Recipients only install compatible images.</t>
        <t>In this template all information is contained in the shared sequence and the following sequence of commands is used:</t>
        <ul spacing="normal">
          <li>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</li>
          <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Vendor ID and Class ID (see <xref target="secparameters"/>)</li>
          <li>Check Vendor Identifier condition (see <xref target="uuid-identifiers"/>)</li>
          <li>Check Class Identifier condition (see <xref target="uuid-identifiers"/>)</li>
        </ul>
      </section>
      <section anchor="template-secure-boot">
        <name>Trusted Invocation Template</name>
        <t>The goal of the Trusted Invocation template is to ensure that only authorized code is invoked; such as in Secure Boot or when a Trusted Application is loaded into a TEE.</t>
        <t>The following commands are placed into the shared sequence:</t>
        <ul spacing="normal">
          <li>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</li>
          <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Image Digest and Image Size (see <xref target="secparameters"/>)</li>
        </ul>
        <t>The system validation sequence contains the following commands:</t>
        <ul spacing="normal">
          <li>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</li>
          <li>Check Image Match condition (see <xref target="suit-condition-image-match"/>)</li>
        </ul>
        <t>Then, the run sequence contains the following commands:</t>
        <ul spacing="normal">
          <li>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</li>
          <li>Invoke directive (see <xref target="suit-directive-invoke"/>)</li>
        </ul>
      </section>
      <section anchor="firmware-download-template">
        <name>Component Download Template</name>
        <t>The goal of the Component Download template is to acquire and store an image.</t>
        <t>The following commands are placed into the shared sequence:</t>
        <ul spacing="normal">
          <li>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</li>
          <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Image Digest and Image Size (see <xref target="secparameters"/>)</li>
        </ul>
        <t>Then, the install sequence contains the following commands:</t>
        <ul spacing="normal">
          <li>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</li>
          <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for URI (see <xref target="suit-parameter-uri"/>)</li>
          <li>Fetch directive (see <xref target="suit-directive-fetch"/>)</li>
          <li>Check Image Match condition (see <xref target="suit-condition-image-match"/>)</li>
        </ul>
        <t>The Fetch directive needs the URI parameter to be set to determine where the image is retrieved from. Additionally, the destination of 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 Component Index directive.</t>
      </section>
      <section anchor="template-install">
        <name>Install Template</name>
        <t>The goal of the Install template is to use an image already stored in an identified component to copy into a second component.</t>
        <t>This template is typically used with the Component Download template, however a modification to that template is required: the Component Download operations are moved from the Payload Install sequence to the Payload Fetch sequence.</t>
        <t>Then, the install sequence contains the following commands:</t>
        <ul spacing="normal">
          <li>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</li>
          <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Source Component (see <xref target="suit-parameter-source-component"/>)</li>
          <li>Copy directive (see <xref target="suit-directive-copy"/>)</li>
          <li>Check Image Match condition (see <xref target="suit-condition-image-match"/>)</li>
        </ul>
      </section>
      <section anchor="template-integrated-payload">
        <name>Integrated Payload Template</name>
        <t>The goal of the Integrated Payload template is to install a payload that is included in the manifest envelope. It is identical to the Component Download template (<xref target="firmware-download-template"/>).</t>
        <t>An Author <bcp14>MAY</bcp14> choose to place a payload in the envelope of a manifest. The payload envelope key <bcp14>MUST</bcp14> be a string. The payload <bcp14>MUST</bcp14> be serialized in a bstr element.</t>
        <t>The URI for a payload enclosed in this way <bcp14>MAY</bcp14> be expressed as a fragment-only reference, as defined in <xref section="4.4" sectionFormat="comma" target="RFC3986"/>, for example: "#device-model-v1.2.3.bin".</t>
        <t>An intermediary, such as a Network Operator, <bcp14>MAY</bcp14> choose to pre-fetch a payload and add it to the manifest envelope, using the URI as the key.</t>
      </section>
      <section anchor="template-load-ext">
        <name>Load from Nonvolatile Storage Template</name>
        <t>The goal of the Load from Nonvolatile Storage template is to load an image from a non-volatile component into a volatile component, for example loading a firmware image from external Flash into RAM.</t>
        <t>The following commands are placed into the load sequence:</t>
        <ul spacing="normal">
          <li>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</li>
          <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Source Component (see <xref target="secparameters"/>)</li>
          <li>Copy directive (see <xref target="suit-directive-copy"/>)</li>
        </ul>
        <t>As outlined in <xref target="command-behavior"/>, the Copy directive needs a source and a destination to be configured. The source is configured via Component Index (with the Set Parameters directive) and the destination is configured via the Set Component Index directive.</t>
      </section>
      <section anchor="a-b-template">
        <name>A/B Image Template</name>
        <t>The goal of the A/B Image Template is to acquire, validate, and invoke one of two images, based on a test.</t>
        <t>The following commands are placed in the common block:</t>
        <ul spacing="normal">
          <li>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</li>
          <li>
            <t>Try Each
            </t>
            <ul spacing="normal">
              <li>
                <t>First Sequence:
                </t>
                <ul spacing="normal">
                  <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>, <xref target="secparameters"/>) for Slot A</li>
                  <li>Check Slot Condition (see <xref target="suit-condition-component-slot"/>)</li>
                  <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Image Digest A and Image Size A (see <xref target="secparameters"/>)</li>
                </ul>
              </li>
              <li>
                <t>Second Sequence:
                </t>
                <ul spacing="normal">
                  <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>, <xref target="secparameters"/>) for Slot B</li>
                  <li>Check Slot Condition (see <xref target="suit-condition-component-slot"/>)</li>
                  <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Image Digest B and Image Size B (see <xref target="secparameters"/>)</li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
        <t>The following commands are placed in the fetch block or install block</t>
        <ul spacing="normal">
          <li>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</li>
          <li>
            <t>Try Each
            </t>
            <ul spacing="normal">
              <li>
                <t>First Sequence:
                </t>
                <ul spacing="normal">
                  <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>, <xref target="secparameters"/>) for Slot A</li>
                  <li>Check Slot Condition (see <xref target="suit-condition-component-slot"/>)</li>
                  <li>Set Parameters directive (see <xref target="suit-directive-override-parameters"/>) for URI A (see <xref target="secparameters"/>)</li>
                </ul>
              </li>
              <li>
                <t>Second Sequence:
                </t>
                <ul spacing="normal">
                  <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>, <xref target="secparameters"/>) for Slot B</li>
                  <li>Check Slot Condition (see <xref target="suit-condition-component-slot"/>)</li>
                  <li>Set Parameters directive (see <xref target="suit-directive-override-parameters"/>) for URI B (see <xref target="secparameters"/>)</li>
                </ul>
              </li>
            </ul>
          </li>
          <li>Fetch</li>
        </ul>
        <t>If Trusted Invocation (<xref target="template-secure-boot"/>) is used, only the run sequence is added to this template, since the shared sequence is populated by this template:</t>
        <ul spacing="normal">
          <li>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</li>
          <li>
            <t>Try Each
            </t>
            <ul spacing="normal">
              <li>
                <t>First Sequence:
                </t>
                <ul spacing="normal">
                  <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>, <xref target="secparameters"/>) for Slot A</li>
                  <li>Check Slot Condition (see <xref target="suit-condition-component-slot"/>)</li>
                </ul>
              </li>
              <li>
                <t>Second Sequence:
                </t>
                <ul spacing="normal">
                  <li>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>, <xref target="secparameters"/>) for Slot B</li>
                  <li>Check Slot Condition (see <xref target="suit-condition-component-slot"/>)</li>
                </ul>
              </li>
            </ul>
          </li>
          <li>Invoke</li>
        </ul>
        <t>NOTE: Any test can be used to select between images, Check Slot Condition is used in this template because it is a typical test for execute-in-place devices.</t>
      </section>
    </section>
    <section anchor="metadata-structure">
      <name>Metadata Structure</name>
      <t>The metadata for SUIT updates is composed of several primary constituent parts: Authentication Information, Manifest, Severable Elements and Integrated Payloads.</t>
      <t>For a diagram of the metadata structure, see <xref target="metadata-structure-overview"/>.</t>
      <section anchor="encoding">
        <name>Encoding Considerations</name>
        <t>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 possible. The goal is to keep the index objects to single bytes (CBOR positive integers 1-23).</t>
        <t>Wherever enumerations are used, they are started at 1. This allows detection of several common software errors that are caused by uninitialized variables. Positive numbers in enumerations are reserved for IANA registration. Negative numbers are used to identify application-specific values, as described in <xref target="iana"/>.</t>
        <t>All elements of the envelope must be wrapped in a bstr to minimize the complexity of the code that evaluates the cryptographic integrity of the element and to ensure correct serialization for integrity and authenticity checks.</t>
        <t>All CBOR maps in the Manifest and manifest envelope <bcp14>MUST</bcp14> be encoded with the canonical CBOR ordering as defined in <xref target="RFC8949"/>.</t>
      </section>
      <section anchor="envelope">
        <name>Envelope</name>
        <t>The Envelope contains each of the other primary constituent parts of the SUIT metadata. It allows for modular processing of the manifest by ordering components in the expected order of processing.</t>
        <t>The Envelope is encoded as a CBOR Map. Each element of the Envelope is enclosed in a bstr, which allows computation of a message digest against known bounds.</t>
      </section>
      <section anchor="authentication-info">
        <name>Authenticated Manifests</name>
        <t>SUIT_Authentication contains a list of elements, which consist of a SUIT_Digest calculated over the manifest, and zero or more SUIT_Authentication_Block's calculated over the SUIT_Digest.</t>
        <sourcecode type="cddl-snippet">
SUIT_Authentication = [
    bstr .cbor SUIT_Digest,
    * bstr .cbor SUIT_Authentication_Block
]
SUIT_Authentication_Block /= COSE_Mac_Tagged
SUIT_Authentication_Block /= COSE_Sign_Tagged
SUIT_Authentication_Block /= COSE_Mac0_Tagged
SUIT_Authentication_Block /= COSE_Sign1_Tagged
</sourcecode>
        <t>The SUIT_Digest is computed over the bstr-wrapped SUIT_Manifest that is present in the SUIT_Envelope at the suit-manifest key. The SUIT_Digest <bcp14>MUST</bcp14> always be present. The Manifest Processor requires a SUIT_Authentication_Block to be present. The manifest <bcp14>MUST</bcp14> be protected from tampering between the time of creation and the time of signing/MACing.</t>
        <t>The SUIT_Authentication_Block is computed using detached payloads, as described in RFC 9052 <xref target="RFC9052"/>. The detached payload in each case is the bstr-wrapped SUIT_Digest at the beginning of the list. Signers (or MAC calculators) <bcp14>MUST</bcp14> verify the SUIT_Digest prior to performing the cryptographic computation to avoid "Time-of-check to time-of-use" type of attack. When multiple SUIT_Authentication_Blocks are present, then each  SUIT_Authentication_Block <bcp14>MUST</bcp14> be computed over the same SUIT_Digest but using a different algorithm or signing/MAC authority. This feature also allows to transition to new algorithms, such as post-quantum cryptography (PQC) algorithms.</t>
        <t>The SUIT_Authentication structure <bcp14>MUST</bcp14> come before the suit-manifest element, regardless of canonical encoding of CBOR. The algorithms used in SUIT_Authentication are defined by the profiles declared in <xref target="I-D.ietf-suit-mti"/>.</t>
      </section>
      <section anchor="manifest-structure">
        <name>Manifest</name>
        <t>The manifest contains:</t>
        <ul spacing="normal">
          <li>a version number (see <xref target="manifest-version"/>)</li>
          <li>a sequence number (see <xref target="manifest-seqnr"/>)</li>
          <li>a reference URI (see <xref target="manifest-reference-uri"/>)</li>
          <li>a common structure with information that is shared between command sequences (see <xref target="manifest-common"/>)</li>
          <li>one or more lists of commands that the Recipient should perform (see <xref target="manifest-commands"/>)</li>
          <li>a reference to the full manifest (see <xref target="manifest-reference-uri"/>)</li>
          <li>human-readable text describing the manifest found in the SUIT_Envelope (see <xref target="manifest-digest-text"/>)</li>
        </ul>
        <t>The Text section, or any Command Sequence of the Update Procedure (Image Fetch, Image Installation and, System Validation) can be either a CBOR structure or a SUIT_Digest. In each of these cases, the SUIT_Digest provides for a severable element. Severable elements are <bcp14>RECOMMENDED</bcp14> to implement. In particular, the human-readable text <bcp14>SHOULD</bcp14> be severable, since most 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 each severable element is a CBOR bstr, it is straight-forward for a 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 the SUIT_Envelope so that a Recipient can easily identify the correct data in the envelope. See <xref target="integrity-checks"/> for more detail.</t>
        <section anchor="manifest-version">
          <name>suit-manifest-version</name>
          <t>The suit-manifest-version indicates the version of serialization used to encode the manifest. Version 1 is the version described in this document. suit-manifest-version is <bcp14>REQUIRED</bcp14> to implement.</t>
        </section>
        <section anchor="manifest-seqnr">
          <name>suit-manifest-sequence-number</name>
          <t>The suit-manifest-sequence-number is a monotonically increasing anti-rollback counter. Each Recipient <bcp14>MUST</bcp14> reject any manifest that has a sequence number lower than its current sequence number. For convenience, an implementer <bcp14>MAY</bcp14> use a UTC timestamp in seconds as the sequence number. suit-manifest-sequence-number is <bcp14>REQUIRED</bcp14> to implement.</t>
        </section>
        <section anchor="manifest-reference-uri">
          <name>suit-reference-uri</name>
          <t>suit-reference-uri is a URI where a full version of this manifest can be found. This is convenient for allowing management systems to show the severed elements of a manifest when this URI is reported by a Recipient after installation.
This document is only concerned with the transport of a URI which is 
intended for machine readable uses, not human readable uses. The encoding is the same as CBOR
Tag 32, however the tag is omitted because it is implied by context.</t>
        </section>
        <section anchor="manifest-digest-text">
          <name>suit-text</name>
          <t>suit-text <bcp14>SHOULD</bcp14> be a severable element. suit-text is a map of language identifiers (identical to Tag38 of RFC9290, Appendix A) to language-specific text maps. Each language-specific text map is a map containing two different types of pair:</t>
          <ul spacing="normal">
            <li>integer =&gt; text</li>
            <li>SUIT_Component_Identifier =&gt; map</li>
          </ul>
          <t>The SUIT_Text_Map is defined in the following CDDL.</t>
          <sourcecode type="cddl-snippet">
tag38-ltag = text .regexp "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*"

SUIT_Text_Map = {
    + tag38-ltag =&gt; SUIT_Text_LMap
}
SUIT_Text_LMap = {
    SUIT_Text_Keys,
    * SUIT_Component_Identifier =&gt; {
        SUIT_Text_Component_Keys
    }
}
</sourcecode>
          <t>Each SUIT_Component_Identifier =&gt; map entry contains a map of integer =&gt; text values. All SUIT_Component_Identifiers present in suit-text <bcp14>MUST</bcp14> also be present in suit-common (<xref target="manifest-common"/>).</t>
          <t>suit-text contains all the human-readable information that describes any and all parts of the manifest, its payload(s) and its 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.</t>
          <t>Each section <bcp14>MAY</bcp14> be present. If present, each section <bcp14>MUST</bcp14> be as described. Negative integer IDs are reserved for application-specific text values.</t>
          <t>The following table describes the text fields available in suit-text:</t>
          <table>
            <thead>
              <tr>
                <th align="left">CDDL Structure</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">suit-text-manifest-description</td>
                <td align="left">Free text description of the manifest</td>
              </tr>
              <tr>
                <td align="left">suit-text-update-description</td>
                <td align="left">Free text description of the update</td>
              </tr>
              <tr>
                <td align="left">suit-text-manifest-json-source</td>
                <td align="left">The JSON-formatted document that was used to create the manifest</td>
              </tr>
              <tr>
                <td align="left">suit-text-manifest-yaml-source</td>
                <td align="left">The YAML-formatted document <xref target="YAML"/> that was used to create the manifest</td>
              </tr>
            </tbody>
          </table>
          <t>The following table describes the text fields available in each map identified by a SUIT_Component_Identifier.</t>
          <table>
            <thead>
              <tr>
                <th align="left">CDDL Structure</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">suit-text-vendor-name</td>
                <td align="left">Free text vendor name</td>
              </tr>
              <tr>
                <td align="left">suit-text-model-name</td>
                <td align="left">Free text model name</td>
              </tr>
              <tr>
                <td align="left">suit-text-vendor-domain</td>
                <td align="left">The domain used to create the vendor-id condition (see <xref target="uuid-identifiers"/>)</td>
              </tr>
              <tr>
                <td align="left">suit-text-model-info</td>
                <td align="left">The information used to create the class-id condition (see <xref target="uuid-identifiers"/>)</td>
              </tr>
              <tr>
                <td align="left">suit-text-component-description</td>
                <td align="left">Free text description of each component in the manifest</td>
              </tr>
              <tr>
                <td align="left">suit-text-component-version</td>
                <td align="left">A free text representation of the component version</td>
              </tr>
            </tbody>
          </table>
          <t>suit-text is <bcp14>OPTIONAL</bcp14> to implement.</t>
        </section>
        <section anchor="manifest-common">
          <name>suit-common</name>
          <t>suit-common encodes all the information that is shared between each of the command sequences, including: suit-components, and suit-shared-sequence. suit-common is <bcp14>REQUIRED</bcp14> to implement.</t>
          <t>suit-components is a list of <xref target="suit-component-identifier">SUIT_Component_Identifier</xref> blocks that specify the component identifiers that will be affected by the content of the current manifest. suit-components is <bcp14>REQUIRED</bcp14> to implement.</t>
          <t>suit-shared-sequence is a SUIT_Command_Sequence to execute prior to executing any other command sequence. Typical actions in suit-shared-sequence include setting expected Recipient identity and image digests when they are conditional (see <xref target="suit-directive-try-each"/> and <xref target="a-b-template"/> for more information on conditional sequences). suit-shared-sequence is <bcp14>RECOMMENDED</bcp14> to implement. Whenever a parameter or Try Each command is required by more than one Command Sequence, placing that parameter or command in suit-shared-sequence results in a smaller encoding.</t>
          <section anchor="suit-component-identifier">
            <name>SUIT_Component_Identifier</name>
            <t>A component is a unit of code or data that can be targeted by an update. To facilitate composite devices, components are identified by a list of CBOR byte strings, which allows construction of hierarchical component structures. Components are identified by Component Identifiers, but referenced in commands by Component Index; Component Identifiers are arrays of binary strings and a Component Index is an index into the array of Component Identifiers.</t>
            <t>A Component Identifier can be trivial, such as the simple array [h'00']. It can also represent a filesystem path by encoding each segment of the path as an element in the list. For example, the path "/usr/bin/env" would encode to ['usr','bin','env'].</t>
            <t>This hierarchical construction allows a component identifier to identify any part of a complex, multi-component system.</t>
          </section>
        </section>
        <section anchor="manifest-commands">
          <name>SUIT_Command_Sequence</name>
          <t>A SUIT_Command_Sequence defines a series of actions that the Recipient <bcp14>MUST</bcp14> take to accomplish a particular goal. These goals are defined in the manifest and include:</t>
          <ol spacing="normal" type="1">
            <li>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 <bcp14>OPTIONAL</bcp14> to implement because it is not relevant in all bootloaders.</li>
            <li>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 <bcp14>OPTIONAL</bcp14> to implement.</li>
            <li>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. suit-validate is <bcp14>REQUIRED</bcp14> to implement.</li>
            <li>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 <bcp14>OPTIONAL</bcp14> to implement.</li>
            <li>Invoke or Boot: suit-invoke is a SUIT_Command_Sequence to execute in order to invoke an image. suit-invoke typically contains a single instruction: the "invoke" directive, but may also contain an image condition. suit-invoke is <bcp14>OPTIONAL</bcp14> to implement because it not needed for restart-based invocation.</li>
          </ol>
          <t>Goals 1,2,3 form the Update Procedure. Goals 3,4,5 form the Invocation Procedure.</t>
          <t>Each Command Sequence follows exactly the same structure to ensure that the parser is as simple as possible.</t>
          <t>Lists of commands are constructed from two kinds of element:</t>
          <ol spacing="normal" type="1">
            <li>Conditions that <bcp14>MUST</bcp14> be true and any failure is treated as a failure of the update/load/invocation</li>
            <li>Directives that <bcp14>MUST</bcp14> be executed.</li>
          </ol>
          <t>Each condition is composed of:</t>
          <ol spacing="normal" type="1">
            <li>A command code identifier</li>
            <li>A <xref target="reporting-policy">SUIT_Reporting_Policy</xref></li>
          </ol>
          <t>Each directive is composed of:</t>
          <ol spacing="normal" type="1">
            <li>A command code identifier</li>
            <li>An argument block or a <xref target="reporting-policy">SUIT_Reporting_Policy</xref></li>
          </ol>
          <t>Argument blocks are consumed only by flow-control directives:</t>
          <ul spacing="normal">
            <li>Set Component Index</li>
            <li>Set/Override Parameters</li>
            <li>Try Each</li>
            <li>Run Sequence</li>
          </ul>
          <t>Reporting policies provide a hint to the manifest processor of whether to add the success or failure of a command to any report that it generates.</t>
          <t>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. This index is a numeric index into the Component Identifier table defined at the beginning of the manifest.</t>
          <t>To facilitate optional conditions, a special directive, suit-directive-try-each (<xref target="suit-directive-try-each"/>), 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/invocation, but a parameter is provided to override this behavior. See suit-parameter-soft-failure (<xref target="suit-parameter-soft-failure"/>).</t>
        </section>
        <section anchor="reporting-policy">
          <name>Reporting Policy</name>
          <t>To facilitate construction of Reports that describe the success or failure of a given Procedure, each command is given a Reporting Policy. This is an integer bitfield that follows the command and indicates what the Recipient should do with the Record of executing the command. The options are summarized in the table below.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Policy</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">suit-send-record-on-success</td>
                <td align="left">Record when the command succeeds</td>
              </tr>
              <tr>
                <td align="left">suit-send-record-on-failure</td>
                <td align="left">Record when the command fails</td>
              </tr>
              <tr>
                <td align="left">suit-send-sysinfo-success</td>
                <td align="left">Add system information when the command succeeds</td>
              </tr>
              <tr>
                <td align="left">suit-send-sysinfo-failure</td>
                <td align="left">Add system information when the command fails</td>
              </tr>
            </tbody>
          </table>
          <t>Any or all of these policies may be enabled at once.</t>
          <t>At the completion of each command, a Manifest Processor <bcp14>MAY</bcp14> forward information about the command to a Reporting Engine, which is responsible for reporting boot or update status to a third party. The Reporting Engine is entirely implementation-defined, the reporting policy simply facilitates the Reporting Engine's interface to the SUIT Manifest Processor.</t>
          <t>The information elements provided to the Reporting Engine are:</t>
          <ul spacing="normal">
            <li>The reporting policy</li>
            <li>The result of the command</li>
            <li>The values of parameters consumed by the command</li>
            <li>The system information consumed by the command</li>
          </ul>
          <t>The Reporting Engine consumes these information elements and decides whether to generate an entry in its report output and which information elements to include based on its internal policy decisions. The Reporting Engine uses the reporting policy provided to it by the SUIT Manifest Processor as a set of hints but <bcp14>MAY</bcp14> choose to ignore these hints and apply its own policy instead.</t>
          <t>If the component index is set to True or an array when a command is executed with a non-zero reporting policy, then the Reporting Engine <bcp14>MUST</bcp14> receive one set of information elements for each Component, in the order expressed in the Components list or the Component Index array.</t>
          <t>This specification does not define a particular format of Records or Reports. This specification only defines hints to the Reporting Engine for which information elements it should aggregate into the Report.</t>
          <t>When used in a Invocation Procedure, the output of the Reporting Engine <bcp14>MAY</bcp14> form the basis of an attestation report. When used in an Update Process, the report <bcp14>MAY</bcp14> form the basis for one or more log entries.</t>
        </section>
        <section anchor="secparameters">
          <name>SUIT_Parameters</name>
          <t>Many conditions and directives require additional information. That information is contained within parameters that can be set in a consistent way. This allows reuse of parameters between commands, thus reducing manifest size.</t>
          <t>Most parameters are scoped to a specific component. This means that setting a parameter for one component has no effect on the parameters of any other component. The only exceptions to this are two Manifest Processor parameters: Strict Order and Soft Failure.</t>
          <t>The defined manifest parameters are described below.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">CDDL Structure</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Vendor ID</td>
                <td align="left">suit-parameter-vendor-identifier</td>
                <td align="left">
                  <xref target="suit-parameter-vendor-identifier"/></td>
              </tr>
              <tr>
                <td align="left">Class ID</td>
                <td align="left">suit-parameter-class-identifier</td>
                <td align="left">
                  <xref target="suit-parameter-class-identifier"/></td>
              </tr>
              <tr>
                <td align="left">Device ID</td>
                <td align="left">suit-parameter-device-identifier</td>
                <td align="left">
                  <xref target="suit-parameter-device-identifier"/></td>
              </tr>
              <tr>
                <td align="left">Image Digest</td>
                <td align="left">suit-parameter-image-digest</td>
                <td align="left">
                  <xref target="suit-parameter-image-digest"/></td>
              </tr>
              <tr>
                <td align="left">Image Size</td>
                <td align="left">suit-parameter-image-size</td>
                <td align="left">
                  <xref target="suit-parameter-image-size"/></td>
              </tr>
              <tr>
                <td align="left">Content</td>
                <td align="left">suit-parameter-content</td>
                <td align="left">
                  <xref target="suit-parameter-content"/></td>
              </tr>
              <tr>
                <td align="left">Component Slot</td>
                <td align="left">suit-parameter-component-slot</td>
                <td align="left">
                  <xref target="suit-parameter-component-slot"/></td>
              </tr>
              <tr>
                <td align="left">URI</td>
                <td align="left">suit-parameter-uri</td>
                <td align="left">
                  <xref target="suit-parameter-uri"/></td>
              </tr>
              <tr>
                <td align="left">Source Component</td>
                <td align="left">suit-parameter-source-component</td>
                <td align="left">
                  <xref target="suit-parameter-source-component"/></td>
              </tr>
              <tr>
                <td align="left">Invoke Args</td>
                <td align="left">suit-parameter-invoke-args</td>
                <td align="left">
                  <xref target="suit-parameter-invoke-args"/></td>
              </tr>
              <tr>
                <td align="left">Fetch Arguments</td>
                <td align="left">suit-parameter-fetch-arguments</td>
                <td align="left">
                  <xref target="suit-parameter-fetch-arguments"/></td>
              </tr>
              <tr>
                <td align="left">Strict Order</td>
                <td align="left">suit-parameter-strict-order</td>
                <td align="left">
                  <xref target="suit-parameter-strict-order"/></td>
              </tr>
              <tr>
                <td align="left">Soft Failure</td>
                <td align="left">suit-parameter-soft-failure</td>
                <td align="left">
                  <xref target="suit-parameter-soft-failure"/></td>
              </tr>
              <tr>
                <td align="left">Custom</td>
                <td align="left">suit-parameter-custom</td>
                <td align="left">
                  <xref target="suit-parameter-custom"/></td>
              </tr>
            </tbody>
          </table>
          <t>CBOR-encoded object parameters are still wrapped in a bstr. This is because it allows a parser that is aggregating parameters to reference the object with a single pointer and traverse it without understanding the contents. This is important for modularization and division of responsibility within a pull parser. The same consideration does not apply to Directives because those elements are invoked with their arguments immediately.</t>
          <section anchor="cbor-pen-uuid-namespace-identifier">
            <name>CBOR PEN UUID Namespace Identifier</name>
            <t>The CBOR PEN UUID Namespace Identifier is constructed as follows:</t>
            <t>It uses the OID Namespace as a starting point, then uses the CBOR absolute OID encoding for the IANA PEN OID (1.3.6.1.4.1):</t>
            <sourcecode type="cbor-pretty">
D8 6F                # tag(111)
   45                # bytes(5)
# Absolute OID encoding of IANA Private Enterprise Number:
#    1.3. 6. 1. 4. 1
      2B 06 01 04 01 # X.690 Clause 8.19
</sourcecode>
            <t>Computing a version 5 UUID from these produces:</t>
            <artwork><![CDATA[
NAMESPACE_CBOR_PEN = UUID5(NAMESPACE_OID, h'D86F452B06010401')
NAMESPACE_CBOR_PEN = 47fbdabb-f2e4-55f0-bb39-3620c2f6df4e
]]></artwork>
          </section>
          <section anchor="uuid-identifiers">
            <name>Constructing UUIDs</name>
            <t>Several conditions use identifiers to determine whether a manifest matches a given Recipient or not. These identifiers are defined to be RFC 4122bis <xref target="RFC4122bis"/> UUIDs. These UUIDs are not human-readable and are therefore used for machine-based processing only.</t>
            <t>A Recipient <bcp14>MAY</bcp14> match any number of UUIDs for vendor or class identifier. This may be relevant to physical or software modules. For example, a Recipient that has an OS and one or more applications might list one Vendor ID for the OS and one or more additional Vendor IDs for the applications. This Recipient might also have a Class ID that must be matched for the OS and one or more Class IDs for the applications.</t>
            <t>Identifiers are used for compatibility checks. They <bcp14>MUST NOT</bcp14> be used as assertions of identity. They are evaluated by identifier conditions (<xref target="identifier-conditions"/>).</t>
            <t>A more complete example: Imagine a device has the following physical components:
1. A host MCU
2. A WiFi module</t>
            <t>This same device has three software modules:
1. An operating system
2. A WiFi module interface driver
3. An application</t>
            <t>Suppose that the WiFi module's firmware has a proprietary update mechanism and doesn't support manifest processing. This device can report four class IDs:</t>
            <ol spacing="normal" type="1">
              <li>Hardware model/revision</li>
              <li>OS</li>
              <li>WiFi module model/revision</li>
              <li>Application</li>
            </ol>
            <t>This allows the OS, WiFi module, and application to be updated independently. To combat possible incompatibilities, the OS class ID can be changed each time the OS has a change to its API.</t>
            <t>This approach allows a vendor to target, for example, all devices with a particular WiFi module with an update, which is a very powerful mechanism, particularly when used for security updates.</t>
            <t>UUIDs <bcp14>MUST</bcp14> be created according to versions 3, 4, or 5 of <xref target="RFC4122bis"/>. Versions 1 and 2 do not provide a tangible benefit over version 4 for this application.</t>
            <t>The <bcp14>RECOMMENDED</bcp14> method to create a vendor ID is:</t>
            <artwork><![CDATA[
Vendor ID = UUID5(DNS_PREFIX, vendor domain name)
]]></artwork>
            <t>In this case, the vendor domain name is a UTF-8 encoded string. Since UUID version 5
applies a digest, internationalization considerations are not applied. The native 
UTF-8 domain name is used.</t>
            <t>If the Vendor ID is a UUID, the <bcp14>RECOMMENDED</bcp14> method to create a Class ID is:</t>
            <artwork><![CDATA[
Class ID = UUID5(Vendor ID, Class-Specific-Information)
]]></artwork>
            <t>If the Vendor ID is a CBOR PEN (see <xref target="suit-parameter-vendor-identifier"/>), the <bcp14>RECOMMENDED</bcp14> method to create a Class ID is:</t>
            <artwork><![CDATA[
Class ID = UUID5(
    UUID5(NAMESPACE_CBOR_PEN, CBOR_PEN),
    Class-Specific-Information)
]]></artwork>
            <t>Class-specific-information is composed of a variety of data, for example:</t>
            <ul spacing="normal">
              <li>Model number.</li>
              <li>Hardware revision.</li>
              <li>Bootloader version (for immutable bootloaders).</li>
            </ul>
          </section>
          <section anchor="suit-parameter-vendor-identifier">
            <name>suit-parameter-vendor-identifier</name>
            <t>suit-parameter-vendor-identifier may be presented in one of two ways:</t>
            <ul spacing="normal">
              <li>A Private Enterprise Number</li>
              <li>A byte string containing a UUID <xref target="RFC4122bis"/></li>
            </ul>
            <t>Private Enterprise Numbers are encoded as a relative OID, according to the definition in <xref target="RFC9090"/>. All PENs are relative to the IANA PEN: 1.3.6.1.4.1.</t>
          </section>
          <section anchor="suit-parameter-class-identifier">
            <name>suit-parameter-class-identifier</name>
            <t>A RFC 4122 UUID representing the class of the device or component. The UUID is encoded as a 16 byte bstr, containing the raw bytes of the UUID. It <bcp14>MUST</bcp14> be constructed as described in <xref target="uuid-identifiers"/></t>
          </section>
          <section anchor="suit-parameter-device-identifier">
            <name>suit-parameter-device-identifier</name>
            <t>A RFC 4122 UUID representing the specific device or component. The UUID is encoded as a 16 byte bstr, containing the raw bytes of the UUID. It <bcp14>MUST</bcp14> be constructed as described in <xref target="uuid-identifiers"/></t>
          </section>
          <section anchor="suit-parameter-image-digest">
            <name>suit-parameter-image-digest</name>
            <t>A fingerprint computed over the component itself, encoded in the SUIT_Digest <xref target="SUIT_Digest"/> structure. The SUIT_Digest is wrapped in a bstr, as required in <xref target="secparameters"/>.</t>
          </section>
          <section anchor="suit-parameter-image-size">
            <name>suit-parameter-image-size</name>
            <t>The size of the firmware image in bytes. This size is encoded as a positive integer.</t>
          </section>
          <section anchor="suit-parameter-component-slot">
            <name>suit-parameter-component-slot</name>
            <t>This parameter sets the slot index of a component. Some components support multiple possible Slots (offsets into a storage area). This parameter describes the intended Slot to use, identified by its index into the component's storage area. This slot <bcp14>MUST</bcp14> be encoded as a positive integer.</t>
          </section>
          <section anchor="suit-parameter-content">
            <name>suit-parameter-content</name>
            <t>A block of raw data for use with <xref target="suit-directive-write"/>. It contains a byte string of data to be written to a specified component ID in the same way as a fetch or a copy.</t>
            <t>If data is encoded this way, it should be small, e.g. 10's of bytes. Large payloads, e.g. 1000's of bytes, written via this method might prevent the manifest from being held in memory during validation. Typical applications include small configuration parameters.</t>
            <t>The size of payload embedded in suit-parameter-content impacts the security requirement defined in <xref target="RFC9124"/>, Section 4.3.21 REQ.SEC.MFST.CONST: Manifest Kept Immutable between Check and Use. Actual limitations on payload size for suit-parameter-content depend on the application, in particular the available memory that satisfies REQ.SEC.MFST.CONST. If the availability of tamper resistant memory is less than the manifest size, then REQ.SEC.MFST.CONST cannot be satisfied.</t>
            <t>If suit-parameter-content is instantiated in a severable command sequence, then this becomes functionally very similar to an integrated payload, which may be a better choice.</t>
          </section>
          <section anchor="suit-parameter-uri">
            <name>suit-parameter-uri</name>
            <t>A URI Reference <xref target="RFC3986"/> from which to fetch a resource. The encoding is the same as CBOR Tag 32, however the tag is omitted because it is implied by the context.
This document is only concerned with the transport of a URI which is 
intended for machine readable uses, not human readable uses.</t>
          </section>
          <section anchor="suit-parameter-source-component">
            <name>suit-parameter-source-component</name>
            <t>This parameter sets the source component to be used with either suit-directive-copy (<xref target="suit-directive-copy"/>) or with suit-directive-swap (<xref target="suit-directive-swap"/>). The current Component, as set by suit-directive-set-component-index defines the destination, and suit-parameter-source-component defines the source.</t>
          </section>
          <section anchor="suit-parameter-invoke-args">
            <name>suit-parameter-invoke-args</name>
            <t>This parameter contains an encoded set of arguments for suit-directive-invoke (<xref target="suit-directive-invoke"/>). The arguments <bcp14>MUST</bcp14> be provided as an implementation-defined bstr.</t>
          </section>
          <section anchor="suit-parameter-fetch-arguments">
            <name>suit-parameter-fetch-arguments</name>
            <t>An implementation-defined set of arguments to suit-directive-fetch (<xref target="suit-directive-fetch"/>). Arguments are encoded in a bstr.</t>
          </section>
          <section anchor="suit-parameter-strict-order">
            <name>suit-parameter-strict-order</name>
            <t>The Strict Order Parameter allows a manifest to govern when directives can be executed out-of-order. This allows for systems 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 parallelize their handling of updates. Strict Order defaults to True. It <bcp14>MAY</bcp14> be set to False when the order of operations does not matter. When arriving at the end of a command sequence, ALL commands <bcp14>MUST</bcp14> have completed, regardless of the state of SUIT_Parameter_Strict_Order. If SUIT_Parameter_Strict_Order is returned to True, ALL preceding commands <bcp14>MUST</bcp14> complete before the next command is executed.</t>
            <t>See <xref target="parallel-processing"/> for behavioral description of Strict Order.</t>
          </section>
          <section anchor="suit-parameter-soft-failure">
            <name>suit-parameter-soft-failure</name>
            <t>When executing a command sequence inside suit-directive-try-each (<xref target="suit-directive-try-each"/>) or suit-directive-run-sequence (<xref target="suit-directive-run-sequence"/>) and a condition failure occurs, the manifest processor aborts the sequence. For suit-directive-try-each, if Soft Failure is True, the next sequence in Try Each is invoked, otherwise suit-directive-try-each fails with the condition failure code. In suit-directive-run-sequence, if Soft Failure is True the suit-directive-run-sequence simply halts with no side-effects and the Manifest Processor continues with the following command, otherwise, the suit-directive-run-sequence fails with the condition failure code.</t>
            <t>suit-parameter-soft-failure is scoped to the enclosing SUIT_Command_Sequence. Its value is discarded when the enclosing SUIT_Command_Sequence terminates and suit-parameter-soft-failure reverts to the value it had prior to the invocation of the SUIT_Command_Sequence. Nested SUIT_Command_Sequences do not inherit the enclosing sequence's suit-parameter-soft-failure. It <bcp14>MUST NOT</bcp14> be set outside of suit-directive-try-each or suit-directive-run-sequence, modifying suit-parameter-soft-failure outside of these circumstances causes an Abort.</t>
            <t>When suit-directive-try-each is invoked, Soft Failure defaults to True in every SUIT_Command_Sequence in the suit-directive-try-each argument. An Update Author may choose to set Soft Failure to False if they require a failed condition in a sequence to force an Abort. When the enclosing SUIT_Command_Sequence terminates, suit-parameter-soft-failure reverts to the value it held before the SUIT_Command_Sequence was invoked.</t>
            <t>When suit-directive-run-sequence is invoked, Soft Failure defaults to False. An Update Author may choose to make failures soft within a suit-directive-run-sequence.</t>
          </section>
          <section anchor="suit-parameter-custom">
            <name>suit-parameter-custom</name>
            <t>This parameter is an extension point for any proprietary, application specific conditions and directives. It <bcp14>MUST NOT</bcp14> be used in the shared sequence. This effectively scopes each custom command to a particular Vendor Identifier/Class Identifier pair.</t>
            <t>suit-parameter-custom <bcp14>MAY</bcp14> be consumed by any command, in an application-specific way, however if a suit-parameter-custom is absent, then all standardised suit-commands <bcp14>MUST</bcp14> execute correctly. In this respect, suit-parameter-custom <bcp14>MUST</bcp14> be treated as a hint by any standardised suit-command that consumes it.</t>
          </section>
        </section>
        <section anchor="suitcondition">
          <name>SUIT_Condition</name>
          <t>Conditions are used to define mandatory properties of a system in order for an update to be applied. They can be pre-conditions or post-conditions of any directive or series of directives, depending on where they are placed in the list. All Conditions specify a Reporting Policy as described <xref target="reporting-policy"/>. Conditions include:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">CDDL Structure</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Vendor Identifier</td>
                <td align="left">suit-condition-vendor-identifier</td>
                <td align="left">
                  <xref target="identifier-conditions"/></td>
              </tr>
              <tr>
                <td align="left">Class Identifier</td>
                <td align="left">suit-condition-class-identifier</td>
                <td align="left">
                  <xref target="identifier-conditions"/></td>
              </tr>
              <tr>
                <td align="left">Device Identifier</td>
                <td align="left">suit-condition-device-identifier</td>
                <td align="left">
                  <xref target="identifier-conditions"/></td>
              </tr>
              <tr>
                <td align="left">Image Match</td>
                <td align="left">suit-condition-image-match</td>
                <td align="left">
                  <xref target="suit-condition-image-match"/></td>
              </tr>
              <tr>
                <td align="left">Check Content</td>
                <td align="left">suit-condition-check-content</td>
                <td align="left">
                  <xref target="suit-condition-check-content"/></td>
              </tr>
              <tr>
                <td align="left">Component Slot</td>
                <td align="left">suit-condition-component-slot</td>
                <td align="left">
                  <xref target="suit-condition-component-slot"/></td>
              </tr>
              <tr>
                <td align="left">Abort</td>
                <td align="left">suit-condition-abort</td>
                <td align="left">
                  <xref target="suit-condition-abort"/></td>
              </tr>
              <tr>
                <td align="left">Custom Condition</td>
                <td align="left">suit-command-custom</td>
                <td align="left">
                  <xref target="SUIT_Command_Custom"/></td>
              </tr>
            </tbody>
          </table>
          <t>The abstract description of these conditions is defined in <xref target="command-behavior"/>.</t>
          <t>Conditions compare parameters against properties of the system. These properties may be asserted in many different ways, including: calculation on-demand, volatile definition in memory, static definition within the manifest processor, storage in known location within an image, storage within a key storage system, storage in One-Time-Programmable memory, inclusion in mask ROM, or inclusion as a register in hardware. Some of these assertion methods are global in scope, such as a hardware register, some are scoped to an individual component, such as storage at a known location in an image, and some assertion methods can be either global or component-scope, based on implementation.</t>
          <t>Each condition <bcp14>MUST</bcp14> report a result code on completion. If a condition reports failure, then the current sequence of commands <bcp14>MUST</bcp14> terminate. A subsequent command or command sequence <bcp14>MAY</bcp14> continue executing if suit-parameter-soft-failure (<xref target="suit-parameter-soft-failure"/>) is set. If a condition requires additional information, this <bcp14>MUST</bcp14> be specified in one or more parameters before the condition is executed. If a Recipient attempts to process a condition that expects additional information and that information has not been set, it <bcp14>MUST</bcp14> report a failure. If a Recipient encounters an unknown condition, it <bcp14>MUST</bcp14> report a failure.</t>
          <t>Condition labels in the positive number range are reserved for IANA registration while those in the negative range are custom conditions reserved for proprietary definition by the author of a manifest processor. See <xref target="iana"/> for more details.</t>
          <section anchor="identifier-conditions">
            <name>suit-condition-vendor-identifier, suit-condition-class-identifier, and suit-condition-device-identifier</name>
            <t>There are three identifier-based conditions: suit-condition-vendor-identifier, suit-condition-class-identifier, and suit-condition-device-identifier. Each of these conditions match a UUID <xref target="RFC4122bis"/> that <bcp14>MUST</bcp14> have already been set as a parameter. The installing Recipient <bcp14>MUST</bcp14> match the specified UUID in order to consider the manifest valid. These identifiers are scoped by component in the manifest. Each component <bcp14>MAY</bcp14> match more than one identifier. Care is needed to ensure that manifests correctly identify their targets using these conditions. Using only a generic class ID for a device-specific firmware could result in matching devices that are not compatible.</t>
            <t>The Recipient uses the ID parameter that has already been set using the Set Parameters directive. If no ID has been set, this condition fails. suit-condition-class-identifier and suit-condition-vendor-identifier are <bcp14>REQUIRED</bcp14> to implement. suit-condition-device-identifier is <bcp14>OPTIONAL</bcp14> to implement.</t>
            <t>Each identifier condition compares the corresponding identifier parameter to a parameter asserted to the Manifest Processor by the Recipient. Identifiers <bcp14>MUST</bcp14> be known to the Manifest Processor in order to evaluate compatibility.</t>
          </section>
          <section anchor="suit-condition-image-match">
            <name>suit-condition-image-match</name>
            <t>Verify that the current component matches the suit-parameter-image-digest (<xref target="suit-parameter-image-digest"/>) for the current component. The digest is verified against the digest specified in the Component's parameters list. If no digest is specified, the condition fails. suit-condition-image-match is <bcp14>REQUIRED</bcp14> to implement.</t>
          </section>
          <section anchor="suit-condition-check-content">
            <name>suit-condition-check-content</name>
            <t>This directive compares the specified component identifier to the data indicated by suit-parameter-content. This functions similarly to suit-condition-image-match, however it does a direct, byte-by-byte comparison rather than a digest-based comparison. Because it is possible that an early stop to check-content could reveal information through timing, suit-condition-check-content <bcp14>MUST</bcp14> be constant time: no early exits.</t>
            <t>The following pseudo-code described an example content checking algorithm:</t>
            <sourcecode type="c">
// content &amp; component must be same length
// returns 0 for match
int check_content(content, component, length) {
    int residual = 0;
    for (i = 0; i &lt; length; i++) {
        residual |= content[i] ^ component[i];
    }
    return residual;
}
</sourcecode>
          </section>
          <section anchor="suit-condition-component-slot">
            <name>suit-condition-component-slot</name>
            <t>Verify that the slot index of the current component matches the slot index set in suit-parameter-component-slot (<xref target="suit-parameter-component-slot"/>). This condition allows a manifest to select between several images to match a target slot.</t>
          </section>
          <section anchor="suit-condition-abort">
            <name>suit-condition-abort</name>
            <t>Unconditionally fail. This operation is typically used in conjunction with suit-directive-try-each (<xref target="suit-directive-try-each"/>).</t>
          </section>
        </section>
        <section anchor="suitdirective">
          <name>SUIT_Directive</name>
          <t>Directives are used to define the behavior of the recipient. Directives include:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">CDDL Structure</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Set Component Index</td>
                <td align="left">suit-directive-set-component-index</td>
                <td align="left">
                  <xref target="suit-directive-set-component-index"/></td>
              </tr>
              <tr>
                <td align="left">Try Each</td>
                <td align="left">suit-directive-try-each</td>
                <td align="left">
                  <xref target="suit-directive-try-each"/></td>
              </tr>
              <tr>
                <td align="left">Override Parameters</td>
                <td align="left">suit-directive-override-parameters</td>
                <td align="left">
                  <xref target="suit-directive-override-parameters"/></td>
              </tr>
              <tr>
                <td align="left">Fetch</td>
                <td align="left">suit-directive-fetch</td>
                <td align="left">
                  <xref target="suit-directive-fetch"/></td>
              </tr>
              <tr>
                <td align="left">Copy</td>
                <td align="left">suit-directive-copy</td>
                <td align="left">
                  <xref target="suit-directive-copy"/></td>
              </tr>
              <tr>
                <td align="left">Write</td>
                <td align="left">suit-directive-write</td>
                <td align="left">
                  <xref target="suit-directive-write"/></td>
              </tr>
              <tr>
                <td align="left">Invoke</td>
                <td align="left">suit-directive-invoke</td>
                <td align="left">
                  <xref target="suit-directive-invoke"/></td>
              </tr>
              <tr>
                <td align="left">Run Sequence</td>
                <td align="left">suit-directive-run-sequence</td>
                <td align="left">
                  <xref target="suit-directive-run-sequence"/></td>
              </tr>
              <tr>
                <td align="left">Swap</td>
                <td align="left">suit-directive-swap</td>
                <td align="left">
                  <xref target="suit-directive-swap"/></td>
              </tr>
              <tr>
                <td align="left">Custom Directive</td>
                <td align="left">suit-command-custom</td>
                <td align="left">
                  <xref target="SUIT_Command_Custom"/></td>
              </tr>
            </tbody>
          </table>
          <t>The abstract description of these commands is defined in <xref target="command-behavior"/>.</t>
          <t>When a Recipient executes a Directive, it <bcp14>MUST</bcp14> report a result code. If the Directive reports failure, then the current Command Sequence <bcp14>MUST</bcp14> be terminated.</t>
          <section anchor="suit-directive-set-component-index">
            <name>suit-directive-set-component-index</name>
            <t>Set Component Index defines the component to which successive directives and conditions will apply. The Set Component Index arguments are described in <xref target="index-true"/>.</t>
            <t>If the following commands apply to ONE component, an unsigned integer index into the component list is used. If the following commands apply to ALL components, then the boolean value "True" is used instead of an index. If the following commands apply to more than one, but not all components, then an array of unsigned integer indices into the component list is used.</t>
            <t>If component index is set to True when a command is invoked, then the command applies to all components, in the order they appear in suit-common-components. When the Manifest Processor invokes a command while the component index is set to True, it must execute the command once for each possible component index, ensuring that the command receives the parameters corresponding to that component index.</t>
          </section>
          <section anchor="suit-directive-try-each">
            <name>suit-directive-try-each</name>
            <t>This command runs several SUIT_Command_Sequence instances, one after another, in a strict order, until one succeeds or the list is exhausted. Use this command to implement a "try/catch-try/catch" sequence. Manifest processors <bcp14>MAY</bcp14> implement this command.</t>
            <t>suit-parameter-soft-failure (<xref target="suit-parameter-soft-failure"/>) is initialized to True at the beginning of each sequence. If one sequence aborts due to a condition failure, the next is started. If no sequence completes without condition failure, then suit-directive-try-each returns an error. If a particular application calls for all sequences to fail and still continue, then an empty sequence (nil) can be added to the Try Each Argument.</t>
            <t>The argument to suit-directive-try-each is a list of SUIT_Command_Sequence. suit-directive-try-each does not specify a reporting policy.</t>
          </section>
          <section anchor="suit-directive-override-parameters">
            <name>suit-directive-override-parameters</name>
            <t>suit-directive-override-parameters replaces any listed parameters that are already set with the values that are provided in its argument. This allows a manifest to prevent replacement of critical parameters.</t>
            <t>Available parameters are defined in <xref target="secparameters"/>.</t>
            <t>suit-directive-override-parameters does not specify a reporting policy.</t>
          </section>
          <section anchor="suit-directive-fetch">
            <name>suit-directive-fetch</name>
            <t>suit-directive-fetch instructs the manifest processor to obtain one or more manifests or payloads, as specified by the manifest index and component index, respectively.</t>
            <t>suit-directive-fetch can target one or more payloads. suit-directive-fetch retrieves each component listed in component-index. If component-index is True, instead of an integer, then all current manifest components are fetched. If component-index is an array, then all listed components are fetched.</t>
            <t>suit-directive-fetch typically takes no arguments unless one is needed to modify fetch behavior. If an argument is needed, it must be wrapped in a bstr and set in suit-parameter-fetch-arguments.</t>
            <t>suit-directive-fetch reads the URI parameter to find the source of the fetch it performs.</t>
            <t>The size and digest of the payload to be fetched are typically set prior to the invokation of suit-directive-fetch. If both suit-parameter-image-digest and suit-parameter-image-size are set for the current component when suit-directive-fetch is invoked, the Manifest Processor <bcp14>MAY</bcp14> choose to optimize the fetch by:</t>
            <ul spacing="normal">
              <li>Checking if the target component matches the digest supplied before fetching.</li>
              <li>Checking if another component matches the digest supplied before fetching.</li>
            </ul>
            <t>The exact mechanisms of these optimizations are implementation defined.</t>
          </section>
          <section anchor="suit-directive-copy">
            <name>suit-directive-copy</name>
            <t>suit-directive-copy instructs the manifest processor to obtain one or more payloads, as specified by the component index. As described in <xref target="index-true"/> component index may be a single integer, a list of integers, or True. suit-directive-copy retrieves each component specified by the current component-index, respectively.</t>
            <t>suit-directive-copy reads its source from suit-parameter-source-component (<xref target="suit-parameter-source-component"/>).</t>
            <t>If either the source component parameter or the source component itself is absent, this command fails.</t>
            <t>The size and digest of the payload to be fetched are typically set prior to the invokation of suit-directive-copy. If both suit-parameter-image-digest and suit-parameter-image-size are set for the current component when suit-directive-copy is invoked, the Manifest Processor <bcp14>MAY</bcp14> choose to optimize the copy by:</t>
            <ul spacing="normal">
              <li>Checking if the target component matches the digest supplied before copying.</li>
              <li>Checking if the source component matches the digest supplied before copying.</li>
            </ul>
            <t>The first optimization avoids a copy operation when the data is the same. The second optimization avoids a copy of a corrupted image. The exact mechanisms of these optimizations are implementation defined.</t>
          </section>
          <section anchor="suit-directive-write">
            <name>suit-directive-write</name>
            <t>This directive writes a small block of data, specified in <xref target="suit-parameter-content"/>, to a component.</t>
            <t>Encoding Considerations: Careful consideration must be taken to determine whether it is more appropriate to use an integrated payload or to use <xref target="suit-parameter-content"/> for a particular application. While the encoding of suit-directive-write is smaller than an integrated payload, a large suit-parameter-content payload may prevent the manifest processor from holding the command sequence in memory while executing it.</t>
          </section>
          <section anchor="suit-directive-invoke">
            <name>suit-directive-invoke</name>
            <t>suit-directive-invoke directs the manifest processor to transfer execution to the current Component Index. When this is invoked, the manifest processor <bcp14>MAY</bcp14> be unloaded and execution continues in the Component Index. Arguments are provided to suit-directive-invoke through suit-parameter-invoke-arguments (<xref target="suit-parameter-invoke-args"/>) and are forwarded to the executable code located in Component Index in an application-specific way. For example, this could form the Linux Kernel Command Line if booting a Linux device.</t>
            <t>If the executable code at Component Index is constructed in such a way that it does not unload the manifest processor, then the manifest processor <bcp14>MAY</bcp14> resume execution after the executable completes. This allows the manifest processor to invoke suitable helpers and to verify them with image conditions.</t>
          </section>
          <section anchor="suit-directive-run-sequence">
            <name>suit-directive-run-sequence</name>
            <t>To enable conditional commands, and to allow several strictly ordered sequences to be executed out-of-order, suit-directive-run-sequence allows the manifest processor to execute its argument as a SUIT_Command_Sequence. The argument must be wrapped in a bstr. This also allows a sequence of instructions to be iterated over, once for each current component index, when component-index = true or component-index = list. See <xref target="index-true"/>.</t>
            <t>When a sequence is executed, any failure of a condition causes immediate termination of the sequence.</t>
            <t>When suit-directive-run-sequence completes, it forwards the last status code that occurred in the sequence. If the Soft Failure parameter is true, then suit-directive-run-sequence only fails when a directive in the argument sequence fails.</t>
            <t>suit-parameter-soft-failure (<xref target="suit-parameter-soft-failure"/>) defaults to False when suit-directive-run-sequence begins. Its value is discarded when suit-directive-run-sequence terminates.</t>
          </section>
          <section anchor="suit-directive-swap">
            <name>suit-directive-swap</name>
            <t>suit-directive-swap instructs the manifest processor to move the source to the destination and the destination to the source simultaneously. Swap has nearly identical semantics to suit-directive-copy except that suit-directive-swap replaces the source with the current contents of the destination in an application-defined way. As with suit-directive-copy, if the source component is missing, this command fails.</t>
          </section>
        </section>
        <section anchor="SUIT_Command_Custom">
          <name>suit-command-custom</name>
          <t>suit-command-custom describes any experimental, proprietary, or application specific condition or directive. This is encoded as a negative integer, chosen by the firmware developer. If additional information must be provided, it should be encoded in a custom parameter (as described in <xref target="secparameters"/>). Any number of custom commands is permitted. SUIT_Command_Custom is <bcp14>OPTIONAL</bcp14> to implement.</t>
        </section>
        <section anchor="integrity-checks">
          <name>Integrity Check Values</name>
          <t>When the Text section or any Command Sequence of the Update Procedure is made severable, it is moved to the Envelope and replaced with a SUIT_Digest. The SUIT_Digest is computed over the entire bstr enclosing the Manifest element that has been moved to the Envelope. Each element that is made severable from the Manifest is placed in the Envelope. The keys for the envelope elements have the same values as the keys for the manifest elements.</t>
          <t>Each Integrity Check Value covers the corresponding Envelope Element as described in <xref target="severable-fields"/>.</t>
        </section>
      </section>
      <section anchor="severable-fields">
        <name>Severable Elements</name>
        <t>Because the manifest can be used by different actors at different times, some parts of the manifest can be removed or "Severed" without affecting later stages of the lifecycle. Severing of information is achieved by separating that information from the signed container so that removing it does not affect the signature. This means that ensuring integrity of severable parts of the manifest is a requirement for the signed portion of the manifest. Severing some parts makes it possible to discard parts of the manifest that are no longer necessary. This is important because it allows the storage used by the manifest to be greatly reduced. For example, no text size limits are needed if text is removed from the manifest prior to delivery to a constrained device.</t>
        <t>At time of manifest creation, the Author <bcp14>MAY</bcp14> chose to make a manifest element severable by removing it from the manifest, encoding it in a bstr, and placing a SUIT_Digest of the bstr in the manifest so that it can still be authenticated. Making an element severable changes the digest of the manifest, so the signature <bcp14>MUST</bcp14> be computed after manifest elements are made severable. Only Manifest Elements with corresponding elements in the SUIT_Envelope can be made severable (see <xref target="iana-envelope"/> for SUIT_Envelope elements). The SUIT_Digest typically consumes 4 bytes more than the size of the raw digest, therefore elements smaller than (Digest Bits)/8 + 4 <bcp14>SHOULD NOT</bcp14> be severable. Elements larger than (Digest Bits)/8 + 4 <bcp14>MAY</bcp14> be severable, while elements that are much larger than (Digest Bits)/8 + 4 <bcp14>SHOULD</bcp14> be severable.</t>
        <t>Because of this, all command sequences in the manifest are encoded in a bstr so that there is a single code path needed for all command sequences.</t>
      </section>
    </section>
    <section anchor="access-control-lists">
      <name>Access Control Lists</name>
      <t>SUIT Manifest Processors are <bcp14>RECOMMENDED</bcp14> to use one of the following models for managing permissions in the manifest.</t>
      <t>First, the simplest model requires that all manifests are authenticated by a single trusted key. This mode has the advantage that only a root manifest needs to be authenticated, since all of its dependencies have digests included in the root manifest.</t>
      <t>This simplest model can be extended by adding key delegation without much increase in complexity.</t>
      <t>A second model requires an ACL to be presented to the Recipient, authenticated by a trusted party or stored on the Recipient. This ACL grants access rights for specific component IDs or Component Identifier prefixes to the listed identities or identity groups. Any identity can verify an image digest, but fetching into or fetching from a Component Identifier requires approval from the ACL.</t>
      <t>A third model allows a Recipient to provide even more fine-grained controls: The ACL lists the Component Identifier or Component Identifier prefix that an identity can use, and also lists the commands and parameters that the identity can use in combination with that Component Identifier.</t>
    </section>
    <section anchor="SUIT_Digest">
      <name>SUIT Digest Container</name>
      <t>The SUIT digest is a CBOR array containing two elements: an algorithm identifier and a bstr containing the bytes of the digest. Some forms of digest may require additional parameters. These can be added following the digest.</t>
      <t>The values of the algorithm identifier are found in the IANA "COSE Algorithms" registry <xref target="COSE_Alg"/>, which was created by <xref target="RFC9054"/>. SHA-256 (-16) <bcp14>MUST</bcp14> be implemented by all Manifest Processors.</t>
      <t>Any other algorithm defined in the IANA "COSE Algorithms" registry, such as SHA-512 (-44), <bcp14>MAY</bcp14> be implemented in a Manifest Processor.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>IANA is requested to:</t>
      <ul spacing="normal">
        <li>allocate CBOR tag 107 (suggested) in the "CBOR Tags" registry for the SUIT Envelope. The CBOR Tag's Data Item is a SUIT_Envelope as defined in <xref target="full-cddl"/></li>
        <li>allocate CBOR tag 1070 (suggested) in the "CBOR Tags" registry for the SUIT Manifest. The CBOR Tag's Data Item is a SUIT_Manifest as defined in <xref target="full-cddl"/></li>
        <li>allocate media type application/suit-envelope in the "Media Types" registry, see below.</li>
        <li>setup several registries as described below.</li>
      </ul>
      <t>IANA is requested to create a new category for Software Update for the Internet of Things (SUIT)
and a page within this category for SUIT manifests.</t>
      <t>IANA is also requested to create several registries defined in the subsections below.</t>
      <t>For each registry, values 0-255 are Standards Action and 256 or greater are Specification Required. Negative values -255 to 0 are Standards Action, and -256 and lower are Private Use.</t>
      <t>New entries to those registries need to provide a label, a name and a reference to a specification that describes the functionality. More guidance on the expert review can be found below.</t>
      <section anchor="iana-envelope">
        <name>SUIT Envelope Elements</name>
        <t>IANA is requested to create a new registry for SUIT envelope elements.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Label</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Unset Detection</td>
              <td align="left">
                <xref target="encoding"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">Reserved (Delegation)</td>
              <td align="left">
                <xref target="design-rationale-envelope"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">Authentication Wrapper</td>
              <td align="left">
                <xref target="authentication-info"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">Manifest</td>
              <td align="left">
                <xref target="manifest-structure"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">16</td>
              <td align="left">Payload Fetch</td>
              <td align="left">
                <xref target="manifest-commands"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">20</td>
              <td align="left">Payload Installation</td>
              <td align="left">
                <xref target="manifest-commands"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">23</td>
              <td align="left">Text Description</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="suit-manifest-elements">
        <name>SUIT Manifest Elements</name>
        <t>IANA is requested to create a new registry for SUIT manifest elements.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Label</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Unset Detection</td>
              <td align="left">
                <xref target="encoding"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">Encoding Version</td>
              <td align="left">
                <xref target="manifest-version"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">Sequence Number</td>
              <td align="left">
                <xref target="manifest-seqnr"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">Common Data</td>
              <td align="left">
                <xref target="manifest-common"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">Reference URI</td>
              <td align="left">
                <xref target="manifest-reference-uri"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">7</td>
              <td align="left">Image Validation</td>
              <td align="left">
                <xref target="manifest-commands"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">8</td>
              <td align="left">Image Loading</td>
              <td align="left">
                <xref target="manifest-commands"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">9</td>
              <td align="left">Image Invocation</td>
              <td align="left">
                <xref target="manifest-commands"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">16</td>
              <td align="left">Payload Fetch</td>
              <td align="left">
                <xref target="manifest-commands"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">20</td>
              <td align="left">Payload Installation</td>
              <td align="left">
                <xref target="manifest-commands"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">23</td>
              <td align="left">Text Description</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="suit-common-elements">
        <name>SUIT Common Elements</name>
        <t>IANA is requested to create a new registry for SUIT common elements.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Label</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Unset Detection</td>
              <td align="left">
                <xref target="encoding"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">Component Identifiers</td>
              <td align="left">
                <xref target="manifest-common"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">Common Command Sequence</td>
              <td align="left">
                <xref target="manifest-common"/> of [TBD: this document]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="suit-commands">
        <name>SUIT Commands</name>
        <t>IANA is requested to create a new registry for SUIT commands.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Label</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Unset Detection</td>
              <td align="left">
                <xref target="encoding"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">Vendor Identifier</td>
              <td align="left">
                <xref target="identifier-conditions"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">Class Identifier</td>
              <td align="left">
                <xref target="identifier-conditions"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">Image Match</td>
              <td align="left">
                <xref target="suit-condition-image-match"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">Component Slot</td>
              <td align="left">
                <xref target="suit-condition-component-slot"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">Check Content</td>
              <td align="left">
                <xref target="suit-condition-check-content"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">12</td>
              <td align="left">Set Component Index</td>
              <td align="left">
                <xref target="suit-directive-set-component-index"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">14</td>
              <td align="left">Abort</td>
              <td align="left">&nbsp;</td>
            </tr>
            <tr>
              <td align="left">15</td>
              <td align="left">Try Each</td>
              <td align="left">
                <xref target="suit-directive-try-each"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">18</td>
              <td align="left">Write Content</td>
              <td align="left">
                <xref target="suit-directive-write"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">20</td>
              <td align="left">Override Parameters</td>
              <td align="left">
                <xref target="suit-directive-override-parameters"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">21</td>
              <td align="left">Fetch</td>
              <td align="left">
                <xref target="suit-directive-fetch"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">22</td>
              <td align="left">Copy</td>
              <td align="left">
                <xref target="suit-directive-copy"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">23</td>
              <td align="left">Invoke</td>
              <td align="left">
                <xref target="suit-directive-invoke"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">24</td>
              <td align="left">Device Identifier</td>
              <td align="left">
                <xref target="identifier-conditions"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">31</td>
              <td align="left">Swap</td>
              <td align="left">
                <xref target="suit-directive-swap"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">32</td>
              <td align="left">Run Sequence</td>
              <td align="left">
                <xref target="suit-directive-run-sequence"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">&lt; -255</td>
              <td align="left">Custom Command</td>
              <td align="left">
                <xref target="SUIT_Command_Custom"/> of [TBD: this document]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="suit-parameters">
        <name>SUIT Parameters</name>
        <t>IANA is requested to create a new registry for SUIT parameters.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Label</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Unset Detection</td>
              <td align="left">
                <xref target="encoding"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">Vendor ID</td>
              <td align="left">
                <xref target="suit-parameter-vendor-identifier"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">Class ID</td>
              <td align="left">
                <xref target="suit-parameter-class-identifier"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">Image Digest</td>
              <td align="left">
                <xref target="suit-parameter-image-digest"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">Component Slot</td>
              <td align="left">
                <xref target="suit-parameter-component-slot"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">12</td>
              <td align="left">Strict Order</td>
              <td align="left">
                <xref target="suit-parameter-strict-order"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">13</td>
              <td align="left">Soft Failure</td>
              <td align="left">
                <xref target="suit-parameter-soft-failure"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">14</td>
              <td align="left">Image Size</td>
              <td align="left">
                <xref target="suit-parameter-image-size"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">18</td>
              <td align="left">Content</td>
              <td align="left">
                <xref target="suit-parameter-content"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">21</td>
              <td align="left">URI</td>
              <td align="left">
                <xref target="suit-parameter-uri"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">22</td>
              <td align="left">Source Component</td>
              <td align="left">
                <xref target="suit-parameter-source-component"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">23</td>
              <td align="left">Invoke Args</td>
              <td align="left">
                <xref target="suit-parameter-invoke-args"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">24</td>
              <td align="left">Device ID</td>
              <td align="left">
                <xref target="suit-parameter-device-identifier"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">&lt; -255</td>
              <td align="left">Custom</td>
              <td align="left">
                <xref target="suit-parameter-custom"/> of [TBD: this document]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="suit-text-values">
        <name>SUIT Text Values</name>
        <t>IANA is requested to create a new registry for SUIT text values.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Label</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Unset Detection</td>
              <td align="left">
                <xref target="encoding"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">Manifest Description</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">Update Description</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">Manifest JSON Source</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">Manifest YAML Source</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">&lt; -255</td>
              <td align="left">Custom</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="suit-component-text-values">
        <name>&nbsp;SUIT Component Text Values</name>
        <t>IANA is requested to create a new registry for SUIT component text values.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Label</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Unset Detection</td>
              <td align="left">
                <xref target="encoding"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">Vendor Name</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">Model Name</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">Vendor Domain</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">Model Info</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">Component Description</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">Component Version</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
            <tr>
              <td align="left">&lt; -255</td>
              <td align="left">Custom</td>
              <td align="left">
                <xref target="manifest-digest-text"/> of [TBD: this document]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="expert-review-instructions">
        <name>Expert Review Instructions</name>
        <t>The IANA registries established in this document allow values to be added
based on expert review. This section gives some general guidelines for
what the experts should be looking for, but they are being designated
as experts for a reason, so they should be given substantial
latitude.</t>
        <t>Expert reviewers should take into consideration the following points:</t>
        <ul spacing="normal">
          <li>Point squatting should be discouraged.  Reviewers are encouraged
   to get sufficient information for registration requests to ensure
   that the usage is not going to duplicate one that is already
   registered, and that the point is likely to be used in
   deployments.  The zones tagged as private use
   are intended for testing purposes and closed environments;
   code points in other ranges should not be assigned for testing.</li>
          <li>Specifications are required for the standards track range of point
   assignment.  Specifications should exist for  all other ranges,
   but early assignment before a specification is
   available is considered to be permissible.
   When specifications are not provided, the description provided
   needs to have sufficient information to identify what the point is
   being used for.</li>
          <li>Experts should take into account the expected usage of fields when
   approving point assignment.  The fact that there is a range for
   standards track documents does not mean that a standards track
   document cannot have points assigned outside of that range.  The
   length of the encoded value should be weighed against how many
   code points of that length are left, the size of device it will be
   used on, and the number of code points left that encode to that
   size.</li>
          <li>Key assignments in the SUIT Parameters table, particularly those
   that encode to 1 CBOR byte (-24 to 23) should be reserved for
   SUIT Directives that match the same key value.</li>
        </ul>
      </section>
      <section anchor="media-type-registration">
        <name>Media Type Registration</name>
        <t>This section registers the 'application/suit-envelope+cose' media type in the
"Media Types" registry.  This media type are used to indicate that
the content is a SUIT envelope.</t>
        <artwork><![CDATA[
      Type name: application

      Subtype name: suit-envelope+cose

      Required parameters: N/A

      Optional parameters: N/A

      Encoding considerations: binary

      Security considerations: See the Security Considerations section
      of [[This RFC]].

      Interoperability considerations: N/A

      Published specification: [[This RFC]]

      Applications that use this media type: Primarily used for
        Firmware and software updates although the content may
        also contain configuration data and other information
        related to software and firmware.

      Fragment identifier considerations: N/A

      Additional information:

      *  Deprecated alias names for this type: N/A

      *  Magic number(s): N/A

      *  File extension(s): cbor, suit

      *  Macintosh file type code(s): N/A

      Person & email address to contact for further information:
      iesg@ietf.org

      Intended usage: COMMON

      Restrictions on usage: N/A

      Author: Brendan Moran, <brendan.moran.ietf@gmail.com>

      Change Controller: IESG

      Provisional registration?  No
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document is about a manifest format protecting and describing how to retrieve, install, and invoke firmware images and as such it is part of a larger solution for delivering firmware updates to IoT devices. A detailed security treatment can be found in the architecture <xref target="RFC9019"/> and in the information model <xref target="RFC9124"/> documents.</t>
      <t>The security requirements outlined in <xref target="RFC9124"/> are addressed by this draft and its extensions.
The specific mapping of requirements and information elements in <xref target="RFC9124"/> to manifest data structures is
outlined in the table below:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Security Requirement</th>
            <th align="left">Information Element</th>
            <th align="left">Implementation</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">REQ.SEC.SEQUENCE</td>
            <td align="left">Monotonic Sequence Number</td>
            <td align="left">
              <xref target="manifest-seqnr"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.COMPATIBLE</td>
            <td align="left">Vendor ID Condition, Class ID Condition</td>
            <td align="left">
              <xref target="identifier-conditions"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.EXP</td>
            <td align="left">Expiration Time</td>
            <td align="left">
              <xref target="I-D.ietf-suit-update-management"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.AUTHENTIC</td>
            <td align="left">Signature, Payload Digests</td>
            <td align="left">
              <xref target="authentication-info"/>, <xref target="suit-condition-image-match"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.AUTH.IMG_TYPE</td>
            <td align="left">Payload Format</td>
            <td align="left">
              <xref target="I-D.ietf-suit-update-management"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.AUTH.IMG_LOC</td>
            <td align="left">Storage Location</td>
            <td align="left">
              <xref target="suit-component-identifier"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.AUTH.REMOTE_LOC</td>
            <td align="left">Payload Indicator</td>
            <td align="left">
              <xref target="suit-parameter-uri"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.AUTH.EXEC</td>
            <td align="left">Payload Digests, Size</td>
            <td align="left">
              <xref target="suit-parameter-image-digest"/>, <xref target="suit-parameter-image-size"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.AUTH.PRECURSOR</td>
            <td align="left">Precursor Image Digest</td>
            <td align="left">
              <xref target="suit-parameter-image-digest"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.AUTH.COMPATIBILITY</td>
            <td align="left">Authenticated Vendor and Class IDs</td>
            <td align="left">
              <xref target="suit-parameter-vendor-identifier"/>, <xref target="suit-parameter-class-identifier"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.RIGHTS</td>
            <td align="left">Signature</td>
            <td align="left">
              <xref target="authentication-info"/>, <xref target="access-control-lists"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.IMG.CONFIDENTIALITY</td>
            <td align="left">Encryption Wrapper</td>
            <td align="left">
              <xref target="I-D.ietf-suit-firmware-encryption"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.ACCESS_CONTROL: Access Control</td>
            <td align="left">None</td>
            <td align="left">
              <xref target="access-control-lists"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.MFST.CONFIDENTIALITY</td>
            <td align="left">Manifest Encryption Wrapper / Transport Security</td>
            <td align="left">
              <xref target="I-D.ietf-suit-firmware-encryption"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.IMG.COMPLETE_DIGEST</td>
            <td align="left">Payload Digests</td>
            <td align="left">Implementation Consideration</td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.REPORTING</td>
            <td align="left">None</td>
            <td align="left">
              <xref target="I-D.ietf-suit-report"/>, <xref target="RFC9334"/></td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.KEY.PROTECTION</td>
            <td align="left">None</td>
            <td align="left">Implementation Consideration</td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.KEY.ROTATION</td>
            <td align="left">None</td>
            <td align="left">
              <xref target="I-D.tschofenig-cose-cwt-chain"/>, Implementation Consideration</td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.MFST.CHECK</td>
            <td align="left">None</td>
            <td align="left">Deployment Consideration</td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.MFST.TRUSTED</td>
            <td align="left">None</td>
            <td align="left">Deployment Consideration</td>
          </tr>
          <tr>
            <td align="left">REQ.SEC.MFST.CONST</td>
            <td align="left">None</td>
            <td align="left">Implementation Consideration</td>
          </tr>
          <tr>
            <td align="left">REQ.USE.MFST.PRE_CHECK</td>
            <td align="left">Additional Installation Instructions</td>
            <td align="left">
              <xref target="I-D.ietf-suit-update-management"/></td>
          </tr>
          <tr>
            <td align="left">REQ.USE.MFST.TEXT</td>
            <td align="left">Manifest Text Information</td>
            <td align="left">
              <xref target="manifest-digest-text"/></td>
          </tr>
          <tr>
            <td align="left">REQ.USE.MFST.OVERRIDE_REMOTE</td>
            <td align="left">Aliases</td>
            <td align="left">
              <xref target="RFC3986"/> Relative URIs, <xref target="I-D.ietf-suit-trust-domains"/></td>
          </tr>
          <tr>
            <td align="left">REQ.USE.MFST.COMPONENT</td>
            <td align="left">Dependencies, StorageIdentifier, ComponentIdentifier</td>
            <td align="left">
              <xref target="suit-component-identifier">SUIT_Component_Identifier</xref>, <xref target="I-D.ietf-suit-trust-domains"/></td>
          </tr>
          <tr>
            <td align="left">REQ.USE.MFST.MULTI_AUTH</td>
            <td align="left">Signature</td>
            <td align="left">
              <xref target="authentication-info"/></td>
          </tr>
          <tr>
            <td align="left">REQ.USE.IMG.FORMAT</td>
            <td align="left">Payload Format</td>
            <td align="left">
              <xref target="I-D.ietf-suit-update-management"/></td>
          </tr>
          <tr>
            <td align="left">REQ.USE.IMG.NESTED</td>
            <td align="left">Processing Steps</td>
            <td align="left">
              <xref target="I-D.ietf-suit-firmware-encryption"/> (Encryption Wrapper), <xref target="I-D.ietf-suit-update-management"/> (Payload Format)</td>
          </tr>
          <tr>
            <td align="left">REQ.USE.IMG.VERSIONS</td>
            <td align="left">Required Image Version List</td>
            <td align="left">
              <xref target="I-D.ietf-suit-update-management"/></td>
          </tr>
          <tr>
            <td align="left">REQ.USE.IMG.SELECT</td>
            <td align="left">XIP Address</td>
            <td align="left">
              <xref target="suit-condition-component-slot"/></td>
          </tr>
          <tr>
            <td align="left">REQ.USE.EXEC</td>
            <td align="left">Runtime Metadata</td>
            <td align="left">
              <xref target="manifest-commands"/> (suit-invoke)</td>
          </tr>
          <tr>
            <td align="left">REQ.USE.LOAD</td>
            <td align="left">Load-Time Metadata</td>
            <td align="left">
              <xref target="manifest-commands"/> (suit-load)</td>
          </tr>
          <tr>
            <td align="left">REQ.USE.PAYLOAD</td>
            <td align="left">Payload</td>
            <td align="left">
              <xref target="template-integrated-payload"/></td>
          </tr>
          <tr>
            <td align="left">REQ.USE.PARSE</td>
            <td align="left">Simple Parsing</td>
            <td align="left">
              <xref target="command-behavior"/></td>
          </tr>
          <tr>
            <td align="left">REQ.USE.DELEGATION</td>
            <td align="left">Delegation Chain</td>
            <td align="left">
              <xref target="I-D.tschofenig-cose-cwt-chain"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>We would like to thank the following persons for their support in designing this mechanism:</t>
      <ul spacing="normal">
        <li>
          <dl>
            <dt>&nbsp;</dt>
            <dd>
              <t><contact fullname="Milosch Meriac"/></t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>&nbsp;</dt>
            <dd>
              <t><contact fullname="Geraint Luff"/></t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>&nbsp;</dt>
            <dd>
              <t><contact fullname="Dan Ros"/></t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>&nbsp;</dt>
            <dd>
              <t><contact fullname="John-Paul Stanford"/></t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>&nbsp;</dt>
            <dd>
              <t><contact fullname="Hugo Vincent"/></t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>&nbsp;</dt>
            <dd>
              <t><contact fullname="Carsten Bormann"/></t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>&nbsp;</dt>
            <dd>
              <t><contact fullname="Frank Audun Kvamtrø"/></t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>&nbsp;</dt>
            <dd>
              <t><contact fullname="Krzysztof Chruściński"/></t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>&nbsp;</dt>
            <dd>
              <t><contact fullname="Andrzej Puzdrowski"/></t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>&nbsp;</dt>
            <dd>
              <t><contact fullname="Michael Richardson"/></t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>&nbsp;</dt>
            <dd>
              <t><contact fullname="David Brown"/></t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>&nbsp;</dt>
            <dd>
              <t><contact fullname="Emmanuel Baccelli"/></t>
            </dd>
          </dl>
        </li>
      </ul>
      <t>We would like to thank our responsible area director, Roman Danyliw, for his detailed review.
Finally, we would like to thank our SUIT working group chairs (Dave Thaler, David Waltermire, Russ Housley)
for their feedback and support.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC4122bis">
          <front>
            <title>A Universally Unique IDentifier (UUID) URN Namespace</title>
            <seriesInfo name="DOI" value="10.17487/RFC4122"/>
            <seriesInfo name="RFC" value="4122"/>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <author fullname="R. Salz" initials="R." surname="Salz"/>
            <date month="July" year="2005"/>
            <abstract>
              <t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier). A UUID is 128 bits long, and can guarantee uniqueness across space and time. UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group). Information from earlier versions of the DCE specification have been incorporated into this document. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <seriesInfo name="DOI" value="10.17487/RFC9052"/>
            <seriesInfo name="RFC" value="9052"/>
            <seriesInfo name="STD" value="96"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <seriesInfo name="DOI" value="10.17487/RFC3986"/>
            <seriesInfo name="RFC" value="3986"/>
            <seriesInfo name="STD" value="66"/>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <seriesInfo name="DOI" value="10.17487/RFC8949"/>
            <seriesInfo name="RFC" value="8949"/>
            <seriesInfo name="STD" value="94"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC9019">
          <front>
            <title>A Firmware Update Architecture for Internet of Things</title>
            <seriesInfo name="DOI" value="10.17487/RFC9019"/>
            <seriesInfo name="RFC" value="9019"/>
            <author fullname="B. Moran" initials="B." surname="Moran"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="D. Brown" initials="D." surname="Brown"/>
            <author fullname="M. Meriac" initials="M." surname="Meriac"/>
            <date month="April" year="2021"/>
            <abstract>
              <t>Vulnerabilities in Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism suitable for devices with resource constraints. Incorporating such an update mechanism is a fundamental requirement for fixing vulnerabilities, but it also enables other important capabilities such as updating configuration settings and adding new functionality.</t>
              <t>In addition to the definition of terminology and an architecture, this document provides the motivation for the standardization of a manifest format as a transport-agnostic means for describing and protecting firmware updates.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC9124">
          <front>
            <title>A Manifest Information Model for Firmware Updates in Internet of Things (IoT) Devices</title>
            <seriesInfo name="DOI" value="10.17487/RFC9124"/>
            <seriesInfo name="RFC" value="9124"/>
            <author fullname="B. Moran" initials="B." surname="Moran"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <date month="January" year="2022"/>
            <abstract>
              <t>Vulnerabilities with Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism that is also suitable for constrained devices. Ensuring that devices function and remain secure over their service lifetime requires such an update mechanism to fix vulnerabilities, update configuration settings, and add new functionality.</t>
              <t>One component of such a firmware update is a concise and machine-processable metadata document, or manifest, that describes the firmware image(s) and offers appropriate protection. This document describes the information that must be present in the manifest.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-suit-mti">
          <front>
            <title>Mandatory-to-Implement Algorithms for Authors and Recipients of Software Update for the Internet of Things manifests</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-suit-mti-08"/>
            <author fullname="Brendan Moran" initials="B." surname="Moran">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Øyvind Rønningstad" initials="O." surname="Rønningstad">
              <organization>Nordic Semiconductor</organization>
            </author>
            <author fullname="Akira Tsukamoto" initials="A." surname="Tsukamoto">
              <organization>ALAXALA Networks Corp.</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   This document specifies algorithm profiles for SUIT manifest parsers
   and authors to ensure better interoperability.  These profiles apply
   specifically to a constrained node software update use case.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC9090">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for Object Identifiers</title>
            <seriesInfo name="DOI" value="10.17487/RFC9090"/>
            <seriesInfo name="RFC" value="9090"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="July" year="2021"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR), defined in RFC 8949, is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation.</t>
              <t>This document defines CBOR tags for object identifiers (OIDs) and is the reference document for the IANA registration of the CBOR tags so defined.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC9054">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Hash Algorithms</title>
            <seriesInfo name="DOI" value="10.17487/RFC9054"/>
            <seriesInfo name="RFC" value="9054"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>The CBOR Object Signing and Encryption (COSE) syntax (see RFC 9052) does not define any direct methods for using hash algorithms. There are, however, circumstances where hash algorithms are used, such as indirect signatures, where the hash of one or more contents are signed, and identification of an X.509 certificate or other object by the use of a fingerprint. This document defines hash algorithms that are identified by COSE algorithm identifiers.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <seriesInfo name="DOI" value="10.17487/RFC8610"/>
            <seriesInfo name="RFC" value="8610"/>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="BCP" value="14"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9397">
          <front>
            <title>Trusted Execution Environment Provisioning (TEEP) Architecture</title>
            <seriesInfo name="DOI" value="10.17487/RFC9397"/>
            <seriesInfo name="RFC" value="9397"/>
            <author fullname="M. Pei" initials="M." surname="Pei"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="D. Wheeler" initials="D." surname="Wheeler"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>A Trusted Execution Environment (TEE) is an environment that enforces the following: any code within the environment cannot be tampered with, and any data used by such code cannot be read or tampered with by any code outside the environment. This architecture document discusses the motivation for designing and standardizing a protocol for managing the lifecycle of Trusted Applications running inside such a TEE.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <seriesInfo name="DOI" value="10.17487/RFC9334"/>
            <seriesInfo name="RFC" value="9334"/>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-suit-firmware-encryption">
          <front>
            <title>Encrypted Payloads in SUIT Manifests</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-suit-firmware-encryption-22"/>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
            </author>
            <author fullname="Russ Housley" initials="R." surname="Housley">
              <organization>Vigil Security, LLC</organization>
            </author>
            <author fullname="Brendan Moran" initials="B." surname="Moran">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="David Brown" initials="D." surname="Brown">
              <organization>Linaro</organization>
            </author>
            <author fullname="Ken Takayama" initials="K." surname="Takayama">
              <organization>SECOM CO., LTD.</organization>
            </author>
            <date day="7" month="December" year="2024"/>
            <abstract>
              <t>   This document specifies techniques for encrypting software, firmware,
   machine learning models, and personalization data by utilizing the
   IETF SUIT manifest.  Key agreement is provided by ephemeral-static
   (ES) Diffie-Hellman (DH) and AES Key Wrap (AES-KW).  ES-DH uses
   public key cryptography while AES-KW uses a pre-shared key.
   Encryption of the plaintext is accomplished with conventional
   symmetric key cryptography.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-suit-update-management">
          <front>
            <title>Update Management Extensions for Software Updates for Internet of Things (SUIT) Manifests</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-suit-update-management-07"/>
            <author fullname="Brendan Moran" initials="B." surname="Moran">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Ken Takayama" initials="K." surname="Takayama">
              <organization>SECOM CO., LTD.</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This specification describes extensions to the SUIT manifest format
   defined in [I-D.ietf-suit-manifest].  These extensions allow an
   update author, update distributor or device operator to more
   precisely control the distribution and installation of updates to
   devices.  These extensions also provide a mechanism to inform a
   management system of Software Identifier and Software Bill Of
   Materials information about an updated device.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-suit-trust-domains">
          <front>
            <title>SUIT Manifest Extensions for Multiple Trust Domains</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-suit-trust-domains-09"/>
            <author fullname="Brendan Moran" initials="B." surname="Moran">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Ken Takayama" initials="K." surname="Takayama">
              <organization>SECOM CO., LTD.</organization>
            </author>
            <date day="4" month="December" year="2024"/>
            <abstract>
              <t>   This specification describes extensions to the SUIT Manifest format
   for use in deployments with multiple trust domains.  A device has
   more than one trust domain when it enables delegation of different
   rights to mutually distrusting entities for use for different
   purposes or Components in the context of firmware or software update.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-suit-report">
          <front>
            <title>Secure Reporting of Update Status</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-suit-report-10"/>
            <author fullname="Brendan Moran" initials="B." surname="Moran">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   The Software Update for the Internet of Things (SUIT) manifest
   provides a way for many different update and boot workflows to be
   described by a common format.  However, this does not provide a
   feedback mechanism for developers in the event that an update or boot
   fails.

   This specification describes a lightweight feedback mechanism that
   allows a developer in possession of a manifest to reconstruct the
   decisions made and actions performed by a manifest processor.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.tschofenig-cose-cwt-chain">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Header Parameters for Carrying and Referencing Chains of CBOR Web Tokens (CWTs)</title>
            <seriesInfo name="Internet-Draft" value="draft-tschofenig-cose-cwt-chain-01"/>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
            <author fullname="Brendan Moran" initials="B." surname="Moran">
              <organization>Arm Limited</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   The CBOR Object Signing and Encryption (COSE) message structure uses
   references to keys and defines header parameters to carry chains of
   X.509 certificates.

   This specification extends this functionality to CBOR Web Tokens
   (CWTs).

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC7228">
          <front>
            <title>Terminology for Constrained-Node Networks</title>
            <seriesInfo name="DOI" value="10.17487/RFC7228"/>
            <seriesInfo name="RFC" value="7228"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Ersue" initials="M." surname="Ersue"/>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>The Internet Protocol Suite is increasingly used on small devices with severe constraints on power, memory, and processing resources, creating constrained-node networks. This document provides a number of basic terms that have been useful in the standardization work for constrained-node networks.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="YAML" target="https://yaml.org/spec/1.2.2/">
          <front>
            <title>YAML Ain't Markup Language (YAML[TM]) version 1.2</title>
            <author>
              <organization/>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="COSE_Alg" target="https://www.iana.org/assignments/cose/cose.xhtml#algorithms">
          <front>
            <title>COSE Algorithms</title>
            <author>
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1657?>

<section anchor="full-cddl">
      <name>Full CDDL</name>
      <t>In order to create a valid SUIT Manifest document the structure of the corresponding CBOR message <bcp14>MUST</bcp14> adhere to the following CDDL (<xref target="RFC8610"/>) data definition.</t>
      <t>To be valid, the following CDDL <bcp14>MUST</bcp14> have the COSE CDDL appended to it. The COSE CDDL can be obtained by following the directions in <xref section="1.4" sectionFormat="comma" target="RFC9052"/>.</t>
      <sourcecode type="cddl" name="draft-ietf-suit-manifest.cddl">
SUIT_start = SUIT_Envelope_Tagged / SUIT_Manifest_Tagged / start
SUIT_Envelope_Tagged = #6.107(SUIT_Envelope)
SUIT_Envelope = {
  suit-authentication-wrapper =&gt; bstr .cbor SUIT_Authentication,
  suit-manifest  =&gt; bstr .cbor SUIT_Manifest,
  SUIT_Severable_Manifest_Members,
  * SUIT_Integrated_Payload,
  * $$SUIT_Envelope_Extensions,
}

SUIT_Authentication = [
    bstr .cbor SUIT_Digest,
    * bstr .cbor SUIT_Authentication_Block
]

SUIT_Digest = [
  suit-digest-algorithm-id : suit-cose-hash-algs,
  suit-digest-bytes : bstr,
  * $$SUIT_Digest-extensions
]

SUIT_Authentication_Block /= COSE_Mac_Tagged
SUIT_Authentication_Block /= COSE_Sign_Tagged
SUIT_Authentication_Block /= COSE_Mac0_Tagged
SUIT_Authentication_Block /= COSE_Sign1_Tagged

SUIT_Severable_Manifest_Members = (
  ? suit-payload-fetch =&gt; bstr .cbor SUIT_Command_Sequence,
  ? suit-install =&gt; bstr .cbor SUIT_Command_Sequence,
  ? suit-text =&gt; bstr .cbor SUIT_Text_Map,
  * $$SUIT_severable-members-extensions,
)

SUIT_Integrated_Payload = (suit-integrated-payload-key =&gt; bstr)
suit-integrated-payload-key = tstr

SUIT_Manifest_Tagged = #6.1070(SUIT_Manifest)

SUIT_Manifest = {
    suit-manifest-version         =&gt; 1,
    suit-manifest-sequence-number =&gt; uint,
    suit-common                   =&gt; bstr .cbor SUIT_Common,
    ? suit-reference-uri          =&gt; tstr,
    SUIT_Unseverable_Members,
    SUIT_Severable_Members_Choice,
    * $$SUIT_Manifest_Extensions,
}

SUIT_Unseverable_Members = (
  ? suit-validate =&gt; bstr .cbor SUIT_Command_Sequence,
  ? suit-load =&gt; bstr .cbor SUIT_Command_Sequence,
  ? suit-invoke =&gt; bstr .cbor SUIT_Command_Sequence,
  * $$unseverable-manifest-member-extensions,
)

SUIT_Severable_Members_Choice = (
  ? suit-payload-fetch =&gt; SUIT_Digest / 
      bstr .cbor SUIT_Command_Sequence,
  ? suit-install =&gt; SUIT_Digest / bstr .cbor SUIT_Command_Sequence,
  ? suit-text =&gt; SUIT_Digest / bstr .cbor SUIT_Text_Map,
  * $$severable-manifest-members-choice-extensions
)

SUIT_Common = {
    ? suit-components             =&gt; SUIT_Components,
    ? suit-shared-sequence        =&gt; bstr .cbor SUIT_Shared_Sequence,
    * $$SUIT_Common-extensions,
}

SUIT_Components           = [ + SUIT_Component_Identifier ]

;REQUIRED to implement:
suit-cose-hash-algs /= cose-alg-sha-256

;OPTIONAL to implement:
suit-cose-hash-algs /= cose-alg-shake128
suit-cose-hash-algs /= cose-alg-sha-384
suit-cose-hash-algs /= cose-alg-sha-512
suit-cose-hash-algs /= cose-alg-shake256

SUIT_Component_Identifier =  [* bstr]

SUIT_Shared_Sequence = [
    + ( SUIT_Condition // SUIT_Shared_Commands )
]

SUIT_Shared_Commands //= (suit-directive-set-component-index,  IndexArg)
SUIT_Shared_Commands //= (suit-directive-run-sequence,
    bstr .cbor SUIT_Shared_Sequence)
SUIT_Shared_Commands //= (suit-directive-try-each,
    SUIT_Directive_Try_Each_Argument_Shared)
SUIT_Shared_Commands //= (suit-directive-override-parameters,
    {+ $$SUIT_Parameters})

IndexArg /= uint
IndexArg /= true
IndexArg /= [+uint]


SUIT_Directive_Try_Each_Argument_Shared = [
    2* bstr .cbor SUIT_Shared_Sequence,
    ?nil
]

SUIT_Command_Sequence = [ + (
    SUIT_Condition // SUIT_Directive // SUIT_Command_Custom
) ]

SUIT_Command_Custom = (suit-command-custom, bstr/tstr/int/nil)
SUIT_Condition //= (suit-condition-vendor-identifier, SUIT_Rep_Policy)
SUIT_Condition //= (suit-condition-class-identifier,  SUIT_Rep_Policy)
SUIT_Condition //= (suit-condition-device-identifier, SUIT_Rep_Policy)
SUIT_Condition //= (suit-condition-image-match,       SUIT_Rep_Policy)
SUIT_Condition //= (suit-condition-component-slot,    SUIT_Rep_Policy)
SUIT_Condition //= (suit-condition-check-content,     SUIT_Rep_Policy)
SUIT_Condition //= (suit-condition-abort,             SUIT_Rep_Policy)

SUIT_Directive //= (suit-directive-write,             SUIT_Rep_Policy)
SUIT_Directive //= (suit-directive-set-component-index,  IndexArg)
SUIT_Directive //= (suit-directive-run-sequence,
    bstr .cbor SUIT_Command_Sequence)
SUIT_Directive //= (suit-directive-try-each,
    SUIT_Directive_Try_Each_Argument)
SUIT_Directive //= (suit-directive-override-parameters,
    {+ $$SUIT_Parameters})
SUIT_Directive //= (suit-directive-fetch,             SUIT_Rep_Policy)
SUIT_Directive //= (suit-directive-copy,              SUIT_Rep_Policy)
SUIT_Directive //= (suit-directive-swap,              SUIT_Rep_Policy)
SUIT_Directive //= (suit-directive-invoke,            SUIT_Rep_Policy)

SUIT_Directive_Try_Each_Argument = [
    2* bstr .cbor SUIT_Command_Sequence,
    ?nil
]

SUIT_Rep_Policy = uint .bits suit-reporting-bits

suit-reporting-bits = &amp;(
    suit-send-record-success : 0,
    suit-send-record-failure : 1,
    suit-send-sysinfo-success : 2,
    suit-send-sysinfo-failure : 3
)

$$SUIT_Parameters //= (suit-parameter-vendor-identifier =&gt;
    (RFC4122_UUID / cbor-pen))

cbor-pen = #6.112(bstr)

$$SUIT_Parameters //= (suit-parameter-class-identifier =&gt; RFC4122_UUID)
$$SUIT_Parameters //= (suit-parameter-image-digest
    =&gt; bstr .cbor SUIT_Digest)
$$SUIT_Parameters //= (suit-parameter-image-size =&gt; uint)
$$SUIT_Parameters //= (suit-parameter-component-slot =&gt; uint)

$$SUIT_Parameters //= (suit-parameter-uri =&gt; tstr)
$$SUIT_Parameters //= (suit-parameter-fetch-arguments =&gt; bstr)
$$SUIT_Parameters //= (suit-parameter-source-component =&gt; uint)
$$SUIT_Parameters //= (suit-parameter-invoke-args =&gt; bstr)

$$SUIT_Parameters //= (suit-parameter-device-identifier =&gt; RFC4122_UUID)

$$SUIT_Parameters //= (suit-parameter-custom =&gt; int/bool/tstr/bstr)

$$SUIT_Parameters //= (suit-parameter-content =&gt; bstr)
$$SUIT_Parameters //= (suit-parameter-strict-order =&gt; bool)
$$SUIT_Parameters //= (suit-parameter-soft-failure =&gt; bool)

RFC4122_UUID = bstr .size 16

tag38-ltag = text .regexp "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*"
SUIT_Text_Map = {
    + tag38-ltag =&gt; SUIT_Text_LMap
}
SUIT_Text_LMap = {
    SUIT_Text_Keys,
    * SUIT_Component_Identifier =&gt; {
        SUIT_Text_Component_Keys
    }
}

SUIT_Text_Component_Keys = (
    ? suit-text-vendor-name           =&gt; tstr,
    ? suit-text-model-name            =&gt; tstr,
    ? suit-text-vendor-domain         =&gt; tstr,
    ? suit-text-model-info            =&gt; tstr,
    ? suit-text-component-description =&gt; tstr,
    ? suit-text-component-version     =&gt; tstr,
    * $$suit-text-component-key-extensions
)

SUIT_Text_Keys = (
    ? suit-text-manifest-description =&gt; tstr,
    ? suit-text-update-description   =&gt; tstr,
    ? suit-text-manifest-json-source =&gt; tstr,
    ? suit-text-manifest-yaml-source =&gt; tstr,
    * $$suit-text-key-extensions
)

suit-authentication-wrapper = 2
suit-manifest = 3

;REQUIRED to implement:
cose-alg-sha-256 = -16

;OPTIONAL to implement:
cose-alg-shake128 = -18
cose-alg-sha-384 = -43
cose-alg-sha-512 = -44
cose-alg-shake256 = -45

;Unseverable, recipient-necessary
suit-manifest-version = 1
suit-manifest-sequence-number = 2
suit-common = 3
suit-reference-uri = 4
suit-validate = 7
suit-load = 8
suit-invoke = 9
;Severable, recipient-necessary
suit-payload-fetch = 16
suit-install = 20
;Severable, recipient-unnecessary
suit-text = 23

suit-components = 2
suit-shared-sequence = 4

suit-command-custom = nint

suit-condition-vendor-identifier = 1
suit-condition-class-identifier  = 2
suit-condition-image-match       = 3
suit-condition-component-slot    = 5
suit-condition-check-content     = 6

suit-condition-abort                    = 14
suit-condition-device-identifier        = 24

suit-directive-set-component-index      = 12
suit-directive-try-each                 = 15
suit-directive-write                    = 18
suit-directive-override-parameters      = 20
suit-directive-fetch                    = 21
suit-directive-copy                     = 22
suit-directive-invoke                   = 23

suit-directive-swap                     = 31
suit-directive-run-sequence             = 32

suit-parameter-vendor-identifier = 1
suit-parameter-class-identifier  = 2
suit-parameter-image-digest      = 3
suit-parameter-component-slot    = 5

suit-parameter-strict-order      = 12
suit-parameter-soft-failure      = 13
suit-parameter-image-size        = 14
suit-parameter-content           = 18

suit-parameter-uri               = 21
suit-parameter-source-component  = 22
suit-parameter-invoke-args       = 23

suit-parameter-device-identifier = 24
suit-parameter-fetch-arguments   = 25

suit-parameter-custom = nint

suit-text-manifest-description  = 1
suit-text-update-description    = 2
suit-text-manifest-json-source  = 3
suit-text-manifest-yaml-source  = 4

suit-text-vendor-name           = 1
suit-text-model-name            = 2
suit-text-vendor-domain         = 3
suit-text-model-info            = 4
suit-text-component-description = 5
suit-text-component-version     = 6
</sourcecode>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>The following examples demonstrate a small subset of the functionality of the manifest. Even a simple manifest processor can execute most of these manifests.</t>
      <t>The examples are signed using the following ECDSA secp256r1 key:</t>
      <artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgApZYjZCUGLM50VBC
CjYStX+09jGmnyJPrpDLTz/hiXOhRANCAASEloEarguqq9JhVxie7NomvqqL8Rtv
P+bitWWchdvArTsfKktsCYExwKNtrNHXi9OB3N+wnAUtszmR23M4tKiW
-----END PRIVATE KEY-----
]]></artwork>
      <t>The corresponding public key can be used to verify these examples:</t>
      <artwork><![CDATA[
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhJaBGq4LqqvSYVcYnuzaJr6qi/Eb
bz/m4rVlnIXbwK07HypLbAmBMcCjbazR14vTgdzfsJwFLbM5kdtzOLSolg==
-----END PUBLIC KEY-----
]]></artwork>
      <t>Each example uses SHA256 as the digest function.</t>
      <t>Note that reporting policies are declared for each non-flow-control command in these examples. The reporting policies used in the examples are described in the following tables.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Policy</th>
            <th align="left">Label</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">suit-send-record-on-success</td>
            <td align="left">Rec-Pass</td>
          </tr>
          <tr>
            <td align="left">suit-send-record-on-failure</td>
            <td align="left">Rec-Fail</td>
          </tr>
          <tr>
            <td align="left">suit-send-sysinfo-success</td>
            <td align="left">Sys-Pass</td>
          </tr>
          <tr>
            <td align="left">suit-send-sysinfo-failure</td>
            <td align="left">Sys-Fail</td>
          </tr>
        </tbody>
      </table>
      <table>
        <thead>
          <tr>
            <th align="left">Command</th>
            <th align="left">Sys-Fail</th>
            <th align="left">Sys-Pass</th>
            <th align="left">Rec-Fail</th>
            <th align="left">Rec-Pass</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">suit-condition-vendor-identifier</td>
            <td align="left">1</td>
            <td align="left">1</td>
            <td align="left">1</td>
            <td align="left">1</td>
          </tr>
          <tr>
            <td align="left">suit-condition-class-identifier</td>
            <td align="left">1</td>
            <td align="left">1</td>
            <td align="left">1</td>
            <td align="left">1</td>
          </tr>
          <tr>
            <td align="left">suit-condition-image-match</td>
            <td align="left">1</td>
            <td align="left">1</td>
            <td align="left">1</td>
            <td align="left">1</td>
          </tr>
          <tr>
            <td align="left">suit-condition-component-slot</td>
            <td align="left">0</td>
            <td align="left">1</td>
            <td align="left">0</td>
            <td align="left">1</td>
          </tr>
          <tr>
            <td align="left">suit-directive-fetch</td>
            <td align="left">0</td>
            <td align="left">0</td>
            <td align="left">1</td>
            <td align="left">0</td>
          </tr>
          <tr>
            <td align="left">suit-directive-copy</td>
            <td align="left">0</td>
            <td align="left">0</td>
            <td align="left">1</td>
            <td align="left">0</td>
          </tr>
          <tr>
            <td align="left">suit-directive-invoke</td>
            <td align="left">0</td>
            <td align="left">0</td>
            <td align="left">1</td>
            <td align="left">0</td>
          </tr>
        </tbody>
      </table>
      <section anchor="example-0-secure-boot">
        <name>Example 0: Secure Boot</name>
        <t>This example covers the following templates:</t>
        <ul spacing="normal">
          <li>Compatibility Check (<xref target="template-compatibility-check"/>)</li>
          <li>Secure Boot (<xref target="template-secure-boot"/>)</li>
        </ul>
        <t>It also serves as the minimum example.</t>
        <sourcecode type="cbor-diag" name="example0.cbor-diag">
107({
        / authentication-wrapper / 2:&lt;&lt; [
            / digest: / &lt;&lt; [
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'6658ea560262696dd1f13b782239a064da7c6c5cbaf52fded428a6fc83c7e5af'
            ] &gt;&gt;,
            / signature: / &lt;&lt; 18([
                / protected / &lt;&lt; {
                    / alg / 1:-7 / "ES256" /
                } &gt;&gt;,
                / unprotected / {
                },
                / payload / null / nil /,
                / signature / h'408d0816f9b510749bf6a51b066951e08a4438
f849eb092a1ac768eed9de696c1b1dd35d82ef149e6a73a61976ad2cfe78444b806429
3350a122f332cb49f0da'
            ]) &gt;&gt;
        ] &gt;&gt;,
        / manifest / 3:&lt;&lt; {
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:0,
            / common / 3:&lt;&lt; {
                / components / 2:[
                    [h'00']
                ],
                / shared-sequence / 4:&lt;&lt; [
                    / directive-override-parameters / 20,{
                        / vendor-id /
1:h'fa6b4a53d5ad5fdfbe9de663e4d41ffe' / fa6b4a53-d5ad-5fdf-
be9d-e663e4d41ffe /,
                        / class-id /
2:h'1492af1425695e48bf429b2d51f2ab45' /
1492af14-2569-5e48-bf42-9b2d51f2ab45 /,
                        / image-digest / 3:&lt;&lt; [
                            / algorithm-id / -16 / "sha256" /,
                            / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                        ] &gt;&gt;,
                        / image-size / 14:34768
                    },
                    / condition-vendor-identifier / 1,15,
                    / condition-class-identifier / 2,15
                ] &gt;&gt;
            } &gt;&gt;,
            / validate / 7:&lt;&lt; [
                / condition-image-match / 3,15
            ] &gt;&gt;,
            / invoke / 9:&lt;&lt; [
                / directive-invoke / 23,2
            ] &gt;&gt;
        } &gt;&gt;
    })
</sourcecode>
        <t>Total size of Envelope without COSE authentication object:  161</t>
        <t>Envelope:</t>
        <artwork><![CDATA[
d86ba2025827815824822f58206658ea560262696dd1f13b782239a064da
7c6c5cbaf52fded428a6fc83c7e5af035871a50101020003585fa2028181
41000458568614a40150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492
af1425695e48bf429b2d51f2ab45035824822f5820001122334455667788
99aabbccddeeff0123456789abcdeffedcba98765432100e1987d0010f02
0f074382030f0943821702
]]></artwork>
        <t>Total size of Envelope with COSE authentication object:  237</t>
        <t>Envelope with COSE authentication object:</t>
        <artwork><![CDATA[
d86ba2025873825824822f58206658ea560262696dd1f13b782239a064da
7c6c5cbaf52fded428a6fc83c7e5af584ad28443a10126a0f65840408d08
16f9b510749bf6a51b066951e08a4438f849eb092a1ac768eed9de696c1b
1dd35d82ef149e6a73a61976ad2cfe78444b8064293350a122f332cb49f0
da035871a50101020003585fa202818141000458568614a40150fa6b4a53
d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab45
035824822f582000112233445566778899aabbccddeeff0123456789abcd
effedcba98765432100e1987d0010f020f074382030f0943821702
]]></artwork>
      </section>
      <section anchor="example-1-simultaneous-download-and-installation-of-payload">
        <name>Example 1: Simultaneous Download and Installation of Payload</name>
        <t>This example covers the following templates:</t>
        <ul spacing="normal">
          <li>Compatibility Check (<xref target="template-compatibility-check"/>)</li>
          <li>Firmware Download (<xref target="firmware-download-template"/>)</li>
        </ul>
        <t>Simultaneous download and installation of payload. No secure boot is present in this example to demonstrate a download-only manifest.</t>
        <sourcecode type="cbor-diag" name="example1.cbor-diag">
107({
        / authentication-wrapper / 2:&lt;&lt; [
            / digest: / &lt;&lt; [
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'1f2e7acca0dc2786f2fe4eb947f50873a6a3cfaa98866c5b02e621f42074daf2'
            ] &gt;&gt;,
            / signature: / &lt;&lt; 18([
                / protected / &lt;&lt; {
                    / alg / 1:-7 / "ES256" /
                } &gt;&gt;,
                / unprotected / {
                },
                / payload / null / nil /,
                / signature / h'27a3d7986eddcc1bee04e1436746408c308ed3
c15ac590a1ca0cf96f85671ccac216cb9a1497fc59e21c15f33c95cf75203e25c287b3
1a57d6cd2ef950b27a7a'
            ]) &gt;&gt;
        ] &gt;&gt;,
        / manifest / 3:&lt;&lt; {
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:1,
            / common / 3:&lt;&lt; {
                / components / 2:[
                    [h'00']
                ],
                / shared-sequence / 4:&lt;&lt; [
                    / directive-override-parameters / 20,{
                        / vendor-id /
1:h'fa6b4a53d5ad5fdfbe9de663e4d41ffe' / fa6b4a53-d5ad-5fdf-
be9d-e663e4d41ffe /,
                        / class-id /
2:h'1492af1425695e48bf429b2d51f2ab45' /
1492af14-2569-5e48-bf42-9b2d51f2ab45 /,
                        / image-digest / 3:&lt;&lt; [
                            / algorithm-id / -16 / "sha256" /,
                            / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                        ] &gt;&gt;,
                        / image-size / 14:34768
                    },
                    / condition-vendor-identifier / 1,15,
                    / condition-class-identifier / 2,15
                ] &gt;&gt;
            } &gt;&gt;,
            / validate / 7:&lt;&lt; [
                / condition-image-match / 3,15
            ] &gt;&gt;,
            / install / 20:&lt;&lt; [
                / directive-override-parameters / 20,{
                    / uri / 21:"http://example.com/file.bin"
                },
                / directive-fetch / 21,2,
                / condition-image-match / 3,15
            ] &gt;&gt;
        } &gt;&gt;
    })
</sourcecode>
        <t>Total size of Envelope without COSE authentication object:  196</t>
        <t>Envelope:</t>
        <artwork><![CDATA[
d86ba2025827815824822f58201f2e7acca0dc2786f2fe4eb947f50873a6
a3cfaa98866c5b02e621f42074daf2035894a50101020103585fa2028181
41000458568614a40150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492
af1425695e48bf429b2d51f2ab45035824822f5820001122334455667788
99aabbccddeeff0123456789abcdeffedcba98765432100e1987d0010f02
0f074382030f1458258614a115781b687474703a2f2f6578616d706c652e
636f6d2f66696c652e62696e1502030f
]]></artwork>
        <t>Total size of Envelope with COSE authentication object:  272</t>
        <t>Envelope with COSE authentication object:</t>
        <artwork><![CDATA[
d86ba2025873825824822f58201f2e7acca0dc2786f2fe4eb947f50873a6
a3cfaa98866c5b02e621f42074daf2584ad28443a10126a0f6584027a3d7
986eddcc1bee04e1436746408c308ed3c15ac590a1ca0cf96f85671ccac2
16cb9a1497fc59e21c15f33c95cf75203e25c287b31a57d6cd2ef950b27a
7a035894a50101020103585fa202818141000458568614a40150fa6b4a53
d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab45
035824822f582000112233445566778899aabbccddeeff0123456789abcd
effedcba98765432100e1987d0010f020f074382030f1458258614a11578
1b687474703a2f2f6578616d706c652e636f6d2f66696c652e62696e1502
030f
]]></artwork>
      </section>
      <section anchor="example-2-simultaneous-download-installation-secure-boot-severed-fields">
        <name>Example 2: Simultaneous Download, Installation, Secure Boot, Severed Fields</name>
        <t>This example covers the following templates:</t>
        <ul spacing="normal">
          <li>Compatibility Check (<xref target="template-compatibility-check"/>)</li>
          <li>Secure Boot (<xref target="template-secure-boot"/>)</li>
          <li>Firmware Download (<xref target="firmware-download-template"/>)</li>
        </ul>
        <t>This example also demonstrates severable elements (<xref target="ovr-severable"/>), and text (<xref target="manifest-digest-text"/>).</t>
        <sourcecode type="cbor-diag" name="example2.cbor-diag">
107({
        / authentication-wrapper / 2:&lt;&lt; [
            / digest: / &lt;&lt; [
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'6a5197ed8f9dccf733d1c89a359441708e070b4c6dcb9a1c2c82c6165f609b90'
            ] &gt;&gt;,
            / signature: / &lt;&lt; 18([
                / protected / &lt;&lt; {
                    / alg / 1:-7 / "ES256" /
                } &gt;&gt;,
                / unprotected / {
                },
                / payload / null / nil /,
                / signature / h'073d8d80ca67d61cdf04d813c748b2de98fe78
6fc67b764431307c8dbcbe91dc6f762c2c4d7bb998ff9ead4798e03c8ee26b89ef7a9a
d4569f6e187ce89e16c5'
            ]) &gt;&gt;
        ] &gt;&gt;,
        / manifest / 3:&lt;&lt; {
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:2,
            / common / 3:&lt;&lt; {
                / components / 2:[
                    [h'00']
                ],
                / shared-sequence / 4:&lt;&lt; [
                    / directive-override-parameters / 20,{
                        / vendor-id /
1:h'fa6b4a53d5ad5fdfbe9de663e4d41ffe' / fa6b4a53-d5ad-5fdf-
be9d-e663e4d41ffe /,
                        / class-id /
2:h'1492af1425695e48bf429b2d51f2ab45' /
1492af14-2569-5e48-bf42-9b2d51f2ab45 /,
                        / image-digest / 3:&lt;&lt; [
                            / algorithm-id / -16 / "sha256" /,
                            / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                        ] &gt;&gt;,
                        / image-size / 14:34768
                    },
                    / condition-vendor-identifier / 1,15,
                    / condition-class-identifier / 2,15
                ] &gt;&gt;
            } &gt;&gt;,
            / reference-uri / 4:"https://git.io/JJYoj",
            / validate / 7:&lt;&lt; [
                / condition-image-match / 3,15
            ] &gt;&gt;,
            / invoke / 9:&lt;&lt; [
                / directive-invoke / 23,2
            ] &gt;&gt;,
            / install / 20:[
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'cfa90c5c58595e7f5119a72f803fd0370b3e6abbec6315cd38f63135281bc498'
            ],
            / text / 23:[
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'302196d452bce5e8bfeaf71e395645ede6d365e63507a081379721eeecf00007'
            ]
        } &gt;&gt;
    })
</sourcecode>
        <t>Total size of the Envelope without COSE authentication object or Severable Elements:  257</t>
        <t>Envelope:</t>
        <artwork><![CDATA[
d86ba2025827815824822f58206a5197ed8f9dccf733d1c89a359441708e
070b4c6dcb9a1c2c82c6165f609b900358d1a80101020203585fa2028181
41000458568614a40150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492
af1425695e48bf429b2d51f2ab45035824822f5820001122334455667788
99aabbccddeeff0123456789abcdeffedcba98765432100e1987d0010f02
0f047468747470733a2f2f6769742e696f2f4a4a596f6a074382030f0943
82170214822f5820cfa90c5c58595e7f5119a72f803fd0370b3e6abbec63
15cd38f63135281bc49817822f5820302196d452bce5e8bfeaf71e395645
ede6d365e63507a081379721eeecf00007
]]></artwork>
        <t>Total size of the Envelope with COSE authentication object but without Severable Elements:  333</t>
        <t>Envelope:</t>
        <artwork><![CDATA[
d86ba2025873825824822f58206a5197ed8f9dccf733d1c89a359441708e
070b4c6dcb9a1c2c82c6165f609b90584ad28443a10126a0f65840073d8d
80ca67d61cdf04d813c748b2de98fe786fc67b764431307c8dbcbe91dc6f
762c2c4d7bb998ff9ead4798e03c8ee26b89ef7a9ad4569f6e187ce89e16
c50358d1a80101020203585fa202818141000458568614a40150fa6b4a53
d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab45
035824822f582000112233445566778899aabbccddeeff0123456789abcd
effedcba98765432100e1987d0010f020f047468747470733a2f2f676974
2e696f2f4a4a596f6a074382030f094382170214822f5820cfa90c5c5859
5e7f5119a72f803fd0370b3e6abbec6315cd38f63135281bc49817822f58
20302196d452bce5e8bfeaf71e395645ede6d365e63507a081379721eeec
f00007
]]></artwork>
        <t>Total size of Envelope with COSE authentication object and Severable Elements:  923</t>
        <t>Envelope with COSE authentication object:</t>
        <artwork><![CDATA[
d86ba4025873825824822f58206a5197ed8f9dccf733d1c89a359441708e
070b4c6dcb9a1c2c82c6165f609b90584ad28443a10126a0f65840073d8d
80ca67d61cdf04d813c748b2de98fe786fc67b764431307c8dbcbe91dc6f
762c2c4d7bb998ff9ead4798e03c8ee26b89ef7a9ad4569f6e187ce89e16
c50358d1a80101020203585fa202818141000458568614a40150fa6b4a53
d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab45
035824822f582000112233445566778899aabbccddeeff0123456789abcd
effedcba98765432100e1987d0010f020f047468747470733a2f2f676974
2e696f2f4a4a596f6a074382030f094382170214822f5820cfa90c5c5859
5e7f5119a72f803fd0370b3e6abbec6315cd38f63135281bc49817822f58
20302196d452bce5e8bfeaf71e395645ede6d365e63507a081379721eeec
f0000714583c8614a1157832687474703a2f2f6578616d706c652e636f6d
2f766572792f6c6f6e672f706174682f746f2f66696c652f66696c652e62
696e1502030f1759020ba165656e2d5553a20179019d2323204578616d70
6c6520323a2053696d756c74616e656f757320446f776e6c6f61642c2049
6e7374616c6c6174696f6e2c2053656375726520426f6f742c2053657665
726564204669656c64730a0a2020202054686973206578616d706c652063
6f766572732074686520666f6c6c6f77696e672074656d706c617465733a
0a202020200a202020202a20436f6d7061746962696c6974792043686563
6b20287b7b74656d706c6174652d636f6d7061746962696c6974792d6368
65636b7d7d290a202020202a2053656375726520426f6f7420287b7b7465
6d706c6174652d7365637572652d626f6f747d7d290a202020202a204669
726d7761726520446f776e6c6f616420287b7b6669726d776172652d646f
776e6c6f61642d74656d706c6174657d7d290a202020200a202020205468
6973206578616d706c6520616c736f2064656d6f6e737472617465732073
6576657261626c6520656c656d656e747320287b7b6f76722d7365766572
61626c657d7d292c20616e64207465787420287b7b6d616e69666573742d
6469676573742d746578747d7d292e814100a2036761726d2e636f6d0578
525468697320636f6d706f6e656e7420697320612064656d6f6e73747261
74696f6e2e205468652064696765737420697320612073616d706c652070
61747465726e2c206e6f742061207265616c206f6e652e
]]></artwork>
      </section>
      <section anchor="example-3-ab-images">
        <name>Example 3: A/B images</name>
        <t>This example covers the following templates:</t>
        <ul spacing="normal">
          <li>Compatibility Check (<xref target="template-compatibility-check"/>)</li>
          <li>Secure Boot (<xref target="template-secure-boot"/>)</li>
          <li>Firmware Download (<xref target="firmware-download-template"/>)</li>
          <li>A/B Image Template (<xref target="a-b-template"/>)</li>
        </ul>
        <sourcecode type="cbor-diag" name="example3.cbor-diag">
107({
        / authentication-wrapper / 2:&lt;&lt; [
            / digest: / &lt;&lt; [
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'f6d44a62ec906b392500c242e78e908e9cc5057f3f04104a06a8566200da2ee0'
            ] &gt;&gt;,
            / signature: / &lt;&lt; 18([
                / protected / &lt;&lt; {
                    / alg / 1:-7 / "ES256" /
                } &gt;&gt;,
                / unprotected / {
                },
                / payload / null / nil /,
                / signature / h'0bbf7058c1a79dff23c7755d36aae5c6cc1aac
b818f456e2e03f2664c369b9c6700931a52f1f8d808aa4a8e5220d479c9661d2bce0a4
4974004325001e3b1abb'
            ]) &gt;&gt;
        ] &gt;&gt;,
        / manifest / 3:&lt;&lt; {
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:3,
            / common / 3:&lt;&lt; {
                / components / 2:[
                    [h'00']
                ],
                / shared-sequence / 4:&lt;&lt; [
                    / directive-override-parameters / 20,{
                        / vendor-id /
1:h'fa6b4a53d5ad5fdfbe9de663e4d41ffe' / fa6b4a53-d5ad-5fdf-
be9d-e663e4d41ffe /,
                        / class-id /
2:h'1492af1425695e48bf429b2d51f2ab45' /
1492af14-2569-5e48-bf42-9b2d51f2ab45 /
                    },
                    / directive-try-each / 15,[
                        &lt;&lt; [
                            / directive-override-parameters / 20,{
                                / slot / 5:0
                            },
                            / condition-component-slot / 5,5,
                            / directive-override-parameters / 20,{
                                / image-digest / 3:&lt;&lt; [
                                    / algorithm-id / -16 / "sha256" /,
                                    / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                                ] &gt;&gt;,
                                / image-size / 14:34768
                            }
                        ] &gt;&gt;,
                        &lt;&lt; [
                            / directive-override-parameters / 20,{
                                / slot / 5:1
                            },
                            / condition-component-slot / 5,5,
                            / directive-override-parameters / 20,{
                                / image-digest / 3:&lt;&lt; [
                                    / algorithm-id / -16 / "sha256" /,
                                    / digest-bytes /
h'0123456789abcdeffedcba987654321000112233445566778899aabbccddeeff'
                                ] &gt;&gt;,
                                / image-size / 14:76834
                            }
                        ] &gt;&gt;
                    ],
                    / condition-vendor-identifier / 1,15,
                    / condition-class-identifier / 2,15
                ] &gt;&gt;
            } &gt;&gt;,
            / validate / 7:&lt;&lt; [
                / condition-image-match / 3,15
            ] &gt;&gt;,
            / install / 20:&lt;&lt; [
                / directive-try-each / 15,[
                    &lt;&lt; [
                        / directive-override-parameters / 20,{
                            / slot / 5:0
                        },
                        / condition-component-slot / 5,5,
                        / directive-override-parameters / 20,{
                            / uri / 21:"http://example.com/file1.bin"
                        }
                    ] &gt;&gt;,
                    &lt;&lt; [
                        / directive-override-parameters / 20,{
                            / slot / 5:1
                        },
                        / condition-component-slot / 5,5,
                        / directive-override-parameters / 20,{
                            / uri / 21:"http://example.com/file2.bin"
                        }
                    ] &gt;&gt;
                ],
                / directive-fetch / 21,2,
                / condition-image-match / 3,15
            ] &gt;&gt;
        } &gt;&gt;
    })
</sourcecode>
        <t>Total size of Envelope without COSE authentication object:  320</t>
        <t>Envelope:</t>
        <artwork><![CDATA[
d86ba2025827815824822f5820f6d44a62ec906b392500c242e78e908e9c
c5057f3f04104a06a8566200da2ee00359010fa5010102030358a4a20281
81410004589b8814a20150fa6b4a53d5ad5fdfbe9de663e4d41ffe025014
92af1425695e48bf429b2d51f2ab450f8258348614a10500050514a20358
24822f582000112233445566778899aabbccddeeff0123456789abcdeffe
dcba98765432100e1987d058368614a10501050514a2035824822f582001
23456789abcdeffedcba987654321000112233445566778899aabbccddee
ff0e1a00012c22010f020f074382030f14585b860f8258288614a1050005
0514a115781c687474703a2f2f6578616d706c652e636f6d2f66696c6531
2e62696e58288614a10501050514a115781c687474703a2f2f6578616d70
6c652e636f6d2f66696c65322e62696e1502030f
]]></artwork>
        <t>Total size of Envelope with COSE authentication object:  396</t>
        <t>Envelope with COSE authentication object:</t>
        <artwork><![CDATA[
d86ba2025873825824822f5820f6d44a62ec906b392500c242e78e908e9c
c5057f3f04104a06a8566200da2ee0584ad28443a10126a0f658400bbf70
58c1a79dff23c7755d36aae5c6cc1aacb818f456e2e03f2664c369b9c670
0931a52f1f8d808aa4a8e5220d479c9661d2bce0a44974004325001e3b1a
bb0359010fa5010102030358a4a2028181410004589b8814a20150fa6b4a
53d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab
450f8258348614a10500050514a2035824822f5820001122334455667788
99aabbccddeeff0123456789abcdeffedcba98765432100e1987d0583686
14a10501050514a2035824822f58200123456789abcdeffedcba98765432
1000112233445566778899aabbccddeeff0e1a00012c22010f020f074382
030f14585b860f8258288614a10500050514a115781c687474703a2f2f65
78616d706c652e636f6d2f66696c65312e62696e58288614a10501050514
a115781c687474703a2f2f6578616d706c652e636f6d2f66696c65322e62
696e1502030f
]]></artwork>
      </section>
      <section anchor="example-4-load-from-external-storage">
        <name>Example 4: Load from External Storage</name>
        <t>This example covers the following templates:</t>
        <ul spacing="normal">
          <li>Compatibility Check (<xref target="template-compatibility-check"/>)</li>
          <li>Secure Boot (<xref target="template-secure-boot"/>)</li>
          <li>Firmware Download (<xref target="firmware-download-template"/>)</li>
          <li>Install (<xref target="template-install"/>)</li>
          <li>Load (<xref target="template-load-ext"/>)</li>
        </ul>
        <sourcecode type="cbor-diag" name="example4.cbor-diag">
107({
        / authentication-wrapper / 2:&lt;&lt; [
            / digest: / &lt;&lt; [
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'5b5f6586b1e6cdf19ee479a5adabf206581000bd584b0832a9bdaf4f72cdbdd6'
            ] &gt;&gt;,
            / signature: / &lt;&lt; 18([
                / protected / &lt;&lt; {
                    / alg / 1:-7 / "ES256" /
                } &gt;&gt;,
                / unprotected / {
                },
                / payload / null / nil /,
                / signature / h'c53c2826b042384e95c646cbcd4308b181f1ed
2bfbeb4e70b93cac9fbdc82e382d877e2c2bcfaf975ffcd36941f2f4db89f68d3c77d6
a3506e9b1509a49dec46'
            ]) &gt;&gt;
        ] &gt;&gt;,
        / manifest / 3:&lt;&lt; {
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:4,
            / common / 3:&lt;&lt; {
                / components / 2:[
                    [h'00'],
                    [h'02'],
                    [h'01']
                ],
                / shared-sequence / 4:&lt;&lt; [
                    / directive-set-component-index / 12,0,
                    / directive-override-parameters / 20,{
                        / vendor-id /
1:h'fa6b4a53d5ad5fdfbe9de663e4d41ffe' / fa6b4a53-d5ad-5fdf-
be9d-e663e4d41ffe /,
                        / class-id /
2:h'1492af1425695e48bf429b2d51f2ab45' /
1492af14-2569-5e48-bf42-9b2d51f2ab45 /,
                        / image-digest / 3:&lt;&lt; [
                            / algorithm-id / -16 / "sha256" /,
                            / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                        ] &gt;&gt;,
                        / image-size / 14:34768
                    },
                    / condition-vendor-identifier / 1,15,
                    / condition-class-identifier / 2,15
                ] &gt;&gt;
            } &gt;&gt;,
            / validate / 7:&lt;&lt; [
                / directive-set-component-index / 12,0,
                / condition-image-match / 3,15
            ] &gt;&gt;,
            / load / 8:&lt;&lt; [
                / directive-set-component-index / 12,2,
                / directive-override-parameters / 20,{
                    / image-digest / 3:&lt;&lt; [
                        / algorithm-id / -16 / "sha256" /,
                        / digest-bytes /
h'0123456789abcdeffedcba987654321000112233445566778899aabbccddeeff'
                    ] &gt;&gt;,
                    / image-size / 14:76834,
                    / source-component / 22:0 / [h'00'] /
                },
                / directive-copy / 22,2,
                / condition-image-match / 3,15
            ] &gt;&gt;,
            / invoke / 9:&lt;&lt; [
                / directive-set-component-index / 12,2,
                / directive-invoke / 23,2
            ] &gt;&gt;,
            / payload-fetch / 16:&lt;&lt; [
                / directive-set-component-index / 12,1,
                / directive-override-parameters / 20,{
                    / image-digest / 3:&lt;&lt; [
                        / algorithm-id / -16 / "sha256" /,
                        / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                    ] &gt;&gt;,
                    / uri / 21:"http://example.com/file.bin"
                },
                / directive-fetch / 21,2,
                / condition-image-match / 3,15
            ] &gt;&gt;,
            / install / 20:&lt;&lt; [
                / directive-set-component-index / 12,0,
                / directive-override-parameters / 20,{
                    / source-component / 22:1 / [h'02'] /
                },
                / directive-copy / 22,2,
                / condition-image-match / 3,15
            ] &gt;&gt;
        } &gt;&gt;
    })
</sourcecode>
        <t>Total size of Envelope without COSE authentication object:  327</t>
        <t>Envelope:</t>
        <artwork><![CDATA[
d86ba2025827815824822f58205b5f6586b1e6cdf19ee479a5adabf20658
1000bd584b0832a9bdaf4f72cdbdd603590116a801010204035867a20283
814100814102814101045858880c0014a40150fa6b4a53d5ad5fdfbe9de6
63e4d41ffe02501492af1425695e48bf429b2d51f2ab45035824822f5820
00112233445566778899aabbccddeeff0123456789abcdeffedcba987654
32100e1987d0010f020f0745840c00030f085838880c0214a3035824822f
58200123456789abcdeffedcba987654321000112233445566778899aabb
ccddeeff0e1a00012c2216001602030f0945840c02170210584e880c0114
a2035824822f582000112233445566778899aabbccddeeff0123456789ab
cdeffedcba987654321015781b687474703a2f2f6578616d706c652e636f
6d2f66696c652e62696e1502030f144b880c0014a116011602030f
]]></artwork>
        <t>Total size of Envelope with COSE authentication object:  403</t>
        <t>Envelope with COSE authentication object:</t>
        <artwork><![CDATA[
d86ba2025873825824822f58205b5f6586b1e6cdf19ee479a5adabf20658
1000bd584b0832a9bdaf4f72cdbdd6584ad28443a10126a0f65840c53c28
26b042384e95c646cbcd4308b181f1ed2bfbeb4e70b93cac9fbdc82e382d
877e2c2bcfaf975ffcd36941f2f4db89f68d3c77d6a3506e9b1509a49dec
4603590116a801010204035867a20283814100814102814101045858880c
0014a40150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492af1425695e
48bf429b2d51f2ab45035824822f582000112233445566778899aabbccdd
eeff0123456789abcdeffedcba98765432100e1987d0010f020f0745840c
00030f085838880c0214a3035824822f58200123456789abcdeffedcba98
7654321000112233445566778899aabbccddeeff0e1a00012c2216001602
030f0945840c02170210584e880c0114a2035824822f5820001122334455
66778899aabbccddeeff0123456789abcdeffedcba987654321015781b68
7474703a2f2f6578616d706c652e636f6d2f66696c652e62696e1502030f
144b880c0014a116011602030f
]]></artwork>
      </section>
      <section anchor="example-5-two-images">
        <name>Example 5: Two Images</name>
        <t>This example covers the following templates:</t>
        <ul spacing="normal">
          <li>Compatibility Check (<xref target="template-compatibility-check"/>)</li>
          <li>Secure Boot (<xref target="template-secure-boot"/>)</li>
          <li>Firmware Download (<xref target="firmware-download-template"/>)</li>
        </ul>
        <t>Furthermore, it shows using these templates with two images.</t>
        <sourcecode type="cbor-diag" name="example5.cbor-diag">
107({
        / authentication-wrapper / 2:&lt;&lt; [
            / digest: / &lt;&lt; [
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'15ce60f77657e4531dc329155f8b0ed78f94bdc6d165b2665473693dcc34f470'
            ] &gt;&gt;,
            / signature: / &lt;&lt; 18([
                / protected / &lt;&lt; {
                    / alg / 1:-7 / "ES256" /
                } &gt;&gt;,
                / unprotected / {
                },
                / payload / null / nil /,
                / signature / h'53505bf2b1aba7f3c3e142d6c02350daf95331
a8942e77d7378c6670285638e0fe460fe7cebcbe242b14e7ac1a4482cf500136a2568a
92a803f614d5f87ef7a7'
            ]) &gt;&gt;
        ] &gt;&gt;,
        / manifest / 3:&lt;&lt; {
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:5,
            / common / 3:&lt;&lt; {
                / components / 2:[
                    [h'00'],
                    [h'01']
                ],
                / shared-sequence / 4:&lt;&lt; [
                    / directive-set-component-index / 12,0,
                    / directive-override-parameters / 20,{
                        / vendor-id /
1:h'fa6b4a53d5ad5fdfbe9de663e4d41ffe' / fa6b4a53-d5ad-5fdf-
be9d-e663e4d41ffe /,
                        / class-id /
2:h'1492af1425695e48bf429b2d51f2ab45' /
1492af14-2569-5e48-bf42-9b2d51f2ab45 /,
                        / image-digest / 3:&lt;&lt; [
                            / algorithm-id / -16 / "sha256" /,
                            / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                        ] &gt;&gt;,
                        / image-size / 14:34768
                    },
                    / condition-vendor-identifier / 1,15,
                    / condition-class-identifier / 2,15,
                    / directive-set-component-index / 12,1,
                    / directive-override-parameters / 20,{
                        / image-digest / 3:&lt;&lt; [
                            / algorithm-id / -16 / "sha256" /,
                            / digest-bytes /
h'0123456789abcdeffedcba987654321000112233445566778899aabbccddeeff'
                        ] &gt;&gt;,
                        / image-size / 14:76834
                    }
                ] &gt;&gt;
            } &gt;&gt;,
            / validate / 7:&lt;&lt; [
                / directive-set-component-index / 12,0,
                / condition-image-match / 3,15,
                / directive-set-component-index / 12,1,
                / condition-image-match / 3,15
            ] &gt;&gt;,
            / invoke / 9:&lt;&lt; [
                / directive-set-component-index / 12,0,
                / directive-invoke / 23,2
            ] &gt;&gt;,
            / install / 20:&lt;&lt; [
                / directive-set-component-index / 12,0,
                / directive-override-parameters / 20,{
                    / uri / 21:"http://example.com/file1.bin"
                },
                / directive-fetch / 21,2,
                / condition-image-match / 3,15,
                / directive-set-component-index / 12,1,
                / directive-override-parameters / 20,{
                    / uri / 21:"http://example.com/file2.bin"
                },
                / directive-fetch / 21,2,
                / condition-image-match / 3,15
            ] &gt;&gt;
        } &gt;&gt;
    })
</sourcecode>
        <t>Total size of Envelope without COSE authentication object:  306</t>
        <t>Envelope:</t>
        <artwork><![CDATA[
d86ba2025827815824822f582015ce60f77657e4531dc329155f8b0ed78f
94bdc6d165b2665473693dcc34f47003590101a601010205035895a20282
8141008141010458898c0c0014a40150fa6b4a53d5ad5fdfbe9de663e4d4
1ffe02501492af1425695e48bf429b2d51f2ab45035824822f5820001122
33445566778899aabbccddeeff0123456789abcdeffedcba98765432100e
1987d0010f020f0c0114a2035824822f58200123456789abcdeffedcba98
7654321000112233445566778899aabbccddeeff0e1a00012c220749880c
00030f0c01030f0945840c00170214584f900c0014a115781c687474703a
2f2f6578616d706c652e636f6d2f66696c65312e62696e1502030f0c0114
a115781c687474703a2f2f6578616d706c652e636f6d2f66696c65322e62
696e1502030f
]]></artwork>
        <t>Total size of Envelope with COSE authentication object:  382</t>
        <t>Envelope with COSE authentication object:</t>
        <artwork><![CDATA[
d86ba2025873825824822f582015ce60f77657e4531dc329155f8b0ed78f
94bdc6d165b2665473693dcc34f470584ad28443a10126a0f6584053505b
f2b1aba7f3c3e142d6c02350daf95331a8942e77d7378c6670285638e0fe
460fe7cebcbe242b14e7ac1a4482cf500136a2568a92a803f614d5f87ef7
a703590101a601010205035895a202828141008141010458898c0c0014a4
0150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf42
9b2d51f2ab45035824822f582000112233445566778899aabbccddeeff01
23456789abcdeffedcba98765432100e1987d0010f020f0c0114a2035824
822f58200123456789abcdeffedcba987654321000112233445566778899
aabbccddeeff0e1a00012c220749880c00030f0c01030f0945840c001702
14584f900c0014a115781c687474703a2f2f6578616d706c652e636f6d2f
66696c65312e62696e1502030f0c0114a115781c687474703a2f2f657861
6d706c652e636f6d2f66696c65322e62696e1502030f
]]></artwork>
      </section>
    </section>
    <section anchor="design-rationale">
      <name>Design Rationale</name>
      <t>In order to provide flexible behavior to constrained devices, while still allowing more powerful devices to use their full capabilities, the SUIT manifest encodes the required behavior of a Recipient device. Behavior is encoded as a specialized byte code, contained in a CBOR list. This promotes a flat encoding, which simplifies the parser. The information encoded by this byte code closely matches the operations that a device will perform, which promotes ease of processing. The core operations used by most update and trusted invocation operations are represented in the byte code. The byte code can be extended by registering new operations.</t>
      <t>The specialized byte code approach gives benefits equivalent to those provided by a scripting language or conventional byte code, with two substantial differences. First, the language is extremely high level, consisting of only the operations that a device may perform during update and trusted invocation of a firmware image. Second, the language specifies linear behavior, without reverse branches. Conditional processing is supported, and parallel and out-of-order processing may be performed by sufficiently capable devices.</t>
      <t>By structuring the data in this way, the manifest processor becomes a very simple engine that uses a pull parser to interpret the manifest. This pull parser invokes a series of command handlers that evaluate a Condition or execute a Directive. Most data is structured in a highly regular pattern, which simplifies the parser.</t>
      <t>The results of this allow a Recipient to implement a very small parser for constrained applications. If needed, such a parser also allows the Recipient to perform complex updates with reduced overhead. Conditional execution of commands allows a simple device to perform important decisions at validation-time.</t>
      <t>Dependency handling is vastly simplified as well. Dependencies function like subroutines of the language. When a manifest has a dependency, it can invoke that dependency's commands and modify their behavior by setting parameters. Because some parameters come with security implications, the dependencies also have a mechanism to reject modifications to parameters on a fine-grained level. Dependency handling is covered in <xref target="I-D.ietf-suit-trust-domains"/>.</t>
      <t>Developing a robust permissions system works in this model too. The Recipient can use a simple ACL that is a table of Identities and Component Identifier permissions to ensure that operations on components fail unless they are permitted by the ACL. This table can be further refined with individual parameters and commands.</t>
      <t>Capability reporting is similarly simplified. A Recipient can report the Commands, Parameters, Algorithms, and Component Identifiers that it supports. This is sufficiently precise for a manifest author to create a manifest that the Recipient can accept.</t>
      <t>The simplicity of design in the Recipient due to all of these benefits allows even a highly constrained platform to use advanced update capabilities.</t>
      <section anchor="design-rationale-envelope">
        <name>C.1 Design Rationale: Envelope</name>
        <t>The Envelope is used instead of a COSE structure for several reasons:</t>
        <ol spacing="normal" type="1">
          <li>This enables the use of Severable Elements (<xref target="severable-fields"/>)</li>
          <li>This enables modular processing of manifests, particularly with large signatures.</li>
          <li>This enables multiple authentication schemes.</li>
          <li>This allows integrity verification by a dependent to be unaffected by adding or removing authentication structures.</li>
        </ol>
        <t>Modular processing is important because it allows a Manifest Processor to iterate forward over an Envelope, processing Delegation Chains and Authentication Blocks, retaining only intermediate values, without any need to seek forward and backwards in a stream until it gets to the Manifest itself. This allows the use of large, Post-Quantum signatures without requiring retention of the signature itself, or seeking forward and back.</t>
        <t>Four authentication objects are supported by the Envelope:</t>
        <ul spacing="normal">
          <li>COSE_Sign_Tagged</li>
          <li>COSE_Sign1_Tagged</li>
          <li>COSE_Mac_Tagged</li>
          <li>COSE_Mac0_Tagged</li>
        </ul>
        <t>The SUIT Envelope allows an Update Authority or intermediary to mix and match any number of different authentication blocks it wants without any concern for modifying the integrity of another authentication block. This also allows the addition or removal of an authentication blocks without changing the integrity check of the Manifest, which is important for dependency handling. See <xref target="required-checks"/></t>
      </section>
      <section anchor="c2-byte-string-wrappers">
        <name>C.2 Byte String Wrappers</name>
        <t>Byte string wrappers are used in several places in the suit manifest. The primary reason for wrappers it to limit the parser extent when invoked at different times, with a possible loss of context.</t>
        <t>The elements of the suit envelope are wrapped both to set the extents used by the parser and to simplify integrity checks by clearly defining the length of each element.</t>
        <t>The common block is re-parsed in order to find components identifiers from their indices, to find dependency prefixes and digests from their identifiers, and to find the shared sequence. The shared sequence is wrapped so that it matches other sequences, simplifying the code path.</t>
        <t>A severed SUIT command sequence will appear in the envelope, so it must be wrapped as with all envelope elements. For consistency, command sequences are also wrapped in the manifest. This also allows the parser to discern the difference between a command sequence and a SUIT_Digest.</t>
        <t>Parameters that are structured types (arrays and maps) are also wrapped in a bstr. This is so that parser extents can be set correctly using only a reference to the beginning of the parameter. This enables a parser to store a simple list of references to parameters that can be retrieved when needed.</t>
      </section>
    </section>
    <section anchor="implementation-matrix">
      <name>D. Implementation Conformance Matrix</name>
      <t>This section summarizes the functionality a minimal manifest processor
implementation needs
to offer to claim conformance to this specification, in the absence of
an application profile standard specifying otherwise.</t>
      <t>The subsequent table shows the conditions.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Reference</th>
            <th align="left">Implementation</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Vendor Identifier</td>
            <td align="left">
              <xref target="uuid-identifiers"/></td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
          </tr>
          <tr>
            <td align="left">Class Identifier</td>
            <td align="left">
              <xref target="uuid-identifiers"/></td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
          </tr>
          <tr>
            <td align="left">Device Identifier</td>
            <td align="left">
              <xref target="uuid-identifiers"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Image Match</td>
            <td align="left">
              <xref target="suit-condition-image-match"/></td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
          </tr>
          <tr>
            <td align="left">Check Content</td>
            <td align="left">
              <xref target="suit-condition-check-content"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Component Slot</td>
            <td align="left">
              <xref target="suit-condition-component-slot"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Abort</td>
            <td align="left">
              <xref target="suit-condition-abort"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Custom Condition</td>
            <td align="left">
              <xref target="SUIT_Command_Custom"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
        </tbody>
      </table>
      <t>The subsequent table shows the directives.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Reference</th>
            <th align="left">Implementation</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Set Component Index</td>
            <td align="left">
              <xref target="suit-directive-set-component-index"/></td>
            <td align="left">
              <bcp14>REQUIRED</bcp14> if more than one component</td>
          </tr>
          <tr>
            <td align="left">Write Content</td>
            <td align="left">
              <xref target="suit-directive-write"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Try Each</td>
            <td align="left">
              <xref target="suit-directive-try-each"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Override Parameters</td>
            <td align="left">
              <xref target="suit-directive-override-parameters"/></td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
          </tr>
          <tr>
            <td align="left">Fetch</td>
            <td align="left">
              <xref target="suit-directive-fetch"/></td>
            <td align="left">
              <bcp14>REQUIRED</bcp14> for Updater</td>
          </tr>
          <tr>
            <td align="left">Copy</td>
            <td align="left">
              <xref target="suit-directive-copy"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Invoke</td>
            <td align="left">
              <xref target="suit-directive-invoke"/></td>
            <td align="left">
              <bcp14>REQUIRED</bcp14> for Bootloader</td>
          </tr>
          <tr>
            <td align="left">Run Sequence</td>
            <td align="left">
              <xref target="suit-directive-run-sequence"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Swap</td>
            <td align="left">
              <xref target="suit-directive-swap"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
        </tbody>
      </table>
      <t>The subsequent table shows the parameters.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Reference</th>
            <th align="left">Implementation</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Vendor ID</td>
            <td align="left">
              <xref target="suit-parameter-vendor-identifier"/></td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
          </tr>
          <tr>
            <td align="left">Class ID</td>
            <td align="left">
              <xref target="suit-parameter-class-identifier"/></td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
          </tr>
          <tr>
            <td align="left">Image Digest</td>
            <td align="left">
              <xref target="suit-parameter-image-digest"/></td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
          </tr>
          <tr>
            <td align="left">Image Size</td>
            <td align="left">
              <xref target="suit-parameter-image-size"/></td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
          </tr>
          <tr>
            <td align="left">Component Slot</td>
            <td align="left">
              <xref target="suit-parameter-component-slot"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Content</td>
            <td align="left">
              <xref target="suit-parameter-content"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">URI</td>
            <td align="left">
              <xref target="suit-parameter-uri"/></td>
            <td align="left">
              <bcp14>REQUIRED</bcp14> for Updater</td>
          </tr>
          <tr>
            <td align="left">Source Component</td>
            <td align="left">
              <xref target="suit-parameter-source-component"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Invoke Args</td>
            <td align="left">
              <xref target="suit-parameter-invoke-args"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Device ID</td>
            <td align="left">
              <xref target="suit-parameter-device-identifier"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Strict Order</td>
            <td align="left">
              <xref target="suit-parameter-strict-order"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Soft Failure</td>
            <td align="left">
              <xref target="suit-parameter-soft-failure"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left">Custom</td>
            <td align="left">
              <xref target="suit-parameter-custom"/></td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
          </tr>
        </tbody>
      </table>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAHXJVmcAA+y963Ic15Um+r+eIg8Z0QLkqiJBUrIEW+4GQbCFMW9NQHZ7
ZB1FVlUCSLOQWc7MAlgm6Tg/zkPM/OuYpzi/u99knuSs+147LwWQVrsv04ro
NlGZua9rr72u35pMJqOr/eThaNTkzTLbTw6Sw7KY53WWPM6LtNokL2d/yOZN
8jpbVVmdFU3a5GWR7Bw+fvl6dzJL62yRnGRVni7zP/Gjp2V1mTbJWVklzUWW
nJRnzXVaZcl3q0XaZDU9OC6arCqyJinPktOLvDivk52T745Pd5PnaZGfZXUz
SmezKoOhYUfaD7wRXliU8yK9hCEvqvSsmeRZczap13kzuZQ3Jg8fjPJVtZ80
1bpuHty///X9B6M5jOG8rDb7Sd0sRnVTZenlfnJ8dPp0NIJRpvswm/m6ypvN
6Lqs3pxX5Xq1Tz2P3mQb+Gmxb6OfPMGeR6NVvj9Kkupsni3qZoOruMlq+KUp
5+6febGA5dMf6rKCvs9q+3tzGf3ZVPncXp6Xl5fwrT3Ni2VehG6yt81kmcOE
oZFZuYTXJuXnP4MnsESX6WoF6+vG8eMyu8rwpUcw43VzUVYw+gk8w//yAh48
nibPyyot5Dde5cdVVizSInpSVuew1rzvQDrVZfIsv8ybbCHPs8s0X+4nM/50
eomfTnGj/u4cn0xhXqNW399Ok9N6flGeZUV+Hg3g27QogHw6T6WTC3o8bewx
9PF2CrvU08PjvHpzUS7/FLefFW/aT+IJPq3SdYGtV8kJ0EPcPXw9ncnXf1fn
zfTM3p4usvYgfj1N/ntaLGZZFU/y12VWtJ/Egzgu4LDFfb+Bj6Z/ko/+LscX
oPd2l//yP6bJ63/5/4oCj1uTLqJ+/+V/bK6AQPteiLt/AScgn8MhucznZbFY
z5uyikdTUkvTqrSG/G4XxB3yqwyPzOunh4/2HjyY5bX89fX9Lx7sA7nX2eiu
/vCQf5iky/Oa33r49Vdfygdfff3oa/t2z/659+AR/vN48mTq+EKT26tf34eB
5gvr9RESUH3hOvnqyz14Z75YLEejUV6ctcb99cOvf27/fNjT21leXSLfm2TF
vNqsaPU6L62JJyLHSs8zPOLdV4h5TRYlLGFRdx9X2Qo4if4eqH9Caza/bibz
C/hShvrzBw++wn/+7uD5s33aNmH7d/CX5CAv/vf/8z8b4LHVm/UqeZYW52sY
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
+aaD71Z14M4gqWyI/tqy4yDFjJP5RQYKEqk1RNWtL3NstcLFGqMJJD/b2Lsk
HPHBigTdWgRT+ioWVILkMcaNWxfA+t/EI54mjzdwwEXRqmWOeMoDYyqrBZIg
ETHIU+eqlXnyvMiwGZR4klmFMi4cDGaC4VZWuZAXNVuwtBzfwmu+ZGFWEZ8A
dWOFl+GfgjZNM0RZY33JojQIEF70UGVwNPot0WBXkiLxCQ+vGERgftrLIhbe
lYn2Wxhshqr1QsO437hOojdSx8fOrPEczuvSc1LeZBByyCBfk3SBDePUC1Bb
2PpgXU2Tl3Q0w+qyCpbppaO6NfJkGbJctHxcd04PQC0jpUKndPQWVAMa3VFx
lVclGbLgxaOj3XFCV1U9XxNrsEvg4dc/p0vgboJH+ArvU1VXT0GOy4tyWZ5v
+HyhooR+jTq58/y7k9M7Y/7f5MVL+vfro3/47vj10RP898m3B8+e2T9G8sbJ
ty+/e/Yk/Ct8efjy+fOjF0/4Y/g1iX4a3Xl+8Ls7fJfdefnq9Pjli4Nnd3hr
HLNMhDvPMpZCQeKkVatHkRL2+PDVP//T3iNYgP8LVuDBHt2i/MdXez/HnQSF
oODeaOf4TzwhI5QX0opWHe6febrKQXqpaXHri/K6SJB8YDk//x5X5of95Jez
+Wrv0a/kB5xw9KOuWfQjrVn3l87HvIg9P/V0Y6sZ/d5a6Xi8B7+L/tZ1dz/+
8m/Ru5RM9r7621+NQCFzWvpYrC1oqCB2E4gJTxcJ6U4Uj/aR7nA8cPttn6Ax
xa5Jc8yaKD08On2KhEqckmUE/g4lG5DAF2m1QOnyFWvz6Mpc5RnfVd5yyaQE
xxzuvYq43WaVz8kG8bTNpU2/gDZw6Nj+66wu19U8G+7ggm0EvBqlcL/1HO8V
MTVgO+rI3E/+/ai8nyOLyZYgl+Co0KqCTNuJsjpQbC+I6jxvNavRy7exHLdb
ZG1G3MjuEx48a9AoB2RLkcaTk85vepuBpFxe4X2Bd34k8KsZizUuugzgMzW/
gBiRoSRuvU3gXl8uatbBmV73k5cFCbVk0QsGFtp4ZUokaOg7su11aCM5UN1t
n65b4DKwdGxfiZbuDd/gLDihNC9C09juD7gjX6vLoGYKlb+4aZZa4X2j8xbZ
yBU3z0gSJIsYGw7wr2DadzSbvOIXyorpBIT4Qm816NEGwE2zNACNPbelwk4y
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
9LotslHQsHVoy90Ry2An1q3Vsl0jJWG/yjFRGD+Cu7j0NRkOWktXO97sbue6
hy5CBcMyXGrPj4fUAx9Qum92hD8acQ5WIdDqYQ187NhaPYrBHjtaI2jBnrvQ
rBKxxOyo4i7dfnFdf7VvBe880M3am0aYV7fK9DCshi2tHzVc+0AXEZkyMqr7
mhL01AMZ4ObxTD3U/v1kCZRrcUdUg9XwoW4ZcyDNRjVYPFyoW3aZ8UYGyYpu
1mNz2LHW/DgP9BEGFOS7uY5xOcbz3V5dHeYWb1TqEDn283xNXshtFFI9SQHJ
a2DOHEW95Qc64NQLNyfworDlNNNDNZ2+ArRVLyz9sDY83HphnvGyHemgXrjF
HSuQNtrzhrdCtszWjMNzCjc6KESgtbDdnlqrHbTdwKOS4atW2GokKevg1Q5b
veTVOcmBZYMNSK282sicphpVkpSNBivmkyzVaFGx5ku2cJp4lYKhME+9WGVV
qsYJHVa1wgLttnOD9p1mMorXAj+AAWsObJvemj/Fl6wwf2IvOWH+dF4ywvxJ
XFGyXeZcBaE5NlwFoTmGWxWhdmtNTmddJppUtF12GehZPGb0YUtkccNzWQzr
B/fYCZZ+ueevyIeAu0TufcKtOPs8BQ5enCuy4eTi2vdyC4p8oSd0yLPZsJ05
PI8yuxS5SNpSud+3mTVo/y1PDck30BV2UJm/D7fCyGyaw3GRDCanlbucT9mR
aIEUSwXOjxTPiuReJfL7u3snLDPDJRgzExPPsW7xM599/NnZf3TwVH9+fPDL
9um+/mT/JXuqHR08erx9vr99tHP0aOf6zaOTIyeE7492d8Xnq/3HO4+MK3J1
sLP988/n25f/evnqX7svHh0eucYvO7va7quXJ9PffjDCV4+Go+ufnk8u9w5P
329eZL89uzjefrq7vX2yPxjvo0i9eRP+dPHLu4z6T8fDt2/eHAbH07fa8x+i
bPrrr/FF8nZ7cpqnT15P892X+++unjydTp4+/i0Ln+3YT3+4Gm2/mObvh8eW
feRMn2S/8m7tP91rdoqdRjtt7JC6xNObMTvgqybgqqR5zcsBbxm9FzuHB7vK
4D18fbV/9fLxk/G/Dt6/Mna3f355ID7vbf8c78Fw7V/8RHYevXEO37x5e/Ly
l/jlaPae/DTx3mSb+5EWvd8cOpNfBqOD36KrJ4b/+PryMNoe7hzFu68i8v7Y
dN6enifv0/ynq4eH0ZH7Opm+f3Z4Mh6cP3ig9L+GFus+z9/Gu6KzfKMnj7fZ
XdmVHESSj/Gi7LE4SawX0Tj9EqN4mWC+hMIEJm9RYGbFCJRTCvwnDz0UWWP4
GS5lMPlWsBbA4tIJcfpfYfVKHrYqq7OjYSgfIsj4UWc38ciDXlojJog6VMT8
cPtw3H8OE3FrsbS4ngyL4WVlSrF6/PCjfnKd12HVI4i8EIOklZfuyWcKDKVN
FUvl9NrHSge7DOWPuqn+W2g0Lyiv2s+LQFctk4+6IUoaZem6ZchfFgVbLcIF
ZTJ52WO1FL9chwuBscWP0FB9ZzyeiiOpUkKUFIEKn4n90jnbJIzBE3B0xSlx
ft3omrKpOlbfc0fh06d1qKi0WqnAzm7SPmbi/sRWWKf8yDa7tqBIfDjMRtlw
NpSYyu2PGDVOMnKu4UbFMhq0qc9xyjd1a+s//kOE9cvSXA1swafGSwFO3ZC3
iZ45/L0Hrh3oknv6Zq+lSmVj3qZ2cd/z3IAS1zMsz/JCL0nM1LQjP7AsOySG
5yTEj73YjSOSulaa0MSxAuKlcWDHPnVJer/SyB/6jz/2at0oUqaJnpjBWltn
xOFitgEUSn1oFCn6DH/Nrb6Pfd0/4V1tFP7UQIRXn43UdpqNfGqrJJxz+DTC
TcPwH6iB1uEt08Nt6hf3HSNIjMD00jBygRWcMEo94pqR4Xmha1IjII5jB1oa
OCGNjNAiJol9L6A0CRMKxIjNyEwS200Ci6YmFPKIbxPPDH2PJFacUj9wHCcK
gExWqNm2axDTslLbtuLICVMjITXqrMOoFE+qtNosLaFN3d5qUKB8X1h+SAaz
Tu25ERZkcqNeWkRbWlssSsjgBUJocg7+/H5x3zDu/9F490crjWqhj03daUpf
WbzbrwacjF47r/Lqhf4HJjW3Lu6nxIsc4tqJSxI3TdKIIq09mzqJY6YpvQ91
ZJk+Fupjqb6G5fpqwTYGVIZNzCLQqgWtAvNYBFgIpCV0qRNEKXBMZCWumVok
ctz7iJ0og3G+sI+l+lisr5brbrTiHguatg9rWWdlHVanTk2fGYYJMmDbjuO6
nuf7QRCGhERRDO4GpWlqmJbtuJ4fhCSKE3hAE9BtYeB7rmNbpnF/boNN3dbW
e+aFg2Q4W7YDstxavkXJcBBdZgPA7Jnu4poN+wFYFCo2ZUPVBQyrFt1dhDk3
db+dmmrTqikC5K+32jY5CNtgUw/ngW/YEdAfu2c1IBcPPskvMG/Pc0rFhG1s
FHM1eqKn4ykmUxd3MBWnCWTmPXZYojqF6+PoFWC3peumZ4JhL6oI9yQJvIhY
huUGlh+Y8NeBaTWF/43Fs67WPe0athv4JnENE34tw8DvboqNBWZgao4Jjxx4
5AWe6RDHMF1jkeYBPA3UAVqXosB2ym40hU1bTdoMasKXBOAYqWFp8MeHGdEy
bPgU4ifTh8fcZ5xPnG7KWLZfUmZh+TrlfEDis1LODRyYvGHitgnQzvKIkQJI
x+DGgrbIWugyFrTlrYWmsaAlpJupunhKW8RUXTylLWKqLp7SFjFVF0+pLoi5
hWcqZ4MpGdHxLNf3xlcjZvWhU1g5rg3sJw49/ImOSnHfVIEXVCvO+SbiYV8C
Yk5LpT+J2p+s1h9h4W7oT8f82hqKK/X8Th6eLLS4y1R2liWZVkNxBQ4sw6qS
9vSb84mAL6lP4pgYSQya20utlDo0Ch0/dY0AhYrYcUqA5QIPRD0yLOpZJnA1
cFpCUuvOJ2rtK/OJLJ/YiR8GHk2SGHQWpYZDTcf2fMcDFRjbRkATW4tNl8Ru
CDoKqBCnoZeC3vFNoElsmV4chQS0ip9CEWqZUBj0WBy6ceq7IOjUcmMr8CNb
A2XmJ16cgEYMXSOCxv2vzSdqlL7zie58ojufqADxv9En4ns+UI4We0UrSiCo
+0mGBcytexfT6eXW5qaMXoJa2cSrFTeibHRvuVmgHi1GuD2rreRKI3ITX878
jL5c6K3gyy22FrRucwHN39ApzG7z7+fLmYA+jByib5oujF/kBb4Dv4ZNLBgv
D555ppf4hhd7rkU1z/ZSL4EXHno2+Ih5WxS6zgDe1iX0rc/oEt6aAea5hNxW
0hYZS122kra8sdS0lTSfdPPm38AlrLOmtog3u1hTK3lTdS2tOa5lr+JX9tTF
KPzyll0r/5Bdsv71LYndzCWt9IKtqClOZK4XuzvLm0oB5vjtpF+8ATDi+nPc
5rg272Kz9W/R8cR4T+jTJEhDkPfUt+3EjIGpbTd0HNMHaTd8I3JiL2FCHVtx
YMXAnG7qGWEUGneOZ2tfmeNp+HYSJIEREw/UnBknqeEkgWnHPqgfK6FhgBEy
zUtjz498D5SxaRt+HCRRDBrMTGIv9T0LhtxJ/CgKoXgaUpI44MtSw44DSi0v
CkKa+iQkWgLqKExBKwR+TOEpqGH3K3M8rTvH887xrNa5czwVEF+d41k9ioCS
wjy4HFy482y6kY03f/rp5fjVvW94Ea/TFf5Ssy6Y5qERuzHYsSCPYLSbZkh8
Kw0MO00MG2Zcm3rAtTT2bNONEztI4YPtggkcxU4Y1PR6vQ/MTsH+frEO2IYF
LitMOVYUU5eCQqEk9U1qh67nuBRUWmJ7LliurgEWPcx5fuhbJqU0TsG0Nvxa
B27ifVtd3jeaqSt44DqeaS0MQZleHd02119ljXWhMaV1W1PogyQmCYTvY/1t
/HLwbqSPA6PCvRzfC33HwoVE+Aa9IS58Ak+0snam8cUzs0BuFdHR2mTH9CWo
bibWFnMxY4cFjNfFdZgMTDJnK/vZtt3Bfo2F4tuy37yoADdktUWWbJchqy1v
yTYNWS12uyXj240KzBUMbZFkdAmGdpNJRQqGtkgyugRDUyTjhtEy5mq3ikNo
2TcLojl34nInLl+xuGBIEOhahARta5mIoGalvgevLD+EIsA1HvWgA1DIxGGC
Tw6OSBE2rAQQNTW4bfpuCJ8iAswNvxQo6rrQtGH6mJIosWz4BY6RWGgMigFP
oYxr464k3/WAveE1BQCp7/pYAdr3fXiCuJmeAyxtOKHmUd9mRWP4RVSRXBRf
AijXs6GyheAdC55DJ+Qb7KyGrwCS4WBfoE3P8W2DGMja7NeFngNDQOu1QTPA
HvDkgNkYCIeC+NjzUoYJohqyIcR3rqiI+LnIa1rZRvnJgk8OI4YY9ZCFZmNk
SaAKvguwS5oXoeyBuEd12FbizQeA7wINIXiRn/iJFVbbnjNgSlNatS1frZB4
okIbaBxgHO0EhsUU8Ov0FO0gX1VKJp6DOkwtmjTGtNZmlYTaHBoC00AXUvjE
wCHjIDNBq4JQQDwYbZfTGYpboiKyClYA7obidoE6cIRv8XHhdTRZiSOIzMe4
2uFs4Qfl+AI4fBN6WBGwsBLNQwr68qusIEBRrnqho7bHhyqRsmzgQoBrKdwr
mSJlEkWxVfHGbOu9VsgRFULgsmIlNkp16K0yqCjPJqobNmRMEKFNxkesMEoc
jLslcLFoc73B3tK3N3dEmrW/ycrB96xLPKvEqXiOtUg/qq4wfHNBf2AsxyGe
RePQ8CI7hJndiC3wxfyAhmD3hDFYEK6f2jDhmoZDwFQCW8EDGU2IReld0L+9
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
JBugr97a13TaT/n7Vo3dRowWTf0//zOV629vAgA=

-->

</rfc>
