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

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

    <abstract>


<t>This specification describes extensions to the SUIT Manifest format (as
defined in <xref target="I-D.ietf-suit-manifest"/>) for use in deployments with
multiple trust domains. A device has more than one trust domain when it
enables delegation of different rights to mutually distrusting entities
for use for different purposes or Components in the context of firmware
or software update.</t>



    </abstract>



  </front>

  <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>long-term Trust Anchors with a mechanism to delegate trust to short term keys.</t>
  <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>
</list></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 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>
  <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 1 and 4 are added to the expected installation workflow of a Recipient:</t>

<t><list style="numbers">
  <t>Verify Delegation Chains.</t>
  <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>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 two more elements: Delegation Chains and 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                |
+-------------------------+
| Delegation Chains       |
| 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="ovr-delegation"><name>Delegation Chains</name>

<t>Delegation Chains allow a Recipient to establish a chain of trust from a Trust Anchor to the signer of a Manifest by validating delegation claims. Each delegation claim is a <xref target="RFC8392"/> CBOR Web Token (CWT). The first claim in each list is signed by a Trust Anchor. Each subsequent claim in a list is signed by the public key claimed in the preceding list element. The last element in each list claims a public key that can be used to verify a signature in the Authentication Block (See Section 5.2 of <xref target="I-D.ietf-suit-manifest"/>).</t>

<t>See <xref target="delegation-info"/> for more detail.</t>

<section anchor="delegation-info"><name>Delegation Chains</name>

<t>The suit-delegation element MAY carry one or more CBOR Web Tokens (CWTs) <xref target="RFC8392"/>, with <xref target="RFC8747"/> cnf claims. They can be used to perform enhanced authorization decisions. The CWTs are arranged into a list of lists. Each list starts with a CWT authorized by a Trust Anchor, and finishes with a key used to authenticate the Manifest (see Section 8.3 of <xref target="I-D.ietf-suit-manifest"/>). This allows an Update Authority to delegate from a long term Trust Anchor, down through intermediaries, to a delegate without any out-of-band provisioning of Trust Anchors or intermediary keys.</t>

<t>A Recipient MAY choose to cache intermediaries and/or delegates. If an intermediary knows that a targeted Recipient has cached some intermediaries or delegates, it MAY choose to strip any cached intermediaries or delegates from the Delegation Chains in order to reduce bandwidth and energy.</t>

</section>
</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>Evaluate any Delegation Chains</t>
  <t>Verify the signature of the Manifest hash</t>
  <t>Compare the Manifest hash to the provided hash</t>
  <t>Verify the Manifest against the Manifest hash</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="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>1</c>
      <c>Delegation</c>
      <c><xref target="ovr-delegation"/></c>
      <c>15</c>
      <c>Dependency Resolution</c>
      <c><xref target="suit-dependency-resolution"/></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='RFC3986'>
  <front>
    <title>Uniform Resource Identifier (URI): Generic Syntax</title>
    <author fullname='T. Berners-Lee' initials='T.' surname='Berners-Lee'/>
    <author fullname='R. Fielding' initials='R.' surname='Fielding'/>
    <author fullname='L. Masinter' initials='L.' surname='Masinter'/>
    <date month='January' year='2005'/>
    <abstract>
      <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='66'/>
  <seriesInfo name='RFC' value='3986'/>
  <seriesInfo name='DOI' value='10.17487/RFC3986'/>
</reference>

<reference anchor='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='RFC7228'>
  <front>
    <title>Terminology for Constrained-Node Networks</title>
    <author fullname='C. Bormann' initials='C.' surname='Bormann'/>
    <author fullname='M. Ersue' initials='M.' surname='Ersue'/>
    <author fullname='A. Keranen' initials='A.' surname='Keranen'/>
    <date month='May' year='2014'/>
    <abstract>
      <t>The Internet Protocol Suite is increasingly used on small devices with severe constraints on power, memory, and processing resources, creating constrained-node networks. This document provides a number of basic terms that have been useful in the standardization work for constrained-node networks.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7228'/>
  <seriesInfo name='DOI' value='10.17487/RFC7228'/>
