<?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-00" 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@arm.com</email>
      </address>
    </author>

    <date year="2022" month="March" day="07"/>

    <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" title="Introduction">

<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" title="Conventions and Terminology">

<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" title="Extension Metadata">

<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" title="suit-coswid">

<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" title="text-version-required">

<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" title="Extension Parameters">

<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" title="suit-parameter-use-before">

<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" title="suit-parameter-minimum-battery">

<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" title="suit-parameter-update-priority">

<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" title="suit-parameter-version">

<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" title="suit-parameter-wait-info">

<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" title="Extension Commands">

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

<section anchor="suit-condition-use-before" title="suit-condition-use-before">

<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" title="suit-condition-image-not-match">

<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" title="suit-condition-minimum-battery">

<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" title="suit-condition-update-authorized">

<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" title="suit-condition-version">

<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" title="suit-directive-wait">

<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>
<section anchor="iana" title="IANA Considerations">

<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" title="SUIT Commands">

<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" title="SUIT Parameters">

<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" title="Security Considerations">

<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'>
	 <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Jessica Fitzgerald-McKay'>
	 <organization>National Security Agency</organization>
      </author>
      <author fullname='Charles Schmidt'>
	 <organization>The MITRE Corporation</organization>
      </author>
      <author fullname='David Waltermire'>
	 <organization>National Institute of Standards and Technology</organization>
      </author>
      <date day='26' month='January' 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-20'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-sacm-coswid-20.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'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Henk Birkholz'>
	 <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Koen Zandberg'>
	 <organization>Inria</organization>
      </author>
      <date day='25' month='October' year='2021'/>
      <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-16'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-manifest-16.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'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Henk 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" title="A. Full CDDL">

<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><artwork 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_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
]]></artwork></figure>

</section>


  </back>

<!-- ##markdown-source:
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
a5fXOsme3e23Db9EfgHx/wFR6yIzj0sAAA==

-->

</rfc>

