<?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-update-management-04" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="SUIT Update Management Extensions">Update Management Extensions for Software Updates for Internet of Things (SUIT) Manifests</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="October" day="23"/>

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

    <abstract>


<t>This specification describes extensions to the SUIT manifest format
defined in <xref target="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>

  <middle>


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

<t>Full management of software updates for unattended, connected devices requires a cooperation between the update author(s) and management, distribution, policy enforcement, and auditing systems. This specification provides the extensions to the SUIT manifest (<xref target="I-D.ietf-suit-manifest"/>) that enable an author to coordinate with these other systems. These extensions enable authors to instruct devices to examine update priority, local update authorisation, update lifetime, and system properties. They also enable devices to report and distributors to collect Software Bill of Materials information.</t>

<t>Extensions in this specification are OPTIONAL to implement and OPTIONAL to include in manifests unless otherwise designated.</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 proposed standard. While this software update mechanism is designed with the limitations and requirements of IoT devices in mind, there is no restriction preventing its use outside of IoT devices or for non-software payloads.</t>
</list></t>

</section>
<section anchor="extension-metadata"><name>Extension Metadata</name>

<t>Some additional metadata makes management of SUIT updates easier:</t>

<t><list style="symbols">
  <t>Concise Software Identifiers (CoSWID), Concise Module Identifiers (CoMID), Concise Reference Integrity Manifest (CoRIM)</t>
  <t>Text descriptions of requirements</t>
</list></t>

<section anchor="manifest-digest-coswid"><name>suit-coswid</name>

<t>a CoSWID can enable Software Bill-of-Materials use-cases. A CoMID can enable monitoring of expected hardware. A CoRIM (which may contain both CoSWID and CoMID) can enable both of these use-cases, but can also act as the transport for expected values to an attestation Verifier (see <xref target="RFC9334"/>). Tightly coupling update and attestation ensures that verification infrastructure always knows what software to expect on each device.</t>

<t>suit-coswid is a member of the suit-manifest. It contains a Concise Software Identifier (CoSWID) as defined in <xref target="I-D.ietf-sacm-coswid"/>. This element SHOULD be made severable so that it can be discarded by the Recipient or an intermediary if it is not required by the Recipient.</t>

<t>suit-coswid typically requires no processing by the Recipient. However all Recipients MUST NOT fail if a suit-coswid is present.</t>

<t>suit-coswid is RECOMMENDED to implement and RECOMMENDED to include in manifests.</t>

<t>RFC EDITOR NOTE: Remove following 2 notes.</t>

<t><list style="symbols">
  <t>NOTE: CoRIM comprises a list of CoSWIDs and a list of CoMIDs, so it may be preferable to a CoSWID.</t>
  <t>NOTE: CoMID may be a preferable alternative to Vendor ID/Class ID, however it consumes more bandwidth, so a UUID based on CoMID may be appropriate.</t>
</list></t>

</section>
<section anchor="text-version-required"><name>text-version-required</name>

<t>suit-text-version-required is used to represent a version-based dependency on suit-parameter-version as described in <xref target="suit-parameter-version"/> and <xref target="suit-condition-version"/>. To describe a version dependency, a Manifest Author SHOULD populate the suit-text map with a SUIT_Component_Identifier key for the dependency component, and place in the corresponding map a suit-text-version-required key with a free text expression that is representative of the version constraints placed on the dependency. This text SHOULD be expressive enough that a device operator can be expected to understand the dependency. This is a free text field and there are no specific formatting rules.</t>

<t>By way of example only, to express a dependency on a component "['x', 'y']", where the version should be any v1.x later than v1.2.5, but not v2.0 or above, the author would add the following structure to the suit-text element. Note that this text is in cbor-diag notation.</t>

<figure><artwork><![CDATA[
[h'78',h'79'] : {
    7 : ">=1.2.5,<2"
}
]]></artwork></figure>

</section>
</section>
<section anchor="extension-parameters"><name>Extension Parameters</name>

