<?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-02" 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>

    <date year="2023" month="April" day="27"/>

    <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 IoT devices. These
extensions also provide a mechanism to inform a management system of
Software Identifier and Software Bill Of Materials information about an
updated device.</t>



    </abstract>



  </front>

  <middle>


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

<t>Full management of software updates for unattended, connected devices, such as Internet of Things 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 implment 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 standard.</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>CoSWID, CoMID, 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. 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>NOTE: CoRIM comprises a list of CoSWID and a list of CoMID, 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>

</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 &amp; vulnerability fixes MAY be given negative numbers, while bug fixes MAY be given small positive numbers, and feature additions MAY be given larger positive numbers, which allows an application to make an informed decision about whether and when to allow an update to proceed.</t>

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

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

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

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

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

<t>While the exact encoding of versions is application-defined, semantic versions map conveniently. For example,</t>

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

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

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

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

<t>Where Alpha (-3), Beta (-2), and Release Candidate (-1) are used, they are inserted as a negative number between Minor and Patch numbers. 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</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</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>
</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 similar set of
   semantics and features as 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'>
         <organization>Arm Limited</organization>
      </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='27' month='February' 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 that 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-22'/>
   
</reference>



<reference anchor='RFC9019'>
<front>
<title>A Firmware Update Architecture for Internet of Things</title>
<author fullname='B. Moran' initials='B.' surname='Moran'><organization/></author>
<author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'><organization/></author>
<author fullname='D. Brown' initials='D.' surname='Brown'><organization/></author>
<author fullname='M. Meriac' initials='M.' surname='Meriac'><organization/></author>
<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'><organization/></author>
<author fullname='P. Hoffman' initials='P.' surname='Hoffman'><organization/></author>
<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='RFC2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author fullname='S. Bradner' initials='S.' surname='Bradner'><organization/></author>
<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'><organization/></author>
<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>A. Full CDDL</name>

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

<figure><sourcecode type="CDDL"><![CDATA[
$$SUIT_severable-members-extensions //= (
    suit-coswid => bstr)
;    suit-coswid => bstr .cbor concise-software-identity)

$$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 => uint)
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,
    createfile_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-wait-event-authorization        = 1
suit-wait-event-power                = 2
suit-wait-event-network              = 3
suit-wait-event-other-device-version = 4
suit-wait-event-time                 = 5
suit-wait-event-time-of-day          = 6
suit-wait-event-day-of-week          = 7

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

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

</section>


  </back>

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

-->

</rfc>

