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


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

]>

<?rfc rfcedstyle="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>
<?rfc toc_levels="4"?>

<rfc ipr="trust200902" docName="draft-ietf-suit-trust-domains-10" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="SUIT Trust Domains">SUIT Manifest Extensions for Multiple Trust Domains</title>

    <author initials="B." surname="Moran" fullname="Brendan Moran">
      <organization>Arm Limited</organization>
      <address>
        <email>brendan.moran.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="K." surname="Takayama" fullname="Ken Takayama">
      <organization>SECOM CO., LTD.</organization>
      <address>
        <email>ken.takayama.ietf@gmail.com</email>
      </address>
    </author>

    <date year="2025" month="March" day="03"/>

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

    <abstract>


<t>This specification describes extensions to the SUIT Manifest format for
use in deployments with multiple trust domains. A device has more than
one trust domain when it enables delegation of different rights to
mutually distrusting entities for use for different purposes or
Components in the context of firmware or software update.</t>



    </abstract>



  </front>

  <middle>


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

<t>Devices that go beyond single-signer update require more complex rules for deploying software updates. For example, devices may require:</t>

<t><list style="symbols">
  <t>software Components from multiple software signing authorities.</t>
  <t>a mechanism to remove an unneeded Component</t>
  <t>single-object Dependencies</t>
  <t>a partly encrypted Manifest so that distribution does not reveal private information</t>
  <t>installation performed by a different execution mode than payload fetch</t>
</list></t>

<t>Because of the more complex use cases that are typically targetted by devices implementing this specification, the applicable device class is typically Class 2+ and often isolation level Is8, for example Arm TrustZone for Cortex-M, as described in <xref target="I-D.ietf-iotops-7228bis"/></t>

<t>Dependency Manifests enable several additional use cases. In particular, they enable two or more entities who are trusted for different privileges to coordinate. This can be used in many scenarios. For example:</t>

<t><list style="symbols">
  <t>A device may contain a processor in its radio in addition to the primary processor. These two processors may have separate Software with separate signing authorities. Dependencies allow the Software for the primary processor to reference a Manifest signed by a different authority.</t>
  <t>A network operator may wish to provide local caching of Update Payloads. The network operator overrides the URI of a Payload by providing a dependent Manifest that references the original Manifest, but replaces its URI.</t>
  <t>A device operator provides a device with some additional configuration. The device operator wants to test their configuration with each new Software version before releasing it. The configuration is delivered as a binary in the same way as a Software Image. The device operator references the Software Manifest from the Software author in their own Manifest which also defines the configuration.</t>
  <t>An Author wants to entrust a Distributor to provide devices with firmware decryption keys, but not permit the Distributor to sign code. Dependencies allow the Distributor to deliver a device's decryption information without also granting code signing authority.</t>
  <t>A Trusted Application Manager (TAM) wants to distribute personalisation information to a Trusted Execution Environment in addition to a Trusted Application (TA), but does not have code signing authority. Dependencies enable the TAM to construct an update containing the personalisation information and a dependency on the TA, but leaves the TA signed by the TA's Author.</t>
</list></t>

<t>By using Dependencies, Components such as Software, configuration, and other Resource data authenticated by different Trust Anchors can be delivered to devices.</t>

<t>These mechanisms are not part of the core Manifest specification, but they are needed for more advanced use cases, such as the architecture described in <xref target="I-D.ietf-teep-architecture"/>.</t>

<t>This specification extends the SUIT Manifest specification (<xref target="I-D.ietf-suit-manifest"/>).</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/Software, configuration, or Resource data such as text or images.</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 one or more Components for a device, where to
find them, and the devices to which they apply.</t>
  <t>Envelope: A container with the Manifest, an authentication wrapper with cryptographic information protecting the Manifest, authorization information, and severable elements (see Section 5.1 of <xref target="I-D.ietf-suit-manifest"/>).</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 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 superset of Staging Procedure and Installation Procedure.</t>
  <t>Staging Procedure: A procedure that fetches dependencies and images referenced by an Update and stores them to a Staging Area.</t>
  <t>Installation Procedure: A procedure that installs dependencies and images stored in a Staging Area; copying (and optionally, transforming them) into an active Image storage location.</t>
  <t>Invocation Procedure: A Procedure in which a Recipient verifies Dependencies and Images, loading Images, and invokes one or more Image.</t>
  <t>Staging Area: A Component or group of Components that are used for transient storage of Images between fetch and installation. Images in this area are opaque, except for use by the Installation Procedure.</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="I-D.ietf-iotops-7228bis"/> 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>
  <t>Trust Anchor: A Trust Anchor, as defined in <xref target="RFC6024"/>, represents an
    authoritative entity via a public key and associated data.  The
    public key is used to verify digital signatures, and the
    associated data is used to constrain the types of information for
    which the Trust Anchor is authoritative.</t>
</list></t>

</section>
<section anchor="changes-to-suit-workflow-model"><name>Changes to SUIT Workflow Model</name>

<t>The use of the features presented for use with multiple trust domains requires some augmentation of the workflow presented in the SUIT Manifest specification (<xref target="I-D.ietf-suit-manifest"/>):</t>

<t>One additional assumption is added for the Update Procedure:</t>

<t><list style="symbols">
  <t>All Dependency Manifests must be present before any Payload is fetched.</t>
</list></t>

<t>One additional assumption is added to the Invocation Procedure:</t>

<t><list style="symbols">
  <t>All Dependencies must be validated prior to loading.</t>
</list></t>

<t>Steps 3 and 5 are added to the expected installation workflow of a Recipient:</t>

<t><list style="numbers">
  <t>Verify the signature of the Manifest.</t>
  <t>Verify the applicability of the Manifest.</t>
  <t>Resolve Dependencies.</t>
  <t>Fetch Payload(s).</t>
  <t>Verify Candidate.</t>
  <t>Install Payload(s).</t>
</list></t>

<t>In addition, when multiple Manifests are used for an Update, each Manifest's steps occur in a lockstep fashion; all Manifests have Dependency resolution performed before any Manifest performs a Payload fetch, etc.</t>

</section>
<section anchor="metadata-structure-overview"><name>Changes to Manifest Metadata Structure</name>

<t>To accommodate the additional metadata needed to enable these features, the Envelope and Manifest have several new elements added.</t>

<t>The Envelope gains one more elements: Integrated Dependencies. The Common metadata section in the Manifest also gains a list of Dependencies.</t>

<t>The new metadata structure is shown below.</t>

<figure><artwork><![CDATA[
+-------------------------+
| Envelope                |
+-------------------------+
| Authentication Block    |
| Manifest           --------------> +------------------------------+
| Severable Elements      |          | Manifest                     |
| Human-Readable Text     |          +------------------------------+
| CoSWID                  |          | Structure Version            |
| Integrated Dependencies |          | Sequence Number              |
| Integrated Payloads     |          | Reference to Full Manifest   |
+-------------------------+    +------ Common Structure             |
                               | +---- Command Sequences            |
+-------------------------+    | |   | Digests of Envelope Elements |
| Common Structure        | <--+ |   +------------------------------+
+-------------------------+      |
| Dependency Indices      |      +-> +-----------------------+
| Component IDs           |          | Command Sequence      |
| Common Command Sequence ---------> +-----------------------+
+-------------------------+          | List of ( pairs of (  |
                                     |   * command code      |
                                     |   * argument /        |
                                     |      reporting policy |
                                     | ))                    |
                                     +-----------------------+
]]></artwork></figure>

</section>
<section anchor="dependencies"><name>Dependencies</name>

<t>A Dependency is another SUIT_Envelope that describes additional Components.</t>

<t>As described in <xref target="Introduction"/>, Dependencies enable several common use cases.</t>

<section anchor="required-checks"><name>  Changes to Required Checks</name>

<t>This section augments the definitions in Required Checks (Section 6.2) of <xref target="I-D.ietf-suit-manifest"/>.</t>