<t>Several parameters are needed to define the behaviour of the commands specified in <xref target="extension-commands"/>. These parameters follow the same considerations as defined in Section 8.4.8 of <xref target="I-D.ietf-suit-manifest"/>.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>CDDL Structure</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>Use Before</c>
      <c>suit-parameter-use-before</c>
      <c><xref target="suit-parameter-use-before"/></c>
      <c>Minimum Battery</c>
      <c>suit-parameter-minimum-battery</c>
      <c><xref target="suit-parameter-minimum-battery"/></c>
      <c>Update Priority</c>
      <c>suit-parameter-update-priority</c>
      <c><xref target="suit-parameter-update-priority"/></c>
      <c>Version</c>
      <c>suit-parameter-version</c>
      <c><xref target="suit-parameter-version"/></c>
      <c>Wait Info</c>
      <c>suit-parameter-wait-info</c>
      <c><xref target="suit-parameter-wait-info"/></c>
      <c>Component Metadata</c>
      <c>suit-parameter-component-metadata</c>
      <c><xref target="suit-parameter-component-metadata"/></c>
</texttable>

<section anchor="suit-parameter-use-before"><name>suit-parameter-use-before</name>

<t>An expiry date for the use of the manifest encoded as the positive integer number of seconds since 1970-01-01. Implementations that use this parameter MUST use a 64-bit internal representation of the integer. Used with <xref target="suit-condition-use-before"/>.</t>

</section>
<section anchor="suit-parameter-minimum-battery"><name>suit-parameter-minimum-battery</name>

<t>This parameter sets the minimum battery level in mWh. This parameter is encoded as a positive integer. Used with suit-condition-minimum-battery (<xref target="suit-condition-minimum-battery"/>).</t>

</section>
<section anchor="suit-parameter-update-priority"><name>suit-parameter-update-priority</name>

<t>This parameter sets the priority of the update. This parameter is encoded as an integer. It is used along with suit-condition-update-authorized (<xref target="suit-condition-update-authorized"/>) to ask an application for permission to initiate an update. This does not constitute a privilege inversion because an explicit request for authorization has been provided by the Update Authority in the form of the suit-condition-update-authorized command.</t>

<t>Applications MAY define their own meanings for the update priority. For example, critical reliability and vulnerability fixes might be given negative numbers, while bug fixes might be given small positive numbers, and feature additions might be given larger positive numbers, which allows an application to make an informed decision about whether and when to allow an update to proceed.</t>

</section>
<section anchor="suit-parameter-version"><name>suit-parameter-version</name>

<t>Indicates allowable versions for the specified component. Allowable versions can be specified, either with a list or with range matching. This parameter is compared with version asserted by the current component when suit-condition-version (<xref target="suit-condition-version"/>) is invoked. The current component may assert the current version in many ways, including storage in a parameter storage database, in a metadata object, or in a known location within the component itself.</t>

<t>The component version can be compared as:</t>

<t><list style="symbols">
  <t>Greater.</t>
  <t>Greater or Equal.</t>
  <t>Equal.</t>
  <t>Lesser or Equal.</t>
  <t>Lesser.</t>
</list></t>

<t>Versions are encoded as a CBOR list of integers. Comparisons are done on each integer in sequence. Comparison stops after all integers in the list defined by the manifest have been consumed OR after a non-equal match has occurred. For example, if the manifest defines a comparison, "Equal [1]", then this will match all version sequences starting with 1. If a manifest defines both "Greater or Equal [1,0]" and "Lesser [1,10]", then it will match versions 1.0.x up to, but not including 1.10.</t>

<t>The encoded versions SHOULD be semantic versions (See <xref target="semver"/>). For example,</t>

<t><list style="symbols">
  <t>1.2.3 = [1,2,3].</t>
  <t>1.2-rc.3 = [1,2,-1,3].</t>
  <t>1.2-beta = [1,2,-2].</t>
  <t>1.2-alpha = [1,2,-3].</t>
  <t>1.2.4-alpha.1 = [1,2,4,-3,1].</t>
</list></t>

<t>Versions SHOULD be encoded as follows:</t>

<t><list style="numbers">
  <t>The first integer represents the major number. This indicates breaking changes to the component.</t>
  <t>The second integer represents the minor number. This is typically reserved for new features or large, non-breaking changes.</t>
  <t>The third integer is the patch version. This is typically reserved for bug fixes.</t>
  <t>The fourth integer is the build number.</t>
</list></t>