</reference>

<reference anchor='RFC8392'>
  <front>
    <title>CBOR Web Token (CWT)</title>
    <author fullname='M. Jones' initials='M.' surname='Jones'/>
    <author fullname='E. Wahlstroem' initials='E.' surname='Wahlstroem'/>
    <author fullname='S. Erdtman' initials='S.' surname='Erdtman'/>
    <author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'/>
    <date month='May' year='2018'/>
    <abstract>
      <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8392'/>
  <seriesInfo name='DOI' value='10.17487/RFC8392'/>
</reference>

<reference anchor='RFC8747'>
  <front>
    <title>Proof-of-Possession Key Semantics for CBOR Web Tokens (CWTs)</title>
    <author fullname='M. Jones' initials='M.' surname='Jones'/>
    <author fullname='L. Seitz' initials='L.' surname='Seitz'/>
    <author fullname='G. Selander' initials='G.' surname='Selander'/>
    <author fullname='S. Erdtman' initials='S.' surname='Erdtman'/>
    <author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'/>
    <date month='March' year='2020'/>
    <abstract>
      <t>This specification describes how to declare in a CBOR Web Token (CWT) (which is defined by RFC 8392) that the presenter of the CWT possesses a particular proof-of-possession key. Being able to prove possession of a key is also sometimes described as being the holder-of-key. This specification provides equivalent functionality to "Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)" (RFC 7800) but using Concise Binary Object Representation (CBOR) and CWTs rather than JavaScript Object Notation (JSON) and JSON Web Tokens (JWTs).</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8747'/>
  <seriesInfo name='DOI' value='10.17487/RFC8747'/>
</reference>

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

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


<reference anchor='I-D.ietf-suit-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='10' month='September' year='2023'/>
      <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 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-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>
      <date day='27' month='April' year='2023'/>
      <abstract>
	 <t>   This specification describes extensions to the SUIT manifest format
   defined in [I-D.ietf-suit-manifest].  These extensions allow an
   update author, update distributor or device operator to more
   precisely control the distribution and installation of updates to IoT
   devices.  These extensions also provide a mechanism to inform a
   management system of Software Identifier and Software Bill Of
   Materials information about an updated device.

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


<reference anchor='I-D.ietf-suit-firmware-encryption'>
   <front>
      <title>Encrypted Payloads in SUIT Manifests</title>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         </author>
      <author fullname='Russ Housley' initials='R.' surname='Housley'>
         <organization>Vigil Security, LLC</organization>
      </author>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='David Brown' initials='D.' surname='Brown'>
         <organization>Linaro</organization>
      </author>
      <author fullname='Ken Takayama' initials='K.' surname='Takayama'>
         <organization>SECOM CO., LTD.</organization>
      </author>
      <date day='5' month='September' year='2023'/>
      <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-15'/>
   
</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>




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

$$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-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-delegation-chain"><name>Example 0: Delegation Chain</name>

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

<t><list style="symbols">
  <t>manifest component id</t>
  <t>delegation chain</t>