<t>More checks are required when handling Dependencies. By default, any signature of a Dependency MUST be verified. However, there are some exceptions to this rule: where a device supports only one level of access (no ACLs defining which authorities have access to different Components/Commands/Parameters), it MAY choose to skip signature verification of Dependencies, since they are verified by digest. Where a device differentiates between trust levels, such as with an ACL, it MAY choose to defer the verification of signatures of Dependencies until the list of affected Components is known so that it can skip redundant signature verifications. For example, if a dependent's signer has access rights to all Components specified in a Dependency, then that Dependency does not require a signature verification. Similarly, if the signer of the dependent has full rights to the device, according to the ACL, then no signature verification is necessary on the Dependency.</t>

<t>Components that should be treated as Dependency Manifests are identified in the suit-common metadata. See <xref target="structure-change"/> for details.</t>

<t>If the Manifest contains more than one Component and/or Dependency, each Command sequence MUST begin with a Set Component Index Command.</t>

<t>If a Dependency is specified, then the Manifest processor MUST perform the following checks:</t>

<t><list style="numbers">
  <t>The dependent MUST populate all Command sequences for the current Procedure (Update or Invoke).</t>
  <t>At the end of each section in the dependent: The corresponding section in each Dependency has been executed.</t>
</list></t>

<t>If the interpreter does not support Dependencies and a Manifest specifies a Dependency, then the interpreter MUST Abort.</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 a single Manifest and all its Dependencies that together:</t>

<t><list style="numbers">
  <t>have sufficient permissions imparted by their signatures</t>
  <t>specify a digest and a Payload for every Component in the Component Set.</t>
</list></t>

<t>The single dependent Manifest is sometimes called a Root Manifest.</t>

</section>
<section anchor="structure-change"><name>Changes to Manifest Structure</name>

<t>This section augments the Manifest Structure (Section 8.4) in <xref target="I-D.ietf-suit-manifest"/>.</t>

<section anchor="manifest-id"><name>Manifest Component ID</name>

<t>In complex systems, it may not always be clear where the Root Manifest should be stored; this is particularly complex when a system has multiple, independent Root Manifests. The Manifest Component ID resolves this contention. The manifest-component-id is intended to be used by the Root Manifest. When a Dependency Manifest also declares a Component ID, the Dependency Manifest's Component ID is overridden by the Component ID declared by the dependent.</t>

<t>The following CDDL describes the Manifest Component ID:</t>

<figure><sourcecode type="CDDL"><![CDATA[
$$SUIT_Manifest_Extensions //= 
    (suit-manifest-component-id => SUIT_Component_Identifier)
]]></sourcecode></figure>

</section>
<section anchor="SUIT_Dependencies"><name>SUIT_Dependencies Manifest Element</name>

<t>The suit-common section, as described in <xref target="I-D.ietf-suit-manifest"/>, Section 8.4.5 is extended with a map of Component indices that indicate a Dependency Manifest. The keys of the map are the Component indices and the values of the map are any extra metadata needed to describe those Dependency Manifests.</t>

<t>Because some operations treat Dependency Manifests differently from other Components, it is necessary to identify them. SUIT_Dependencies identifies which Components from suit-components (see Section 8.4.5 of <xref target="I-D.ietf-suit-manifest"/>) are to be treated as Dependency Manifest Envelopes. SUIT_Dependencies is a map of Components, referenced by Component Index. Optionally, a Component prefix or other metadata may be delivered with the Component index. The CDDL for suit-dependencies is shown below:</t>

<figure><sourcecode type="CDDL"><![CDATA[
$$SUIT_Common-extensions //= (
    suit-dependencies => SUIT_Dependencies
)
SUIT_Dependencies = {
    + uint => SUIT_Dependency_Metadata
}
SUIT_Dependency_Metadata = {
    ? suit-dependency-prefix => SUIT_Component_Identifier
    * $$SUIT_Dependency_Extensions
}
]]></sourcecode></figure>

<t>If no extended metadata is needed for an extension, SUIT_Dependency_Metadata is an empty map (this is the same encoding size as a null). SUIT_Dependencies MUST be sorted according to CBOR canonical encoding.</t>

<t>The Components specified by SUIT_Dependency will contain a Manifest Envelope that describes a Dependency of the current Manifest. The Manifest is identified, but the Recipient should expect an Envelope when it acquires the Dependency. This is because the Manifest is the one invariant element of the Envelope, where other elements may change by countersigning, adding authentication blocks, or severing elements.</t>

<t>When executing suit-condition-image-match over a Component that is designated in SUIT_Dependency, the digest MUST be computed over just the bstr-wrapped SUIT_Manifest contained in the Manifest Envelope designated by the Component Index. This enables a Dependency reference to uniquely identify a particular Manifest structure. This is identical to the digest that is present as the first element of the suit-authentication-block in the Dependency's Envelope. The digest is calculated over the Manifest structure to ensure that removing a signature from a Manifest does not break Dependencies due to missing signature elements. This is also necessary to support the trusted intermediary use case, where an intermediary re-signs the Manifest, removing the original signature, potentially with a different algorithm, or trading COSE_Sign for COSE_Mac.</t>

<t>The suit-dependency-prefix element contains a SUIT_Component_Identifier (see Section 8.4.5.1 of <xref target="I-D.ietf-suit-manifest"/>). This specifies the scope at which the Dependency operates. This allows the Dependency to be forwarded on to a Component that is capable of parsing its own Manifests. It also allows one Manifest to be deployed to multiple dependent Recipients without those Recipients needing consistent Component hierarchy. This element is OPTIONAL for Recipients to implement.</t>

<t>A Dependency prefix can be used with a Component identifier. This allows complex systems to understand where Dependencies need to be applied. The Dependency prefix can be used in one of two ways. The first simply prepends the prefix to all Component Identifiers in the Dependency.</t>

<t>A Dependency prefix can also be used to indicate when a Dependency Manifest needs to be processed by a secondary Manifest processor, as described in <xref target="hierarchical-interpreters"/>.</t>

</section>
</section>
<section anchor="changes-to-abstract-machine-description"><name>Changes to Abstract Machine Description</name>

<t>This section augments the Abstract Machine Description (Section 6.4) in <xref target="I-D.ietf-suit-manifest"/>.
With the addition of Dependencies, some changes are necessary to the abstract machine, outside the typical scope of added Commands. These changes alter the behaviour of an existing Command and way that the parser processes Manifests:</t>

<t><list style="symbols">
  <t>Five new Commands are introduced:  <list style="symbols">
      <t>Set Parameters</t>
      <t>Process Dependency</t>
      <t>Is Dependency</t>
      <t>Dependency Integrity</t>
      <t>Unlink</t>
    </list></t>
  <t>Dependency Manifests are also Components. All Commands may target Dependency Manifests as well as Components, with one exception: process Dependency. Commands defined outside of this draft and <xref target="I-D.ietf-suit-manifest"/> MAY have additional restrictions.</t>
  <t>Dependencies are processed in lockstep with the Root Manifest. This means that every Dependency's current Command sequence must be executed before a dependent's later Command sequence may be executed. For example, every Dependency's Dependency Resolution step MUST be executed before any dependent's Payload fetch step.</t>
  <t>When a Manifest Processor supports multiple independent Components, they MAY have shared Dependencies.</t>
  <t>When a Manifest Processor supports shared Dependencies, it MUST support reference counting of those Dependencies.</t>
  <t>When reference counting is used, Components MUST NOT be overwritten. The Manifest Uninstall section must be called, then the component MUST be Unlinked.</t>
</list></t>

</section>
<section anchor="processing-dependencies"><name>Processing Dependencies</name>

<t>As described in <xref target="required-checks"/>, each Manifest must invoke each of its Dependencies' sections from the corresponding section of the dependent. Any changes made to Parameters by the Dependency persist in the dependent.</t>

<t>When a Process Dependency Command is encountered, the Manifest processor:</t>

<t><list style="numbers">
  <t>Checks whether the map of Dependencies contains an entry for the current Component Index. If not present, it causes an immediate Abort.</t>
  <t>Checks whether the Dependency has been the target of a Dependency integrity check. If not, it causes an immediate Abort.</t>
  <t>Loads the specified Component as a Dependency Manifest Envelope.</t>
  <t>Authenticates the Dependency Manifest.</t>
  <t>Executes the common-sequence section of the Dependency Manifest.</t>
  <t>Executes the section of the Dependency Manifest that corresponds to the currently executing section of the dependent.</t>