<t>According to <xref target="semver"/>, the build number should be ignored, however this complicates the processing model.</t>

<t>A pre-release indicator may be inserted anywhere in the list, except at element 0. The pre-release indicator is encoded as:</t>

<t><list style="symbols">
  <t>-1: Release Candidate</t>
  <t>-2: Beta</t>
  <t>-3: Alpha</t>
</list></t>

<t>This allows these releases to compare correctly with final releases. For example, Version 2.0, RC1 should be lower than Version 2.0.0 and higher than any Version 1.x. By encoding RC as -1, this works correctly: [2,0,-1,1] compares as lower than [2,0,0]. Similarly, beta (-2) is lower than RC and alpha (-3) is lower than RC.</t>

<t>suit-condition-version is OPTIONAL to implement.</t>

</section>
<section anchor="suit-parameter-wait-info"><name>suit-parameter-wait-info</name>

<t>suit-directive-wait (<xref target="suit-directive-wait"/>) directs the manifest processor to pause until a specified event occurs. The suit-parameter-wait-info encodes the parameters needed for the directive.</t>

<t>The exact implementation of the pause is implementation-defined. For example, this could be done by blocking on a semaphore, registering an event handler and suspending the manifest processor, polling for a notification, or aborting the update entirely, then restarting when a notification is received.</t>

<t>suit-parameter-wait-info is encoded as a map of wait events. When ALL wait events are satisfied, the Manifest Processor continues. The wait events currently defined are described in the following table.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>suit-wait-event-authorization</c>
      <c>int</c>
      <c>Same as suit-parameter-update-priority</c>
      <c>suit-wait-event-power</c>
      <c>int</c>
      <c>Wait until power state</c>
      <c>suit-wait-event-network</c>
      <c>int</c>
      <c>Wait until network state</c>
      <c>suit-wait-event-other-device-version</c>
      <c>See below</c>
      <c>Wait for other device to match version</c>
      <c>suit-wait-event-time</c>
      <c>uint</c>
      <c>Wait until time (seconds since 1970-01-01)</c>
      <c>suit-wait-event-time-of-day</c>
      <c>uint</c>
      <c>Wait until seconds since 00:00:00 Local Time</c>
      <c>suit-wait-event-time-of-day-utc</c>
      <c>uint</c>
      <c>Wait until seconds since 00:00:00 UTC</c>
      <c>suit-wait-event-day-of-week</c>
      <c>uint</c>
      <c>Wait until days since Sunday Local Time</c>
      <c>suit-wait-event-day-of-week-utc</c>
      <c>uint</c>
      <c>Wait until days since Sunday UTC</c>
</texttable>

<t>suit-wait-event-other-device-version reuses the encoding of suit-parameter-version-match. It is encoded as a sequence that contains an implementation-defined bstr identifier for the other device, and a list of one or more SUIT_Parameter_Version_Match.</t>

</section>
<section anchor="suit-parameter-component-metadata"><name>suit-parameter-component-metadata</name>

<t>In some instances, a system may need to know the file metadata for a component. This metadata can include:</t>

<t><list style="symbols">
  <t>creator</t>
  <t>creation time</t>
  <t>modification time</t>
  <t>default permissions (rwx)</t>
  <t>a map of user/permission pairs</t>
  <t>a map of role/permission pairs</t>
  <t>a map of group/permission pairs</t>
  <t>file type</t>
</list></t>

<t>Component metadata is applied at time of fetch, copy, or write; see <xref target="I-D.ietf-suit-manifest"/>, sections 8.4.10.4, 8.4.10.5, 8.4.10.6. Therefore, the component metadata parameter must be set in advance of the component being fetched, copied into, or written.</t>

<section anchor="suit-meta-creator"><name>Creator</name>

<t>Sometimes, management of file systems requires that the creator of each file is correctly recorded. Because the default creator of files will be the update agent, this can obscure the actual creator of each file. The Creator metadata element allows overriding the default behaviour and setting the correct creator.</t>

<t>The creator is defined as follows:</t>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_meta_actor_id = UUID_Tagged / bstr / str / int
UUID_Tagged = #6.37(bstr)
]]></sourcecode></figure>

