<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.12 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc rfcedstyle="yes"?>
<?rfc toc="yes"?>
<?rfc tocindent="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="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-18" category="std">

  <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@arm.com</email>
      </address>
    </author>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization>Arm Limited</organization>
      <address>
        <email>hannes.tschofenig@arm.com</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>

    <date year="2022" month="July" day="11"/>

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

    <abstract>


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


<section anchor="introduction"><name>Introduction</name>

<t>A firmware update mechanism is an essential security feature for IoT devices to deal with vulnerabilities. While the transport of firmware images to the devices themselves is important there are already various techniques available. 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. End-to-end security 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. 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 describing one or more code or data payloads and how to:</t>

<t><list style="symbols">
  <t>Obtain any dependencies</t>
  <t>Obtain the payload(s)</t>
  <t>Install them</t>
  <t>Verify them</t>
  <t>Load them into memory</t>
  <t>Invoke them</t>
</list></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 Firmware Author to reason about releasing a firmware.</t>
  <t>a Network Operator to reason about compatibility of a firmware.</t>
  <t>a Device Operator to reason about the impact of a firmware.</t>
  <t>the Device Operator to manage distribution of firmware to devices.</t>
  <t>a Plant Manager to reason about timing and acceptance of firmware updates.</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 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" 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>

<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.</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>This specification covers the core features of SUIT. 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>
  <t>Compression of firmware images</t>
</list></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>
</list></t>

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

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

<t>If verification and running is implemented in a bootloader, then the bootloader MUST 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                     |
| Human-Readable Text     |          +------------------------------+
| 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 would add substantial complexity 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="RFC8152"/> 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 MAY 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 MUST NOT 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, and Payload Installation. 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 <xref target="ovr-severable"/>, there needs to be a mechanism to verify integrity of any metadata outside the manifest. Integrity Check Values are used to verify the integrity of metadata that is not contained in the manifest. This MAY include Severable Command Sequences, or Text data. Integrated Payloads are integrity-checked using Command Sequences, so they do not have Integrity Check Values present in the Manifest.</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 MUST inspect the manifest version field and fail when it encounters an unsupported encoding version. Next, the manifest processor or its host application MUST 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 MUST select the latest valid, authentic manifest.</t>
  <t>If the latest valid, authentic manifest fails, it MAY 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 MAY 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 a robustness mechanism that is necessary for supporting the requirements in <xref target="RFC9019"/>, section 3.5. It may not be appropriate for all applications. In particular Trusted Execution Environments MAY require a failure to invoke a new installation, rather than a rollback approach. See <xref target="RFC9124"/>, Section 4.2.1 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 RECOMMENDED 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 MAY 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 MUST examine the component list and verify that its maximum number of components is not exceeded and that each listed component is supported.</t>

<t>For each listed component, the manifest processor MUST provide storage for the supported parameters. If the manifest processor does not have sufficient temporary storage to process the parameters for all components, it MAY process components serially for each command sequence. See <xref target="serial-processing"/> for more details.</t>

<t>The manifest processor SHOULD check that the common sequence contains at least Check Vendor Identifier command and at least one Check Class Identifier command.</t>

<t>Because the common sequence contains Check Vendor Identifier and Check Class Identifier command(s), no custom commands are permitted in the common 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 MUST begin with a Set Component Index.</t>

<t>If a Recipient supports groups of interdependent components (a Component Set), then it SHOULD 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 MAY 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 MUST 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 MUST restrict acceptable commands to conditions and the following directives: Override Parameters, Set Parameters, Try Each, and Run Sequence ONLY. The manifest parser MUST NOT execute any command with side-effects outside the parser (for example, Run, Copy, Swap, or Fetch commands) prior to authentication and any such command MUST Abort. The Common Sequence MUST be executed again, in its entirety, after authenticity validation.</t>

<t>A Recipient MAY 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 MUST either result in an error, or a verifiably correct system state.</t>
  <t>Executing a Trusted Invocation MUST either result in an error, or an invoked image.</t>
  <t>Executing the same manifest on multiple Recipients MUST 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 Section 3 of 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 MUST 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 MUST 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 MUST NOT 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 MAY have side-effects in the parameter table, the interpreter state, or the current component. The Interpreter MUST 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>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>Run</c>
      <c>run(current)</c>
      <c>Fetch</c>
      <c>store(current, fetch(current.params[uri]))</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>Run with Arguments</c>
      <c>run(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 MUST always be supported by Set Component Index. Arrays of integers MUST be supported by Set Component Index if the Recipient supports 3 or more components. True MUST 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 either 1. operates on the component identified by the component index if that index is an integer, or 2. it operates on each component identified by an array of indicies, or 3. it operates on every component if the index is the boolean True. 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 MAY 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 MAY 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 MUST 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 MAY be run in parallel. Each sequence defaults to Strict Order = True. To isolate each sequence from each other sequence, each sequence MUST begin with a Set Component Index directive with the following exception: when the index is either True or an array of indices, the Set Component Index is implied. Any further Set Component Index directives MUST 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="RFC8152"/>.</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 MUST 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 MUST 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 MUST 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 common 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 common 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>Run directive (see <xref target="suit-directive-run-sequence"/>)</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 common 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 MAY choose to place a payload in the envelope of a manifest. The payload envelope key MUST be a string. The payload MUST be serialized in a bstr element.</t>

<t>The URI for a payload enclosed in this way MAY be expressed as a fragment-only reference, as defined in <xref target="RFC3986"/>, Section 4.4.</t>

<t>A distributor MAY 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 common 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>Run</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: the Envelope, Authentication Information, Manifest, and Severable Elements.</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 MUST 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 MUST 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 8152 <xref target="RFC8152"/>.</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 Section 4.4 of <xref target="RFC8152"/> for details. This specification requires Sig_structure to be populated as follows:
* The external_aad field MUST be set to a zero-length binary string (i.e. there is no external additional authenticated data).
* The payload field contains the SUIT_Digest wrapped in a bstr, as per the requirements in Section 4.4 of RFC 8152.
All other fields in the Sig_structure are populated as described in Section 4.4 of <xref target="RFC8152"/>.</t>

<t>Likewise, Section 6.3 of <xref target="RFC8152"/> 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 MUST come before the suit-manifest element, regardless of canonical encoding of CBOR.</t>

<t>A SUIT_Envelope that has not had authentication information added MUST still contain the suit-authentication-wrapper element, but the content MUST 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.moran-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) 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 RECOMMENDED to implement. In particular, the human-readable text SHOULD 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 REQUIRED 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 MUST reject any manifest that has a sequence number lower than its current sequence number. For convenience, an implementer MAY use a UTC timestamp in seconds as the sequence number. suit-manifest-sequence-number is REQUIRED 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 SHOULD 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 MUST 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 MAY be present. If present, each section MUST 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 OPTIONAL 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-common-sequence. suit-common is REQUIRED 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 REQUIRED to implement.</t>