</list></t>

<t>If the specified Dependency does not contain the current section, Process Dependency succeeds immediately.</t>

<t>The interpreter also performs the checks described in <xref target="required-checks"/> to ensure that the dependent is processing the Dependency correctly.</t>

<section anchor="hierarchical-interpreters"><name>Multiple Manifest Processors</name>

<t>When a system has multiple trust domains, each domain might require independent verification of authenticity or security policies. Trust domains might be divided by separation technology such as Arm TrustZone, Intel SGX, or another Trusted Execution Environment (TEE) technology. Trust domains might also be divided into separate processors and memory spaces, with a communication interface between them.</t>

<t>For example, an application processor may have an attached communications module that contains a processor. The communications module might require metadata signed by a specific Trust Authority for regulatory approval. This may be a different Trust Authority than the application processor.</t>

<t>When there are two or more trust domains, a Manifest processor might be required in each. The first Manifest processor is the normal Manifest processor as described for the Recipient in Section 6 of <xref target="I-D.ietf-suit-manifest"/>. The second Manifest processor only executes sections when the first Manifest processor requests it. An API interface is provided from the second Manifest processor to the first. This allows the first Manifest processor to request a limited set of operations from the second. These operations are limited to: setting Parameters, inserting an Envelope, and invoking a Manifest Command Sequence. The second Manifest processor declares a prefix to the first, which tells the first Manifest processor when it should delegate to the second. These rules are enforced by underlying separation of privilege infrastructure, such as TEEs, or physical separation.</t>

<t>When the first Manifest processor encounters a Dependency prefix, that informs the first Manifest processor that it should provide the second Manifest processor with the corresponding Dependency Envelope. This is done when the Dependency is fetched. The second Manifest processor immediately verifies any authentication information in the Dependency Envelope. When a Parameter is set for any Component that matches the prefix, this Parameter setting is passed to the second Manifest processor via an API. As the first Manifest processor works through the Procedure (set of Command sequences) it is executing, each time it sees a Process Dependency Command that is associated with the prefix declared by the second Manifest processor, it uses the API to ask the second Manifest processor to invoke that Dependency section instead.</t>

<t>This mechanism ensures that the two or more Manifest processors do not need to trust each other, except in a very limited case. When Parameter setting across trust domains is used, it must be very carefully considered. Only Parameters that do not have an effect on security properties should be allowed. The Dependency Manifest MAY control which Parameters are allowed to be set by using the Override Parameters Directive. The second Manifest processor MAY also control which Parameters may be set by the first Manifest processor by means of an ACL that lists the allowed Parameters. For example, a URI may be set by a dependent without a substantial impact on the security properties of the Manifest.</t>

</section>
</section>
<section anchor="suit-dependency-resolution"><name>Dependency Resolution</name>

<t>The Dependency Resolution Command Sequence is a container for the Commands needed to acquire and process the Dependencies of the current Manifest. All Dependency Manifests SHOULD be fetched before any Payload is fetched to ensure that all Manifests are available and authenticated before any of the (larger) Payloads are acquired.</t>

</section>
<section anchor="added-and-modified-commands"><name>Added and Modified Commands</name>

<t>All Commands are modified in that they can also target Dependencies. However, Set Component Index has a larger modification.</t>

<texttable>
      <ttcol align='left'>Command Name</ttcol>
      <ttcol align='left'>Semantic of the Operation</ttcol>
      <c>Set Parameters</c>
      <c>current.params[k] := v if not k in current.params for-each k,v in arg</c>
      <c>Process Dependency</c>
      <c>exec(current[common]); exec(current[current-segment])</c>
      <c>Dependency Integrity</c>
      <c>verify(current, current.params[image-digest])</c>
      <c>Is Dependency</c>
      <c>assert(current exists in Dependencies)</c>
      <c>Unlink</c>
      <c>unlink(current)</c>
</texttable>

<section anchor="suit-directive-set-parameters"><name>suit-directive-set-parameters</name>

<t>Similar to suit-directive-override-parameters, suit-directive-set-parameters allows the Manifest to configure behavior of future Directives by changing Parameters that are read by those Directives. Set Parameters is for use when Dependencies are used because it allows a Manifest to modify the behavior of its Dependencies.</t>

<t>Available Parameters are defined in <xref target="I-D.ietf-suit-manifest"/>, section 8.4.8.</t>

<t>If a Parameter is already set, suit-directive-set-parameters will skip setting the Parameter to its argument. This allows dependent Manifests to change the behavior of a Manifest, a Dependency that wishes to enforce a specific value of a Parameter MAY use suit-directive-override-parameters instead.</t>

<t>suit-directive-set-parameters does not specify a reporting policy.</t>

</section>
<section anchor="suit-directive-process-dependency"><name>suit-directive-process-dependency</name>

<t>Execute the Commands in the common section of the current Dependency, followed by the Commands in the equivalent section of the current Dependency. For example, if the current section is "Payload Fetch," this will execute "Common metadata" in the current Dependency, then "Payload Fetch" in the current Dependency. Once this is complete, the Command following suit-directive-process-dependency will be processed.</t>

<t>If the current Component index does not have an entry in the suit-dependencies map, then this Command MUST Abort.</t>

<t>If the current Component index has not been the target of a suit-condition-dependency-integrity, then this Command MUST Abort.</t>

<t>If the current Component is True, then this Directive applies to all Dependencies. If the current section is "Common metadata," then the Command sequence MUST Abort.</t>

<t>When SUIT_Process_Dependency completes, it forwards the last status code that occurred in the Dependency.</t>

</section>
<section anchor="suit-condition-is-dependency"><name>suit-condition-is-dependency</name>

<t>Check whether the current Component index is present in the Dependency list. If the current Component is in the Dependency list, suit-condition-is-dependency succeeds. Otherwise, it fails. This can be used along with component-id = True to act on all Dependencies or on all non-Dependency Components. See <xref target="creating-manifests"/> for more details.</t>

</section>
<section anchor="suit-condition-dependency-integrity"><name>suit-condition-dependency-integrity</name>

<t>Verify the integrity of a Dependency Manifest. When a Manifest Processor executes suit-condition-dependency-integrity, it performs the following operations:</t>

<t><list style="numbers">
  <t>Verify the signature of the Dependency's suit-authentication-wrapper.</t>
  <t>Compare the Dependency's suit-authentication-wrapper digest to the dependent's suit-parameter-image-digest</t>
  <t>Verify the Dependency Manifest against the Depedency's suit-authentication-wrapper digest</t>
</list></t>

<t>If any of these steps fails, the Manifest Process MUST immediately Abort.</t>

<t>The Manifest Processor MAY cache the results of these operations for later use from the context of the current Manifest. The Manifest Processor MUST NOT use cached results from any other Manifest context. If the Manifest Processor caches the results of these checks, it MUST eliminate this cache if any Fetch, or Copy operation targets the Dependency Manifest's Component ID.</t>

</section>
<section anchor="suit-directive-unlink"><name>suit-directive-unlink</name>

<t>A manifest processor that supports multiple independent root manifests
MUST support suit-directive-unlink. When a Component is no longer
needed, the Manifest processor unlinks the Component to inform the 
Manifest processor that it is no longer needed.</t>

<t>If a Manifest is no longer needed, the Manifest Processor unlinks it.
This causes the Manifest Processor to execute the suit-uninstall section
of the unlinked Manifest, after which it decrements the reference count
of the unlinked Manifest. The suit-uninstall section of a manifest
typically contains an unlink of all its dependencies and components.</t>

<t>All components, including Manifests must be unlinked before deletion 
or overwrite. If the
reference count of a component is non-zero, any command that alters
that component MUST cause an immediate ABORT. Affected commands are:</t>

<t><list style="symbols">
  <t>suit-directive-copy</t>
  <t>suit-directive-fetch</t>
  <t>suit-directive-write</t>
</list></t>