<t>The actor ID can be whatever is most appropriate for any given system. For example, the actor ID might be a string (e.g., username), integer (e.g., POSIX userid), or UUID (e.g., TEEP TA UUID).</t>

</section>
<section anchor="creation-modification-time"><name>Creation &amp; Modification Time</name>

<t>The creation and modification times are defined by CBOR time types. These are defined in <xref target="RFC8949"/>, Section 3.4.2. The CBOR tag is REQUIRED when either creation or modification time are provided.</t>

<figure><sourcecode type="CDDL"><![CDATA[
suit-meta-modification-time => #6.1(uint)
suit-meta-creation-time => #6.1(uint)
]]></sourcecode></figure>

</section>
<section anchor="component-default-permissions"><name>Component Default Permissions</name>

<t>Typical permissions management systems require read, write, and execute permissions that are applied to all users who do not have their own explicit permissions. These are the default permissions for the current component. Default permissions are described by the following CDDL:</t>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_meta_permissions = uint .bits SUIT_meta_permission_bits
SUIT_meta_permission_bits = &(
    r: 2, w: 1, x: 0,
    * $$SUIT_meta_permission_bits_extensions
)
]]></sourcecode></figure>

</section>
<section anchor="user-role-group-permissions"><name>User, Role, Group permissions</name>

<t>Many filesystems have users and groups. Additionally some have roles. Actors that have these associations can have specific permissions associated with them for each component. Each of these sets of permissions is defined the same way: with a map of actor identifiers to permissions.</t>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_meta_permission_map = {
    + SUIT_meta_actor_id => SUIT_meta_permissions
}
]]></sourcecode></figure>

<t>The SUIT_meta_actor_id is the same as defined for Creator, <xref target="suit-meta-creator"/>.</t>

</section>
<section anchor="file-type"><name>File Type</name>

<t>File Type typically identifies whether a file is a directory, regular file, or symbolic link. If not specified, File Type defaults to regular file.</t>

<t>This enables specific management operations for SUIT command sequences:</t>

<t><list style="symbols">
  <t>To create a directory  <list style="symbols">
      <t>Set the Component Index to the Component Identifier of the directory to be created</t>
      <t>Set the Component metadata, including the file type for directory</t>
      <t>Set suit-parameter-content to an empty bstr</t>
      <t>Invoke suit-directive-write</t>
    </list></t>
  <t>To create a symbolic link  <list style="symbols">
      <t>Set the Component Index to the Component Identifier of the link to be created</t>
      <t>Set the Component metadata, including the file type for symbolic link</t>
      <t>Set suit-parameter-content to the link target</t>
      <t>Invoke suit-directive-write</t>
    </list></t>
</list></t>

<t>For example, the following Payload Fetch &amp; Install sequences will create a new /usr/local/bin directory, download https://cdn.example/example3.bin into a new file: /usr/local/bin/example3, then create a symlink at /usr/bin/example that points to /usr/local/bin/example3.</t>

<t><list style="symbols">
  <t>Common has components for:  <list style="symbols">
      <t>/usr/bin/example</t>
      <t>/usr/local/bin</t>
      <t>/usr/local/bin/example3</t>
    </list></t>
  <t>Payload fetch:  <list style="symbols">
      <t>set component index = 1</t>
      <t>set parameters:      <list style="symbols">
          <t>content = h''</t>
          <t>metadata = {file-type: directory}</t>
        </list></t>
      <t>write</t>
      <t>set component index = 2</t>
      <t>set URI = "https://cdn.example/example3.bin"</t>
      <t>fetch</t>
      <t>condition image digest</t>
    </list></t>
  <t>Install:  <list style="symbols">
      <t>set component index = 0</t>
      <t>set parameters:      <list style="symbols">
          <t>content = "/usr/local/bin/example3"</t>
          <t>metadata = {file-type: symlink}</t>
        </list></t>
      <t>write</t>
    </list></t>
</list></t>

</section>
</section>
</section>
<section anchor="extension-commands"><name>Extension Commands</name>

<t>The following table defines the semantics of the commands defined in this specification in the same way as in the Abstract Machine Description, Section 6.4, of <xref target="I-D.ietf-suit-manifest"/>.</t>