<t>suit-common-sequence is a SUIT_Command_Sequence to execute prior to executing any other command sequence. Typical actions in suit-common-sequence include setting expected 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-common-sequence is RECOMMENDED to implement. It is REQUIRED 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-common-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 MUST 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 OPTIONAL 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 OPTIONAL 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 REQUIRED 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 OPTIONAL to implement.</t>
  <t>Run or Boot: suit-run is a SUIT_Command_Sequence to execute in order to run an image. suit-run typically contains a single instruction: the "run" directive. suit-run is OPTIONAL to implement.</t>
</list></t>

<t>Goals 1,2 form the Update Procedure. Goals 4,5,6 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 MUST be true and any failure is treated as a failure of the update/load/invocation</t>
  <t>Directives that MUST 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 MAY 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 MUST 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 MAY choose to ignore these hints and apply its own policy instead.</t>

<t>When used in a Invocation Procedure, the report MAY form the basis of an attestation report. When used in an Update Process, the report MAY 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>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>Run Args</c>
      <c>suit-parameter-run-args</c>
      <c><xref target="suit-parameter-run-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 type 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 MAY 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 MUST NOT 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 MUST be created according to RFC 4122 <xref target="RFC4122"/>. UUIDs SHOULD use versions 3, 4, or 5, as described in RFC4122. Versions 1 and 2 do not provide a tangible benefit over version 4 for this application.</t>

<t>The RECOMMENDED 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 RECOMMENDED 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 RECOMMENDED 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="I-D.ietf-cbor-tags-oid"/>. 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 MUST 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 MUST 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 MUST be encoded as a positive integer.</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-run-args"><name>suit-parameter-run-args</name>

<t>This parameter contains an encoded set of arguments for suit-directive-run (<xref target="suit-directive-run"/>). The arguments MUST 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 MAY be set to False when the order of operations does not matter. When arriving at the end of a command sequence, ALL commands MUST have completed, regardless of the state of SUIT_Parameter_Strict_Order. If SUIT_Parameter_Strict_Order is returned to True, ALL preceding commands MUST 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 MUST NOT 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 MUST NOT be used in the common 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>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 MUST report a result code on completion. If a condition reports failure, then the current sequence of commands MUST terminate. A subsequent command or command sequence MAY continue executing if suit-parameter-soft-failure (<xref target="suit-parameter-soft-failure"/>) is set. If a condition requires additional information, this MUST 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 MUST report a failure. If a Recipient encounters an unknown condition, it MUST 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 MUST have already been set as a parameter. The installing Recipient MUST match the specified UUID in order to consider the manifest valid. These identifiers are scoped by component in the manifest. Each component MAY 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 REQUIRED to implement. suit-condition-device-identifier is OPTIONAL to implement.</t>

<t>Each identifier condition compares the corresponding identifier parameter to a parameter asserted to the Manifest Processor by the Recipient. Identifiers MUST 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 REQUIRED to implement.</t>

</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 OPTIONAL 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>Run</c>
      <c>suit-directive-run</c>
      <c><xref target="suit-directive-run"/></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 MUST report a result code. If the Directive reports failure, then the current Command Sequence MUST 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 supplied argument MUST be one of three types:</t>

<t><list style="numbers">
  <t>An unsigned integer (REQUIRED to implement in parser)</t>
  <t>A boolean (REQUIRED to implement in parser ONLY IF 2 or more components supported)</t>
  <t>An array of unsigned integers (REQUIRED to implement in parser ONLY IF 3 or more components supported)</t>
</list></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.
See <xref target="index-true"/> for more details.</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. Use this command to implement a "try/catch-try/catch" sequence. Manifest processors MAY 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-run"><name>suit-directive-run</name>