<t>The unlink Command decrements an implementation-defined reference counter. This reference counter MUST persist across restarts. The reference counter MUST NOT be decremented by a given Manifest more than once, and the Manifest processor must enforce this. The Manifest processor MAY choose to ignore an Unlink Directive depending on device policy.</t>

<t>When the reference counter of a Manifest reaches zero, the suit-uninstall Command sequence is invoked (see <xref target="suit-uninstall"/>).</t>

<t>suit-directive-unlink is OPTIONAL to implement in Manifest processors,
but Manifest processors that support multiple independent Root Manifests
MUST support suit-directive-unlink.</t>

</section>
</section>
</section>
<section anchor="suit-uninstall"><name>Uninstall</name>

<t>In some systems, particularly with multiple, independent, optional Components, it may be that there is a need to uninstall the Components that have been installed by a Manifest. Where this is expected, the uninstall Command sequence can provide the sequence needed to cleanly remove the Components defined by the Manifest and its Dependencies. In general, the suit-uninstall Command Sequence will contain primarily unlink Directives.</t>

<t>WARNING: This can cause faults where there are loose Dependencies (e.g., version range matching, see <xref target="I-D.ietf-suit-update-management"/>), since a Component can be removed while it is depended upon by another Component. To avoid Dependency faults, a Manifest author MAY use explicit Dependencies where possible, or a Manifest processor MAY track references to loose Dependencies via reference counting in the same way as explicit Dependencies, as described in <xref target="suit-directive-unlink"/>.</t>

<t>The suit-uninstall Command Sequence is not severable, since it must always be available to enable uninstalling.</t>

</section>
<section anchor="staging-and-installation"><name>Staging and Installation</name>

<t>In order to coordinate between download and installation in different trust domains, the Update Procedure defined in <xref target="I-D.ietf-suit-manifest"/>, Section 8.4.6 is divided into two sub-procedures:</t>

<t><list style="symbols">
  <t>The Staging Procedure: This procedure is responsible for dependency resolution and acquiring all payloads required for the Update to proceed. It is composed of two command sequences  <list style="symbols">
      <t>suit-dependency-resolution</t>
      <t>suit-payload-fetch</t>
    </list></t>
  <t>The Installation Procedure: This procedure is responsible for verifying staged components and installing them. It is composed of:  <list style="symbols">
      <t>suit-candidate-verification</t>
      <t>suit-install</t>
    </list></t>
</list></t>

<t>This extension is backwards compatible when used with a Manifest Processor that supports the Update Procedure but = does not support the Staging Procedure and Installation Procedure: the payload-fetch command sequence already contains suit-condition-image tests for each payload (see <xref target="I-D.ietf-suit-manifest"/>, section 7.3) which means that images are already validated when suit-install is invoked. This makes suit-candidate-verification OPTIONAL to implement and OPTIONAL to parse.</t>

<t>The Staging and Installation Procedures are only required when Staging occurs in a different trust domain to Installation.</t>

<section anchor="suit-candidate-verification"><name>suit-candidate-verification</name>

<t>This command sequence is responsible for verifying that all elements of an update are present and correct prior to installation. This is only required when Installation occurs in a trust domain different from Staging, such as an installer invoked by the bootloader.</t>

</section>
</section>
<section anchor="creating-manifests"><name>Creating Manifests</name>

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

<section anchor="template-dependency"><name>Dependency Template</name>

<t>The goal of the Dependency template is to obtain, verify, and process a Dependency Manifest as appropriate.</t>

<t>The following Commands are added to the shared sequence:</t>

<t><list style="symbols">
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Set Parameters Directive (see <xref target="suit-directive-set-parameters"/>) for digest (see Section 8.4.8.6 of <xref target="I-D.ietf-suit-manifest"/>). Note that the digest MUST match the SUIT_Digest in the Dependency's suit-authentication-block (see Section 8.3 of <xref target="I-D.ietf-suit-manifest"/>).</t>
</list></t>

<t>The following Commands are placed into the Dependency resolution sequence:</t>