<texttable>
      <ttcol align='left'>Command Name</ttcol>
      <ttcol align='left'>CDDL Identifier</ttcol>
      <ttcol align='left'>Semantic of the Operation</ttcol>
      <c>Use Before</c>
      <c>suit-condition-use-before</c>
      <c>assert(now() &lt; current.params[use-before])</c>
      <c>Check Image Not Match</c>
      <c>suit-condition-image-not-match</c>
      <c>assert(not binary-match(digest(current), current.params[digest]))</c>
      <c>Check Minimum Battery</c>
      <c>suit-condition-minimum-battery</c>
      <c>assert(battery &gt;= current.params[minimum-battery])</c>
      <c>Check Update Authorized</c>
      <c>suit-condition-update-authorized</c>
      <c>assert( isAuthorized( current.params[priority]))</c>
      <c>Check Version</c>
      <c>suit-condition-version</c>
      <c>assert(version_check(current, current.params[version]))</c>
      <c>Wait For Event</c>
      <c>suit-directive-wait</c>
      <c>until event(arg), wait</c>
      <c>Override Multiple</c>
      <c>suit-directive-override-multiple</c>
      <c>components[i].params[k] := v for-each k,v in d for-each i,d in arg</c>
      <c>Copy Params</c>
      <c>suit-directive-copy-params</c>
      <c>current.params[k] = components[i].params[k] for k in l for i,l in arg</c>
</texttable>

<section anchor="suit-condition-use-before"><name>suit-condition-use-before</name>

<t>Verify that the current time is BEFORE the specified time. suit-condition-use-before is used to specify the last time at which an update should be installed. The recipient evaluates the current time against the suit-parameter-use-before parameter (<xref target="suit-parameter-use-before"/>), which must have already been set as a parameter, encoded as seconds after 1970-01-01 00:00:00 UTC. Timestamp conditions MUST be evaluated in 64 bits, regardless of encoded CBOR size. suit-condition-use-before is OPTIONAL to implement.</t>

</section>
<section anchor="suit-condition-image-not-match"><name>suit-condition-image-not-match</name>

<t>Verify that the current component does not match the suit-parameter-image-digest (Section 8.4.8.6 of <xref target="I-D.ietf-suit-manifest"/>). If no digest is specified, the condition fails. suit-condition-image-not-match is OPTIONAL to implement.</t>

</section>
<section anchor="suit-condition-minimum-battery"><name>suit-condition-minimum-battery</name>

<t>suit-condition-minimum-battery provides a mechanism to test a Recipient's battery level before installing an update. This condition is primarily for use in primary-cell applications, where the battery is only ever discharged. For batteries that are charged, suit-directive-wait is more appropriate, since it defines a "wait" until the battery level is sufficient to install the update. suit-condition-minimum-battery is specified in mWh. suit-condition-minimum-battery is OPTIONAL to implement. suit-condition-minimum-battery consumes suit-parameter-minimum-battery (<xref target="suit-parameter-minimum-battery"/>).</t>

</section>
<section anchor="suit-condition-update-authorized"><name>suit-condition-update-authorized</name>

<t>Request authorization from the application and fail if not authorized. This can allow a user to decline an update. suit-parameter-update-priority (<xref target="suit-parameter-update-priority"/>) provides an integer priority level that the application can use to determine whether or not to authorize the update. Priorities are application defined. suit-condition-update-authorized is OPTIONAL to implement.</t>

</section>
<section anchor="suit-condition-version"><name>suit-condition-version</name>

<t>suit-condition-version allows comparing versions of firmware. Verifying image digests is preferred to version checks because digests are more precise. suit-condition-version examines a component's version against the version info specified in suit-parameter-version (<xref target="suit-parameter-version"/>).</t>

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

<t>suit-directive-wait directs the manifest processor to pause until a specified event occurs. Some possible events include:</t>

<t><list style="numbers">
  <t>Authorization</t>
  <t>External power</t>
  <t>Network availability</t>
  <t>Other device firmware version</t>
  <t>Time</t>
  <t>Time of day</t>
  <t>Day of week</t>
</list></t>

</section>
<section anchor="suit-directive-override-multiple"><name>suit-directive-override-multiple</name>

<t>This directive enables setting parameters for multiple components at the same time. This allows a small reduction in encoding overhead:</t>

