<?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-05" 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="November" day="08"/>

    <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. 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>
<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>
</list></t>

<t>Versions SHOULD be encoded according to the following rules:</t>

<t><list style="numbers">
  <t>Positive integers (and 0) represent the numeric elements of the semantic version</t>
  <t>A maximum of three positive integers (or 0s) SHOULD be used.</t>
  <t>The first element MUST be 0 or a positive integer</t>
  <t>Negative integers represent pre-release indicators.</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>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>

</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='23' month='October' 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-24'/>
   
</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:
H4sIAAAAAAAAA9092XYbuZXv9RUYuU8stUlamzdm1DOyJCc6sSyPJKcnx/Zh
wCqQqqhYxRSKkhjb+Zb5lvmyuQu2WijJ3Z2X8eluSwXg4uLi4u5A9/v9qEqr
TA3Fh3kiKyVOZC6naqbyShzdVirXaZFrMSlKcV5MqhtZKtOTPx7nlSpzVYli
Ii4u03yqxfr5h+OLDQSUTpSudCTH41JdDwV+v3OaKCniXM4AmaSUk6qfqmrS
14u06i9oVH/mRvU3n0UxfJoW5XIodJVEUTovh6IqF7ra3tx8tbkdAa4SZlXx
okyrZXRTlFfTsljMGZPoSi3hUzJ0a+gf4qxRpCuZJyOZFTlgslQ6mqfDSIhy
EqtEV8vMfBWiKuLgxzRPADH7QRdlVaqJdr8vZ7VfqzKNXee4mOGiXGuaZ2nu
p1G3VT9LddUHIOMig2794scn0AL0msn5HMge4DHK1LXCTrtRJBfVZVEC9n1o
wz9pDg2vB+KkKGVuvjHJX5cqT2ReaynKKeziP2QFuzMU++VMvE1naaUS065m
Ms3c0AENHeCu/ecUWwawrsbUfxqIC3kll3Ima7P/SeXNhvrk50cHpyfi4HTQ
E28vDgd1BK5UPqjM6Ob8UV6UMwByrXATj/uHA2YrGc/6caFv0qT+HdltZngX
W87eHLza3Hplfnz5atf++GpnZxd/1Gp2rZDG8MecpbVzQCyv0lj8WZXI2rBD
YnuwOdhco25uW+APMvZQbG9u7fQ3n/e3XjIcWU4VsMdlVc318OlTnmMAJAE+
zyfdK0LMXWOR92dForJhFPX7fSHHwHEyriI4pFrouYrTSRpTP5EoHZfpGE60
8ie+KkR1qfjMWnIIhh0lagLsmcCOii9fuin37Rts9KXSKoQps6y4EcBjfJwN
d/bMryJJ8VSMFxXIFfgnUddprEQxV6XET4DRrADxMy8Bea2yJRybvCqLLEJE
3WBcEZxfZLcKJuQlgnRaGKkFYBiyNhhGNQx1ARMU12mihBQzFV/CgvQMRzFp
8auXXXqpKzUD8JGTjscoBYC4qiQ03PfXaZaJ0wlIPpA2KUwkgr2C/SkWFQyI
GM3E4Djg3ZulSZKpKHokUFiVRbKIcVQUvVkA0AAfWKe2Ey4CMb3IZQWLTFTS
Q6rlKvZzaFGqvy/SEn6Q0Mj0RpzGqrpRcC6RvGaLeMfW9QatzU/cq9G/J+ZF
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

-->

</rfc>

