<?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.6.39 (Ruby 3.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?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 ipr="trust200902" docName="draft-ietf-suit-manifest-23" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <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>

    <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></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="2023" month="September" day="05"/>

    <area>Security</area>
    <workgroup>SUIT</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 90?>
<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 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 99?>

<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 and it is intended to meet several goals:</t>

<t><list style="symbols">
  <t>Meet the requirements defined in <xref target="RFC9124"/>.</t>
  <t>Simple to parse on a constrained node.</t>
  <t>Simple to process on a constrained node.</t>
  <t>Compact encoding.</t>
  <t>Comprehensible by an intermediate system.</t>
  <t>Expressive enough to enable advanced use cases on advanced nodes.</t>
  <t>Extensible.</t>
</list></t>

<t>The SUIT manifest can be used for a variety of purposes throughout its lifecycle, such as:</t>

<t><list style="symbols">
  <t>a Network Operator to reason about compatibility of a firmware, such as timing and acceptance of firmware updates.</t>
  <t>a Device Operator to reason about the impact of a firmware.</t>
  <t>a device to reason about the authority &amp; authenticity of a firmware prior to installation.</t>
  <t>a device to reason about the applicability of a firmware.</t>
  <t>a device to reason about the installation of a firmware.</t>
  <t>a device to reason about the authenticity &amp; encoding of a firmware at boot.</t>
</list></t>

<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>

<t><list style="symbols">
  <t>Copy some data from one place to another</t>
  <t>Transform some data</t>
  <t>Digest some data and compare to an expected value</t>
  <t>Compare some system parameters to an expected value</t>
  <t>Run some code</t>
</list></t>

<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="I-D.ietf-teep-architecture"/>.</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 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>

<t><list style="symbols">
  <t>SUIT: Software Update for the Internet of Things, also the IETF working group for this standard.</t>
  <t>Payload: A piece of information to be delivered. Typically Firmware for the purposes of SUIT.</t>
  <t>Resource: A piece of information that is used to construct a payload.</t>
  <t>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.</t>
  <t>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"/>.</t>
  <t>Update: One or more manifests that describe one or more payloads.</t>
  <t>Update Authority: The owner of a cryptographic key used to sign updates, trusted by Recipients.</t>
  <t>Recipient: The system, typically an IoT device, that receives and processes a manifest.</t>
  <t>Manifest Processor: A component of the Recipient that consumes Manifests and executes the commands in the Manifest.</t>
  <t>Component: An updatable logical block of the Firmware, Software, configuration, or data of the Recipient.</t>
  <t>Component Set: A group of interdependent Components that must be updated simultaneously.</t>
  <t>Command: A Condition or a Directive.</t>
  <t>Condition: A test for a property of the Recipient or its Components.</t>
  <t>Directive: An action for the Recipient to perform.</t>
  <t>Trusted Invocation: A process by which a system ensures that only trusted code is executed, for example secure boot or launching a Trusted Application.</t>
  <t>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).</t>
  <t>Record: The result of a Command and any metadata about it.</t>
  <t>Report: A list of Records.</t>
  <t>Procedure: The process of invoking one or more sequences of commands.</t>
  <t>Update Procedure: A procedure that updates a Recipient by fetching dependencies and images, and installing them.</t>
  <t>Invocation Procedure: A procedure in which a Recipient verifies dependencies and images, loading images, and invokes one or more image.</t>
  <t>Software: Instructions and data that allow a Recipient to perform a useful function.</t>
  <t>Firmware: Software that is typically changed infrequently, stored in nonvolatile memory, and small enough to apply to <xref target="RFC7228"/> Class 0-2 devices.</t>
  <t>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.</t>
  <t>Slot: One of several possible storage locations for a given Component, typically used in A/B image systems</t>
  <t>Abort: An event in which the Manifest Processor immediately halts execution of the current Procedure. It creates a Record of an error condition.</t>
</list></t>

</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>

<t><list style="symbols">
  <t><xref target="background"/> describes the device constraints, use cases, and design principles that informed the structure of the manifest.</t>
  <t><xref target="metadata-structure-overview"/> gives a general overview of the metadata structure to inform the following sections</t>
  <t><xref target="interpreter-behavior"/> describes what actions a Manifest processor should take.</t>
  <t><xref target="creating-manifests"/> describes the process of creating a Manifest.</t>
  <t><xref target="metadata-structure"/> specifies the content of the Envelope and the Manifest.</t>
</list></t>

<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 description is provided in <xref target="full-cddl"/>, examples are given in <xref target="examples"/> and a design rational is offered in <xref target="design-rationale"/>. Finally, <xref target="implementation-matrix"/> gives a summarize of the mandatory-to-implement features of this specification.</t>

<t>Additional specifications describe functionality of advanced use cases, such as:</t>

<t><list style="symbols">
  <t>Firmware Encryption is covered in <xref target="I-D.ietf-suit-firmware-encryption"/></t>
  <t>Update Management is covered in <xref target="I-D.ietf-suit-update-management"/></t>
  <t>Features, such as dependencies, key delegation, multiple processors, required by the use of multiple trust domains are covered in <xref target="I-D.ietf-suit-trust-domains"/></t>
  <t>Secure reporting of the update status is covered in <xref target="I-D.ietf-suit-report"/></t>
</list></t>

<t>A technique to efficiently 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>

<t><list style="symbols">
  <t>limited processing power and storage may require a simple representation of metadata.</t>
  <t>bandwidth constraints may require firmware compression or partial update support.</t>
  <t>bootloader complexity constraints may require simple selection between two bootable images.</t>
  <t>small internal storage may require external storage support.</t>
  <t>multiple microcontrollers may require coordinated update of all applications.</t>
  <t>large storage and complex functionality may require parallel update of many software components.</t>
  <t>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.</t>
</list></t>

<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>

<t><list style="symbols">
  <t>Compatibility must be checked before any other operation is performed.</t>
  <t>In some applications, payloads must be fetched and validated prior to installation.</t>
</list></t>

<t>There are several fundamental assumptions that inform the model of the Invocation Procedure workflow:</t>

<t><list style="symbols">
  <t>Compatibility must be checked before any other operation is performed.</t>
  <t>All payloads must be validated prior to loading.</t>
  <t>All loaded images must be validated prior to execution.</t>
</list></t>

<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>

<t><list style="numbers">
  <t>Verify the signature of the manifest.</t>
  <t>Verify the applicability of the manifest.</t>
  <t>Fetch payload(s).</t>
  <t>Install payload(s).</t>
  <t>Verify image(s).</t>
</list></t>

<t>When installation is complete, similar information can be used for validating and invoking images in a further three steps:</t>

<t><list style="numbers">
  <t>Verify image(s).</t>
  <t>Load image(s).</t>
  <t>Invoke image(s).</t>
</list></t>

<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. The bootloader may add its own authentication, e.g. a Message Authentication Code (MAC), to the manifest in order to prevent further verifications.</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>

<t><list style="numbers">
  <t>The Envelope (see <xref target="ovr-envelope"/>) contains the Authentication Block, the Manifest, any Severable Elements, and any Integrated Payloads.</t>
  <t>The Authentication Block (see <xref target="ovr-auth"/>) contains a list of signatures or MACs of the manifest.</t>
  <t>The Manifest (see <xref target="ovr-manifest"/>) contains all critical, non-severable metadata that the Recipient requires. It is further broken down into:  <list style="numbers">
      <t>Critical metadata, such as sequence number.</t>
      <t>Common metadata, such as affected components.</t>
      <t>Command sequences, directing the Recipient how to install and use the payload(s).</t>
      <t>Integrity check values for severable elements.</t>
    </list></t>
  <t>Severable elements (see <xref target="ovr-severable"/>).</t>
  <t>Integrated payloads (see <xref target="ovr-integrated"/>).</t>
</list></t>

<t>The diagram below illustrates the hierarchy of the Envelope.</t>

<figure><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></figure>

<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>

<t><list style="symbols">
  <t>COSE_Sign_Tagged</t>
  <t>COSE_Sign1_Tagged</t>
  <t>COSE_Mac_Tagged</t>
  <t>COSE_Mac0_Tagged</t>
</list></t>