<t><list style="symbols">
  <t>without override-multiple, the encoding for each component consists of:  <list style="symbols">
      <t>set-component-index (2 bytes)</t>
      <t>override-parameters (1 byte + parameter map)</t>
    </list></t>
  <t>with override-multiple, the encoding for each component consists of:  <list style="symbols">
      <t>the component index key (1 byte)</t>
      <t>the parameter map</t>
    </list></t>
</list></t>

<t>Override-multiple requires the command (1-2 bytes) and one additional map to hold the parameter sets (1 byte). For one component, there is no savings. For multiple components, there is an encoding savings of 2 bytes per component.</t>

<t>Proper structuring of code should ensure that override-multiple follows a code-path nearly identical to set-component-index + override-parameters.</t>

<t>This command is purely an encoding alias for set-component-index and override-parameters. The component index is set to the last component listed in the override-multiple argument when override-multiple completes.</t>

<t>The following CDDL defines the argument for suit-directive-override-multiple:</t>

<t><spanx style="verb">CDDL
SUIT_Override_Mult_Arg = {
    uint =&gt; {+ $$SUIT_Parameters}
}
</spanx></t>

</section>
<section anchor="suit-directive-copy-params"><name>suit-directive-copy-params</name>

<t>suit-directive-copy-params enables a manifest author to specify one or more components to copy parameters from, and a list of parameters to copy from each specified source component.</t>

<t>The behaviour is exactly the same as override parameters, but with parameter values defined in existing components. Parameters are only copied between identical keys (no copying from URI to digest, for example).</t>

<t>For each entry in the map, the manifest processor sets the source component to be the component identified by the index contained in the map key. For each parameter identified in the copy list, the manifest processor copies the parameter from the source component to the current component.</t>

<t>The following CDDL defines the argument for suit-directive-copy-params:</t>

<t><spanx style="verb">CDDL
SUIT_Directive_Copy_Params = {
    uint =&gt; [+ int]
}
</spanx></t>

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

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

<t><list style="symbols">
  <t>allocate key 14 in the SUIT Envelope registry for suit-coswid</t>
  <t>allocate key 14 in the SUIT Manifest registry for suit-coswid</t>
  <t>allocate key 7 in the SUIT Component Text registry for suit-text-version-required</t>
  <t>allocate the commands and parameters as shown in the following tables</t>
</list></t>

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

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>4</c>
      <c>Use Before</c>
      <c><xref target="suit-condition-use-before"/></c>
      <c>25</c>
      <c>Image Not Match</c>
      <c><xref target="suit-condition-image-not-match"/></c>
      <c>26</c>
      <c>Minimum Battery</c>
      <c><xref target="suit-condition-minimum-battery"/></c>
      <c>27</c>
      <c>Update Authorized</c>
      <c><xref target="suit-condition-update-authorized"/></c>
      <c>28</c>
      <c>Version</c>
      <c><xref target="suit-condition-version"/></c>
      <c>29</c>
      <c>Wait For Event</c>
      <c><xref target="suit-directive-wait"/></c>
      <c>34</c>
      <c>Override Multiple</c>
      <c><xref target="suit-directive-override-multiple"/></c>
      <c>35</c>
      <c>Copy Params</c>
      <c><xref target="suit-directive-copy-params"/></c>
</texttable>

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

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>4</c>
      <c>Use Before</c>
      <c><xref target="suit-parameter-use-before"/></c>
      <c>26</c>
      <c>Minimum Battery</c>
      <c><xref target="suit-parameter-minimum-battery"/></c>
      <c>27</c>
      <c>Update Priority</c>
      <c><xref target="suit-parameter-update-priority"/></c>
      <c>28</c>
      <c>Version</c>
      <c><xref target="suit-parameter-version"/></c>
      <c>29</c>
      <c>Wait Info</c>
      <c><xref target="suit-parameter-wait-info"/></c>
</texttable>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>This document extends the SUIT manifest specification. A detailed security treatment can be found in the architecture <xref target="RFC9019"/> and in the information model <xref target="I-D.ietf-suit-information-model"/> documents.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>