<t>suit-directive-run directs the manifest processor to transfer execution to the current Component Index. When this is invoked, the manifest processor MAY be unloaded and execution continues in the Component Index. Arguments are provided to suit-directive-run through suit-parameter-run-arguments (<xref target="suit-parameter-run-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.</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>

<t>If SUIT_Parameter_Compression_Info or SUIT_Parameter_Encryption_Info are present, they MUST be handled in a symmetric way, so that the source is decompressed into the destination and the destination is compressed into the source. The source is decrypted into the destination and the destination is encrypted into the source. suit-directive-swap is OPTIONAL to implement.</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 SHOULD NOT be severable. Elements larger than (Digest Bits)/8 + 4 MAY be severable, while elements that are much larger than (Digest Bits)/8 + 4 SHOULD 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 List 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 defined by <xref target="I-D.ietf-cose-hash-algs"/>. The following algorithms MUST be implemented by all Manifest Processors:</t>

<t><list style="symbols">
  <t>SHA-256 (-16)</t>
</list></t>

<t>The following algorithms MAY be implemented in a Manifest Processor:</t>

<t><list style="symbols">
  <t>SHAKE128 (-18)</t>
  <t>SHA-384 (-43)</t>
  <t>SHA-512 (-44)</t>
  <t>SHAKE256 (-45)</t>
</list></t>

</section>
<section anchor="iana"><name>IANA Considerations</name>

<t>IANA is requested to:</t>

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

<t>IANA is requested to setup a registry for SUIT manifests.
Several registries defined in the subsections below need to be created.</t>

<t>For each registry, values 0-23 are Standards Action, 24-255 are IETF Review, 256-65535 are Expert Review, and 65536 or greater are First Come First Served.</t>

<t>Negative values -23 to 0 are Experimental Use, -24 and lower are Private Use.</t>

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

<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"/></c>
      <c>2</c>
      <c>Class Identifier</c>
      <c><xref target="identifier-conditions"/></c>
      <c>3</c>
      <c>Image Match</c>
      <c><xref target="suit-condition-image-match"/></c>
      <c>4</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>5</c>
      <c>Component Slot</c>
      <c><xref target="suit-condition-component-slot"/></c>
      <c>12</c>
      <c>Set Component Index</c>
      <c><xref target="suit-directive-set-component-index"/></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"/></c>
      <c>16</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>17</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>18</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>19</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>20</c>
      <c>Override Parameters</c>
      <c><xref target="suit-directive-override-parameters"/></c>
      <c>21</c>
      <c>Fetch</c>
      <c><xref target="suit-directive-fetch"/></c>
      <c>22</c>
      <c>Copy</c>
      <c><xref target="suit-directive-copy"/></c>
      <c>23</c>
      <c>Run</c>
      <c><xref target="suit-directive-run"/></c>
      <c>24</c>
      <c>Device Identifier</c>
      <c><xref target="identifier-conditions"/></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"/></c>
      <c>32</c>
      <c>Run Sequence</c>
      <c><xref target="suit-directive-run-sequence"/></c>
      <c>33</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>nint</c>
      <c>Custom Condition</c>
      <c><xref target="SUIT_Condition_Custom"/></c>
</texttable>

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

<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"/></c>
      <c>2</c>
      <c>Class ID</c>
      <c><xref target="suit-parameter-class-identifier"/></c>
      <c>3</c>
      <c>Image Digest</c>
      <c><xref target="suit-parameter-image-digest"/></c>
      <c>4</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>5</c>
      <c>Component Slot</c>
      <c><xref target="suit-parameter-component-slot"/></c>
      <c>12</c>
      <c>Strict Order</c>
      <c><xref target="suit-parameter-strict-order"/></c>
      <c>13</c>
      <c>Soft Failure</c>
      <c><xref target="suit-parameter-soft-failure"/></c>
      <c>14</c>
      <c>Image Size</c>
      <c><xref target="suit-parameter-image-size"/></c>
      <c>18</c>
      <c>Reserved</c>
      <c>&#160;</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"/></c>
      <c>22</c>
      <c>Source Component</c>
      <c><xref target="suit-parameter-source-component"/></c>
      <c>23</c>
      <c>Run Args</c>
      <c><xref target="suit-parameter-run-args"/></c>
      <c>24</c>
      <c>Device ID</c>
      <c><xref target="suit-parameter-device-identifier"/></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"/></c>
</texttable>

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

<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"/></c>
      <c>2</c>
      <c>Update Description</c>
      <c><xref target="manifest-digest-text"/></c>
      <c>3</c>
      <c>Manifest JSON Source</c>
      <c><xref target="manifest-digest-text"/></c>
      <c>4</c>
      <c>Manifest YAML Source</c>
      <c><xref target="manifest-digest-text"/></c>
      <c>nint</c>
      <c>Custom</c>
      <c><xref target="manifest-digest-text"/></c>
</texttable>

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

<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"/></c>
      <c>2</c>
      <c>Model Name</c>
      <c><xref target="manifest-digest-text"/></c>
      <c>3</c>
      <c>Vendor Domain</c>
      <c><xref target="manifest-digest-text"/></c>
      <c>4</c>
      <c>Model Info</c>
      <c><xref target="manifest-digest-text"/></c>
      <c>5</c>
      <c>Component Description</c>
      <c><xref target="manifest-digest-text"/></c>
      <c>6</c>
      <c>Component Version</c>
      <c><xref target="manifest-digest-text"/></c>
      <c>7</c>
      <c>Component Version Required</c>
      <c><xref target="manifest-digest-text"/></c>
      <c>nint</c>
      <c>Custom</c>
      <c><xref target="manifest-digest-text"/></c>
</texttable>

</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>Milosch Meriac</t>
  <t>Geraint Luff</t>
  <t>Dan Ros</t>
  <t>John-Paul Stanford</t>
  <t>Hugo Vincent</t>
  <t>Carsten Bormann</t>
  <t>Øyvind Rønningstad</t>
  <t>Frank Audun Kvamtrø</t>
  <t>Krzysztof Chruściński</t>
  <t>Andrzej Puzdrowski</t>
  <t>Michael Richardson</t>
  <t>David Brown</t>
  <t>Emmanuel Baccelli</t>
</list></t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference anchor='RFC4122' target='https://www.rfc-editor.org/info/rfc4122'>
<front>
<title>A Universally Unique IDentifier (UUID) URN Namespace</title>
<author fullname='P. Leach' initials='P.' surname='Leach'><organization/></author>
<author fullname='M. Mealling' initials='M.' surname='Mealling'><organization/></author>
<author fullname='R. Salz' initials='R.' surname='Salz'><organization/></author>
<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='RFC8152' target='https://www.rfc-editor.org/info/rfc8152'>
<front>
<title>CBOR Object Signing and Encryption (COSE)</title>
<author fullname='J. Schaad' initials='J.' surname='Schaad'><organization/></author>
<date month='July' year='2017'/>
<abstract><t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size.  There is a need for the ability to have basic security services defined 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></abstract>
</front>
<seriesInfo name='RFC' value='8152'/>
<seriesInfo name='DOI' value='10.17487/RFC8152'/>
</reference>



<reference anchor='RFC3986' target='https://www.rfc-editor.org/info/rfc3986'>
<front>
<title>Uniform Resource Identifier (URI): Generic Syntax</title>
<author fullname='T. Berners-Lee' initials='T.' surname='Berners-Lee'><organization/></author>
<author fullname='R. Fielding' initials='R.' surname='Fielding'><organization/></author>
<author fullname='L. Masinter' initials='L.' surname='Masinter'><organization/></author>
<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' target='https://www.rfc-editor.org/info/rfc8949'>
<front>
<title>Concise Binary Object Representation (CBOR)</title>
<author fullname='C. Bormann' initials='C.' surname='Bormann'><organization/></author>
<author fullname='P. Hoffman' initials='P.' surname='Hoffman'><organization/></author>
<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' target='https://www.rfc-editor.org/info/rfc9019'>
<front>
<title>A Firmware Update Architecture for Internet of Things</title>
<author fullname='B. Moran' initials='B.' surname='Moran'><organization/></author>
<author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'><organization/></author>
<author fullname='D. Brown' initials='D.' surname='Brown'><organization/></author>
<author fullname='M. Meriac' initials='M.' surname='Meriac'><organization/></author>
<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' target='https://www.rfc-editor.org/info/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'><organization/></author>
<author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'><organization/></author>
<author fullname='H. Birkholz' initials='H.' surname='Birkholz'><organization/></author>
<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.moran-suit-mti'>
   <front>
      <title>Mandatory-to-Implement Algorithms for Creators and Consumers of Software Update for the Internet of Things manifests</title>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <date day='11' month='July' year='2022'/>
      <abstract>
	 <t>   This document specifies algorithm profiles for SUIT manifest parsers
   and authors to ensure better interoperability.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-moran-suit-mti-00'/>
   <format target='https://www.ietf.org/archive/id/draft-moran-suit-mti-00.txt' type='TXT'/>
</reference>



<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author fullname='S. Bradner' initials='S.' surname='Bradner'><organization/></author>
<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' target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author fullname='B. Leiba' initials='B.' surname='Leiba'><organization/></author>
<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-cose-hash-algs'>
   <front>
      <title>CBOR Object Signing and Encryption (COSE): Hash Algorithms</title>
      <author fullname='Jim Schaad'>
	 <organization>August Cellars</organization>
      </author>
      <date day='14' month='September' year='2020'/>
      <abstract>
	 <t>   The CBOR Object Signing and Encryption (COSE) syntax
   [I-D.ietf-cose-rfc8152bis-struct] 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 X.509 certificate or other
   object identification by the use of a fingerprint.  This document
   defines a set of hash algorithms that are identified by COSE
   Algorithm Identifiers.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-cose-hash-algs-09'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-cose-hash-algs-09.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-teep-architecture'>
   <front>
      <title>Trusted Execution Environment Provisioning (TEEP) Architecture</title>
      <author fullname='Mingliang Pei'>
	 <organization>Broadcom</organization>
      </author>
      <author fullname='Hannes Tschofenig'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Dave Thaler'>
	 <organization>Microsoft</organization>
      </author>
      <author fullname='David Wheeler'>
	 <organization>Amazon</organization>
      </author>
      <date day='11' month='July' year='2022'/>
      <abstract>
	 <t>   A Trusted Execution Environment (TEE) is an environment that enforces
   that any code within that environment cannot be tampered with, and
   that any data used by such code cannot be read or tampered with by
   any code outside that environment.  This architecture document
   motivates the design and standardization of 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-18'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-teep-architecture-18.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-cbor-tags-oid'>
   <front>
      <title>Concise Binary Object Representation (CBOR) Tags for Object Identifiers</title>
      <author fullname='Carsten Bormann'>
	 <organization>Universität Bremen TZI</organization>
      </author>
      <date day='21' month='May' 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.

 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='Internet-Draft' value='draft-ietf-cbor-tags-oid-08'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-cbor-tags-oid-08.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-suit-firmware-encryption'>
   <front>
      <title>Firmware Encryption with SUIT Manifests</title>
      <author fullname='Hannes Tschofenig'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Russ Housley'>
	 <organization>Vigil Security, LLC</organization>
      </author>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <date day='11' month='July' year='2022'/>
      <abstract>
	 <t>   This document specifies a firmware update mechanism where the
   firmware image is encrypted.  Firmware encryption uses the IETF SUIT
   manifest with key establishment provided by hybrid public-key
   encryption (HPKE) and AES Key Wrap (AES-KW).  HPKE uses public key
   cryptography while AES-KW uses a pre-shared key-encryption key.
   Encryption of the firmware image is accomplished with convential
   symmetric key cryptography.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-firmware-encryption-06'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-firmware-encryption-06.txt' type='TXT'/>
</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'>
	 <organization>Arm Limited</organization>
      </author>
      <date day='7' month='March' year='2022'/>
      <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-00'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-update-management-00.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-suit-trust-domains'>
   <front>
      <title>SUIT Manifest Extensions for Multiple Trust Domains</title>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <date day='7' month='March' year='2022'/>
      <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 uses different trust anchors for different purposes or components
   in the context of firmware update.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-trust-domains-00'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-trust-domains-00.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-suit-report'>
   <front>
      <title>Secure Reporting of Update Status</title>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Henk Birkholz'>
	 <organization>Fraunhofer SIT</organization>
      </author>
      <date day='12' month='January' year='2022'/>
      <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-01'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-report-01.txt' type='TXT'/>
</reference>



<reference anchor='RFC7228' target='https://www.rfc-editor.org/info/rfc7228'>
<front>
<title>Terminology for Constrained-Node Networks</title>
<author fullname='C. Bormann' initials='C.' surname='Bormann'><organization/></author>
<author fullname='M. Ersue' initials='M.' surname='Ersue'><organization/></author>
<author fullname='A. Keranen' initials='A.' surname='Keranen'><organization/></author>
<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>


    </references>


<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 MUST adhere to the following CDDL data definition.</t>

<t>To be valid, the following CDDL MUST have the COSE CDDL appended to it. The COSE CDDL can be obtained by following the directions in <xref target="RFC8152"/>, Section 1.3.</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-run => 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-common-sequence        => bstr .cbor SUIT_Common_Sequence,
    * $$SUIT_Common-extensions,
}