<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 {#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> 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"/>).</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>

<t><list style="symbols">
  <t>A management system severs the Text sections before sending an Envelope to a constrained Recipient, which saves Recipient bandwidth.</t>
  <t>A Recipient severs the Installation section after installing the Update, which saves storage space.</t>
</list></t>

<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>

<t><list style="symbols">
  <t>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.</t>
  <t>When a manifest transports a small payload, such as an encrypted key, that payload may be placed in the manifest's envelope.</t>
</list></t>

<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>

<t><list style="symbols">
  <t>Whenever the manifest processor can choose between several manifests, it <bcp14>MUST</bcp14> select the latest valid, authentic manifest.</t>
  <t>If the latest valid, authentic manifest fails, it <bcp14>MAY</bcp14> select the next latest valid, authentic manifest, according to application-specific policy.</t>
</list></t>

<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>

<t><list style="symbols">
  <t>Test failed (e.g. Vendor ID/Class ID).</t>
  <t>Unsupported command encountered.</t>
  <t>Unsupported parameter encountered.</t>
  <t>Unsupported Component Identifier encountered.</t>
  <t>Payload not available.</t>
  <t>Application crashed when executed.</t>
  <t>Watchdog timeout occurred.</t>
  <t>Payload verification failed.</t>
  <t>Missing required component from a Component Set.</t>
  <t>Required parameter not supplied.</t>
</list></t>

<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> 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 the manifest:</t>

<t><list style="numbers">
  <t>has sufficient permissions imparted by its signatures</t>
  <t>specifies a digest and a payload for every Component in the Component Set.</t>
</list></t>

<section anchor="minimal-sigs"><name>Minimizing Signature Verifications</name>

<t>Signature verification can be energy and time expensive on a constrained device. MAC verification is typically unaffected by these concerns. A Recipient <bcp14>MAY</bcp14> choose to parse and execute only the SUIT_Common section of the manifest prior to signature verification, if all of the below apply:</t>

<t><list style="symbols">
  <t>The Authentication Block contains a COSE_Sign_Tagged or COSE_Sign1_Tagged</t>
  <t>The Recipient receives manifests over an unauthenticated channel, exposing it to more inauthentic or incompatible manifests, and</t>
  <t>The Recipient has a power budget that makes signature verification undesirable</t>
</list></t>

<t>When executing Common prior to authenticity validation, the Manifest Processor <bcp14>MUST</bcp14> first evaluate the integrity of the manifest using the SUIT_Digest present in the authentication block.</t>

<t>The guidelines in Creating Manifests (<xref target="creating-manifests"/>) require that the common section contains the applicability checks, so this section is sufficient for applicability verification. The parser <bcp14>MUST</bcp14> restrict acceptable commands to conditions and the following directives: Override Parameters, Set Parameters, Try Each, and Run Sequence ONLY. The manifest parser <bcp14>MUST NOT</bcp14> execute any command with side-effects outside the parser (for example, Run, Copy, Swap, or Fetch commands) prior to authentication and any such command <bcp14>MUST</bcp14> Abort. The Shared sequence <bcp14>MUST</bcp14> be executed again, in its entirety, after authenticity validation.</t>

<t>A Recipient <bcp14>MAY</bcp14> rely on network infrastructure to filter inapplicable manifests.</t>

</section>
</section>
<section anchor="interpreter-fundamental-properties"><name>Interpreter Fundamental Properties</name>

<t>The interpreter has a small set of design goals:</t>

<t><list style="numbers">
  <t>Executing an update <bcp14>MUST</bcp14> either result in an error, or a verifiably correct system state.</t>
  <t>Executing a Trusted Invocation <bcp14>MUST</bcp14> either result in an error, or an invoked image.</t>
  <t>Executing the same manifest on multiple Recipients <bcp14>MUST</bcp14> result in the same system state.</t>
</list></t>

<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>Either:
1. A fallback/recovery image is provided so that a disrupted system can apply the SUIT Manifest again.
2. Manifests are constructed so that repeated partial invocations of any manifest sequence always results in a correct system configuration.
3. A journal of manifest operations is stored in nonvolatile memory so that a repeated invocation does not alter nonvolatile memory up until the point of the previous failure. The journal enables the parser to recreate the processor state just prior to the disruption. This journal can be, for example, a SUIT Report. This report can be used to resume processing of the manifest from the point of failure.</t>

<t>AND</t>

<t><list style="numbers">
  <t>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.</t>
</list></t>

</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>

<figure><artwork><![CDATA[
current := components\[component-index\]
]]></artwork></figure>

<t>As a result, Set Component Index is described as current := components[arg].</t>

<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>

<texttable>
      <ttcol align='left'>Command Name</ttcol>
      <ttcol align='left'>Semantic of the Operation</ttcol>
      <c>Check Vendor Identifier</c>
      <c>assert(binary-match(current, current.params[vendor-id]))</c>
      <c>Check Class Identifier</c>
      <c>assert(binary-match(current, current.params[class-id]))</c>
      <c>Verify Image</c>
      <c>assert(binary-match(digest(current), current.params[digest]))</c>
      <c>Check Content</c>
      <c>assert(binary-match(current, current.params[content]))</c>
      <c>Set Component Index</c>
      <c>current := components[arg]</c>
      <c>Override Parameters</c>
      <c>current.params[k] := v for-each k,v in arg</c>
      <c>Set Parameters</c>
      <c>current.params[k] := v if not k in params for-each k,v in arg</c>
      <c>Invoke</c>
      <c>invoke(current)</c>
      <c>Fetch</c>
      <c>store(current, fetch(current.params[uri]))</c>
      <c>Write</c>
      <c>store(current, current.params[content])</c>
      <c>Use Before</c>
      <c>assert(now() &lt; arg)</c>
      <c>Check Component Slot</c>
      <c>assert(current.slot-index == arg)</c>
      <c>Check Device Identifier</c>
      <c>assert(binary-match(current, current.params[device-id]))</c>
      <c>Abort</c>
      <c>assert(0)</c>
      <c>Try Each</c>
      <c>try-each-done if exec(seq) is not error for-each seq in arg</c>
      <c>Copy</c>
      <c>store(current, current.params[src-component])</c>
      <c>Swap</c>
      <c>swap(current, current.params[src-component])</c>
      <c>Run Sequence</c>
      <c>exec(arg)</c>
      <c>Invoke with Arguments</c>
      <c>invoke(current, arg)</c>
</texttable>

</section>
<section anchor="index-true"><name>Special Cases of Component Index</name>

<t>Component Index can take on one of three types:</t>

<t><list style="numbers">
  <t>Integer</t>
  <t>Array of integers</t>
  <t>True</t>
</list></t>

<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>

<t><list style="numbers">
  <t>operates on the component identified by the component index if that index is an integer, or</t>
  <t>it operates on each component identified by an array of indicies, or</t>
  <t>it operates on every component if the index is the boolean True.</t>
</list></t>

<t>This is described by the following pseudocode:</t>

<figure><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></figure>

<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>Advanced Recipients <bcp14>MAY</bcp14> make use of the Strict Order parameter and enable parallel processing of some Command Sequences, or it may reorder some Command Sequences. To perform parallel processing, once the Strict Order parameter is set to False, the Recipient may issue each or every command concurrently until the Strict Order parameter is returned to True or the Command Sequence ends. Then, it waits for all issued commands to complete before continuing processing of commands. To perform out-of-order processing, a similar approach is used, except the Recipient consumes all commands after the Strict Order parameter is set to False, then it sorts these commands into its preferred order, invokes them all, then continues processing.</t>

<t>When the manifest processor encounters any of these scenarios the parallel processing <bcp14>MUST</bcp14> halt until all issued commands have completed:</t>

<t><list style="symbols">
  <t>Set Parameters.</t>
  <t>Override Parameters.</t>
  <t>Set Strict Order = True.</t>
  <t>Set Component Index.</t>
</list></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>

<t><list style="symbols">
  <t>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.</t>
  <t>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.</t>
  <t>Component Index is a positive integer, Strict Order is True: No special considerations</t>
  <t>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.</t>
</list></t>

<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>

<t><list style="symbols">
  <t>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</t>
  <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Vendor ID and Class ID (see <xref target="secparameters"/>)</t>
  <t>Check Vendor Identifier condition (see <xref target="uuid-identifiers"/>)</t>
  <t>Check Class Identifier condition (see <xref target="uuid-identifiers"/>)</t>
</list></t>

</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>

<t><list style="symbols">
  <t>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</t>
  <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Image Digest and Image Size (see <xref target="secparameters"/>)</t>
</list></t>

<t>The system validation sequence contains the following commands:</t>

<t><list style="symbols">
  <t>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</t>
  <t>Check Image Match condition (see <xref target="suit-condition-image-match"/>)</t>
</list></t>

<t>Then, the run sequence contains the following commands:</t>

<t><list style="symbols">
  <t>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</t>
  <t>Invoke directive (see <xref target="suit-directive-invoke"/>)</t>
</list></t>

</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>

<t><list style="symbols">
  <t>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</t>
  <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Image Digest and Image Size (see <xref target="secparameters"/>)</t>
</list></t>

<t>Then, the install sequence contains the following commands:</t>

<t><list style="symbols">
  <t>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</t>
  <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for URI (see <xref target="suit-parameter-uri"/>)</t>
  <t>Fetch directive (see <xref target="suit-directive-fetch"/>)</t>
  <t>Check Image Match condition (see <xref target="suit-condition-image-match"/>)</t>
</list></t>

<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>

<t><list style="symbols">
  <t>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</t>
  <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Source Component (see <xref target="suit-parameter-source-component"/>)</t>
  <t>Copy directive (see <xref target="suit-directive-copy"/>)</t>
  <t>Check Image Match condition (see <xref target="suit-condition-image-match"/>)</t>
</list></t>

</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 implementer <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"/>.</t>

<t>A distributor <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>

<t><list style="symbols">
  <t>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</t>
  <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Source Component (see <xref target="secparameters"/>)</t>
  <t>Copy directive (see <xref target="suit-directive-copy"/>)</t>
</list></t>

<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>

<t><list style="symbols">
  <t>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</t>
  <t>Try Each
  <list style="symbols">
      <t>First Sequence:
      <list style="symbols">
          <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>, <xref target="secparameters"/>) for Slot A</t>
          <t>Check Slot Condition (see <xref target="suit-condition-component-slot"/>)</t>
          <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Image Digest A and Image Size A (see <xref target="secparameters"/>)</t>
        </list></t>
      <t>Second Sequence:
      <list style="symbols">
          <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>, <xref target="secparameters"/>) for Slot B</t>
          <t>Check Slot Condition (see <xref target="suit-condition-component-slot"/>)</t>
          <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>) for Image Digest B and Image Size B (see <xref target="secparameters"/>)</t>
        </list></t>
    </list></t>
</list></t>

<t>The following commands are placed in the fetch block or install block</t>

<t><list style="symbols">
  <t>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</t>
  <t>Try Each
  <list style="symbols">
      <t>First Sequence:
      <list style="symbols">
          <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>, <xref target="secparameters"/>) for Slot A</t>
          <t>Check Slot Condition (see <xref target="suit-condition-component-slot"/>)</t>
          <t>Set Parameters directive (see <xref target="suit-directive-override-parameters"/>) for URI A (see <xref target="secparameters"/>)</t>
        </list></t>
      <t>Second Sequence:
      <list style="symbols">
          <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>, <xref target="secparameters"/>) for Slot B</t>
          <t>Check Slot Condition (see <xref target="suit-condition-component-slot"/>)</t>
          <t>Set Parameters directive (see <xref target="suit-directive-override-parameters"/>) for URI B (see <xref target="secparameters"/>)</t>
        </list></t>
    </list></t>
  <t>Fetch</t>
</list></t>

<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>

<t><list style="symbols">
  <t>Set Component Index directive (see <xref target="suit-directive-set-component-index"/>)</t>
  <t>Try Each
  <list style="symbols">
      <t>First Sequence:
      <list style="symbols">
          <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>, <xref target="secparameters"/>) for Slot A</t>
          <t>Check Slot Condition (see <xref target="suit-condition-component-slot"/>)</t>
        </list></t>
      <t>Second Sequence:
      <list style="symbols">
          <t>Override Parameters directive (see <xref target="suit-directive-override-parameters"/>, <xref target="secparameters"/>) for Slot B</t>
          <t>Check Slot Condition (see <xref target="suit-condition-component-slot"/>)</t>
        </list></t>
    </list></t>
  <t>Invoke</t>
</list></t>

<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-considerations"><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>The suit-authentication-wrapper contains a SUIT Digest Container (see <xref target="SUIT_Digest"/>) and one or more SUIT Authentication Blocks. The SUIT_Digest carries the result of computing the indicated hash algorithm over the suit-manifest element. A signing application <bcp14>MUST</bcp14> verify the suit-manifest element against the SUIT_Digest prior to signing. A SUIT Authentication Block is implemented as COSE_Mac_Tagged, COSE_Mac0_Tagged, COSE_Sign_Tagged or COSE_Sign1_Tagged structures with detached payloads, as described in RFC 9052 <xref target="RFC9052"/>.</t>

<t>For COSE_Sign and COSE_Sign1 a special signature structure (called Sig_structure) has to be created onto which the selected digital signature algorithm is applied to, see <xref section="4.4" sectionFormat="of" target="RFC9052"/> for details. This specification requires Sig_structure to be populated as follows:</t>

<t><list style="symbols">
  <t>The external_aad field <bcp14>MUST</bcp14> be set to a zero-length binary string (i.e. there is no external additional authenticated data).</t>
  <t>The payload field contains the SUIT_Digest wrapped in a bstr, as per the requirements in <xref section="4.4" sectionFormat="of" target="RFC9052"/>.
All other fields in the Sig_structure are populated as described in <xref section="4.4" sectionFormat="of" target="RFC9052"/>.</t>
</list></t>

<t>Likewise, <xref section="6.3" sectionFormat="of" target="RFC9052"/> describes the details for computing a MAC and the fields of the MAC_structure need to be populated. The rules for external_aad and the payload fields described in the paragraph above also apply to this structure.</t>

<t>The suit-authentication-wrapper <bcp14>MUST</bcp14> come before the suit-manifest element, regardless of canonical encoding of CBOR.</t>

<t>A SUIT_Envelope that has not had authentication information added <bcp14>MUST</bcp14> still contain the suit-authentication-wrapper element, but the content <bcp14>MUST</bcp14> be a list containing only the SUIT_Digest.</t>

<t>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>

<t><list style="symbols">
  <t>a version number (see <xref target="manifest-version"/>)</t>
  <t>a sequence number (see <xref target="manifest-seqnr"/>)</t>
  <t>a reference URI (see <xref target="manifest-reference-uri"/>)</t>
  <t>a common structure with information that is shared between command sequences (see <xref target="manifest-common"/>)</t>
  <t>one or more lists of commands that the Recipient should perform (see <xref target="manifest-commands"/>)</t>
  <t>a reference to the full manifest (see <xref target="manifest-reference-uri"/>)</t>
  <t>human-readable text describing the manifest found in the SUIT_Envelope (see <xref target="manifest-digest-text"/>)</t>
</list></t>

<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 text string that encodes 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.</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 containing two different types of pair:</t>

<t><list style="symbols">
  <t>integer =&gt; text</t>
  <t>SUIT_Component_Identifier =&gt; map</t>
</list></t>

<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>

<texttable>
      <ttcol align='left'>CDDL Structure</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>suit-text-manifest-description</c>
      <c>Free text description of the manifest</c>
      <c>suit-text-update-description</c>
      <c>Free text description of the update</c>
      <c>suit-text-manifest-json-source</c>
      <c>The JSON-formatted document that was used to create the manifest</c>
      <c>suit-text-manifest-yaml-source</c>
      <c>The YAML <xref target="YAML"/>-formatted document that was used to create the manifest</c>
</texttable>

<t>The following table describes the text fields available in each map identified by a SUIT_Component_Identifier.</t>

<texttable>
      <ttcol align='left'>CDDL Structure</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>suit-text-vendor-name</c>
      <c>Free text vendor name</c>
      <c>suit-text-model-name</c>
      <c>Free text model name</c>
      <c>suit-text-vendor-domain</c>
      <c>The domain used to create the vendor-id condition</c>
      <c>suit-text-model-info</c>
      <c>The information used to create the class-id condition</c>
      <c>suit-text-component-description</c>
      <c>Free text description of each component in the manifest</c>
      <c>suit-text-component-version</c>
      <c>A free text representation of the component version</c>