<t><list style="symbols">
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Set Parameters Directive (see <xref target="suit-directive-set-parameters"/>) for a URI (see Section 8.4.8.10 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Fetch Directive (see Section 8.4.10.4 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Dependency Integrity Condition (see <xref target="suit-condition-dependency-integrity"/>)</t>
  <t>Process Dependency Directive (see <xref target="suit-directive-process-dependency"/>)</t>
</list></t>

<t>Then, the validate sequence contains the following operations:</t>

<t><list style="symbols">
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Dependency Integrity Condition (see <xref target="suit-condition-dependency-integrity"/>)</t>
  <t>Process Dependency Directive (see <xref target="suit-directive-process-dependency"/>)</t>
</list></t>

<t>If any Dependency is declared, the dependent MUST populate all Command sequences for the current Procedure (Update or Invoke).</t>

<t>NOTE: Any changes made to Parameters in a Dependency persist in the dependent.</t>

<section anchor="integrated-dependencies"><name>Integrated Dependencies</name>

<t>An implementer MAY choose to place a Dependency's Envelope in the Envelope of its dependent. The dependent Envelope key for the Dependency Envelope MUST be a text string. The URI for the Dependency MUST match the text string key of the dependent's Envelope key. It is RECOMMENDED to make the text string key a resolvable URI so that a Dependency Manifest that is removed from the Envelope can still be fetched.</t>

</section>
</section>
<section anchor="template-encrypted-manifest"><name>Encrypted Manifest Template</name>

<t>The goal of the Encrypted Manifest template is to fetch and decrypt a Manifest so that it can be used as a Dependency. To use an encrypted Manifest, create a plaintext dependent, and add the encrypted Manifest as a Dependency. The dependent can include very little information.</t>

<t>NOTE: This template also requires the extensions defined in <xref target="I-D.ietf-suit-firmware-encryption"/>.</t>

<t>The following Commands are added to the shared sequence:</t>

<t><list style="symbols">
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Set Parameters Directive (see <xref target="suit-directive-set-parameters"/>) for digest (see Section 8.4.8.6 of <xref target="I-D.ietf-suit-manifest"/>). Note that the digest MUST match the SUIT_Digest in the Dependency's suit-authentication-block (see Section 8.3 of <xref target="I-D.ietf-suit-manifest"/>).</t>
</list></t>

<t>The following operations are placed into the Dependency resolution block:</t>

<t><list style="symbols">
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Set Parameters Directive (see <xref target="suit-directive-set-parameters"/>) for
  <list style="symbols">
      <t>URI (see Section 8.4.8.9 of <xref target="I-D.ietf-suit-manifest"/>)</t>
      <t>Encryption Info (See <xref target="I-D.ietf-suit-firmware-encryption"/>)</t>
    </list></t>
  <t>Fetch Directive (see Section 8.4.10.4 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Dependency Integrity Condition (see <xref target="suit-condition-dependency-integrity"/>)</t>
  <t>Process Dependency Directive (see <xref target="suit-directive-process-dependency"/>)</t>
</list></t>

<t>Then, the validate block contains the following operations:</t>

<t><list style="symbols">
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Check Image Match Condition (see Section 8.4.9.2 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Process Dependency Directive (see <xref target="suit-directive-process-dependency"/>)</t>
</list></t>

<t>A plaintext Manifest and its encrypted Dependency may also form a composite Manifest (<xref target="integrated-dependencies"/>).</t>

</section>
<section anchor="template-override-encryption-info"><name>Overriding Encryption Info Template</name>

<t>The goal of overriding the Encryption Info template is to separate the role of generating encrypted Payload and Encryption Info with Key-Encryption Key addressing Section 3 of <xref target="I-D.ietf-suit-firmware-encryption"/>.</t>

<t>As an example, this template describes two manifests:
- The dependent Manifest created by the Distribution System contains Encryption Info, allowing the Device to generate the Content-Encryption Key.
- The dependency Manifest created by the Author contains Commands to decrypt the encrypted Payload using Encryption Info above and to validate the plaintext Payload with SUIT_Digest.</t>

<t>NOTE: This template also requires the extensions defined in <xref target="I-D.ietf-suit-firmware-encryption"/>.</t>

<t>The following operations are placed into the Dependency resolution block of dependent Manifest:</t>

<t><list style="symbols">
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>) pointing at dependency Manifest</t>
  <t>Set Parameters Directive (see <xref target="suit-directive-set-parameters"/>) for
  <list style="symbols">
      <t>Image Digest (see Section 8.4.8.6 of <xref target="I-D.ietf-suit-manifest"/>)</t>
      <t>URI (see Section 8.4.8.9 of <xref target="I-D.ietf-suit-manifest"/>) of dependency Manifest</t>
    </list></t>
  <t>Fetch Directive (see Section 8.4.10.4 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Dependency Integrity Condition (see <xref target="suit-condition-dependency-integrity"/>)</t>
</list></t>

<t>The following Commands are placed into the Fetch/Install block of dependent Manifest</t>

<t><list style="symbols">
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>) pointing at encrypted Payload</t>
  <t>Set Parameters Directive (see <xref target="suit-directive-set-parameters"/>) for
  <list style="symbols">
      <t>URI (see Section 8.4.8.9 of <xref target="I-D.ietf-suit-manifest"/>)</t>
    </list></t>
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>) pointing at dependency Manifest</t>
  <t>Set Parameters Directive (see <xref target="suit-directive-set-parameters"/>) for
  <list style="symbols">
      <t>Encryption Info (See <xref target="I-D.ietf-suit-firmware-encryption"/>)</t>
    </list></t>
  <t>Process Dependency Directive (see <xref target="suit-directive-process-dependency"/>)</t>
</list></t>

<t>The following Commands are placed into the same block of dependency Manifest:</t>

<t><list style="symbols">
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>) pointing at encrypted Payload</t>
  <t>Fetch Directive (see Section 8.4.10.4 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>) pointing at to be decrypted Payload</t>
  <t>Override Parameters Directive (see Section 8.4.10.3 of <xref target="I-D.ietf-suit-manifest"/>) for
  <list style="symbols">
      <t>Source Component (see Section 8.4.8.11 of <xref target="I-D.ietf-suit-manifest"/>) pointing at encrypted Payload</t>
    </list></t>
  <t>Copy Directive (see Section 8.4.10.5 of <xref target="I-D.ietf-suit-manifest"/>) consuming the Encryption Info above</t>
</list></t>

<t>The Distribution System can Set the Parameter URI in the Fetch/Install block of dependent Manifest if it wants to overwrite the URI of encrypted Payload.</t>

<t>Because the Author and the Distribution System have different roles and MAY be separate entities, it is highly RECOMMENDED to leverage permissions (see Section 9 of <xref target="I-D.ietf-suit-manifest"/>).
For example, The Device can protect itself from attacker who breaches the Distribution System by allowing only the Author's Manifest to modify the Component of (to be) decrypted Payload.</t>

</section>
<section anchor="operating-on-multiple-components"><name>Operating on Multiple Components</name>

<t>In order to produce compact encoding, it is efficient to perform operations on multiple Components simultaneously. Because Dependency Manifests and Component Images are processed at different times, there is a mechanism to distinguish between these elements: suit-condition-is-dependency. This can be used with suit-directive-try-each to perform operations just on Dependency Manifests or just on Component Images.</t>

<t>For example, to fetch all Dependency Manifests, the following Commands are added to the Dependency resolution block:</t>

<t><list style="symbols">
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Set Parameters Directive (see <xref target="suit-directive-set-parameters"/>) for a URI (see Section 8.4.8.9 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Set Component Index Directive, with argument "True" (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Try Each Directive
  <list style="symbols">
      <t>Sequence 0
      <list style="symbols">
          <t>Condition Is Dependency Manifest</t>
          <t>Fetch</t>
          <t>Dependency Integrity Condition (see <xref target="suit-condition-dependency-integrity"/>)</t>
          <t>Process Dependency</t>
        </list></t>
      <t>Sequence 1 (Empty; no Commands, succeeds immediately)</t>
    </list></t>
</list></t>

<t>Another example is to fetch and validate all Component Images. The Image fetch sequence contains the following Commands:</t>

<t><list style="symbols">
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Set Parameters Directive (see <xref target="suit-directive-set-parameters"/>) for a URI (see Section 8.4.8.9 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Set Component Index Directive, with argument "True" (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Try Each Directive
  <list style="symbols">
      <t>Sequence 0
      <list style="symbols">
          <t>Condition Is Dependency Manifest</t>
          <t>Process Dependency</t>
        </list></t>
      <t>Sequence 1
      <list style="symbols">
          <t>Fetch</t>
          <t>Condition Image Match</t>
        </list></t>
    </list></t>
</list></t>

<t>When some Components are "installed" or "loaded" it is more productive to use lists of Component indices rather than Component Index = True. For example, to install several Components, the following Commands should be placed in the Image Install Sequence:</t>

<t><list style="symbols">
  <t>Set Component Index Directive (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Set Parameters Directive (see <xref target="suit-directive-set-parameters"/>) for the Source Component (see Section 8.4.8.11 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Set Component Index Directive, with argument containing list of destination Component indices (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Copy</t>
  <t>Set Component Index Directive, with argument containing list Dependency Component indices (see Section 8.4.10.1 of <xref target="I-D.ietf-suit-manifest"/>)</t>
  <t>Process Dependency</t>
</list></t>

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

<t>IANA is requested to allocate the following numbers in the listed registries created by draft-ietf-suit-manifest:</t>

<section anchor="suit-envelope-elements"><name>SUIT Envelope Elements</name>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>15</c>
      <c>Dependency Resolution</c>
      <c><xref target="suit-dependency-resolution"/></c>
      <c>18</c>
      <c>Candidate Verification</c>
      <c><xref target="suit-candidate-verification"/></c>
</texttable>

</section>
<section anchor="suit-manifest-elements"><name>SUIT Manifest Elements</name>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>5</c>
      <c>Manifest Component ID</c>
      <c><xref target="manifest-id"/></c>
      <c>15</c>
      <c>Dependency Resolution</c>
      <c><xref target="suit-dependency-resolution"/></c>
      <c>24</c>
      <c>Uninstall</c>
      <c><xref target="suit-uninstall"/></c>
</texttable>

</section>
<section anchor="suit-common-elements"><name>SUIT Common Elements</name>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>1</c>
      <c>Dependencies</c>
      <c><xref target="SUIT_Dependencies"/></c>
</texttable>

</section>
<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>7</c>
      <c>Dependency Integrity</c>
      <c><xref target="suit-condition-dependency-integrity"/></c>
      <c>8</c>
      <c>Is Dependency</c>
      <c><xref target="suit-condition-is-dependency"/></c>
      <c>11</c>
      <c>Process Dependency</c>
      <c><xref target="suit-directive-process-dependency"/></c>
      <c>19</c>
      <c>Set Parameters</c>
      <c><xref target="suit-directive-set-parameters"/></c>
      <c>33</c>
      <c>Unlink</c>
      <c><xref target="suit-directive-unlink"/></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 Images and as such it is part of a larger solution for delivering software updates to 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>


  </middle>

  <back>


    <references title='Normative References'>




<reference anchor='I-D.ietf-suit-manifest'>
   <front>
      <title>A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         </author>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Koen Zandberg' initials='K.' surname='Zandberg'>
         <organization>Inria</organization>
      </author>
      <author fullname='Øyvind Rønningstad' initials='O.' surname='Rønningstad'>
         <organization>Nordic Semiconductor</organization>
      </author>
      <date day='24' month='February' year='2025'/>
      <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 Internet of Things (IoT) device), where to find
   the code/data, the devices to which it applies, and cryptographic
   information protecting the manifest.  Software updates and Trusted
   Invocation both tend to use sequences of common operations, so the
   manifest encodes those sequences of operations, rather than declaring
   the metadata.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-manifest-33'/>
   
</reference>


<reference anchor='I-D.ietf-suit-firmware-encryption'>
   <front>
      <title>Encrypted Payloads in SUIT Manifests</title>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
      </author>
      <author fullname='Russ Housley' initials='R.' surname='Housley'>
         <organization>Vigil Security, LLC</organization>
      </author>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='David Brown' initials='D.' surname='Brown'>
         <organization>Linaro</organization>
      </author>
      <author fullname='Ken Takayama' initials='K.' surname='Takayama'>
         <organization>SECOM CO., LTD.</organization>
      </author>
      <date day='29' month='January' year='2025'/>
      <abstract>
	 <t>   This document specifies techniques for encrypting software, firmware,
   machine learning models, and personalization data by utilizing the
   IETF SUIT manifest.  Key agreement is provided by ephemeral-static
   (ES) Diffie-Hellman (DH) and AES Key Wrap (AES-KW).  ES-DH uses
   public key cryptography while AES-KW uses a pre-shared key.
   Encryption of the plaintext is accomplished with conventional
   symmetric key cryptography.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-firmware-encryption-23'/>
   
</reference>

<reference anchor='RFC2119'>
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname='S. Bradner' initials='S.' surname='Bradner'/>
    <date month='March' year='1997'/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name='BCP' value='14'/>
  <seriesInfo name='RFC' value='2119'/>
  <seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>

<reference anchor='RFC8174'>
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname='B. Leiba' initials='B.' surname='Leiba'/>
    <date month='May' year='2017'/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name='BCP' value='14'/>
  <seriesInfo name='RFC' value='8174'/>
  <seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>




    </references>

    <references title='Informative References'>




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

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-update-management-07'/>
   
</reference>


<reference anchor='I-D.ietf-teep-architecture'>
   <front>
      <title>Trusted Execution Environment Provisioning (TEEP) Architecture</title>
      <author fullname='Mingliang Pei' initials='M.' surname='Pei'>
         <organization>Broadcom</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Dave Thaler' initials='D.' surname='Thaler'>
         <organization>Microsoft</organization>
      </author>
      <author fullname='Dave Wheeler' initials='D. M.' surname='Wheeler'>
         <organization>Amazon</organization>
      </author>
      <date day='24' month='October' year='2022'/>
      <abstract>
	 <t>A Trusted Execution Environment (TEE) is an environment that enforces the following: any code within the environment cannot be tampered with, and any data used by such code cannot be read or tampered with by any code outside the environment.  This architecture document discusses the motivation for designing and standardizing a protocol for managing the lifecycle of Trusted Applications running inside such a TEE.
	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-teep-architecture-19'/>
   
</reference>


<reference anchor='I-D.ietf-iotops-7228bis'>
   <front>
      <title>Terminology for Constrained-Node Networks</title>
      <author fullname='Carsten Bormann' initials='C.' surname='Bormann'>
         <organization>Universität Bremen TZI</organization>
      </author>
      <author fullname='Mehmet Ersue' initials='M.' surname='Ersue'>
         </author>
      <author fullname='Ari Keränen' initials='A.' surname='Keränen'>
         <organization>Ericsson</organization>
      </author>
      <author fullname='Carles Gomez' initials='C.' surname='Gomez'>
         <organization>Universitat Politecnica de Catalunya</organization>
      </author>
      <date day='8' month='January' year='2025'/>
      <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='Internet-Draft' value='draft-ietf-iotops-7228bis-01'/>
   
</reference>

<reference anchor='RFC6024'>
  <front>
    <title>Trust Anchor Management Requirements</title>
    <author fullname='R. Reddy' initials='R.' surname='Reddy'/>
    <author fullname='C. Wallace' initials='C.' surname='Wallace'/>
    <date month='October' year='2010'/>
    <abstract>
      <t>A trust anchor represents an authoritative entity via a public key and associated data. The public key is used to verify digital signatures, and the associated data is used to constrain the types of information for which the trust anchor is authoritative. A relying party uses trust anchors to determine if a digitally signed object is valid by verifying a digital signature using the trust anchor's public key, and by enforcing the constraints expressed in the associated data for the trust anchor. This document describes some of the problems associated with the lack of a standard trust anchor management mechanism and defines requirements for data formats and push-based protocols designed to address these problems. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='6024'/>
  <seriesInfo name='DOI' value='10.17487/RFC6024'/>
</reference>

<reference anchor='RFC9019'>
  <front>
    <title>A Firmware Update Architecture for Internet of Things</title>
    <author fullname='B. Moran' initials='B.' surname='Moran'/>
    <author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'/>
    <author fullname='D. Brown' initials='D.' surname='Brown'/>
    <author fullname='M. Meriac' initials='M.' surname='Meriac'/>
    <date month='April' year='2021'/>
    <abstract>
      <t>Vulnerabilities in Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism suitable for devices with resource constraints. Incorporating such an update mechanism is a fundamental requirement for fixing vulnerabilities, but it also enables other important capabilities such as updating configuration settings and adding new functionality.</t>
      <t>In addition to the definition of terminology and an architecture, this document provides the motivation for the standardization of a manifest format as a transport-agnostic means for describing and protecting firmware updates.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='9019'/>
  <seriesInfo name='DOI' value='10.17487/RFC9019'/>
</reference>

<reference anchor='RFC9124'>
  <front>
    <title>A Manifest Information Model for Firmware Updates in Internet of Things (IoT) Devices</title>
    <author fullname='B. Moran' initials='B.' surname='Moran'/>
    <author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'/>
    <author fullname='H. Birkholz' initials='H.' surname='Birkholz'/>
    <date month='January' year='2022'/>
    <abstract>
      <t>Vulnerabilities with Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism that is also suitable for constrained devices. Ensuring that devices function and remain secure over their service lifetime requires such an update mechanism to fix vulnerabilities, update configuration settings, and add new functionality.</t>
      <t>One component of such a firmware update is a concise and machine-processable metadata document, or manifest, that describes the firmware image(s) and offers appropriate protection. This document describes the information that must be present in the manifest.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='9124'/>
  <seriesInfo name='DOI' value='10.17487/RFC9124'/>
</reference>




    </references>


<section anchor="full-cddl"><name>A. Full CDDL</name>

<t>To be valid, the following CDDL MUST be appended to the SUIT Manifest CDDL. The SUIT CDDL is defined in Appendix A of <xref target="I-D.ietf-suit-manifest"/></t>

<figure><sourcecode type="CDDL"><![CDATA[
$$SUIT_Envelope_Extensions //= 
    (suit-delegation => bstr .cbor SUIT_Delegation)
$$SUIT_Envelope_Extensions //= (
    suit-integrated-dependency-key => bstr .cbor SUIT_Envelope)

SUIT_Delegation = [ + [ + bstr .cbor CWT ] ]

CWT = SUIT_Authentication_Block

$$SUIT_Manifest_Extensions //= 
    (suit-manifest-component-id => SUIT_Component_Identifier)

$$SUIT_severable-members-extensions //= 
    (suit-dependency-resolution => bstr .cbor SUIT_Command_Sequence)

$$SUIT_severable-members-extensions //=
    (suit-candidate-verification => bstr .cbor SUIT_Command_Sequence)

$$unseverable-manifest-member-extensions //= 
    (suit-uninstall => bstr .cbor SUIT_Command_Sequence)

suit-integrated-dependency-key = tstr

$$severable-manifest-members-choice-extensions //= (
    suit-dependency-resolution =>
        bstr .cbor SUIT_Command_Sequence / SUIT_Digest)

$$SUIT_Common-extensions //= (
    suit-dependencies => SUIT_Dependencies
)
SUIT_Dependencies = {
    + uint => SUIT_Dependency_Metadata
}
SUIT_Dependency_Metadata = {
    ? suit-dependency-prefix => SUIT_Component_Identifier
    * $$SUIT_Dependency_Extensions
}

SUIT_Condition //= (
    suit-condition-dependency-integrity, SUIT_Rep_Policy)
SUIT_Condition //= (
    suit-condition-is-dependency, SUIT_Rep_Policy)

SUIT_Directive //= (
    suit-directive-process-dependency, SUIT_Rep_Policy)
SUIT_Directive //= (suit-directive-set-parameters,
    {+ $$SUIT_Parameters})
SUIT_Directive //= (
    suit-directive-unlink, SUIT_Rep_Policy)

suit-manifest-component-id = 5

suit-delegation = 1
suit-dependency-resolution = 15
suit-candidate-verification = 18
suit-uninstall = 24

suit-dependencies = 1

suit-dependency-prefix = 1

suit-condition-dependency-integrity     = 7
suit-condition-is-dependency            = 8
suit-directive-process-dependency       = 11
suit-directive-set-parameters           = 19
suit-directive-unlink                   = 33

]]></sourcecode></figure>