SUIT_Components           = [ + SUIT_Component_Identifier ]

SUIT_Dependency = {
    suit-dependency-digest => SUIT_Digest,
    ? suit-dependency-prefix => SUIT_Component_Identifier,
    * $$SUIT_Dependency-extensions,
}

;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_Common_Sequence = [
    + ( SUIT_Condition // SUIT_Common_Commands )
]

SUIT_Common_Commands //= (suit-directive-set-component-index,  IndexArg)
SUIT_Common_Commands //= (suit-directive-run-sequence,
    bstr .cbor SUIT_Common_Sequence)
SUIT_Common_Commands //= (suit-directive-try-each,
    SUIT_Directive_Try_Each_Argument_Common)
SUIT_Common_Commands //= (suit-directive-override-parameters,
    {+ SUIT_Parameters})

IndexArg /= uint
IndexArg /= bool
IndexArg /= [+uint]


SUIT_Directive_Try_Each_Argument_Common = [
    2* bstr .cbor SUIT_Common_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-abort,             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-run,               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-run-args => bstr)

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

SUIT_Parameters //= (suit-parameter-custom => int/bool/tstr/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-run = 9
;Severable, recipient-necessary
suit-payload-fetch = 16
suit-install = 17
;Severable, recipient-unnecessary
suit-text = 23

suit-components = 2
suit-common-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-abort                    = 14
suit-condition-device-identifier        = 24