</texttable>

<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. It is <bcp14>REQUIRED</bcp14> if the optimizations described in <xref target="minimal-sigs"/> will be used. 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>

<t><list style="numbers">
  <t>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.</t>
  <t>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.</t>
  <t>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.</t>
  <t>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.</t>
  <t>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.</t>
</list></t>

<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>

<t><list style="numbers">
  <t>Conditions that <bcp14>MUST</bcp14> be true and any failure is treated as a failure of the update/load/invocation</t>
  <t>Directives that <bcp14>MUST</bcp14> be executed.</t>
</list></t>

<t>Each condition is composed of:</t>

<t><list style="numbers">
  <t>A command code identifier</t>
  <t>A <xref target="reporting-policy">SUIT_Reporting_Policy</xref></t>
</list></t>

<t>Each directive is composed of:</t>

<t><list style="numbers">
  <t>A command code identifier</t>
  <t>An argument block or a <xref target="reporting-policy">SUIT_Reporting_Policy</xref></t>
</list></t>

<t>Argument blocks are consumed only by flow-control directives:</t>

<t><list style="symbols">
  <t>Set Component Index</t>
  <t>Set/Override Parameters</t>
  <t>Try Each</t>
  <t>Run Sequence</t>
</list></t>

<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>

<texttable>
      <ttcol align='left'>Policy</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>suit-send-record-on-success</c>
      <c>Record when the command succeeds</c>
      <c>suit-send-record-on-failure</c>
      <c>Record when the command fails</c>
      <c>suit-send-sysinfo-success</c>
      <c>Add system information when the command succeeds</c>
      <c>suit-send-sysinfo-failure</c>
      <c>Add system information when the command fails</c>
</texttable>

<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>

<t><list style="symbols">
  <t>The reporting policy</t>
  <t>The result of the command</t>
  <t>The values of parameters consumed by the command</t>
  <t>The system information consumed by the command</t>
</list></t>

<t>Together, these elements are called a Record. A group of Records is a Report.</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 Record 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 Records it should aggregate into the Report. The Reporting Engine <bcp14>MAY</bcp14> choose to ignore these hints and apply its own policy instead.</t>

<t>When used in a Invocation Procedure, the report <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>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>CDDL Structure</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>Vendor ID</c>
      <c>suit-parameter-vendor-identifier</c>
      <c><xref target="suit-parameter-vendor-identifier"/></c>
      <c>Class ID</c>
      <c>suit-parameter-class-identifier</c>
      <c><xref target="suit-parameter-class-identifier"/></c>
      <c>Device ID</c>
      <c>suit-parameter-device-identifier</c>
      <c><xref target="suit-parameter-device-identifier"/></c>
      <c>Image Digest</c>
      <c>suit-parameter-image-digest</c>
      <c><xref target="suit-parameter-image-digest"/></c>
      <c>Image Size</c>
      <c>suit-parameter-image-size</c>
      <c><xref target="suit-parameter-image-size"/></c>
      <c>Content</c>
      <c>suit-parameter-content</c>
      <c><xref target="suit-parameter-content"/></c>
      <c>Component Slot</c>
      <c>suit-parameter-component-slot</c>
      <c><xref target="suit-parameter-component-slot"/></c>
      <c>URI</c>
      <c>suit-parameter-uri</c>
      <c><xref target="suit-parameter-uri"/></c>
      <c>Source Component</c>
      <c>suit-parameter-source-component</c>
      <c><xref target="suit-parameter-source-component"/></c>
      <c>Invoke Args</c>
      <c>suit-parameter-invoke-args</c>
      <c><xref target="suit-parameter-invoke-args"/></c>
      <c>Fetch Arguments</c>
      <c>suit-parameter-fetch-arguments</c>
      <c><xref target="suit-parameter-fetch-arguments"/></c>
      <c>Strict Order</c>
      <c>suit-parameter-strict-order</c>
      <c><xref target="suit-parameter-strict-order"/></c>
      <c>Soft Failure</c>
      <c>suit-parameter-soft-failure</c>
      <c><xref target="suit-parameter-soft-failure"/></c>
      <c>Custom</c>
      <c>suit-parameter-custom</c>
      <c><xref target="suit-parameter-custom"/></c>
</texttable>

<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>

<figure><artwork><![CDATA[
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
]]></artwork></figure>

<t>Computing a version 5 UUID from these produces:</t>

<figure><artwork><![CDATA[
NAMESPACE_CBOR_PEN = UUID5(NAMESPACE_OID, h'D86F452B06010401')
NAMESPACE_CBOR_PEN = 47fbdabb-f2e4-55f0-bb39-3620c2f6df4e
]]></artwork></figure>

</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 4122 <xref target="RFC4122"/> 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>

<t><list style="numbers">
  <t>Hardware model/revision</t>
  <t>OS</t>
  <t>WiFi module model/revision</t>
  <t>Application</t>
</list></t>

<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 RFC 4122 <xref target="RFC4122"/>. 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>

<figure><artwork><![CDATA[
Vendor ID = UUID5(DNS_PREFIX, vendor domain name)
]]></artwork></figure>

<t>If the Vendor ID is a UUID, the <bcp14>RECOMMENDED</bcp14> method to create a Class ID is:</t>

<figure><artwork><![CDATA[
Class ID = UUID5(Vendor ID, Class-Specific-Information)
]]></artwork></figure>

<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>

<figure><artwork><![CDATA[
Class ID = UUID5(
    UUID5(NAMESPACE_CBOR_PEN, CBOR_PEN),
    Class-Specific-Information)
]]></artwork></figure>

<t>Class-specific-information is composed of a variety of data, for example:</t>

<t><list style="symbols">
  <t>Model number.</t>
  <t>Hardware revision.</t>
  <t>Bootloader version (for immutable bootloaders).</t>
</list></t>

</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>

<t><list style="symbols">
  <t>A Private Enterprise Number</t>
  <t>A byte string containing a UUID <xref target="RFC4122"/></t>
</list></t>

<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. Large payloads written via this method will prevent the manifest from being held in memory during validation. Typical applications include small configuration parameters.</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, encoded as a text string. CBOR Tag 32 is not used because the meaning of the text string is unambiguous in this context.</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 SUIT_Command_Sequence terminates. It <bcp14>MUST NOT</bcp14> be set outside of suit-directive-try-each or suit-directive-run-sequence.</t>

<t>When suit-directive-try-each is invoked, Soft Failure defaults to True. An Update Author may choose to set Soft Failure to False if they require a failed condition in a sequence to force an Abort.</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>

</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>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>CDDL Structure</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>Vendor Identifier</c>
      <c>suit-condition-vendor-identifier</c>
      <c><xref target="identifier-conditions"/></c>
      <c>Class Identifier</c>
      <c>suit-condition-class-identifier</c>
      <c><xref target="identifier-conditions"/></c>
      <c>Device Identifier</c>
      <c>suit-condition-device-identifier</c>
      <c><xref target="identifier-conditions"/></c>
      <c>Image Match</c>
      <c>suit-condition-image-match</c>
      <c><xref target="suit-condition-image-match"/></c>
      <c>Check Content</c>
      <c>suit-condition-check-content</c>
      <c><xref target="suit-condition-check-content"/></c>
      <c>Component Slot</c>
      <c>suit-condition-component-slot</c>
      <c><xref target="suit-condition-component-slot"/></c>
      <c>Abort</c>
      <c>suit-condition-abort</c>
      <c><xref target="suit-condition-abort"/></c>
      <c>Custom Condition</c>
      <c>suit-condition-custom</c>
      <c><xref target="SUIT_Condition_Custom"/></c>
</texttable>

<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 RFC 4122 <xref target="RFC4122"/> UUID 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>

<figure><artwork><![CDATA[
// content & component must be same length
// returns 0 for match
int check_content(content, component, length) {
    int residual = 0;
    for (i = 0; i < length; i++) {
        residual |= content[i] ^ component[i];
    }
    return residual;
}
]]></artwork></figure>

</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 anchor="SUIT_Condition_Custom"><name>suit-condition-custom</name>

<t>suit-condition-custom describes any proprietary, application specific condition. This is encoded as a negative integer, chosen by the firmware developer. If additional information must be provided to the condition, it should be encoded in a custom parameter (a nint) as described in <xref target="secparameters"/>. SUIT_Condition_Custom is <bcp14>OPTIONAL</bcp14> to implement.</t>

</section>
</section>
<section anchor="suitdirective"><name>SUIT_Directive</name>
<t>Directives are used to define the behavior of the recipient. Directives include:</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>CDDL Structure</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>Set Component Index</c>
      <c>suit-directive-set-component-index</c>
      <c><xref target="suit-directive-set-component-index"/></c>
      <c>Try Each</c>
      <c>suit-directive-try-each</c>
      <c><xref target="suit-directive-try-each"/></c>
      <c>Override Parameters</c>
      <c>suit-directive-override-parameters</c>
      <c><xref target="suit-directive-override-parameters"/></c>
      <c>Fetch</c>
      <c>suit-directive-fetch</c>
      <c><xref target="suit-directive-fetch"/></c>
      <c>Copy</c>
      <c>suit-directive-copy</c>
      <c><xref target="suit-directive-copy"/></c>
      <c>Write</c>
      <c>suit-directive-write</c>
      <c><xref target="suit-directive-write"/></c>
      <c>Invoke</c>
      <c>suit-directive-invoke</c>
      <c><xref target="suit-directive-invoke"/></c>
      <c>Run Sequence</c>
      <c>suit-directive-run-sequence</c>
      <c><xref target="suit-directive-run-sequence"/></c>
      <c>Swap</c>
      <c>suit-directive-swap</c>
      <c><xref target="suit-directive-swap"/></c>
</texttable>

<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>

</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>

</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 may 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="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>Elements are made severable by removing them from the manifest, encoding them in a bstr, and placing a SUIT_Digest of the bstr in the manifest so that they can still be authenticated. 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>To manage permissions in the manifest, there are three models that can be used.</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>

<t><list style="symbols">
  <t>allocate CBOR tag 107 (suggested) in the "CBOR Tags" registry for the SUIT Envelope.</t>
  <t>allocate CBOR tag 1070 (suggested) in the "CBOR Tags" registry for the SUIT Manifest.</t>
  <t>allocate media type application/suit-envelope in the "Media Types" registry, see below.</t>
  <t>setup several registries as described below.</t>
</list></t>

<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 Expert Review. 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="suit-envelope-elements"><name>SUIT Envelope Elements</name>

<t>IANA is requested to create a new registry for SUIT envelope elements.</t>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>2</c>
      <c>Authentication Wrapper</c>
      <c><xref target="authentication-info"/> of [TBD: this document]</c>
      <c>3</c>
      <c>Manifest</c>
      <c><xref target="manifest-structure"/> of [TBD: this document]</c>
      <c>16</c>
      <c>Payload Fetch</c>
      <c><xref target="manifest-commands"/> of [TBD: this document]</c>
      <c>17</c>
      <c>Payload Installation</c>
      <c><xref target="manifest-commands"/> of [TBD: this document]</c>
      <c>23</c>
      <c>Text Description</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
</texttable>

</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>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>1</c>
      <c>Encoding Version</c>
      <c><xref target="manifest-version"/> of [TBD: this document]</c>
      <c>2</c>
      <c>Sequence Number</c>
      <c><xref target="manifest-seqnr"/> of [TBD: this document]</c>
      <c>3</c>
      <c>Common Data</c>
      <c><xref target="manifest-common"/> of [TBD: this document]</c>
      <c>4</c>
      <c>Reference URI</c>
      <c><xref target="manifest-reference-uri"/> of [TBD: this document]</c>
      <c>7</c>
      <c>Image Validation</c>
      <c><xref target="manifest-commands"/> of [TBD: this document]</c>
      <c>8</c>
      <c>Image Loading</c>
      <c><xref target="manifest-commands"/> of [TBD: this document]</c>
      <c>9</c>
      <c>Image Invocation</c>
      <c><xref target="manifest-commands"/> of [TBD: this document]</c>
      <c>16</c>
      <c>Payload Fetch</c>
      <c><xref target="manifest-commands"/> of [TBD: this document]</c>
      <c>17</c>
      <c>Payload Installation</c>
      <c><xref target="manifest-commands"/> of [TBD: this document]</c>
      <c>23</c>
      <c>Text Description</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