</section>
<section anchor="examples"><name>B. Examples</name>

<t>The following examples demonstrate a small subset of the functionalities in this document.</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>

<section anchor="example-0-process-dependency"><name>Example 0: Process Dependency</name>

<t>This example uses functionalities:</t>

<t><list style="symbols">
  <t>manifest component id</t>
  <t>dependency resolution</t>
  <t>process dependency</t>
</list></t>

<t>The dependency Manifest:</t>

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107({
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: / h'A2FFB59E9F1A29D20BF655BC1DE909CB7EDD972A6C09D50FC42983778670715E'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'A506F1647E3A9E0F54A07F303443F33E3CFA28520BE1E93C467CD8B14954E460C604A7623F146D833B6F0A2454095855573C48B18570066FA7472077313E80CE'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 0,
    / common / 3: << {
      / dependencies / 1: {
        / component-index / 1: {
          / dependency-prefix / 1: [
            'dependent.suit'
          ]
        }
      },
      / components / 2: [
        ['10']
      ]
    } >>,
    / manifest-component-id / 5: [
      'depending.suit'
    ],
    / invoke / 9: << [
      / directive-set-component-index / 12, 0,
      / directive-override-parameters / 20, {
        / parameter-invoke-args / 23: 'cat 00 10'
      },
      / directive-invoke / 23, 15
    ] >>,
    / dependency-resolution / 15: << [
      / directive-set-component-index / 12, 1,
      / directive-override-parameters / 20, {
        / parameter-image-digest / 3: << [
          / digest-algorithm-id: / -16 / SHA256 /,
          / digest-bytes: / h'2EEEC4ACEC877EE13D8B52DB16C4390C93E5D84FD9F25AEAE0717B861BE0C4A2'
        ] >>,
        / parameter-image-size / 14: 190,
        / parameter-uri / 21: "http://example.com/dependent.suit"
      },
      / directive-fetch / 21, 2,
      / condition-image-match / 3, 15
    ] >>,
    / install / 20: << [
      / directive-set-component-index / 12, 1,
      / directive-override-parameters / 20, {
        / parameter-image-digest / 3: << [
          / digest-algorithm-id: / -16 / SHA256 /,
          / digest-bytes: / h'0F02CAF6D3E61920D36BF3CEA7F862A13BB8FB1F09C3F4C29B121FEAB78EF3D8'
        ] >>
      },
      / condition-dependency-integrity / 7, 15,
      / directive-process-dependency / 11, 0,

      / directive-set-component-index / 12, 0,
      / directive-override-parameters / 20, {
        / parameter-content / 18: ' in multiple trust domains'
      },
      / directive-write / 18, 15
    ] >>
  } >>
})
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA2025873825824822F5820A2FFB59E9F1A29D20BF655BC1DE909CB7E
DD972A6C09D50FC42983778670715E584AD28443A10126A0F65840A506F1
647E3A9E0F54A07F303443F33E3CFA28520BE1E93C467CD8B14954E460C6
04A7623F146D833B6F0A2454095855573C48B18570066FA7472077313E80
CE0358F9A70101020003581CA201A101A101814E646570656E64656E742E
7375697402818142313005814E646570656E64696E672E73756974095286
0C0014A11749636174203030203130170F0F5857880C0114A3035824822F
58202EEEC4ACEC877EE13D8B52DB16C4390C93E5D84FD9F25AEAE0717B86
1BE0C4A20E18BE157821687474703A2F2F6578616D706C652E636F6D2F64
6570656E64656E742E737569741502030F1458538E0C0114A1035824822F
58200F02CAF6D3E61920D36BF3CEA7F862A13BB8FB1F09C3F4C29B121FEA
B78EF3D8070F0B000C0014A112581A20696E206D756C7469706C65207472
75737420646F6D61696E73120F
]]></artwork></figure>