suit-directive-set-component-index      = 12
suit-directive-try-each                 = 15
suit-directive-override-parameters      = 20
suit-directive-fetch                    = 21
suit-directive-copy                     = 22
suit-directive-run                      = 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-uri               = 21
suit-parameter-source-component  = 22
suit-parameter-run-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-run</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'01d9cbf51b1ccadf839ec867da85735118
ba4c1b513f5df60583e8dd7f8ce4274cd2e2a0f70f8832bfea63983172e77a951e9a36
e74cada19321b903a097e4e7'
                ])>>
            ]
        ]>>,
        / manifest / 3:<<{
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:0,
            / common / 3:<<{
                / components / 2:[
                    [h'00']
                ],
                / common-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
7c6c5cbaf52fded428a6fc83c7e5af584ad28443a10126a0f6584001d9cb
f51b1ccadf839ec867da85735118ba4c1b513f5df60583e8dd7f8ce4274c
d2e2a0f70f8832bfea63983172e77a951e9a36e74cada19321b903a097e4
e7035871a50101020003585fa202818141000458568614a40150fa6b4a53
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'176653ec03837a8d32b1eb0b91ea5e8a2256bc2e7c02e5bb7f45f431fa926f3e'
            ]>>,
            signature: <<18([
                    / protected / <<{
                        / alg / 1:-7 / "ES256" /,
                    }>>,
                    / unprotected / {
                    },
                    / payload / F6 / nil /,
                    / signature / h'a78dbd584dbdea66ab024179dac2f4b244
940e9dfe1337bb833e3e3df2562a0fceb77e64980e0ddcc24b8abb63b78aad9ad42fd2
44b684dd39859f84740239e8'
                ])>>
            ]
        ]>>,
        / manifest / 3:<<{
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:1,
            / common / 3:<<{
                / components / 2:[
                    [h'00']
                ],
                / common-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-set-parameters / 19,{
                    / 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[
d86ba2025827815824822f5820176653ec03837a8d32b1eb0b91ea5e8a22
56bc2e7c02e5bb7f45f431fa926f3e035894a50101020103585fa2028181
41000458568614a40150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492
af1425695e48bf429b2d51f2ab45035824822f5820001122334455667788
99aabbccddeeff0123456789abcdeffedcba98765432100e1987d0010f02
0f074382030f1158258613a115781b687474703a2f2f6578616d706c652e
636f6d2f66696c652e62696e1502030f
]]></artwork></figure>

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

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

<figure><artwork><![CDATA[
d86ba2025873825824822f5820176653ec03837a8d32b1eb0b91ea5e8a22
56bc2e7c02e5bb7f45f431fa926f3e584ad28443a10126a0f65840a78dbd
584dbdea66ab024179dac2f4b244940e9dfe1337bb833e3e3df2562a0fce
b77e64980e0ddcc24b8abb63b78aad9ad42fd244b684dd39859f84740239
e8035894a50101020103585fa202818141000458568614a40150fa6b4a53
d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab45
035824822f582000112233445566778899aabbccddeeff0123456789abcd
effedcba98765432100e1987d0010f020f074382030f1158258613a11578
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'a85153c05f709e681877ee23c0de3e2f92bcc66c1ad6f41b39157ac7cb6a5a62'
            ]>>,
            signature: <<18([
                    / protected / <<{
                        / alg / 1:-7 / "ES256" /,
                    }>>,
                    / unprotected / {
                    },
                    / payload / F6 / nil /,
                    / signature / h'4ba6e9c4bdd65212e2e4775b7f5bb32faf
14209f88d9f8b198e21c338770aa542dde07e31fa17ca9dadee4d94c43dfba81819d35
88d7fde5eff010b8c7c89277'
                ])>>
            ]
        ]>>,
        / manifest / 3:<<{
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:2,
            / common / 3:<<{
                / components / 2:[
                    [h'00']
                ],
                / common-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'3ee96dc79641970ae46b929ccf0b72ba9536dd846020dbdc9f949d84ea0e18d2'
            ],
            / text / 23:[
                / algorithm-id / -16 / "sha256" /,
                / digest-bytes /
h'2bfc4d0cc6680be7dd9f5ca30aa2bb5d1998145de33d54101b80e2ca49faf918'
            ],
        }>>,
        / install / 17:<<[
            / directive-set-parameters / 19,{
                / uri /
21:'http://example.com/very/long/path/to/file/file.bin',
            } ,
            / directive-fetch / 21,2 ,
            / condition-image-match / 3,15
        ]>>,
        / text / 13:<<{
            [h'00']:{
                    / vendor-domain / 3:'arm.com',
                    / component-description / 5:'This component is a
demonstration. The digest is a sample pattern, not a real one.',
                }
        }>>,
    })
]]></artwork></figure>

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

<t>Envelope:</t>