</list></t>

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107({
  / delegation / 1: << [
    [
      / NOTE: signed by trust anchor /
      << 18([
        / protected: / << {
          / alg / 1: -7 / ES256 /
        } >>,
        / unprotected / {
        },
        / payload: / << {
          / cnf / 8: {
            / NOTE: public key of delegated authority /
            / COSE_Key / 1: {
              / kty / 1: 2 / EC2 /,
              / crv / -1: 1 / P-256 /,
              / x / -2:
                h'0E908AA8F066DB1F084E0C3652C63952
                  BD99F2A5BDB22F9E01367AAD03ABA68B',
              / y / -3:
                h'77DA1BD8AC4F0CB490BA210648BF79AB
                  164D49AD3551D71D314B2749EE42D29A'
            }
          }
        } >>,
        / signature: /
          h'FB2D5ACF66B9C8573CE92E13BFB8D113F798715CC10B5A0010B11925C155E724
            5A64E131073B87AC50CAC71650A21315B82D06CA2298CD1A95519AAE4C4B5315'
      ]) >>
    ]
  ] >>,
  / NOTE: signed by delegated authority /
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: /
        h'6EA128D7BB19B86F77C4227F2A29F22026A41958ACC45CC0A35BA388B13E2F51'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: /
        h'99F949043701D7BDBA38904A0B49F004DED6B64A4900DECA5C66AE8A9EBA9135
          76DEF136B74EA89C14FA64624DBD33B4C0BB41C153CA51548C73FF71A2BAF274'
    ]) >>
  ] >>,
  / 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 / 17: << [
      / directive-override-parameters / 20, {
        / parameter-content / 18: 'hello world'
      },
      / directive-write / 18, 15
    ] >>
  } >>
})
]]></artwork></figure>

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

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

<figure><artwork><![CDATA[
D86BA301589E8181589AD28443A10126A0584FA108A101A4010220012158
200E908AA8F066DB1F084E0C3652C63952BD99F2A5BDB22F9E01367AAD03
ABA68B22582077DA1BD8AC4F0CB490BA210648BF79AB164D49AD3551D71D
314B2749EE42D29A5840FB2D5ACF66B9C8573CE92E13BFB8D113F798715C
C10B5A0010B11925C155E7245A64E131073B87AC50CAC71650A21315B82D
06CA2298CD1A95519AAE4C4B5315025874835824822F58206EA128D7BB19
B86F77C4227F2A29F22026A41958ACC45CC0A35BA388B13E2F51584AD284
43A10126A0F6584099F949043701D7BDBA38904A0B49F004DED6B64A4900
DECA5C66AE8A9EBA913576DEF136B74EA89C14FA64624DBD33B4C0BB41C1
53CA51548C73FF71A2BAF27440035842A6010102000347A1028181423030
05814E646570656E64656E742E73756974094D8414A11746636174203030
170F11528414A1124B68656C6C6F20776F726C64120F
]]></artwork></figure>