<t>The dependent Manifest (fetched from "https://example.com/dependent.suit"):</t>

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107({
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: / h'0F02CAF6D3E61920D36BF3CEA7F862A13BB8FB1F09C3F4C29B121FEAB78EF3D8'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'D0703EA193E12381A66FFADEF2F0949711CFE05ED2322818D73D19F2BBD91BE5C52F1604B45C405E96B0642F3D49B2D7C6E3B2C0B40030BDDFBD27AF930B1F8B'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 0,
    / common / 3: << {
      / components / 2: [
        ['00']
      ]
    } >>,
    / manifest-component-id / 5: [
      'dependent.suit'
    ],
    / invoke / 9: << [
      / directive-override-parameters / 20, {
        / parameter-invoke-args / 23: 'cat 00'
      },
      / directive-invoke / 23, 15
    ] >>,
    / install / 20: << [
      / directive-override-parameters / 20, {
        / parameter-content / 18: 'hello world'
      },
      / directive-write / 18, 15
    ] >>
  } >>
})
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA2025873825824822F58200F02CAF6D3E61920D36BF3CEA7F862A13B
B8FB1F09C3F4C29B121FEAB78EF3D8584AD28443A10126A0F65840D0703E
A193E12381A66FFADEF2F0949711CFE05ED2322818D73D19F2BBD91BE5C5
2F1604B45C405E96B0642F3D49B2D7C6E3B2C0B40030BDDFBD27AF930B1F
8B035842A6010102000347A102818142303005814E646570656E64656E74
2E73756974094D8414A11746636174203030170F14528414A1124B68656C
6C6F20776F726C64120F
]]></artwork></figure>

</section>
<section anchor="example-1-integrated-dependency"><name>Example 1: Integrated Dependency</name>

<t><list style="symbols">
  <t>manifest component id</t>
  <t>dependency resolution</t>
  <t>process dependency</t>
  <t>integrated dependency</t>
</list></t>

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107({
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: / h'6391CBC36495B9C87AC3EC841DB124DABD8D3C9FE2DEEFE16569AFC349E7DDB2'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'517250281E6567FF9DF519CF9D76A440D86DFEB65B505D180D7D794FEC67823FA0E98EBC526FBC985777EAB4E2FFE813A44F205C015AEB3FA842F33E37B52716'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 0,
    / common / 3: << {
      / dependencies / 1: {
        / component-index / 1: {
          / dependency-prefix / 1: [
            'dependent.suit'
          ]
        }
      },
      / components / 2: [
        ['10']
      ]
    } >>,
    / manifest-component-id / 5: [
      'depending.suit'
    ],
    / invoke / 9: << [
      / directive-set-component-index / 12, 0,
      / directive-override-parameters / 20, {
        / parameter-invoke-args / 23: 'cat 00 10'
      },
      / directive-invoke / 23, 15
    ] >>,
    / dependency-resolution / 15: << [
      / directive-set-component-index / 12, 1,
      / directive-override-parameters / 20, {
        / parameter-image-digest / 3: << [
          / digest-algorithm-id: / -16 / SHA256 /,
          / digest-bytes: / h'2EEEC4ACEC877EE13D8B52DB16C4390C93E5D84FD9F25AEAE0717B861BE0C4A2'
        ] >>,
        / parameter-image-size / 14: 190,
        / parameter-uri / 21: "#dependent.suit"
      },
      / directive-fetch / 21, 2,
      / condition-image-match / 3, 15
    ] >>,
    / install / 20: << [
      / directive-set-component-index / 12, 1,
      / directive-process-dependency / 11, 0,

      / directive-set-component-index / 12, 0,
      / directive-override-parameters / 20, {
        / parameter-content / 18: ' in multiple trust domains'
      },
      / directive-write / 18, 15
    ] >>
  } >>,
  "#dependent.suit": h'D86BA2025873825824822F58200F02CAF6D3E61920D36BF3CEA7F862A13BB8FB1F09C3F4C29B121FEAB78EF3D8584AD28443A10126A0F65840D0703EA193E12381A66FFADEF2F0949711CFE05ED2322818D73D19F2BBD91BE5C52F1604B45C405E96B0642F3D49B2D7C6E3B2C0B40030BDDFBD27AF930B1F8B035842A6010102000347A102818142303005814E646570656E64656E742E73756974094D8414A11746636174203030170F14528414A1124B68656C6C6F20776F726C64120F'
})
]]></artwork></figure>

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

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