</texttable>

</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>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>2</c>
      <c>Component Identifiers</c>
      <c><xref target="manifest-common"/> of [TBD: this document]</c>
      <c>4</c>
      <c>Common Command Sequence</c>
      <c><xref target="manifest-common"/> of [TBD: this document]</c>
</texttable>

</section>
<section anchor="suit-commands"><name>SUIT Commands</name>

<t>IANA is requested to create a new registry for SUIT commands.</t>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>1</c>
      <c>Vendor Identifier</c>
      <c><xref target="identifier-conditions"/> of [TBD: this document]</c>
      <c>2</c>
      <c>Class Identifier</c>
      <c><xref target="identifier-conditions"/> of [TBD: this document]</c>
      <c>3</c>
      <c>Image Match</c>
      <c><xref target="suit-condition-image-match"/> of [TBD: this document]</c>
      <c>4</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>5</c>
      <c>Component Slot</c>
      <c><xref target="suit-condition-component-slot"/> of [TBD: this document]</c>
      <c>6</c>
      <c>Check Content</c>
      <c><xref target="suit-condition-check-content"/> of [TBD: this document]</c>
      <c>12</c>
      <c>Set Component Index</c>
      <c><xref target="suit-directive-set-component-index"/> of [TBD: this document]</c>
      <c>13</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>14</c>
      <c>Abort</c>
      <c>&#160;</c>
      <c>15</c>
      <c>Try Each</c>
      <c><xref target="suit-directive-try-each"/> of [TBD: this document]</c>
      <c>16</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>17</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>18</c>
      <c>Write Content</c>
      <c><xref target="suit-directive-write"/> of [TBD: this document]</c>
      <c>19</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>20</c>
      <c>Override Parameters</c>
      <c><xref target="suit-directive-override-parameters"/> of [TBD: this document]</c>
      <c>21</c>
      <c>Fetch</c>
      <c><xref target="suit-directive-fetch"/> of [TBD: this document]</c>
      <c>22</c>
      <c>Copy</c>
      <c><xref target="suit-directive-copy"/> of [TBD: this document]</c>
      <c>23</c>
      <c>Invoke</c>
      <c><xref target="suit-directive-invoke"/> of [TBD: this document]</c>
      <c>24</c>
      <c>Device Identifier</c>
      <c><xref target="identifier-conditions"/> of [TBD: this document]</c>
      <c>25</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>26</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>27</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>28</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>29</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>30</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>31</c>
      <c>Swap</c>
      <c><xref target="suit-directive-swap"/> of [TBD: this document]</c>
      <c>32</c>
      <c>Run Sequence</c>
      <c><xref target="suit-directive-run-sequence"/> of [TBD: this document]</c>
      <c>33</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>nint</c>
      <c>Custom Condition</c>
      <c><xref target="SUIT_Condition_Custom"/> of [TBD: this document]</c>
</texttable>

</section>
<section anchor="suit-parameters"><name>SUIT Parameters</name>

<t>IANA is requested to create a new registry for SUIT parameters.</t>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>1</c>
      <c>Vendor ID</c>
      <c><xref target="suit-parameter-vendor-identifier"/> of [TBD: this document]</c>
      <c>2</c>
      <c>Class ID</c>
      <c><xref target="suit-parameter-class-identifier"/> of [TBD: this document]</c>
      <c>3</c>
      <c>Image Digest</c>
      <c><xref target="suit-parameter-image-digest"/> of [TBD: this document]</c>
      <c>4</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>5</c>
      <c>Component Slot</c>
      <c><xref target="suit-parameter-component-slot"/> of [TBD: this document]</c>
      <c>12</c>
      <c>Strict Order</c>
      <c><xref target="suit-parameter-strict-order"/> of [TBD: this document]</c>
      <c>13</c>
      <c>Soft Failure</c>
      <c><xref target="suit-parameter-soft-failure"/> of [TBD: this document]</c>
      <c>14</c>
      <c>Image Size</c>
      <c><xref target="suit-parameter-image-size"/> of [TBD: this document]</c>
      <c>18</c>
      <c>Content</c>
      <c><xref target="suit-parameter-content"/> of [TBD: this document]</c>
      <c>19</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>20</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>21</c>
      <c>URI</c>
      <c><xref target="suit-parameter-uri"/> of [TBD: this document]</c>
      <c>22</c>
      <c>Source Component</c>
      <c><xref target="suit-parameter-source-component"/> of [TBD: this document]</c>
      <c>23</c>
      <c>Invoke Args</c>
      <c><xref target="suit-parameter-invoke-args"/> of [TBD: this document]</c>
      <c>24</c>
      <c>Device ID</c>
      <c><xref target="suit-parameter-device-identifier"/> of [TBD: this document]</c>
      <c>26</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>27</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>28</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>29</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>30</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>nint</c>
      <c>Custom</c>
      <c><xref target="suit-parameter-custom"/> of [TBD: this document]</c>
</texttable>

</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>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>1</c>
      <c>Manifest Description</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
      <c>2</c>
      <c>Update Description</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
      <c>3</c>
      <c>Manifest JSON Source</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
      <c>4</c>
      <c>Manifest YAML Source</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
      <c>nint</c>
      <c>Custom</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
</texttable>

</section>
<section anchor="suit-component-text-values"><name> SUIT Component Text Values</name>

<t>IANA is requested to create a new registry for SUIT component text values.</t>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>1</c>
      <c>Vendor Name</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
      <c>2</c>
      <c>Model Name</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
      <c>3</c>
      <c>Vendor Domain</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
      <c>4</c>
      <c>Model Info</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
      <c>5</c>
      <c>Component Description</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
      <c>6</c>
      <c>Component Version</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
      <c>7</c>
      <c>Component Version Required</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
      <c>nint</c>
      <c>Custom</c>
      <c><xref target="manifest-digest-text"/> of [TBD: this document]</c>
</texttable>

</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>

<t><list style="symbols">
  <t>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.</t>
  <t>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.</t>
  <t>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.</t>
</list></t>

</section>
<section anchor="media-type-registration"><name>Media Type Registration</name>

<t>This section registers the 'application/suit-envelope' media type in the
"Media Types" registry.  This media type are used to indicate that
the content is a SUIT envelope.</t>

