<?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-09" 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="2025" month="March" day="17"/>

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

    <abstract>


<t>This specification describes extensions to the SUIT manifest format.
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 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.</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>This draft makes use of terminology defined in <xref target="RFC9019"/> and <xref target="I-D.ietf-suit-manifest"/>.</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>A semantic version number for the update represented by the manifest</t>
  <t>Concise Software Identifiers (CoSWID) <xref target="RFC9393"/></t>
  <t>Text descriptions of requirements</t>
  <t>Text description of the current versions of components</t>
</list></t>

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

<t>This metadata encodes a semantic version for the component set that the manifest updates, including any dependencies. This enables version comparisons to be performed on manifests. Non-manifest images encode their versions independently of the manifest.</t>

<t>The version SHOULD be encoded as a semantic version, according to <xref target="semver"/>. There are several restrictions to these composition rules: alphanumeric pre-release indicators are not permitted. Because suit-set-version is a machine-readable parameter for determining compatibility and because <xref target="semver"/> mandates that the build-number is ignored, build numbers SHOULD NOT be included.</t>

<t>The composition of suit-set-version is the same as suit-parameter-version (<xref target="suit-parameter-version"/>).</t>

<t>If a build number is desired, it SHOULD be included via text-current-version (<xref target="text-current-version"/>).</t>

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

<t>A CoSWID can enable Software Bill of Materials use-cases. 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="RFC9393"/>. 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>

</section>
<section anchor="text-version-required"><name>suit-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><sourcecode type="CDDL"><![CDATA[
['x','y'] : {
    7 : ">=1.2.5,<2"
}
]]></sourcecode></figure>

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

<t>suit-text-current-version is used to provide human-readable version information equivalent to suit-set-version (<xref target="suit-set-version"/>). This metadata MAY have a version listed for each or any component. The Manifest Processor MUST NOT consume this version; it is for human readability only.</t>

<t>To describe a version, 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-current-version key with a free text version that is representative of the version of the component. This text SHOULD be expressive enough that a device operator can be expected to understand the version. This is a free text field and there are no specific formatting rules.</t>

<t>It is RECOMMENDED that the Manifest Author use a Semantic Version (<xref target="semver"/>) in the free-text field. Unlike suit-set-version (<xref target="suit-set-version"/>), the full semantic version specification can be used.</t>

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

<t>Several parameters are needed to define the behaviour of the commands specified in Extension Commands (<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. One version comparison can be made with each suit-parameter-version. 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>Each suit-parameter-version contains a comparison operator and a version, according to the following CDDL:</t>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_Parameter_Version_Match = [
    suit-condition-version-comparison-type:
        SUIT_Condition_Version_Comparison_Types,
    suit-condition-version-comparison-value:
        SUIT_Condition_Version_Comparison_Value
]
]]></sourcecode></figure>

<t>The comparison type can be:</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>The version comparison value is 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 an non-equal comparison 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>suit-parameter-version is OPTIONAL to implement.</t>

<section anchor="suit-parameter-version-semantic-versioning-encoding-guidelines"><name>suit-parameter-version Semantic Versioning encoding guidelines</name>

<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.3-alpha.4 = [1,2,3,-3,4].</t>
</list></t>

<t>Versions SHOULD be composed of:</t>

<t><list style="numbers">
  <t>A release version encoded as a sequence of 1 to 3 positive integers</t>
  <t>An optional pre-release indicator encoded as a negative integer, followed by zero or more positive integers</t>
</list></t>

<t>While <xref target="semver"/> allows a build number, it mandates that the build number is ignored. Because suit-parameter-version exists solely to enable the Manifest Processor to make a decision about version compatibility, build numbers SHOULD NOT be included.</t>

<t>In <xref target="semver"/>,</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>
</list></t>

<t>The pre-release indicator SHOULD NOT appear as 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>