<figure><artwork><![CDATA[
D86BA3025873825824822F58206391CBC36495B9C87AC3EC841DB124DABD
8D3C9FE2DEEFE16569AFC349E7DDB2584AD28443A10126A0F65840517250
281E6567FF9DF519CF9D76A440D86DFEB65B505D180D7D794FEC67823FA0
E98EBC526FBC985777EAB4E2FFE813A44F205C015AEB3FA842F33E37B527
160358BBA70101020003581CA201A101A101814E646570656E64656E742E
7375697402818142313005814E646570656E64696E672E73756974095286
0C0014A11749636174203030203130170F0F5844880C0114A3035824822F
58202EEEC4ACEC877EE13D8B52DB16C4390C93E5D84FD9F25AEAE0717B86
1BE0C4A20E18BE156F23646570656E64656E742E737569741502030F1458
288A0C010B000C0014A112581A20696E206D756C7469706C652074727573
7420646F6D61696E73120F6F23646570656E64656E742E7375697458BED8
6BA2025873825824822F58200F02CAF6D3E61920D36BF3CEA7F862A13BB8
FB1F09C3F4C29B121FEAB78EF3D8584AD28443A10126A0F65840D0703EA1
93E12381A66FFADEF2F0949711CFE05ED2322818D73D19F2BBD91BE5C52F
1604B45C405E96B0642F3D49B2D7C6E3B2C0B40030BDDFBD27AF930B1F8B
035842A6010102000347A102818142303005814E646570656E64656E742E
73756974094D8414A11746636174203030170F14528414A1124B68656C6C
6F20776F726C64120F
]]></artwork></figure>

</section>
</section>


  </back>

<!-- ##markdown-source:
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
92rQePn0Nuy/SZMPq9f1xnkz/Sr4lpc1fjnKL4q27PI625t8vZnCgaO8bjNA
gBk8qpVSohFegL03gxdnQwN5k7e349vvvvwq+tvZh5+qw/5fvjsTv4/6f5mN
AF3j6z97g+fvmi/evbu5+O6b2Xfh5oP357j9LjgZT53ph5NVM/5mGZ79dXr7
VbXz5Xb9YtpfDc5nw5+m3ofXtebN5dX8wyL58+3kxfS89Xaefnj14iJaXj17
Zqw/AxYtn9x/0nlLvWguvuwDZcjLSkVeriRCkYMunq+eFrofRCGtMWaGhqk2
WjIys/3KHD4vLH2Gz2WV2tyaqTCtS2zJia1p/njpXWFF8Ylbq3aOUEaeuDsa
XJ249VP3j390vycGrX7BNxghZXU/KHDfU/i4XGujssC4OyllH59uwdrB566f
9OuTyaDVG/cmtX69N6pXB5N2qzUY1kbjXrU3HHTGo1GvU++3h9XeqFWdDJv1
XrfR6XTbnWqn1ho/obF/cP/0p5KE7kRfTFozVtk90mAL088nYOGVj0oHOnHN
teB7p265Az/HF7QW8eCdmhBf2YTWgB/v9Feibhg/xkul9ReqaZrAQ6vantTa
zc640e+Nq5NWs1/tTBrVRrPZmDQa48Zw0q93W4CfcW3cawyb7c5w1B3Umr1W
c9xsV4ftarPfadcbk1qzPeo2GoP2pNqvN1vNaq/VbbVaHXgHnu+2OtVquz3p
d5qderXTadQa4251KPF4DOtyND5PNF2euI1TjSr9RVn2sSBU1UrZr2UMo8yu
MyamqnxMtBa1BydKMcUpDW3ukSHtyeeYecAaQAleeuh74yHXfaKLcVC+PTG+
/EH9fif3XG+eUYZP69Gjfv+kVn0i3+WfmlYMtFj6yonb0mM8UW14DJh+kAMI
58OJ2zvNnkRTjhcgqF6SaLcfL2pUC4uqliyMGx31CIIyyCZ6DjbuCfALt1oF
RvIkjyo9kQK93iihskXrMnBTrJcB5K1fsNTaZ1mq0TxQ0ej3Npn9HAZovWIw
wfp4PB42+8PxsNvpjMe1BpzsVn00qLWHzUavOuw1xq1RtzkZ9Sb1Vn/cHwPr
6wy67dpgXIX36ppufzD4UtFa6Ip7wFATjmqvWvzkJg4QK3BYHl2n6fr05ERI
rwqg+sQ+MY/2bTgHMXGokls3D0/R3eqA3kKqkKo27tO/Ox1UJ9X6sD9pjxrj
dq1Xr44a7cGkMRz3O5Nuu96vNQaD7mRQm4BgbEyaw3pvUKvXJuP+oNMdT4Bo
bDooYlt7DY4Tt4NbUISxAkMC8FsjlvLPZ0EzzmwnqQ7sB42A4ivh9vIjzu7C
MSzCc5hjO2CkskocpXRT+geqRlARG4ptoaKRvUQnmv4EE5y6jY6wg0bd9qBf
r9Zb3U6jC/+tN7v1+gR+Vg8rP85+7afVbfZH9S7oCP1atVZv96swQLdZZW3C
eYg64TxEn3CG42qj1Z30+p0qAFatV6v4d20IeKghqPj/bq05bjfbMEC71abf
2uNOsz52Oo1Oq93rNKv1Lj5UhzGr1Vbu8R78t1Mfq6d7rXoXwB5Wq7Vmv1br
NHvtRht+1KuwbgABh6l14IwB7ludLmg91Ro82UDIeE8c3JRfyowdyY2r41oX
0ApT1GvtLuCl2ak2YKvrsDewc7X2CJYwbLfqY4APDjt83nTyaJDrqrUQ9irs
A4Dd6I4F2LUM2L+UdziSeVQRNQPYKIlAIFUgyyriGf47AmiGHcC6AL6KG+50
gA4QwwA2TA1rg4eBBurVibYnC3Itj+T1JJRPSGIm2S9njn/TVsznYdy/fytm
BETUGPdrcEZq9QaQD3CGSX80Btqv9pq9Tq02nIyrrfGo3qjj4R51GqManKPB
YNSD49MatupgBFWbg2Zr2ITneu0BkFYdUNTsDeqjzrA9bgzqw+qgCfykOhiN
JoNRvdOf9OCP2qQ7+K1ZMfvshOrnsRNs2+Xn2AmfTfF/kNZ/L/3ugQrCtb9c
RngJ3HL+r9QIQOM+pBEcZiTOfk6ySyPgk+k85Gg6DzmbTneAAqsJuozWCJod
AFIK+WqhkCdh6JhSvgnCVwj4tingUbSDjKyLb+vNQbsLrw8dEFcTVE3ak04d
fm9q6WQ47+DUF7UH2X4m39wXro7uWT67365Mazd6teFg2GiDTjjogTLUHzZA
J2rWQBWqN0f9wag7agx7k3F9NB5PxjXAda8/GTaavXFnNBrU/11kWqvWqbeQ
Ssewws5k0htNWrXeEH522v0mnKxuezQZD9qtQavaGtW61VFn1Ok1J+NhGzTA
xqRfHfe64wGItvZkMOyB6glqZX/QHIPyP+7WGjAGkGcLtDrQJgfwfBcPFajo
HVA7O7X2b02m/ccz9x/P3H88c/9qz9zjfwc/3P8+rxK+kdu7U7ScHqASPkQj
/NfZar9cHXyINlikDD55sGYPCoHj3PtxwwhoFO34Yc3L2a967dpyVmWch+gy
zkOUGQfoBXZ9MPitugWbzV/fLQj019hH06a/D7aq20eAfq5jDv1yTrFj7tD8
sD/jUdd5CDtyHsKPnIcwJOchHMl5CEtyHsKTnB0W6v8Hr319dTrXAAA=

-->

</rfc>