<reference anchor='I-D.ietf-sacm-coswid'>
   <front>
      <title>Concise Software Identification Tags</title>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Jessica Fitzgerald-McKay' initials='J.' surname='Fitzgerald-McKay'>
         <organization>National Security Agency</organization>
      </author>
      <author fullname='Charles Schmidt' initials='C.' surname='Schmidt'>
         <organization>The MITRE Corporation</organization>
      </author>
      <author fullname='David Waltermire' initials='D.' surname='Waltermire'>
         <organization>National Institute of Standards and Technology</organization>
      </author>
      <date day='24' month='February' year='2023'/>
      <abstract>
	 <t>ISO/IEC 19770-2:2015 Software Identification (SWID) tags provide an extensible XML-based structure to identify and describe individual software components, patches, and installation bundles.  SWID tag representations can be too large for devices with network and storage constraints.  This document defines a concise representation of SWID tags: Concise SWID (CoSWID) tags.  CoSWID supports a set of semantics and features that are similar to those for SWID tags, as well as new semantics that allow CoSWIDs to describe additional types of information, all in a more memory-efficient format.
	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-sacm-coswid-24'/>
   
</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='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='RFC8949'>
  <front>
    <title>Concise Binary Object Representation (CBOR)</title>
    <author fullname='C. Bormann' initials='C.' surname='Bormann'/>
    <author fullname='P. Hoffman' initials='P.' surname='Hoffman'/>
    <date month='December' year='2020'/>
    <abstract>
      <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
      <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='94'/>
  <seriesInfo name='RFC' value='8949'/>
  <seriesInfo name='DOI' value='10.17487/RFC8949'/>
</reference>

<reference anchor='RFC9334'>
  <front>
    <title>Remote ATtestation procedureS (RATS) Architecture</title>
    <author fullname='H. Birkholz' initials='H.' surname='Birkholz'/>
    <author fullname='D. Thaler' initials='D.' surname='Thaler'/>
    <author fullname='M. Richardson' initials='M.' surname='Richardson'/>
    <author fullname='N. Smith' initials='N.' surname='Smith'/>
    <author fullname='W. Pan' initials='W.' surname='Pan'/>
    <date month='January' year='2023'/>
    <abstract>
      <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='9334'/>
  <seriesInfo name='DOI' value='10.17487/RFC9334'/>
</reference>


<reference anchor="semver" target="https://semver.org">
  <front>
    <title>Semantic Versioning 2.0.0</title>
    <author >
      <organization></organization>
    </author>
    <date year="2013" month="June" day="18"/>
  </front>
</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-information-model'>
   <front>
      <title>A Manifest Information Model for Firmware Updates in Internet of Things (IoT) Devices</title>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <date day='8' month='July' year='2021'/>
      <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.

 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='Internet-Draft' value='draft-ietf-suit-information-model-13'/>
   
</reference>




    </references>


<section anchor="full-cddl"><name>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_severable-members-extensions //= (
    suit-coswid => bstr)
;    suit-coswid => bstr .cbor concise-swid-tag)

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

SUIT_Condition //= (
    suit-condition-image-not-match,   SUIT_Rep_Policy)
SUIT_Condition //= (
    suit-condition-use-before,        SUIT_Rep_Policy)
SUIT_Condition //= (
    suit-condition-minimum-battery,   SUIT_Rep_Policy)
SUIT_Condition //= (
    suit-condition-update-authorized, SUIT_Rep_Policy)
SUIT_Condition //= (
    suit-condition-version,           SUIT_Rep_Policy)

SUIT_Directive //= (
    suit-directive-wait,              SUIT_Rep_Policy)

SUIT_Directive //= (
    suit-directive-override-multiple, SUIT_Override_Mult_Arg)
SUIT_Directive //=(
    suit-directive-copy-params,       SUIT_Directive_Copy_Params)


SUIT_Override_Mult_Arg = {
    + uint => {+ $$SUIT_Parameters}
}
SUIT_Directive_Copy_Params = {
    + uint => [+ int]
}

SUIT_Wait_Event = { + SUIT_Wait_Events }

SUIT_Wait_Events //= (suit-wait-event-authorization => int)
SUIT_Wait_Events //= (suit-wait-event-power => int)
SUIT_Wait_Events //= (suit-wait-event-network => int)
SUIT_Wait_Events //= (suit-wait-event-other-device-version
    => SUIT_Wait_Event_Argument_Other_Device_Version)