</section>
</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='RFC9393'>
  <front>
    <title>Concise Software Identification Tags</title>
    <author fullname='H. Birkholz' initials='H.' surname='Birkholz'/>
    <author fullname='J. Fitzgerald-McKay' initials='J.' surname='Fitzgerald-McKay'/>
    <author fullname='C. Schmidt' initials='C.' surname='Schmidt'/>
    <author fullname='D. Waltermire' initials='D.' surname='Waltermire'/>
    <date month='June' 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='RFC' value='9393'/>
  <seriesInfo name='DOI' value='10.17487/RFC9393'/>
</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='24' month='February' year='2025'/>
      <abstract>
	 <t>   This specification describes the format of a manifest.  A manifest is
   a bundle of metadata about code/data obtained by a recipient (chiefly
   the firmware for an Internet of Things (IoT) device), where to find
   the code/data, the devices to which it applies, and cryptographic
   information protecting the manifest.  Software updates and Trusted
   Invocation both tend to use sequences of common operations, so the
   manifest encodes those sequences of operations, rather than declaring
   the metadata.

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

<reference anchor='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="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>

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




    </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[
$$unseverable-manifest-member-extensions //= (
    suit-current-version => \
        bstr .cbor SUIT_Condition_Version_Comparison_Value
)
$$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 =>
    bstr .cbor 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-text-component-key-extensions //= (
    suit-text-current-version => tstr)

suit-set-version = 6
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
suit-text-current-version       = 8
]]></sourcecode></figure>

</section>


  </back>

<!-- ##markdown-source:
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
rFxHTHvmNVK9Z2+Nv9eL0Tt6N33rznN5mdOr3UD/NXM1RNFvg6upQ3q/fi73
cID/05qrYUY1J6vrnXCm3zRZRxih22Xa6piyc8ZAW/VC8DoNRID0Nhftwa1O
2h3szwcdFiiPQxUyYh0PnW0Vn/9qVLun8NzNN6dgLSq4vdtYvg/1dWPsZaiv
G9V1kYZwZGsV/Qx4DqRWRhQGHB3RICsv77qgLUKm+uMffBrxK4bL/SYLZjAT
KhWMNW52X3G6K4zBRaXGIkfN60ktargZS+6RjxDvQ5LNvdZ3ex5D9YulxHVv
h3yKPkWN10XCvXXmk+2u7jSumQ36qsHNZEuNRG8Z67V31KW31yDkbnP7O51r
ZvfHercJO+5lrZnZP6tpH5Tbah7g/7PnYe4Ih3r4/I6QzPi1kd9tYn6H5dtP
/ztNm9HrKr/v7OtSgh3YoxLOr8Q1FVzeEYHQd+8OfUOswJD9Ow+Bzo+aJvBa
8kbmfECGhBvSZG9nfPyb8pX6UhPfr10ZWXNJoNcajdnuuwzFiwnt0XSP49cP
x3sev360qzl1w/CiAH5o9+286YRVQ6MjIB36l4daY1p3nu7Svyjrm7AXMBpX
bdpnOwr+zT5rH/6OV4GoKncEirgc6auh2tljALHEK/i62+NyeLPKJ/DrDndK
NKZY4PdtOwjTxnpkvz/rNZYYqqf8iZ9XGRWXuYaPT2ofEdShehzAwV8eNSAb
qn0Zh/gGL2HEAYWhkj1g0HuE3fG2k++pRwQQXn7ifzKujJFx9Qjvlf2ay1Df
/gLPN76iGZHj7wLE3rA416sb3P3uJ/0B7Ipm/dVTdsRSeEaWp+G70c/V49o/
KwF6oCV1AytU/nSI5mbRm/J9dx/dVsQWdn7cWr5VH+M7P1lX9dL6A52fdtdy
dP2B3s+ands5UNd5b/+mTGJj5r1H7RcS6u6n67qz5lGONrRrH+JoLn63xxnc
ATd9wfbSj258JyPo+PjG9yqCjk9az7ncQIHrnZ6QmtZ7NyEZtf2YBv2s9Uhq
dHPTv47itrieW22fp3TN8H8BdZsNPeV2AAA=

-->

</rfc>

