<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.12 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc rfcedstyle="yes"?>
<?rfc toc="yes"?>
<?rfc tocindent="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="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-01" category="std">

  <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="2022" month="October" day="24"/>

    <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>
</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>
<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='20' month='July' year='2022'/>
      <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-22'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-sacm-coswid-22.txt' type='TXT'/>
</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='7' month='October' year='2022'/>
      <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-20'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-manifest-20.txt' type='TXT'/>
</reference>



<reference anchor='RFC9019' target='https://www.rfc-editor.org/info/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='RFC2119' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-information-model-13.txt' type='TXT'/>
</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 .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_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-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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
qwdkL8TIMxrE6PW6RcD0jwYm/5TPZVaRkj43Vg1TEWe2nmrRnWnl7famHOyF
jbbuuda02nzdGtdn83Wr+jo3mEIA04JAd8CK+5wTX+cm8eXaI+67IVf4AJxu
YOu/Qt3sK5bbLhqHZgTJJtna3T2uVHdfHKPOmNYmR52umjbI26kErvrAIGO6
77NeHnSeu/vYFx8cJ67pShEfk48WkyiKDGfrLaC6U91rXbv88VWL29WFr1rs
cs7Pfkq85lhDhvsBDE2CFmTbKobL3GoTtUV2d5v9yn0Y3gsY1qsFf0VYpP68
lfBAwysP5+8wXw/uCZwTDF8D/RdaAJa5Jx7i+2f3xOTCvJbwbwNs3tX414P/
N4HN+TWMfy/0dXWpHuqBX3fuP9u+F/NM7N5jjZv76B5zY6pgyd69l2DyD22X
dC17k3B+x8ad3GefXAgZ30u5usVp7v+yB2iuGtpiq/ndJyBr5xCRorU/PSdt
NzKIMHf3h7saE+LJjzvbd2qeYfKTdZXMzg8m/9hfoOv7weyn3d7Qph/kp+6s
aTzuwlzbbNya+Oh+ban+GtpOSXfrH27tBY4mPr61PTea+KTTsn4Ln6y3vvGd
rzez8WV37WnrltcayZ7b7ZcNf0T6yor/B7lFE5/HVQAA

-->

</rfc>