<figure><artwork><![CDATA[
d86ba2025827815824822f5820a85153c05f709e681877ee23c0de3e2f92
bcc66c1ad6f41b39157ac7cb6a5a620358bba70101020203585fa2028181
41000458568614a40150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492
af1425695e48bf429b2d51f2ab45035824822f5820001122334455667788
99aabbccddeeff0123456789abcdeffedcba98765432100e1987d0010f02
0f074382030f094382170211822f58203ee96dc79641970ae46b929ccf0b
72ba9536dd846020dbdc9f949d84ea0e18d217822f58202bfc4d0cc6680b
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[
d86ba2025873825824822f5820a85153c05f709e681877ee23c0de3e2f92
bcc66c1ad6f41b39157ac7cb6a5a62584ad28443a10126a0f658404ba6e9
c4bdd65212e2e4775b7f5bb32faf14209f88d9f8b198e21c338770aa542d
de07e31fa17ca9dadee4d94c43dfba81819d3588d7fde5eff010b8c7c892
770358bba70101020203585fa202818141000458568614a40150fa6b4a53
d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab45
035824822f582000112233445566778899aabbccddeeff0123456789abcd
effedcba98765432100e1987d0010f020f074382030f094382170211822f
58203ee96dc79641970ae46b929ccf0b72ba9536dd846020dbdc9f949d84
ea0e18d217822f58202bfc4d0cc6680be7dd9f5ca30aa2bb5d1998145de3
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[
d86ba4025873825824822f5820a85153c05f709e681877ee23c0de3e2f92
bcc66c1ad6f41b39157ac7cb6a5a62584ad28443a10126a0f658404ba6e9
c4bdd65212e2e4775b7f5bb32faf14209f88d9f8b198e21c338770aa542d
de07e31fa17ca9dadee4d94c43dfba81819d3588d7fde5eff010b8c7c892
770358bba70101020203585fa202818141000458568614a40150fa6b4a53
d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab45
035824822f582000112233445566778899aabbccddeeff0123456789abcd
effedcba98765432100e1987d0010f020f074382030f094382170211822f
58203ee96dc79641970ae46b929ccf0b72ba9536dd846020dbdc9f949d84
ea0e18d217822f58202bfc4d0cc6680be7dd9f5ca30aa2bb5d1998145de3
3d54101b80e2ca49faf9180d590204a20179019d2323204578616d706c65
20323a2053696d756c74616e656f757320446f776e6c6f61642c20496e73
74616c6c6174696f6e2c2053656375726520426f6f742c20536576657265
64204669656c64730a0a2020202054686973206578616d706c6520636f76
6572732074686520666f6c6c6f77696e672074656d706c617465733a0a20
2020200a202020202a20436f6d7061746962696c69747920436865636b20
287b7b74656d706c6174652d636f6d7061746962696c6974792d63686563
6b7d7d290a202020202a2053656375726520426f6f7420287b7b74656d70
6c6174652d7365637572652d626f6f747d7d290a202020202a204669726d
7761726520446f776e6c6f616420287b7b6669726d776172652d646f776e
6c6f61642d74656d706c6174657d7d290a202020200a2020202054686973
206578616d706c6520616c736f2064656d6f6e7374726174657320736576
657261626c6520656c656d656e747320287b7b6f76722d73657665726162
6c657d7d292c20616e64207465787420287b7b6d616e69666573742d6469
676573742d746578747d7d292e814100a2036761726d2e636f6d05785254
68697320636f6d706f6e656e7420697320612064656d6f6e737472617469
6f6e2e205468652064696765737420697320612073616d706c6520706174
7465726e2c206e6f742061207265616c206f6e652e11583c8613a1157832
687474703a2f2f6578616d706c652e636f6d2f766572792f6c6f6e672f70
6174682f746f2f66696c652f66696c652e62696e1502030f
]]></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'c98d9240343ee1ac12ba833c04fb9006e70f62c7e4c36edb0b2a356d59c2f86c'
            ]>>,
            signature: <<18([
                    / protected / <<{
                        / alg / 1:-7 / "ES256" /,
                    }>>,
                    / unprotected / {
                    },
                    / payload / F6 / nil /,
                    / signature / h'451b3099c7914ef4c54b633688471b8d0f
940d09eeca41c159927a9f044bddec536f83da5f1b1047bc415be013d71524ad82e4ac
792a61f93dbdc875a7a6adeb'
                ])>>
            ]
        ]>>,
        / manifest / 3:<<{
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:3,
            / common / 3:<<{
                / components / 2:[
                    [h'00']
                ],
                / common-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-set-parameters / 19,{
                            / slot / 5:0,
                        } ,
                        / condition-component-slot / 5,5 ,
                        / directive-set-parameters / 19,{
                            / uri / 21:'http://example.com/file1.bin',
                        }
                    ]>> ,
                    <<[
                        / directive-set-parameters / 19,{
                            / slot / 5:1,
                        } ,
                        / condition-component-slot / 5,5 ,
                        / directive-set-parameters / 19,{
                            / 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[
d86ba2025827815824822f5820c98d9240343ee1ac12ba833c04fb9006e7
0f62c7e4c36edb0b2a356d59c2f86c0359010fa5010102030358a4a20281
81410004589b8814a20150fa6b4a53d5ad5fdfbe9de663e4d41ffe025014
92af1425695e48bf429b2d51f2ab450f8258348614a10500050514a20358
24822f582000112233445566778899aabbccddeeff0123456789abcdeffe
dcba98765432100e1987d058368614a10501050514a2035824822f582001
23456789abcdeffedcba987654321000112233445566778899aabbccddee
ff0e1a00012c22010f020f074382030f11585b860f8258288613a1050005
0513a115781c687474703a2f2f6578616d706c652e636f6d2f66696c6531
2e62696e58288613a10501050513a115781c687474703a2f2f6578616d70
6c652e636f6d2f66696c65322e62696e1502030f
]]></artwork></figure>

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

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

<figure><artwork><![CDATA[
d86ba2025873825824822f5820c98d9240343ee1ac12ba833c04fb9006e7
0f62c7e4c36edb0b2a356d59c2f86c584ad28443a10126a0f65840451b30
99c7914ef4c54b633688471b8d0f940d09eeca41c159927a9f044bddec53
6f83da5f1b1047bc415be013d71524ad82e4ac792a61f93dbdc875a7a6ad
eb0359010fa5010102030358a4a2028181410004589b8814a20150fa6b4a
53d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf429b2d51f2ab
450f8258348614a10500050514a2035824822f5820001122334455667788
99aabbccddeeff0123456789abcdeffedcba98765432100e1987d0583686
14a10501050514a2035824822f58200123456789abcdeffedcba98765432
1000112233445566778899aabbccddeeff0e1a00012c22010f020f074382
030f11585b860f8258288613a10500050513a115781c687474703a2f2f65
78616d706c652e636f6d2f66696c65312e62696e58288613a10501050513
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'601ebc1bb2e12cbaf408b1bca72fae0d9987498acfa16130ce4cf5cc9ea74c7c'
            ]>>,
            signature: <<18([
                    / protected / <<{
                        / alg / 1:-7 / "ES256" /,
                    }>>,
                    / unprotected / {
                    },
                    / payload / F6 / nil /,
                    / signature / h'2e263599b0f3613fd3feb0cec1ff55c6b3
7c521339ef2680dc63de3a5cdfb0e3f44237313e1c17c35f7fa84af82234f50cea551c
fdd8179a40dac5136167cd5e'
                ])>>
            ]
        ]>>,
        / manifest / 3:<<{
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:4,
            / common / 3:<<{
                / components / 2:[
                    [h'00'] ,
                    [h'02'] ,
                    [h'01']
                ],
                / common-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-set-parameters / 19,{
                    / image-digest / 3:<<[
                        / algorithm-id / -16 / "sha256" /,
                        / digest-bytes /
h'0123456789abcdeffedcba987654321000112233445566778899aabbccddeeff'
                    ]>>,
                    / image-size / 14:76834,
                    / source-component / 22:0 / [h'00'] /,
                    / compression-info / 19:<<{
                        / compression-algorithm / 1:1 / "zlib" /,
                    }>>,
                } ,
                / 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-set-parameters / 19,{
                    / 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-set-parameters / 19,{
                    / 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:  332</t>

<t>Envelope:</t>

<figure><artwork><![CDATA[
d86ba2025827815824822f5820601ebc1bb2e12cbaf408b1bca72fae0d99
87498acfa16130ce4cf5cc9ea74c7c0359011ba801010204035867a20283
814100814102814101045858880c0014a40150fa6b4a53d5ad5fdfbe9de6
63e4d41ffe02501492af1425695e48bf429b2d51f2ab45035824822f5820
00112233445566778899aabbccddeeff0123456789abcdeffedcba987654
32100e1987d0010f020f0745840c00030f08583d880c0213a4035824822f
58200123456789abcdeffedcba987654321000112233445566778899aabb
ccddeeff0e1a00012c221343a1010116001602030f0945840c0217021058
4e880c0113a2035824822f582000112233445566778899aabbccddeeff01
23456789abcdeffedcba987654321015781b687474703a2f2f6578616d70
6c652e636f6d2f66696c652e62696e1502030f114b880c0013a116011602
030f
]]></artwork></figure>

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

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

<figure><artwork><![CDATA[
d86ba2025873825824822f5820601ebc1bb2e12cbaf408b1bca72fae0d99
87498acfa16130ce4cf5cc9ea74c7c584ad28443a10126a0f658402e2635
99b0f3613fd3feb0cec1ff55c6b37c521339ef2680dc63de3a5cdfb0e3f4
4237313e1c17c35f7fa84af82234f50cea551cfdd8179a40dac5136167cd
5e0359011ba801010204035867a20283814100814102814101045858880c
0014a40150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492af1425695e
48bf429b2d51f2ab45035824822f582000112233445566778899aabbccdd
eeff0123456789abcdeffedcba98765432100e1987d0010f020f0745840c
00030f08583d880c0213a4035824822f58200123456789abcdeffedcba98
7654321000112233445566778899aabbccddeeff0e1a00012c221343a101
0116001602030f0945840c02170210584e880c0113a2035824822f582000
112233445566778899aabbccddeeff0123456789abcdeffedcba98765432
1015781b687474703a2f2f6578616d706c652e636f6d2f66696c652e6269
6e1502030f114b880c0013a116011602030f
]]></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'a4c6d5f5c3800c19c4af55aacc1c2dc6e37e2bf10b2aab335f70226961e310d3'
            ]>>,
            signature: <<18([
                    / protected / <<{
                        / alg / 1:-7 / "ES256" /,
                    }>>,
                    / unprotected / {
                    },
                    / payload / F6 / nil /,
                    / signature / h'91d95d3bb2eaae7b31ff11f4761056e491
bcb07470119f9c69388982c3238eabfcb477ec7887f36c31e7d957fe8830b3ae8b9d7d
71372de2e71a9a3b67444c4a'
                ])>>
            ]
        ]>>,
        / manifest / 3:<<{
            / manifest-version / 1:1,
            / manifest-sequence-number / 2:5,
            / common / 3:<<{
                / components / 2:[
                    [h'00'] ,
                    [h'01']
                ],
                / common-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-set-parameters / 19,{
                    / uri / 21:'http://example.com/file1.bin',
                } ,
                / directive-fetch / 21,2 ,
                / condition-image-match / 3,15 ,
                / directive-set-component-index / 12,1 ,
                / directive-set-parameters / 19,{
                    / 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[
d86ba2025827815824822f5820a4c6d5f5c3800c19c4af55aacc1c2dc6e3
7e2bf10b2aab335f70226961e310d303590101a601010205035895a20282
8141008141010458898c0c0014a40150fa6b4a53d5ad5fdfbe9de663e4d4
1ffe02501492af1425695e48bf429b2d51f2ab45035824822f5820001122
33445566778899aabbccddeeff0123456789abcdeffedcba98765432100e
1987d0010f020f0c0114a2035824822f58200123456789abcdeffedcba98
7654321000112233445566778899aabbccddeeff0e1a00012c220749880c
00030f0c01030f0945840c00170211584f900c0013a115781c687474703a
2f2f6578616d706c652e636f6d2f66696c65312e62696e1502030f0c0113
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[
d86ba2025873825824822f5820a4c6d5f5c3800c19c4af55aacc1c2dc6e3
7e2bf10b2aab335f70226961e310d3584ad28443a10126a0f6584091d95d
3bb2eaae7b31ff11f4761056e491bcb07470119f9c69388982c3238eabfc
b477ec7887f36c31e7d957fe8830b3ae8b9d7d71372de2e71a9a3b67444c
4a03590101a601010205035895a202828141008141010458898c0c0014a4
0150fa6b4a53d5ad5fdfbe9de663e4d41ffe02501492af1425695e48bf42
9b2d51f2ab45035824822f582000112233445566778899aabbccddeeff01
23456789abcdeffedcba98765432100e1987d0010f020f0c0114a2035824
822f58200123456789abcdeffedcba987654321000112233445566778899
aabbccddeeff0e1a00012c220749880c00030f0c01030f0945840c001702
11584f900c0013a115781c687474703a2f2f6578616d706c652e636f6d2f
66696c65312e62696e1502030f0c0113a115781c687474703a2f2f657861
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 common sequence. The common 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>REQUIRED</c>
      <c>Class Identifier</c>
      <c><xref target="uuid-identifiers"/></c>
      <c>REQUIRED</c>
      <c>Device Identifier</c>
      <c><xref target="uuid-identifiers"/></c>
      <c>OPTIONAL</c>
      <c>Image Match</c>
      <c><xref target="suit-condition-image-match"/></c>
      <c>REQUIRED</c>
      <c>Component Slot</c>
      <c><xref target="suit-condition-component-slot"/></c>
      <c>OPTIONAL</c>
      <c>Abort</c>
      <c><xref target="suit-condition-abort"/></c>
      <c>OPTIONAL</c>
      <c>Custom Condition</c>
      <c><xref target="SUIT_Condition_Custom"/></c>
      <c>OPTIONAL</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>REQUIRED if more than one component</c>
      <c>Try Each</c>
      <c><xref target="suit-directive-try-each"/></c>
      <c>OPTIONAL</c>
      <c>Override Parameters</c>
      <c><xref target="suit-directive-override-parameters"/></c>
      <c>REQUIRED</c>
      <c>Fetch</c>
      <c><xref target="suit-directive-fetch"/></c>
      <c>REQUIRED for Updater</c>
      <c>Copy</c>
      <c><xref target="suit-directive-copy"/></c>
      <c>OPTIONAL</c>
      <c>Run</c>
      <c><xref target="suit-directive-run"/></c>
      <c>REQUIRED for Bootloader</c>
      <c>Run Sequence</c>
      <c><xref target="suit-directive-run-sequence"/></c>
      <c>OPTIONAL</c>
      <c>Swap</c>
      <c><xref target="suit-directive-swap"/></c>
      <c>OPTIONAL</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>REQUIRED</c>
      <c>Class ID</c>
      <c><xref target="suit-parameter-class-identifier"/></c>
      <c>REQUIRED</c>
      <c>Image Digest</c>
      <c><xref target="suit-parameter-image-digest"/></c>
      <c>REQUIRED</c>
      <c>Image Size</c>
      <c><xref target="suit-parameter-image-size"/></c>
      <c>REQUIRED</c>
      <c>Component Slot</c>
      <c><xref target="suit-parameter-component-slot"/></c>
      <c>OPTIONAL</c>
      <c>URI</c>
      <c><xref target="suit-parameter-uri"/></c>
      <c>REQUIRED for Updater</c>
      <c>Source Component</c>
      <c><xref target="suit-parameter-source-component"/></c>
      <c>OPTIONAL</c>
      <c>Run Args</c>
      <c><xref target="suit-parameter-run-args"/></c>
      <c>OPTIONAL</c>
      <c>Device ID</c>
      <c><xref target="suit-parameter-device-identifier"/></c>
      <c>OPTIONAL</c>
      <c>Strict Order</c>
      <c><xref target="suit-parameter-strict-order"/></c>
      <c>OPTIONAL</c>
      <c>Soft Failure</c>
      <c><xref target="suit-parameter-soft-failure"/></c>
      <c>OPTIONAL</c>
      <c>Custom</c>
      <c><xref target="suit-parameter-custom"/></c>
      <c>OPTIONAL</c>
</texttable>

</section>


  </back>

<!-- ##markdown-source:
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
TFIlPIvsyPYrxsw7NT5rlT592obB2uxGdw2WSx9npyZnZoR4C/TlKBYJ9rVx
kknQBebvjr1R07b0Xa3S6SB1xny/e0uczD16I5i1+Iq2QRlnRBtgRrQW6GoZ
xGAibSTc4ucmld8TV6Va9E9/b86L7DOJ/Z5IjWox+7eUpyYtjlRoYVLy9vy8
YSMOMIelzVApOITM/9+DGhtcn7rAF/7hEvUqXfBG5yGE17lSt8RmVa3n9uuf
CcMvr/xFzE7nNdCloezXAaEftkDqjiQWArn//7idIKt7V2dY4UBXSItXTM8r
eJrfZhS45D1Bq3s5lY8DfVotD7FlqNpDjCcSqi3147xkkP/1WFoeS6baWCaD
/3Hg9SufB6bf9Ts5jyvKh4szso/CXXOQy8Kv+JYb00oqQviCa/a8tXLlpWpp
ixMxt5qTN+Z8QLaQC+P4BW3n637DP5ViB3QMpxEtsdgmzch+05TgRcvwkfs1
51bmZTLnIz9TJiqVyluvz6nw/ZV0D9IJVRrCwtDaRskFkluQh/aqYQw/YSxw
eMDRT9ee8zh+cgZRd14kay3XTrDDWw+8o94GvGMz66/pRjZgtT4Wq6E0OrG4
xir/oTYJb3wVi0+6RvUkTva1VZihDrVsroEqwv/OAOwpGP43RiOX7PjtlteO
U9g/3K1I8AVlC75jcgSiXwu9tOau63gljfxobQ+mMVbt7VgJJQtJ1jBoSRfU
rN1pOdukghQ/rgnnmbuLxm99+LCBX6D8jaeZV1OuqIcJU6hAIxtf0pGNj/RI
0tTaYL0xddOJxYc5bGpOPM7kxaXtoLHqAIUb0SzxsTcPVfNwiXPRZC/q3+Qn
qlSrXvizIr7CsQYkcZiPdt0JhfRU+4+Pj8JEMwcUYDjVes1546wKIX7e4kiL
Q7XuGsXq9Hz6XrQt7k685eHUGHdTwUDCOS+9sJpLscS2wSpdsmR5rUHo5sFq
wCo7EEwv2Ziw9Jl19A2PhNWbX4LgGi2hiXcRlBcXfbrW630G4us1j/nm9MXn
MaJzrqz8n4QN7cSXLYqBz8GO6Fudr6q5g+lJPXCGczvXh2XuKtYIHg418JmQ
dh5Hmjc5lPrBbxkV72J+tk0F9O/lfaKII4p2ngiV8F5LPBhvEpxa+gTyUt8K
vWpFHUpupX6Xt7mFrlr62ZgCZu4JzL5MRZH1vz4kq3MROUsNsCh6WZlt5sSK
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
zWnxtpx9/b4qz747/+n265dV8fKrv6SPXz3Zf/nb2+z0m6r8efFmb//FQfV1
+mfe1vnLp81N0a2/bTjCLFfjeTqhaD4/vD3II1S6A285vW+ePL848w7v2fvb
89vvvvo6/6eLn3/YPTv903cX8u+np3+aPIXjOr/+Y/zkDz8ePP/xx5vL776d
fJetfo7/WBz9mO6cj3vjn3cWB8W38+ziL+Pbr3cffbVePh+fLp68mJz9MI5/
fjM6uHl7Nf15Vv7x9tnz8YvD99Pq51fPL/P51ZdfevuvLYu2z9kReCtcQ+by
q1NkCiUWU3C8wjFGV+RVorHvQXrINNFUlEBDColrJWKdAa6ZAfxptKrLTpzV
DpO9f1oG9muVBqAeZDkIQZ1yQeH7EFXUx4j8OdV5s9fQHCFKFM0QOntOBq+B
FrY2m5l/NDZDb2mvWV3L9DG6XJf1sep6Jm5EI/U0QYf7zRvDm9NfpeeR+jHY
4Oa6nSP//9/JZd7RPqyWuXnoei3MXWm561o3qwzs+g1bmbI72nANgbAJ+k0L
2o92T9irNIme5FjHhavgykcv+4YHZAl8Q49Nclk88yvySOqOrQ8ftBFt275z
upZPnyhUzs0adCBfz2SAed4+kdGr4rhP8g63nCKLNEsXq4WulJ3deujN5tQl
O1GH1LoT7Z387nd/7fnElZ/9SVT/XQby/bV2UGiF/30A8iQgjgfRTr+lS+C3
tdO7fnh0dHicxIdHu3tHe0ePj6bT0Wy0P350vLe3/zjePTqYxo8mR5PDyTie
He7Npsn0YO84PppNjvcnj5LDePYwmOT73/8+nNXybuAeRsdbzW3wusQDOMF9
/O53H1pb2abhf0cng0e42fPLrr3if5/qy3HDrDJ/yvYJP3V1FlkW/vUMjzwD
FNCxgh13AvDv64e7o+njyXh2OBqPJpN4Ojvef5xMjo8eTePjw0f7h6PRcW8c
H0xG48PR/uxwOjvaPTzeT46n00ez40lysPfoYDLdS/bi3dmj3dnx8f7eeJbE
R/uPj/dHj/aSR4/ix4ej5HG8f9RLoGk8jUeP9/dG48e7+/Hu40fJQfLoYWOd
32///vfhLdpfwX3uOM5oJ9o/qV+T+2x8Hd7TqN/Vqq6ewAewW28tqoq2Ca2B
yv44QDuA/RVOfvfh982tt72RuuZgJzpoPEzXerOcC0va7W8CZyMG8BpHJ9cP
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

-->

</rfc>