<t>```
      Type name: application</t>

<figure><artwork><![CDATA[
  Subtype name: suit-envelope

  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

  *  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></figure>

</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>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>We would like to thank the following persons for their support in designing this mechanism:</t>

<t><list style="symbols">
  <t>    <dl>
      <dt> </dt>
      <dd>
        <t><contact fullname="Milosch Meriac"/></t>
      </dd>
    </dl>
  </t>
  <t>    <dl>
      <dt> </dt>
      <dd>
        <t><contact fullname="Geraint Luff"/></t>
      </dd>
    </dl>
  </t>
  <t>    <dl>
      <dt> </dt>
      <dd>
        <t><contact fullname="Dan Ros"/></t>
      </dd>
    </dl>
  </t>
  <t>    <dl>
      <dt> </dt>
      <dd>
        <t><contact fullname="John-Paul Stanford"/></t>
      </dd>
    </dl>
  </t>
  <t>    <dl>
      <dt> </dt>
      <dd>
        <t><contact fullname="Hugo Vincent"/></t>
      </dd>
    </dl>
  </t>
  <t>    <dl>
      <dt> </dt>
      <dd>
        <t><contact fullname="Carsten Bormann"/></t>
      </dd>
    </dl>
  </t>
  <t>    <dl>
      <dt> </dt>
      <dd>
        <t><contact fullname="Øyvind Rønningstad"/></t>
      </dd>
    </dl>
  </t>
  <t>    <dl>
      <dt> </dt>
      <dd>
        <t><contact fullname="Frank Audun Kvamtrø"/></t>
      </dd>
    </dl>
  </t>
  <t>    <dl>
      <dt> </dt>
      <dd>
        <t><contact fullname="Krzysztof Chruściński"/></t>
      </dd>
    </dl>
  </t>
  <t>    <dl>
      <dt> </dt>
      <dd>
        <t><contact fullname="Andrzej Puzdrowski"/></t>
      </dd>
    </dl>
  </t>
  <t>    <dl>
      <dt> </dt>
      <dd>
        <t><contact fullname="Michael Richardson"/></t>
      </dd>
    </dl>
  </t>
  <t>    <dl>
      <dt> </dt>
      <dd>
        <t><contact fullname="David Brown"/></t>
      </dd>
    </dl>
  </t>
  <t>    <dl>
      <dt> </dt>
      <dd>
        <t><contact fullname="Emmanuel Baccelli"/></t>
      </dd>
    </dl>
  </t>
</list></t>

<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 title='Normative References'>



<reference anchor="RFC4122">
  <front>
    <title>A Universally Unique IDentifier (UUID) URN Namespace</title>
    <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>
  <seriesInfo name="RFC" value="4122"/>
  <seriesInfo name="DOI" value="10.17487/RFC4122"/>
</reference>

<reference anchor="RFC9052">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
    <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>
  <seriesInfo name="STD" value="96"/>
  <seriesInfo name="RFC" value="9052"/>
  <seriesInfo name="DOI" value="10.17487/RFC9052"/>
</reference>

<reference anchor="RFC3986">
  <front>
    <title>Uniform Resource Identifier (URI): Generic Syntax</title>
    <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>
  <seriesInfo name="STD" value="66"/>
  <seriesInfo name="RFC" value="3986"/>
  <seriesInfo name="DOI" value="10.17487/RFC3986"/>
</reference>

<reference anchor="RFC8949">
  <front>
    <title>Concise Binary Object Representation (CBOR)</title>
    <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>
  <seriesInfo name="STD" value="94"/>
  <seriesInfo name="RFC" value="8949"/>
  <seriesInfo name="DOI" value="10.17487/RFC8949"/>
</reference>

<reference anchor="RFC9019">
  <front>
    <title>A Firmware Update Architecture for Internet of Things</title>
    <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>
  <seriesInfo name="RFC" value="9019"/>
  <seriesInfo name="DOI" value="10.17487/RFC9019"/>
</reference>

<reference anchor="RFC9124">
  <front>
    <title>A Manifest Information Model for Firmware Updates in Internet of Things (IoT) Devices</title>
    <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>
  <seriesInfo name="RFC" value="9124"/>
  <seriesInfo name="DOI" value="10.17487/RFC9124"/>
</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>
      <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="1" month="September" year="2023"/>
      <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>
   <seriesInfo name="Internet-Draft" value="draft-ietf-suit-mti-02"/>
   
</reference>

<reference anchor="RFC9090">
  <front>
    <title>Concise Binary Object Representation (CBOR) Tags for Object Identifiers</title>
    <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>
  <seriesInfo name="RFC" value="9090"/>
  <seriesInfo name="DOI" value="10.17487/RFC9090"/>
</reference>

<reference anchor="RFC9054">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Hash Algorithms</title>
    <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>
  <seriesInfo name="RFC" value="9054"/>
  <seriesInfo name="DOI" value="10.17487/RFC9054"/>
</reference>

<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <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>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>

<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <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>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>




    </references>

    <references title='Informative References'>




<reference anchor="I-D.ietf-teep-architecture">
   <front>
      <title>Trusted Execution Environment Provisioning (TEEP) Architecture</title>
      <author fullname="Mingliang Pei" initials="M." surname="Pei">
         <organization>Broadcom</organization>
      </author>
      <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         <organization>Arm Limited</organization>
      </author>
      <author fullname="Dave Thaler" initials="D." surname="Thaler">
         <organization>Microsoft</organization>
      </author>
      <author fullname="Dave Wheeler" initials="D. M." surname="Wheeler">
         <organization>Amazon</organization>
      </author>
      <date day="24" month="October" year="2022"/>
      <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>
   <seriesInfo name="Internet-Draft" value="draft-ietf-teep-architecture-19"/>
   
</reference>


<reference anchor="I-D.ietf-suit-firmware-encryption">
   <front>
      <title>Encrypted Payloads in SUIT Manifests</title>
      <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </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="26" month="August" year="2023"/>
      <abstract>
	 <t>   This document specifies techniques for encrypting software, firmware
   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>
   <seriesInfo name="Internet-Draft" value="draft-ietf-suit-firmware-encryption-14"/>
   
</reference>


<reference anchor="I-D.ietf-suit-update-management">
   <front>
      <title>Update Management Extensions for Software Updates for Internet of Things (SUIT) Manifests</title>
      <author fullname="Brendan Moran" initials="B." surname="Moran">
         <organization>Arm Limited</organization>
      </author>
      <date day="27" month="April" year="2023"/>
      <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 IoT
   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>
   <seriesInfo name="Internet-Draft" value="draft-ietf-suit-update-management-02"/>
   
</reference>


<reference anchor="I-D.ietf-suit-trust-domains">
   <front>
      <title>SUIT Manifest Extensions for Multiple Trust Domains</title>
      <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="7" month="July" year="2023"/>
      <abstract>
	 <t>   This specification describes extensions to the SUIT Manifest format
   (as defined in [I-D.ietf-suit-manifest]) 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>
   <seriesInfo name="Internet-Draft" value="draft-ietf-suit-trust-domains-04"/>
   
</reference>


<reference anchor="I-D.ietf-suit-report">
   <front>
      <title>Secure Reporting of Update Status</title>
      <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="7" month="July" year="2023"/>
      <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>
   <seriesInfo name="Internet-Draft" value="draft-ietf-suit-report-06"/>
   
</reference>

<reference anchor="RFC7228">
  <front>
    <title>Terminology for Constrained-Node Networks</title>
    <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>
  <seriesInfo name="RFC" value="7228"/>
  <seriesInfo name="DOI" value="10.17487/RFC7228"/>
</reference>


<reference anchor="YAML" target="https://yaml.org/">
  <front>
    <title>YAML Ain't Markup Language</title>
    <author >
      <organization></organization>
    </author>
    <date year="2020"/>
  </front>
</reference>
<reference anchor="COSE_Alg" target="https://www.iana.org/assignments/cose/cose.xhtml#algorithms">
  <front>
    <title>COSE Algorithms</title>
    <author >
      <organization>Internet Assigned Numbers Authority</organization>
    </author>
    <date year="2023"/>
  </front>
</reference>


    </references>


<?line 1572?>

<section anchor="full-cddl"><name>A. 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 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>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_Envelope_Tagged = #6.107(SUIT_Envelope)
SUIT_Envelope = {
  suit-authentication-wrapper => bstr .cbor SUIT_Authentication,
  suit-manifest  => 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 => bstr .cbor SUIT_Command_Sequence,
  ? suit-install => bstr .cbor SUIT_Command_Sequence,
  ? suit-text => bstr .cbor SUIT_Text_Map,
  * $$SUIT_severable-members-extensions,
)

SUIT_Integrated_Payload = (suit-integrated-payload-key => bstr)
suit-integrated-payload-key = tstr

SUIT_Manifest_Tagged = #6.1070(SUIT_Manifest)

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

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

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

SUIT_Common = {
    ? suit-components             => SUIT_Components,
    ? suit-shared-sequence        => 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 = &(
    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 =>
    (RFC4122_UUID / cbor-pen))

cbor-pen = #6.112(bstr)

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

$$SUIT_Parameters //= (suit-parameter-uri => tstr)
$$SUIT_Parameters //= (suit-parameter-source-component => uint)
$$SUIT_Parameters //= (suit-parameter-invoke-args => bstr)

$$SUIT_Parameters //= (suit-parameter-device-identifier => RFC4122_UUID)

$$SUIT_Parameters //= (suit-parameter-custom => int/bool/tstr/bstr)

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

RFC4122_UUID = bstr .size 16

SUIT_Text_Map = {
    SUIT_Text_Keys,
    * SUIT_Component_Identifier => {
        SUIT_Text_Component_Keys
    }
}

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

SUIT_Text_Keys = (
    ? suit-text-manifest-description => tstr,
    ? suit-text-update-description   => tstr,
    ? suit-text-manifest-json-source => tstr,
    ? suit-text-manifest-yaml-source => 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 = 17
;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-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></figure>

</section>
<section anchor="examples"><name>B. 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>

<figure><artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgApZYjZCUGLM50VBC
CjYStX+09jGmnyJPrpDLTz/hiXOhRANCAASEloEarguqq9JhVxie7NomvqqL8Rtv
P+bitWWchdvArTsfKktsCYExwKNtrNHXi9OB3N+wnAUtszmR23M4tKiW
-----END PRIVATE KEY-----
]]></artwork></figure>

<t>The corresponding public key can be used to verify these examples:</t>

<figure><artwork><![CDATA[
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhJaBGq4LqqvSYVcYnuzaJr6qi/Eb
bz/m4rVlnIXbwK07HypLbAmBMcCjbazR14vTgdzfsJwFLbM5kdtzOLSolg==
-----END PUBLIC KEY-----
]]></artwork></figure>

<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>

<texttable>
      <ttcol align='left'>Policy</ttcol>
      <ttcol align='left'>Label</ttcol>
      <c>suit-send-record-on-success</c>
      <c>Rec-Pass</c>
      <c>suit-send-record-on-failure</c>
      <c>Rec-Fail</c>
      <c>suit-send-sysinfo-success</c>
      <c>Sys-Pass</c>
      <c>suit-send-sysinfo-failure</c>
      <c>Sys-Fail</c>
</texttable>

<texttable>
      <ttcol align='left'>Command</ttcol>
      <ttcol align='left'>Sys-Fail</ttcol>
      <ttcol align='left'>Sys-Pass</ttcol>
      <ttcol align='left'>Rec-Fail</ttcol>
      <ttcol align='left'>Rec-Pass</ttcol>
      <c>suit-condition-vendor-identifier</c>
      <c>1</c>
      <c>1</c>
      <c>1</c>
      <c>1</c>
      <c>suit-condition-class-identifier</c>
      <c>1</c>
      <c>1</c>
      <c>1</c>
      <c>1</c>
      <c>suit-condition-image-match</c>
      <c>1</c>
      <c>1</c>
      <c>1</c>
      <c>1</c>
      <c>suit-condition-component-slot</c>
      <c>0</c>
      <c>1</c>
      <c>0</c>
      <c>1</c>
      <c>suit-directive-fetch</c>
      <c>0</c>
      <c>0</c>
      <c>1</c>
      <c>0</c>
      <c>suit-directive-copy</c>
      <c>0</c>
      <c>0</c>
      <c>1</c>
      <c>0</c>
      <c>suit-directive-invoke</c>
      <c>0</c>
      <c>0</c>
      <c>1</c>
      <c>0</c>
</texttable>

<section anchor="example-0-secure-boot"><name>Example 0: Secure Boot</name>

<t>This example covers the following templates:</t>

<t><list style="symbols">
  <t>Compatibility Check (<xref target="template-compatibility-check"/>)</t>
  <t>Secure Boot (<xref target="template-secure-boot"/>)</t>
</list></t>

<t>It also serves as the minimum example.</t>

<figure><artwork><![CDATA[
107({
        / authentication-wrapper / 2:<< [
            / digest: / << [
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'6658ea560262696dd1f13b782239a064da7c6c5cbaf52fded428a6fc83c7e5af'
            ] >>,
            / signature: / << 18([
                    / protected / << {
                        / alg / 1:-7 / "ES256" /,
                    } >>,
                    / unprotected / {
                    },
                    / payload / F6 / nil /,
                    / signature / h'e3505f7ab70bd3a0e04916f37b0d7251aa
6f52ca12c7edaa886a4129a298ca6a1ecc2a57955c6bf4ccb9f01d684d5d1c4774dffb
e508a034431feafa60848a2c'
                ]) >>
            ]
        ] >>,
        / manifest / 3:<< {
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:0,
            / common / 3:<< {
                / components / 2:[
                    [h'00']
                ],
                / shared-sequence / 4:<< [
                    / 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:<< [
                            / algorithm-id / -16 / "sha256" /,
                            / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                        ] >>,
                        / image-size / 14:34768,
                    } ,
                    / condition-vendor-identifier / 1,15 ,
                    / condition-class-identifier / 2,15
                ] >>,
            } >>,
            / validate / 7:<< [
                / condition-image-match / 3,15
            ] >>,
            / run / 9:<< [
                / directive-run / 23,2
            ] >>,
        } >>,
    })
]]></artwork></figure>

<t>Total size of Envelope without COSE authentication object:  161</t>

<t>Envelope:</t>

<figure><artwork><![CDATA[
d86ba2025827815824822f58206658ea560262696dd1f13b782239a064da
7c6c5cbaf52fded428a6fc83c7e5af035871a50101020003585fa2028181
41000458568614a40150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492
af1425695e48bf429b2d51f2ab45035824822f5820001122334455667788
99aabbccddeeff0123456789abcdeffedcba98765432100e1987d0010f02
0f074382030f0943821702
]]></artwork></figure>

<t>Total size of Envelope with COSE authentication object:  237</t>

<t>Envelope with COSE authentication object:</t>

<figure><artwork><![CDATA[
d86ba2025873825824822f58206658ea560262696dd1f13b782239a064da
7c6c5cbaf52fded428a6fc83c7e5af584ad28443a10126a0f65840e3505f
7ab70bd3a0e04916f37b0d7251aa6f52ca12c7edaa886a4129a298ca6a1e
cc2a57955c6bf4ccb9f01d684d5d1c4774dffbe508a034431feafa60848a
2c035871a50101020003585fa202818141000458568614a40150fa6b4a53
d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab45
035824822f582000112233445566778899aabbccddeeff0123456789abcd
effedcba98765432100e1987d0010f020f074382030f0943821702
]]></artwork></figure>

</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>

<t><list style="symbols">
  <t>Compatibility Check (<xref target="template-compatibility-check"/>)</t>
  <t>Firmware Download (<xref target="firmware-download-template"/>)</t>
</list></t>

<t>Simultaneous download and installation of payload. No secure boot is present in this example to demonstrate a download-only manifest.</t>

<figure><artwork><![CDATA[
107({
        / authentication-wrapper / 2:<< [
            / digest: / << [
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'ef14b7091e8adae8aa3bb6fca1d64fb37e19dcf8b35714cfdddc5968c80ff50e'
            ] >>,
            / signature: / << 18([
                    / protected / << {
                        / alg / 1:-7 / "ES256" /,
                    } >>,
                    / unprotected / {
                    },
                    / payload / F6 / nil /,
                    / signature / h'e95d9bb4926c7c82138fc81b968fdc42d9
bc8cfadf9e35dde8cba7bd44b91af0427a13dff4e6bcf5f2d5577f8f3bcaed55983e43
e984d14d6bdb2c762d9378b5'
                ]) >>
            ]
        ] >>,
        / manifest / 3:<< {
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:1,
            / common / 3:<< {
                / components / 2:[
                    [h'00']
                ],
                / shared-sequence / 4:<< [
                    / 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:<< [
                            / algorithm-id / -16 / "sha256" /,
                            / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                        ] >>,
                        / image-size / 14:34768,
                    } ,
                    / condition-vendor-identifier / 1,15 ,
                    / condition-class-identifier / 2,15
                ] >>,
            } >>,
            / validate / 7:<< [
                / condition-image-match / 3,15
            ] >>,
            / install / 17:<< [
                / directive-override-parameters / 20,{
                    / uri / 21:'http://example.com/file.bin',
                } ,
                / directive-fetch / 21,2 ,
                / condition-image-match / 3,15
            ] >>,
        } >>,
    })
]]></artwork></figure>

<t>Total size of Envelope without COSE authentication object:  196</t>

<t>Envelope:</t>

<figure><artwork><![CDATA[
d86ba2025827815824822f5820ef14b7091e8adae8aa3bb6fca1d64fb37e
19dcf8b35714cfdddc5968c80ff50e035894a50101020103585fa2028181
41000458568614a40150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492
af1425695e48bf429b2d51f2ab45035824822f5820001122334455667788
99aabbccddeeff0123456789abcdeffedcba98765432100e1987d0010f02
0f074382030f1158258614a115781b687474703a2f2f6578616d706c652e
636f6d2f66696c652e62696e1502030f
]]></artwork></figure>

<t>Total size of Envelope with COSE authentication object:  272</t>

<t>Envelope with COSE authentication object:</t>

<figure><artwork><![CDATA[
d86ba2025873825824822f5820ef14b7091e8adae8aa3bb6fca1d64fb37e
19dcf8b35714cfdddc5968c80ff50e584ad28443a10126a0f65840e95d9b
b4926c7c82138fc81b968fdc42d9bc8cfadf9e35dde8cba7bd44b91af042
7a13dff4e6bcf5f2d5577f8f3bcaed55983e43e984d14d6bdb2c762d9378
b5035894a50101020103585fa202818141000458568614a40150fa6b4a53
d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab45
035824822f582000112233445566778899aabbccddeeff0123456789abcd
effedcba98765432100e1987d0010f020f074382030f1158258614a11578
1b687474703a2f2f6578616d706c652e636f6d2f66696c652e62696e1502
030f
]]></artwork></figure>

</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>

<t><list style="symbols">
  <t>Compatibility Check (<xref target="template-compatibility-check"/>)</t>
  <t>Secure Boot (<xref target="template-secure-boot"/>)</t>
  <t>Firmware Download (<xref target="firmware-download-template"/>)</t>
</list></t>

<t>This example also demonstrates severable elements (<xref target="ovr-severable"/>), and text (<xref target="manifest-digest-text"/>).</t>

<figure><artwork><![CDATA[
107({
        / authentication-wrapper / 2:<< [
            / digest: / << [
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'86bbcc8823f3a4441956f02b001302f503487461fb77fab086efe31530881f97'
            ] >>,
            / signature: / << 18([
                    / protected / << {
                        / alg / 1:-7 / "ES256" /,
                    } >>,
                    / unprotected / {
                    },
                    / payload / F6 / nil /,
                    / signature / h'3a2d25bdff0d7aaee88549c14f0f1ee881
e3c92d2e51231f3e7bce213adbddefecf8a0ea98859b6d1a69a01c961858e99aacd520
dd59bb0bd8016a66de777b34'
                ]) >>
            ]
        ] >>,
        / manifest / 3:<< {
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:2,
            / common / 3:<< {
                / components / 2:[
                    [h'00']
                ],
                / shared-sequence / 4:<< [
                    / 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:<< [
                            / algorithm-id / -16 / "sha256" /,
                            / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                        ] >>,
                        / image-size / 14:34768,
                    } ,
                    / condition-vendor-identifier / 1,15 ,
                    / condition-class-identifier / 2,15
                ] >>,
            } >>,
            / validate / 7:<< [
                / condition-image-match / 3,15
            ] >>,
            / run / 9:<< [
                / directive-run / 23,2
            ] >>,
            / install / 17:[
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'cfa90c5c58595e7f5119a72f803fd0370b3e6abbec6315cd38f63135281bc498'
            ],
            / text / 23:[
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'2bfc4d0cc6680be7dd9f5ca30aa2bb5d1998145de33d54101b80e2ca49faf918'
            ],
        } >>,
    })
]]></artwork></figure>

<t>Total size of the Envelope without COSE authentication object or Severable Elements:  235</t>

<t>Envelope:</t>

<figure><artwork><![CDATA[
d86ba2025827815824822f582086bbcc8823f3a4441956f02b001302f503
487461fb77fab086efe31530881f970358bba70101020203585fa2028181
41000458568614a40150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492
af1425695e48bf429b2d51f2ab45035824822f5820001122334455667788
99aabbccddeeff0123456789abcdeffedcba98765432100e1987d0010f02
0f074382030f094382170211822f5820cfa90c5c58595e7f5119a72f803f
d0370b3e6abbec6315cd38f63135281bc49817822f58202bfc4d0cc6680b
e7dd9f5ca30aa2bb5d1998145de33d54101b80e2ca49faf918
]]></artwork></figure>
<t>Total size of the Envelope with COSE authentication object but without Severable Elements:  311</t>

<t>Envelope:</t>

<figure><artwork><![CDATA[
d86ba2025873825824822f582086bbcc8823f3a4441956f02b001302f503
487461fb77fab086efe31530881f97584ad28443a10126a0f658403a2d25
bdff0d7aaee88549c14f0f1ee881e3c92d2e51231f3e7bce213adbddefec
f8a0ea98859b6d1a69a01c961858e99aacd520dd59bb0bd8016a66de777b
340358bba70101020203585fa202818141000458568614a40150fa6b4a53
d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab45
035824822f582000112233445566778899aabbccddeeff0123456789abcd
effedcba98765432100e1987d0010f020f074382030f094382170211822f
5820cfa90c5c58595e7f5119a72f803fd0370b3e6abbec6315cd38f63135
281bc49817822f58202bfc4d0cc6680be7dd9f5ca30aa2bb5d1998145de3
3d54101b80e2ca49faf918
]]></artwork></figure>

<t>Total size of Envelope with COSE authentication object and Severable Elements:  894</t>

<t>Envelope with COSE authentication object:</t>

<figure><artwork><![CDATA[
d86ba4025873825824822f582086bbcc8823f3a4441956f02b001302f503
487461fb77fab086efe31530881f97584ad28443a10126a0f658403a2d25
bdff0d7aaee88549c14f0f1ee881e3c92d2e51231f3e7bce213adbddefec
f8a0ea98859b6d1a69a01c961858e99aacd520dd59bb0bd8016a66de777b
340358bba70101020203585fa202818141000458568614a40150fa6b4a53
d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab45
035824822f582000112233445566778899aabbccddeeff0123456789abcd
effedcba98765432100e1987d0010f020f074382030f094382170211822f
5820cfa90c5c58595e7f5119a72f803fd0370b3e6abbec6315cd38f63135
281bc49817822f58202bfc4d0cc6680be7dd9f5ca30aa2bb5d1998145de3
3d54101b80e2ca49faf91811583c8614a1157832687474703a2f2f657861
6d706c652e636f6d2f766572792f6c6f6e672f706174682f746f2f66696c
652f66696c652e62696e1502030f17590204a20179019d2323204578616d
706c6520323a2053696d756c74616e656f757320446f776e6c6f61642c20
496e7374616c6c6174696f6e2c2053656375726520426f6f742c20536576
65726564204669656c64730a0a2020202054686973206578616d706c6520
636f766572732074686520666f6c6c6f77696e672074656d706c61746573
3a0a202020200a202020202a20436f6d7061746962696c69747920436865
636b20287b7b74656d706c6174652d636f6d7061746962696c6974792d63
6865636b7d7d290a202020202a2053656375726520426f6f7420287b7b74
656d706c6174652d7365637572652d626f6f747d7d290a202020202a2046
69726d7761726520446f776e6c6f616420287b7b6669726d776172652d64
6f776e6c6f61642d74656d706c6174657d7d290a202020200a2020202054
686973206578616d706c6520616c736f2064656d6f6e7374726174657320
736576657261626c6520656c656d656e747320287b7b6f76722d73657665
7261626c657d7d292c20616e64207465787420287b7b6d616e6966657374
2d6469676573742d746578747d7d292e814100a2036761726d2e636f6d05
78525468697320636f6d706f6e656e7420697320612064656d6f6e737472
6174696f6e2e205468652064696765737420697320612073616d706c6520
7061747465726e2c206e6f742061207265616c206f6e652e
]]></artwork></figure>

</section>
<section anchor="example-3-ab-images"><name>Example 3: A/B images</name>

<t>This example covers the following templates:</t>

<t><list style="symbols">
  <t>Compatibility Check (<xref target="template-compatibility-check"/>)</t>
  <t>Secure Boot (<xref target="template-secure-boot"/>)</t>
  <t>Firmware Download (<xref target="firmware-download-template"/>)</t>
  <t>A/B Image Template (<xref target="a-b-template"/>)</t>
</list></t>

<figure><artwork><![CDATA[
107({
        / authentication-wrapper / 2:<< [
            / digest: / << [
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'b3e6a52776bf3ed218feba031c609c98260e1a52fc1f019683edb6d1c5c4a379'
            ] >>,
            / signature: / << 18([
                    / protected / << {
                        / alg / 1:-7 / "ES256" /,
                    } >>,
                    / unprotected / {
                    },
                    / payload / F6 / nil /,
                    / signature / h'3a4c404585cf111bb5556a0ce269aa56e7
56d998f09a1179640933c44230f6a7d2ea2331f9d904d84f39496721cf2f76ee85f06b
b71ab2179c833292f0d227bb'
                ]) >>
            ]
        ] >>,
        / manifest / 3:<< {
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:3,
            / common / 3:<< {
                / components / 2:[
                    [h'00']
                ],
                / shared-sequence / 4:<< [
                    / 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,[
                        << [
                            / directive-override-parameters / 20,{
                                / slot / 5:0,
                            } ,
                            / condition-component-slot / 5,5 ,
                            / directive-override-parameters / 20,{
                                / image-digest / 3:<< [
                                    / algorithm-id / -16 / "sha256" /,
                                    / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                                ] >>,
                                / image-size / 14:34768,
                            }
                        ] >> ,
                        << [
                            / directive-override-parameters / 20,{
                                / slot / 5:1,
                            } ,
                            / condition-component-slot / 5,5 ,
                            / directive-override-parameters / 20,{
                                / image-digest / 3:<< [
                                    / algorithm-id / -16 / "sha256" /,
                                    / digest-bytes /
h'0123456789abcdeffedcba987654321000112233445566778899aabbccddeeff'
                                ] >>,
                                / image-size / 14:76834,
                            }
                        ] >>
                    ] ,
                    / condition-vendor-identifier / 1,15 ,
                    / condition-class-identifier / 2,15
                ] >>,
            } >>,
            / validate / 7:<< [
                / condition-image-match / 3,15
            ] >>,
            / install / 17:<< [
                / directive-try-each / 15,[
                    << [
                        / directive-override-parameters / 20,{
                            / slot / 5:0,
                        } ,
                        / condition-component-slot / 5,5 ,
                        / directive-override-parameters / 20,{
                            / uri / 21:'http://example.com/file1.bin',
                        }
                    ] >> ,
                    << [
                        / directive-override-parameters / 20,{
                            / slot / 5:1,
                        } ,
                        / condition-component-slot / 5,5 ,
                        / directive-override-parameters / 20,{
                            / uri / 21:'http://example.com/file2.bin',
                        }
                    ] >>
                ] ,
                / directive-fetch / 21,2 ,
                / condition-image-match / 3,15
            ] >>,
        } >>,
    })
]]></artwork></figure>

<t>Total size of Envelope without COSE authentication object:  320</t>

<t>Envelope:</t>

<figure><artwork><![CDATA[
d86ba2025827815824822f5820b3e6a52776bf3ed218feba031c609c9826
0e1a52fc1f019683edb6d1c5c4a3790359010fa5010102030358a4a20281
81410004589b8814a20150fa6b4a53d5ad5fdfbe9de663e4d41ffe025014
92af1425695e48bf429b2d51f2ab450f8258348614a10500050514a20358
24822f582000112233445566778899aabbccddeeff0123456789abcdeffe
dcba98765432100e1987d058368614a10501050514a2035824822f582001
23456789abcdeffedcba987654321000112233445566778899aabbccddee
ff0e1a00012c22010f020f074382030f11585b860f8258288614a1050005
0514a115781c687474703a2f2f6578616d706c652e636f6d2f66696c6531
2e62696e58288614a10501050514a115781c687474703a2f2f6578616d70
6c652e636f6d2f66696c65322e62696e1502030f
]]></artwork></figure>

<t>Total size of Envelope with COSE authentication object:  396</t>

<t>Envelope with COSE authentication object:</t>

<figure><artwork><![CDATA[
d86ba2025873825824822f5820b3e6a52776bf3ed218feba031c609c9826
0e1a52fc1f019683edb6d1c5c4a379584ad28443a10126a0f658403a4c40
4585cf111bb5556a0ce269aa56e756d998f09a1179640933c44230f6a7d2
ea2331f9d904d84f39496721cf2f76ee85f06bb71ab2179c833292f0d227
bb0359010fa5010102030358a4a2028181410004589b8814a20150fa6b4a
53d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab
450f8258348614a10500050514a2035824822f5820001122334455667788
99aabbccddeeff0123456789abcdeffedcba98765432100e1987d0583686
14a10501050514a2035824822f58200123456789abcdeffedcba98765432
1000112233445566778899aabbccddeeff0e1a00012c22010f020f074382
030f11585b860f8258288614a10500050514a115781c687474703a2f2f65
78616d706c652e636f6d2f66696c65312e62696e58288614a10501050514
a115781c687474703a2f2f6578616d706c652e636f6d2f66696c65322e62
696e1502030f
]]></artwork></figure>

</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>

<t><list style="symbols">
  <t>Compatibility Check (<xref target="template-compatibility-check"/>)</t>
  <t>Secure Boot (<xref target="template-secure-boot"/>)</t>
  <t>Firmware Download (<xref target="firmware-download-template"/>)</t>
  <t>Install (<xref target="template-install"/>)</t>
  <t>Load (<xref target="template-load-ext"/>)</t>
</list></t>

<figure><artwork><![CDATA[
107({
        / authentication-wrapper / 2:<< [
            / digest: / << [
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'838eb848698c9d9dd29b5930102ea1f29743857d975f52ed4d19589b821e82cf'
            ] >>,
            / signature: / << 18([
                    / protected / << {
                        / alg / 1:-7 / "ES256" /,
                    } >>,
                    / unprotected / {
                    },
                    / payload / F6 / nil /,
                    / signature / h'8ea1abc44569f3acea130558a1b1f6a23b
f509cc1f3ac7afe5a3d9bfbdf752b0fbdddb12a64fa0f83faa2d1580d35458cf17dbc4
0c21d6601436e4a39d261c02'
                ]) >>
            ]
        ] >>,
        / manifest / 3:<< {
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:4,
            / common / 3:<< {
                / components / 2:[
                    [h'00'] ,
                    [h'02'] ,
                    [h'01']
                ],
                / shared-sequence / 4:<< [
                    / 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:<< [
                            / algorithm-id / -16 / "sha256" /,
                            / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                        ] >>,
                        / image-size / 14:34768,
                    } ,
                    / condition-vendor-identifier / 1,15 ,
                    / condition-class-identifier / 2,15
                ] >>,
            } >>,
            / validate / 7:<< [
                / directive-set-component-index / 12,0 ,
                / condition-image-match / 3,15
            ] >>,
            / load / 8:<< [
                / directive-set-component-index / 12,2 ,
                / directive-override-parameters / 20,{
                    / image-digest / 3:<< [
                        / algorithm-id / -16 / "sha256" /,
                        / digest-bytes /
h'0123456789abcdeffedcba987654321000112233445566778899aabbccddeeff'
                    ] >>,
                    / image-size / 14:76834,
                    / source-component / 22:0 / [h'00'] /,
                } ,
                / directive-copy / 22,2 ,
                / condition-image-match / 3,15
            ] >>,
            / run / 9:<< [
                / directive-set-component-index / 12,2 ,
                / directive-run / 23,2
            ] >>,
            / payload-fetch / 16:<< [
                / directive-set-component-index / 12,1 ,
                / directive-override-parameters / 20,{
                    / image-digest / 3:<< [
                        / algorithm-id / -16 / "sha256" /,
                        / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                    ] >>,
                    / uri / 21:'http://example.com/file.bin',
                } ,
                / directive-fetch / 21,2 ,
                / condition-image-match / 3,15
            ] >>,
            / install / 17:<< [
                / 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
            ] >>,
        } >>,
    })
]]></artwork></figure>

<t>Total size of Envelope without COSE authentication object:  327</t>

<t>Envelope:</t>

<figure><artwork><![CDATA[
d86ba2025827815824822f5820838eb848698c9d9dd29b5930102ea1f297
43857d975f52ed4d19589b821e82cf03590116a801010204035867a20283
814100814102814101045858880c0014a40150fa6b4a53d5ad5fdfbe9de6
63e4d41ffe02501492af1425695e48bf429b2d51f2ab45035824822f5820
00112233445566778899aabbccddeeff0123456789abcdeffedcba987654
32100e1987d0010f020f0745840c00030f085838880c0214a3035824822f
58200123456789abcdeffedcba987654321000112233445566778899aabb
ccddeeff0e1a00012c2216001602030f0945840c02170210584e880c0114
a2035824822f582000112233445566778899aabbccddeeff0123456789ab
cdeffedcba987654321015781b687474703a2f2f6578616d706c652e636f
6d2f66696c652e62696e1502030f114b880c0014a116011602030f
]]></artwork></figure>

<t>Total size of Envelope with COSE authentication object:  403</t>

<t>Envelope with COSE authentication object:</t>

<figure><artwork><![CDATA[
d86ba2025873825824822f5820838eb848698c9d9dd29b5930102ea1f297
43857d975f52ed4d19589b821e82cf584ad28443a10126a0f658408ea1ab
c44569f3acea130558a1b1f6a23bf509cc1f3ac7afe5a3d9bfbdf752b0fb
dddb12a64fa0f83faa2d1580d35458cf17dbc40c21d6601436e4a39d261c
0203590116a801010204035867a20283814100814102814101045858880c
0014a40150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492af1425695e
48bf429b2d51f2ab45035824822f582000112233445566778899aabbccdd
eeff0123456789abcdeffedcba98765432100e1987d0010f020f0745840c
00030f085838880c0214a3035824822f58200123456789abcdeffedcba98
7654321000112233445566778899aabbccddeeff0e1a00012c2216001602
030f0945840c02170210584e880c0114a2035824822f5820001122334455
66778899aabbccddeeff0123456789abcdeffedcba987654321015781b68
7474703a2f2f6578616d706c652e636f6d2f66696c652e62696e1502030f
114b880c0014a116011602030f
]]></artwork></figure>

</section>
<section anchor="example-5-two-images"><name>Example 5: Two Images</name>

<t>This example covers the following templates:</t>

<t><list style="symbols">
  <t>Compatibility Check (<xref target="template-compatibility-check"/>)</t>
  <t>Secure Boot (<xref target="template-secure-boot"/>)</t>
  <t>Firmware Download (<xref target="firmware-download-template"/>)</t>
</list></t>

<t>Furthermore, it shows using these templates with two images.</t>

<figure><artwork><![CDATA[
107({
        / authentication-wrapper / 2:<< [
            / digest: / << [
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'264dc89eb4a39ae7a8ed05e4d6232153bce4fb9a111a31310b90627d1edfc3bb'
            ] >>,
            / signature: / << 18([
                    / protected / << {
                        / alg / 1:-7 / "ES256" /,
                    } >>,
                    / unprotected / {
                    },
                    / payload / F6 / nil /,
                    / signature / h'82a7c80c7544a744e7da857164b5a11b87
ab33e1ef29fa9e5c0e37870829bb3790a94f2536900185c3a361e619355a154f9220ba
00e8248cd18cd2ffcb0efc99'
                ]) >>
            ]
        ] >>,
        / manifest / 3:<< {
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:5,
            / common / 3:<< {
                / components / 2:[
                    [h'00'] ,
                    [h'01']
                ],
                / shared-sequence / 4:<< [
                    / 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:<< [
                            / algorithm-id / -16 / "sha256" /,
                            / digest-bytes /
h'00112233445566778899aabbccddeeff0123456789abcdeffedcba9876543210'
                        ] >>,
                        / 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:<< [
                            / algorithm-id / -16 / "sha256" /,
                            / digest-bytes /
h'0123456789abcdeffedcba987654321000112233445566778899aabbccddeeff'
                        ] >>,
                        / image-size / 14:76834,
                    }
                ] >>,
            } >>,
            / validate / 7:<< [
                / directive-set-component-index / 12,0 ,
                / condition-image-match / 3,15 ,
                / directive-set-component-index / 12,1 ,
                / condition-image-match / 3,15
            ] >>,
            / run / 9:<< [
                / directive-set-component-index / 12,0 ,
                / directive-run / 23,2
            ] >>,
            / install / 17:<< [
                / 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
            ] >>,
        } >>,
    })
]]></artwork></figure>

<t>Total size of Envelope without COSE authentication object:  306</t>

<t>Envelope:</t>

<figure><artwork><![CDATA[
d86ba2025827815824822f5820264dc89eb4a39ae7a8ed05e4d6232153bc
e4fb9a111a31310b90627d1edfc3bb03590101a601010205035895a20282
8141008141010458898c0c0014a40150fa6b4a53d5ad5fdfbe9de663e4d4
1ffe02501492af1425695e48bf429b2d51f2ab45035824822f5820001122
33445566778899aabbccddeeff0123456789abcdeffedcba98765432100e
1987d0010f020f0c0114a2035824822f58200123456789abcdeffedcba98
7654321000112233445566778899aabbccddeeff0e1a00012c220749880c
00030f0c01030f0945840c00170211584f900c0014a115781c687474703a
2f2f6578616d706c652e636f6d2f66696c65312e62696e1502030f0c0114
a115781c687474703a2f2f6578616d706c652e636f6d2f66696c65322e62
696e1502030f
]]></artwork></figure>

<t>Total size of Envelope with COSE authentication object:  382</t>

<t>Envelope with COSE authentication object:</t>

<figure><artwork><![CDATA[
d86ba2025873825824822f5820264dc89eb4a39ae7a8ed05e4d6232153bc
e4fb9a111a31310b90627d1edfc3bb584ad28443a10126a0f6584082a7c8
0c7544a744e7da857164b5a11b87ab33e1ef29fa9e5c0e37870829bb3790
a94f2536900185c3a361e619355a154f9220ba00e8248cd18cd2ffcb0efc
9903590101a601010205035895a202828141008141010458898c0c0014a4
0150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf42
9b2d51f2ab45035824822f582000112233445566778899aabbccddeeff01
23456789abcdeffedcba98765432100e1987d0010f020f0c0114a2035824
822f58200123456789abcdeffedcba987654321000112233445566778899
aabbccddeeff0e1a00012c220749880c00030f0c01030f0945840c001702
11584f900c0014a115781c687474703a2f2f6578616d706c652e636f6d2f
66696c65312e62696e1502030f0c0114a115781c687474703a2f2f657861
6d706c652e636f6d2f66696c65322e62696e1502030f
]]></artwork></figure>

</section>
</section>
<section anchor="design-rationale"><name>C. Design Rational</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.</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>

<t><list style="numbers">
  <t>This enables the use of Severable Elements (<xref target="severable-fields"/>)</t>
  <t>This enables modular processing of manifests, particularly with large signatures.</t>
  <t>This enables multiple authentication schemes.</t>
  <t>This allows integrity verification by a dependent to be unaffected by adding or removing authentication structures.</t>
</list></t>

<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>

<t><list style="symbols">
  <t>COSE_Sign_Tagged</t>
  <t>COSE_Sign1_Tagged</t>
  <t>COSE_Mac_Tagged</t>
  <t>COSE_Mac0_Tagged</t>
</list></t>

<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>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <ttcol align='left'>Implementation</ttcol>
      <c>Vendor Identifier</c>
      <c><xref target="uuid-identifiers"/></c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Class Identifier</c>
      <c><xref target="uuid-identifiers"/></c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Device Identifier</c>
      <c><xref target="uuid-identifiers"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Image Match</c>
      <c><xref target="suit-condition-image-match"/></c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Check Content</c>
      <c><xref target="suit-condition-check-content"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Component Slot</c>
      <c><xref target="suit-condition-component-slot"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Abort</c>
      <c><xref target="suit-condition-abort"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Custom Condition</c>
      <c><xref target="SUIT_Condition_Custom"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
</texttable>

<t>The subsequent table shows the directives.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <ttcol align='left'>Implementation</ttcol>
      <c>Set Component Index</c>
      <c><xref target="suit-directive-set-component-index"/></c>
      <c><bcp14>REQUIRED</bcp14> if more than one component</c>
      <c>Write Content</c>
      <c><xref target="suit-directive-write"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Try Each</c>
      <c><xref target="suit-directive-try-each"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Override Parameters</c>
      <c><xref target="suit-directive-override-parameters"/></c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Fetch</c>
      <c><xref target="suit-directive-fetch"/></c>
      <c><bcp14>REQUIRED</bcp14> for Updater</c>
      <c>Copy</c>
      <c><xref target="suit-directive-copy"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Invoke</c>
      <c><xref target="suit-directive-invoke"/></c>
      <c><bcp14>REQUIRED</bcp14> for Bootloader</c>
      <c>Run Sequence</c>
      <c><xref target="suit-directive-run-sequence"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Swap</c>
      <c><xref target="suit-directive-swap"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
</texttable>

<t>The subsequent table shows the parameters.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <ttcol align='left'>Implementation</ttcol>
      <c>Vendor ID</c>
      <c><xref target="suit-parameter-vendor-identifier"/></c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Class ID</c>
      <c><xref target="suit-parameter-class-identifier"/></c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Image Digest</c>
      <c><xref target="suit-parameter-image-digest"/></c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Image Size</c>
      <c><xref target="suit-parameter-image-size"/></c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Component Slot</c>
      <c><xref target="suit-parameter-component-slot"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Content</c>
      <c><xref target="suit-parameter-content"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>URI</c>
      <c><xref target="suit-parameter-uri"/></c>
      <c><bcp14>REQUIRED</bcp14> for Updater</c>
      <c>Source Component</c>
      <c><xref target="suit-parameter-source-component"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Invoke Args</c>
      <c><xref target="suit-parameter-invoke-args"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Device ID</c>
      <c><xref target="suit-parameter-device-identifier"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Strict Order</c>
      <c><xref target="suit-parameter-strict-order"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Soft Failure</c>
      <c><xref target="suit-parameter-soft-failure"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Custom</c>
      <c><xref target="suit-parameter-custom"/></c>
      <c><bcp14>OPTIONAL</bcp14></c>
</texttable>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+y963Yc15Em+r+eIg85qwXIVUWCpGQJbtkNgmSLbd6GoOzx
kXXYiapEIc2qzHJmFsASSf+ah+i1zp9+jP7dXvNeJ+47dl4KIKU5fZnWWt0m
KjP3NXbsuHwRMZlMRheHyd3RqMmbZXaYHCXHZTHL6yy5nxdptU2en/4pmzXJ
y2xdZXVWNGmTl0Wyd3z/+cv9yWlaZ/PkJKvydJn/yI8eldUqbZKzskqa8yw5
Kc+ay7TKku/W87TJanrwuGiyqsiapDxLXp3nxaJO9k6+e/xqP3maFvlZVjej
9PS0ymBo2JH2A2+EF+blrEhXMOR5lZ41kzxrzib1Jm8mK3ljcufuKF9Xh0lT
bermzu3bX9++M5rBGBZltT1M6mY+qpsqS1eHyeOHrx6NRjDK9BBmM9tUebMd
XZbVm0VVbtaH1PPoTbaFn+aHNvrJA+x5NFrnh6Mkqc5m2bxutriK26yGX5py
5v6ZF3NYPv2hLivo+6y2v7er6M+mymf28qxcreBbe5oXy7wI3WRvm8kyhwlD
I6flEl6blJ//Ap7AEq3S9RrW143j9TK7yPClezDjTXNeVjD6CTzD//ICHtyf
Jk/LKi3kN17l+1VWzNMielJWC1hr3ncgnWqVPMlXeZPN5Xm2SvPlYXLKn05X
+OkUN+rvFvhkCvMatfr+dpq8qmfn5VlW5ItoAN+mRQHk03kqnZzT42ljj6GP
t1PYpZ4e7ufVm/Ny+WPcfla8aT+JJ/ioSjcFtl4lJ0APcffw9fRUvv67Om+m
Z/b2dJ61B/HbafJ/p8X8NKviSf62zIr2k3gQjws4bHHfb+Cj6Y/y0d/l+AL0
3u7yr/80TV7+9V+KAo9bk86jfv/6T9sLINC+F+Lun8EJyGdwSFb5rCzmm1lT
VvFoSmppWpXWkN/tgrhDfpHhkXn56PjewZ078s+vb39x5xBovc5GN/WHu/zD
JF0uan7r7tdffSkffPX1va/t2wP758Gde/jPx5MHU8cUmtxe/fo2jDKfW6/3
kHrqc+5kNMqLMz9Ia6fJsvUkrWbnQOGzZlNl3V7O8mqFzG6SFbNqu6Yl67y0
IUaIbCpdZHiuu68Qx5rMS1g32LrO4ypbA/uQ+fzyzp2v8J9/OHr65JC2Qlj5
DfwlOcqLzxrgmtWbzTp5khaLDfR6g96z0w//4ZAOkzu379zmJtJqkQH/OW+a
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
5ykctxFGJPyCEnlf0TkS0c/FXnozTQ6ckk42w74D02mrdXas2pmlC9AUBZLc
q5sVxTIsSrE3Plwzzgp51R2/9+7dDnmBsq0eFa76Y9UO4acQnk7uzGwgdyaZ
kORVewcrAypiLZXIgvhVw7MFDzAXoYSX1fwn0ogWcEhdP1R4JySwRgSLeEOy
t1RuWmNjzqp0gW1NSN2wyIk2HosSRt39+qsvfcIorgKO6rsUXS87a1XJ5ecG
RyYcqkrZKSup6zN2kfA4O4lhgVVj3k0FPonnPHPhbicCTOijVdpkycncotDd
jbWIVWYgnF5yp2GVQvvQm8eJq3efREFvWgcX98Lq1YfWrej2I9Bdz7nNl0dP
P04QXXJ59P8gYuggv+yxCnwMd8SIh3LTLANNz9oBbZxRvd0sS1epRtZxAJAX
QvplHHm9K6G0F37PbvEh4Wff7D8/i+yDId58R7izkk5Od6lNPd9E2tLYajVr
6SvS8xSAfFlaULmlik4piO2apKyi5kpzXvz8dKxIO0IOgmxPrpbg/9XCaT8j
wY97yJrPACL0j1yXfLHTz8dX3Ohhbgjox6n9bxh5j8Z41NYZjwZPLg/mhOXd
f8MVvv8fa4Xvt1f4/m4L1rXOFN/PdKQ4SJnFMfrhv47YxxPAoAL7SfaH/yPP
0M+7hMOHROw3lL+txzi/51K3e8s+B74ySs3Sd0VW1ZwwqewPjXw/iA9VzGDb
xYMpMMo1uo4V0u8+/K/b7qPo6D/VwVCjubpMj4otF/5q5cSQTOGauFzlrd6+
XXnJ2DnpSp4S+EkMTtwh6y0EMZ+4bBYEqOfCBVoXL5Q2fndTi+W50ouSxEbf
pjXDzB9WyyGulKc4PS5MIHj+vKEIJamg18pr9zj4V8euwmxfkRerHRnV1pA8
qqlVNFdUuo7ZJqOFSbvTJKq5yLNLUpSpoq4kTz+O8WGS0mdt8VJto4JlXU8p
Tl0sugcBeoAfoxqh7mMdgiCQWFR/k2VrDS/iALRakmWltcWrsPJCon/3KwSW
S4HSUGzjdItbtkf1VjsAtuRgcufuPqNhKbEJzGWzimyIzEkbjTuhPFAZJUQ9
iAFUVgLC04ToBJiagJRnigt1wTREznPOjSwJqMmccpFWOSW4mSYvdNAcmkDL
3xklrnpFxk4Uy46eHWG+gJzSh0tphUUaNRKVu2Lz77Y/Hb9W82uH/r17l6dF
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
Zwuvu24invwasRi3sPoNSyMfR1DiRLVpXHMFHeacvoXer7/6Lk2jfTuKDs03
Qo1ETweqYqg+aspk+PW32bZWJW+HOvJrV4AxfBzexWak5OIH32n8hij4kTat
7ICCu8N/kRHGv07ervbbw69L63OGhV6zdeRt12o9HEEPMbrG694GFr1O5oKe
D95k2z4jge1h79IGWOZ1RscezOjdXSulbf+pxsTJjIm++u1tulr2vh1PvDvd
nS6ERLTuVbA83h02LbRtCPD25GCHJaFjMqAPvhq1LQT48727o7ZBgH6+N+ro
//T7F9CtM/6NQ0XDieWei+dmtPNNctB60rGYJmaNEFvSXRUkvOXzm0SMG8HI
mPxy5OyHyf/X3pU+x20j++/4K1i7H5zdlSyCN/V2X5UuO0p8JJZzeF+lUiAJ
ShPPIQ9nLMux//f3awA8h8PR5azjlVSWZ0gc3Y2+2QSiMlesU4NWzP7n5Aog
d1J4pJDamTiLh2tGWk47Y+nMm+W41cGcVb6pQrOb5iLEagLUMShuUA3zyhGf
PZ5JSeOBY8SbZO47uNnokJL2aw+bVY38lUatg4J1o2AFcn0Ea88PEPC6jVdN
adXY8Va3y+05qq8c2uk2rk4p6oHD7zbWJwD0Ax1d5aSdEmi7//yR3pEd3nu2
xZrGKwgaEeht7PZvNdw/tLsCR2vH405jZ2XT5gFeHXB7a15dc4p6OeHKSL28
urKTdNO9KZdyZcKWI1O2Wpmx4RjXbOGtwlULRoN5us1aD3g6nDDg3zZYoN+L
XVn7QYe1Fq9Vb7SpkdYb73qR15vseo3XG+p6ideb54b6HHLUWgCt8c5aAK1x
ydoA9fthpaEacr5KFTrkcUGD6iPArf2H1pHeeJU25DJ7sBYfuyetlzesTE70
HqqqgEQfAKO2Zao2NW1tNbS6V+3RW72nvfIv+jYeT9X57foYgMms2iy1kK3d
pF6qynEDFNWfmcrrZbWldA380cHhidqL8Rxex5zTZo7m+Pdt+tk/enz8zPru
xfGPey+PrG+PXqmr7Onx46/3To/2nu4/fbx/+ebxyVMvxvfHBwfm88XR1/uP
7Qtxcby/9/33p3vn/371278Pfnj85Klv/7h/wA5+e3Wy+Pkfdvzb48n08pvv
5ueHT16+3zkb/fz87MXes4O9vZOj8eyItql/8yb+5uzHdyMZPptN3r558yR6
sXjLvvtHMlr89FN6lr3dm78s8m9fL4qDV0fvLr59tpg/+/rnUfx83332j4vp
3g+L4v3kheM+9Rbfjn7SaB09O1xFSq36y5VCnnMq1k3VLpfNbZ9b51MUNcF7
qPfD/pPjgwbxHr2+OLp49fW3s38fv//NPtj7/tWx+Xy49316CHIdnX0j9h+/
8Z68efP25NWP6avp8r34Zh68Ge0cJSx5vzPx5j+Op8c/Jxff2uHXl+dPkr3J
/tP04LdEvH/BvbcvT7P3efHNxaMnyVP/dbZ4//zJyWx8+q9/NfDvgKXQ17uG
a1QsdVDCydd7atuuorETYMXHtGfXzNSMdw+yG8ny0DxYmvJlE2X/p9A1Ofiv
3MW1PnR12iGmrl7qGbg8BX7RZfXW7t9tVldnjJB8mMTaB0u9xVi+sshW8mCk
Ek2ei15xTLe/g8XsbZZXb39TM3oXvNGsmzP7YJ1cFt2xulkz3UiNxMotZupr
jTEaczahbLyH+aGF4JBH+8HizX8bvdsN7ZuO7qah2y7EB8s2Le269ep543az
Ya/rtqFNdSR4u5V+B1ELgb2ra5KltT+bLUwdcikhjY3pG3wmcY/qfVXBK2U5
EJGalwL03jFf/f572UhhXt3XHv3Hj39Dx8asrQ6qUlhu0xFCH9VTxYWu0Fcv
jVfb7U9G09FkOSkh1RV7jEry6mTNjrUmZt6xnN1//tMksOvWWvh38Wnlphmu
WXq2Q4Ez/v4FkRc0yF+sna2eLq0StB129iAI/EgKP7CdwAniIMt4zt0kjBzH
jYUdeJkI0yD100TkvpNnMvOcSAR5GrlpKH2RP2hN8ov1v/+71UGj2pveYMKj
r1aR0U1NLbnMdMvfe5tVuOMv390OCeejk3Uo08/HFajqcZbT5qT9M35c17k8
62zHekSkn0InrAGhQQZ8PnsgXd/281AkoZ1krrCl7cU8yN0wsbPQ8bkQLADB
U8Ed0DkTIooC4XEnFk4cpSIQXKapI/ww9v00SHIvTZM4t3kWRF7mZzz1wtDL
8jxh0rcjYbue5/JcilwEduRFwkkfrMD5y99Ap/ZyVt/aC7tTO0s7lru7slT1
/crXo7XiXdZYmy0hibC7rU3mpHfGqkWZiKAR+tns/84e2PaDX1bR75OXbhpj
x/JWRbVuPhwjAyZ7a4ipKxMB0eS7Zw+wWoknfDfzRebnWZ7IOJNB4Eov83ie
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

-->

</rfc>