SUIT_Wait_Events //= (suit-wait-event-time => uint); Timestamp
SUIT_Wait_Events //= (suit-wait-event-time-of-day
    => uint); Time of Day (seconds since 00:00:00)
SUIT_Wait_Events //= (suit-wait-event-day-of-week
    => uint); Days since Sunday

SUIT_Wait_Event_Argument_Other_Device_Version = [
    other-device: bstr,
    other-device-version: [ + SUIT_Parameter_Version_Match ]
]

SUIT_Parameters //= (suit-parameter-use-before => uint)
SUIT_Parameters //= (suit-parameter-minimum-battery => uint)
SUIT_Parameters //= (suit-parameter-update-priority => int)
SUIT_Parameters //= (suit-parameter-version =>
    SUIT_Parameter_Version_Match)
SUIT_Parameters //= (suit-parameter-wait-info =>
    bstr .cbor SUIT_Wait_Event)
SUIT_Parameters //= (suit-parameter-component-metadata =>
    bstr .cbor SUIT_Component_Metadata)

SUIT_Parameter_Version_Match = [
    suit-condition-version-comparison-type:
        SUIT_Condition_Version_Comparison_Types,
    suit-condition-version-comparison-value:
        SUIT_Condition_Version_Comparison_Value
]
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-greater
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-greater-equal
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-equal
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-lesser-equal
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-lesser

suit-condition-version-comparison-greater = 1
suit-condition-version-comparison-greater-equal = 2
suit-condition-version-comparison-equal = 3
suit-condition-version-comparison-lesser-equal = 4
suit-condition-version-comparison-lesser = 5

SUIT_Condition_Version_Comparison_Value = [+int]


SUIT_Component_Metadata = {
    ? suit-meta-default-permissions => SUIT_meta_permissions,
    ? suit-meta-user-permissions => SUIT_meta_permission_map,
    ? suit-meta-group-permissions => SUIT_meta_permission_map,
    ? suit-meta-role-permissions => SUIT_meta_permission_map,
    ? suit-meta-file-type => SUIT_Filetype,
    ? suit-meta-modification-time => CBOR_Datetime,
    ? suit-meta-creation-time => CBOR_Datetime,
    ? suit-meta-creator => SUIT_meta_actor_id,
    * $$SUIT_Component_Metadata_Extensions
}

SUIT_meta_permissions = uint .bits SUIT_meta_permission_bits
SUIT_meta_permission_bits = &(
    write_attr_ex: 13,
    read_attr_ex: 12, 
    sync: 11,
    delete: 10,
    recurse_delete: 9,
    write_attr: 8,
    change_owner: 7,
    change_perm: 6,
    read_perm: 5,
    read_attr: 4,
    creatdir_append: 3,
    list_read: 2,
    create_write: 1,
    traverse_exec: 0,
    * $$SUIT_meta_permission_bits_extensions
)

SUIT_meta_permission_map = {
    + SUIT_meta_actor_id => SUIT_meta_permissions
}

SUIT_meta_actor_id = UUID_Tagged / bstr / str / int
UUID_Tagged = #6.37(bstr)



$$suit-text-component-key-extensions //= (
    suit-text-version-required => tstr)

suit-coswid = 14
suit-condition-use-before        = 4
suit-condition-image-not-match          = 25
suit-condition-minimum-battery          = 26
suit-condition-update-authorized        = 27
suit-condition-version                  = 28

suit-directive-wait                     = 29
suit-directive-override-multiple        = 34
suit-directive-copy-params              = 35

suit-wait-event-authorization        = 1
suit-wait-event-power                = 2
suit-wait-event-network              = 3
suit-wait-event-other-device-version = 4
suit-wait-event-time                 = 5
suit-wait-event-time-of-day          = 6
suit-wait-event-day-of-week          = 7

suit-parameter-use-before        = 4
suit-parameter-minimum-battery   = 26
suit-parameter-update-priority   = 27
suit-parameter-version           = 28
suit-parameter-wait-info         = 29

suit-text-version-required      = 7
]]></sourcecode></figure>

</section>


  </back>

<!-- ##markdown-source:
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
ut0iXqP7fxTrFtMlbwAA

-->

</rfc>