</section>
<section anchor="example-1-process-dependency"><name>Example 1: 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>

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107({
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: /
        h'4874ADC80A9128A2B2057F5FE59C45F8ED10A9BF9C5308FCF951B8BBAF434B95'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: /
        h'C257E23A34960BE215BB9B927A5A3CEEDD675DFD81AE6E55A66FDD2209886889
          1DF42D71ADB962A64CC008AEF9465DA2153CCF383F00B505F079DB540F64B916'
    ]) >>
  ] >>,
  / 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'6C86246B90D644F021671F6D42523B2CB5E156F764BE618AA46BFCD0DB23E768'
        ] >>,
        / parameter-image-size / 14: 352,
        / parameter-uri / 21: "http://example.com/dependent.suit"
      },
      / directive-fetch / 21, 2,
      / condition-image-match / 3, 15
    ] >>,
    / install / 17: << [
      / directive-set-component-index / 12, 1,
      / directive-override-parameters / 20, {
        / parameter-image-digest / 3: << [
          / digest-algorithm-id: / -16 / SHA256 /,
          / digest-bytes: /
            h'6EA128D7BB19B86F77C4227F2A29F22026A41958ACC45CC0A35BA388B13E2F51'
        ] >>
      },
      / 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:  374</t>

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

<figure><artwork><![CDATA[
D86BA2025873825824822F58204874ADC80A9128A2B2057F5FE59C45F8ED
10A9BF9C5308FCF951B8BBAF434B95584AD28443A10126A0F65840C257E2
3A34960BE215BB9B927A5A3CEEDD675DFD81AE6E55A66FDD22098868891D
F42D71ADB962A64CC008AEF9465DA2153CCF383F00B505F079DB540F64B9
160358FAA70101020003581CA201A101A101814E646570656E64656E742E
7375697402818142313005814E646570656E64696E672E73756974095286
0C0014A11749636174203030203130170F0F5858880C0114A3035824822F
58206C86246B90D644F021671F6D42523B2CB5E156F764BE618AA46BFCD0
DB23E7680E190160157821687474703A2F2F6578616D706C652E636F6D2F
646570656E64656E742E737569741502030F1158538E0C0114A103582482
2F58206EA128D7BB19B86F77C4227F2A29F22026A41958ACC45CC0A35BA3
88B13E2F51070F0B000C0014A112581A20696E206D756C7469706C652074
7275737420646F6D61696E73120F
]]></artwork></figure>

</section>
<section anchor="example-2-integrated-dependency"><name>Example 2: 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'318EAD5F671A6D2593D7ADB7B6CCADC49F72704507004F297A25AF16A48A2111'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: /
        h'287D5AAB44D08A34954663942B2732825426893ACD735BF3A79B8B5B38EC3C99
          50D917D72D5586867C8FF58CF5827B0C2B94952359C3971DBF202B0774627DC3'
    ]) >>
  ] >>,
  / 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'6C86246B90D644F021671F6D42523B2CB5E156F764BE618AA46BFCD0DB23E768'
        ] >>,
        / parameter-image-size / 14: 352,
        / parameter-uri / 21: "#dependent.suit"
      },
      / directive-fetch / 21, 2,
      / condition-image-match / 3, 15
    ] >>,
    / install / 17: << [
      / 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
    ] >>
  } >>,
  / NOTE: Example 0 /
  "#dependent.suit":
    h'D86BA301589E8181589AD28443A10126A0584FA108A101A4010220012158200E
      908AA8F066DB1F084E0C3652C63952BD99F2A5BDB22F9E01367AAD03ABA68B22
      582077DA1BD8AC4F0CB490BA210648BF79AB164D49AD3551D71D314B2749EE42
      D29A5840FB2D5ACF66B9C8573CE92E13BFB8D113F798715CC10B5A0010B11925
      C155E7245A64E131073B87AC50CAC71650A21315B82D06CA2298CD1A95519AAE
      4C4B5315025874835824822F58206EA128D7BB19B86F77C4227F2A29F22026A4
      1958ACC45CC0A35BA388B13E2F51584AD28443A10126A0F6584099F949043701
      D7BDBA38904A0B49F004DED6B64A4900DECA5C66AE8A9EBA913576DEF136B74E
      A89C14FA64624DBD33B4C0BB41C153CA51548C73FF71A2BAF27440035842A601
      0102000347A102818142303005814E646570656E64656E742E73756974094D84
      14A11746636174203030170F11528414A1124B68656C6C6F20776F726C64120F'
})
]]></artwork></figure>

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

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

<figure><artwork><![CDATA[
D86BA3025873825824822F5820318EAD5F671A6D2593D7ADB7B6CCADC49F
72704507004F297A25AF16A48A2111584AD28443A10126A0F65840287D5A
AB44D08A34954663942B2732825426893ACD735BF3A79B8B5B38EC3C9950
D917D72D5586867C8FF58CF5827B0C2B94952359C3971DBF202B0774627D
C30358BCA70101020003581CA201A101A101814E646570656E64656E742E
7375697402818142313005814E646570656E64696E672E73756974095286
0C0014A11749636174203030203130170F0F5845880C0114A3035824822F
58206C86246B90D644F021671F6D42523B2CB5E156F764BE618AA46BFCD0
DB23E7680E190160156F23646570656E64656E742E737569741502030F11
58288A0C010B000C0014A112581A20696E206D756C7469706C6520747275
737420646F6D61696E73120F6F23646570656E64656E742E737569745901
60D86BA301589E8181589AD28443A10126A0584FA108A101A40102200121
58200E908AA8F066DB1F084E0C3652C63952BD99F2A5BDB22F9E01367AAD
03ABA68B22582077DA1BD8AC4F0CB490BA210648BF79AB164D49AD3551D7
1D314B2749EE42D29A5840FB2D5ACF66B9C8573CE92E13BFB8D113F79871
5CC10B5A0010B11925C155E7245A64E131073B87AC50CAC71650A21315B8
2D06CA2298CD1A95519AAE4C4B5315025874835824822F58206EA128D7BB
19B86F77C4227F2A29F22026A41958ACC45CC0A35BA388B13E2F51584AD2
8443A10126A0F6584099F949043701D7BDBA38904A0B49F004DED6B64A49
00DECA5C66AE8A9EBA913576DEF136B74EA89C14FA64624DBD33B4C0BB41
C153CA51548C73FF71A2BAF27440035842A6010102000347A10281814230
3005814E646570656E64656E742E73756974094D8414A117466361742030
30170F11528414A1124B68656C6C6F20776F726C64120F
]]></artwork></figure>

</section>
</section>


  </back>

<!-- ##markdown-source:
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
QXTzUEjL9zXSdTxUVZ1c5XfUI4HynET4BC1s7E8tcnApy0FslW4dWhlJ2VfJ
JlYCkTpR4o7oNji8vnrQ8Ab392LRoipT98oCqxpQkB/0mm14UEINTS9ERHcG
5jxC2wdJjndr0h1Bbx9jp6L6fLHAcoNLcmOR/loS4fi0yklai1xxYYLZTAQf
ZTWX6QTfjKxAjU/vR68BMHuZPV1O5Jq3E0leuue6MeP68C/+QNeZuCfzWZLK
S1Hkt8eHxjTuPKqKq27rmAZVMYUcD0yFwpSgSv3ofk7/GS/hHeA/uT85Dv7w
BY9h39P+M93T7vyd71yTw6t09foqJEFYvAzKAnYFx64CiuCWP0vdjqbbxMZc
csU86Z45dcL9w+Y5dIJuDmPgcnYuJqvPbxIg5YfcilUAhNLxDy3UPTUjofo0
Rv/L7+NyxPvSPirs/lA5Ob39Mlz//A0Vqh0/eDhLjlaMI4CiLIfiqeyRqrtW
VRhsr4St0VRvP5fg09L5vnq0qqWxEK7a3D4m4nZksZ3J2DxnHx24XscpEq/b
bDtOBQrDUKWxJDqp7w40OcA/X7i94rN2uwfjzxduv1hAWNEYRT7reQfa55gD
e4MdpYnlP1+4rZYj7r50h9gqnKxtNGOE4S1vttSCWX4B8hX4BN40Qpml2YpM
881M1vzgS5t4zlWBfIl7JJqXSFVBpEaoEekCX+5jrFsD6pkno/GFjwrNutnp
ph5mBfN1gg61LRtOvjx/7n7z8vw7/3Lifj35gT51np1/+ZV/PfGfDZ99Odz+
+uXFs/YAfv9yNBI/302+Gn7ZuAvuzof+n/507a//8sMvfxl9++XTZ53Gd8OR
M/rlh4v8z583Br98uYq3f/wmXY+fXr45vYn+/OLmpf985PsXk2UyQYv0118H
f7z57nUU9p4nq9tff33af5nfOt98Povy77+f3yxu/fQyu/r6VZ6Nfpi8vvv6
eZ4+/+rP0eDFsPX887vY/zbP3qxeNlvP2vnX0fe8rcnzcXlTdGSXN8WuquvN
DOiJ0qVNvzsmxqjWEZkGeAX0vh0+PR8ZwJu+upvc/fDV18lfzt/80hj5f/rh
XPw89v80HwO4Jjd/DIZf/tp++uuvtxc/fDf/Id68Cf6Ydn+NTiczZ/bmdNVO
v1vG53+e3X3d6H21XT+d+avhs/nol1nw5qXXvr28Xry5yv54N306e9Z5tcjf
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
vf5k3AAA

-->

</rfc>

