<?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.7.29 (Ruby 3.0.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-16" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="SUIT Update Management Extensions">Update Management Extensions for Software Updates for Internet of Things (SUIT) Manifests</title>

    <author initials="B." surname="Moran" fullname="Brendan Moran">
      <organization>Arm Limited</organization>
      <address>
        <email>Brendan.Moran.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="K." surname="Takayama" fullname="Ken Takayama">
      <organization>SECOM CO., LTD.</organization>
      <address>
        <email>ken.takayama.ietf@gmail.com</email>
      </address>
    </author>

    <date year="2026" month="September" day="27"/>

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

    <abstract>


<?line 58?>
<t>This document specifies extensions to the SUIT manifest format. These extensions allow a Manifest
Author, update distributor, or device operator to more precisely control
the distribution and installation of updates to devices. These
extensions also provide a mechanism to inform a management system of
Software Identifier and Software Bill Of Materials information about an
updated device.</t>



    </abstract>



  </front>

  <middle>


<?line 66?>

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

<t>Full management of software updates for unattended, connected devices requires cooperation between Manifest Authors and management, distribution, policy enforcement, and auditing systems. This specification provides extensions to the SUIT manifest <xref target="I-D.ietf-suit-manifest"/> that enable Manifest Authors to coordinate with these other systems. These extensions enable Manifest 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 (SBOM) information.</t>

<t>Extensions in this specification are OPTIONAL to implement and OPTIONAL to include in manifests. Knowledge of Recipient support for update-management extensions is deployment-specific and may be established out of band.</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.
<?line -6?></t>

<t>This document uses SUIT terminology, including Manifest Author and Recipient, as defined in <xref target="I-D.ietf-suit-manifest"/>.</t>

<t>This document uses semantic versioning terminology from <xref target="semver"/>, including major, minor, patch, pre-release, and build metadata. The machine-readable version encoding defined in <xref target="suit-parameter-version"/> is a constrained integer encoding based on that terminology: it encodes release versions as one to three non-negative integers, supports only the pre-release classes defined in <xref target="suit-parameter-version"/>, and excludes build metadata from machine-readable comparisons.</t>

<t>Deployment profile: A specification or agreement for a particular SUIT deployment that selects options left open by this document and defines their local mappings. A deployment profile can be a published specification or configuration agreed among Manifest Authors, Recipients, and the management system; it is not a new wire-format object defined by this document.</t>

</section>
<section anchor="extension-metadata"><name>Extension Metadata</name>

<t>Some additional metadata makes management of SUIT updates easier:</t>

<t><list style="symbols">
  <t>A semantic version number for the update represented by the manifest</t>
  <t>Concise Software Identifiers (CoSWID) <xref target="RFC9393"/></t>
  <t>Text descriptions of requirements</t>
  <t>Text description of the current versions of components</t>
</list></t>

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

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

<t>Manifest Authors SHOULD encode suit-set-version whenever the release can be represented by the constrained version encoding defined in <xref target="suit-parameter-version"/> so that Recipients can compare manifests deterministically. Deployments that cannot supply such a version without loss of fidelity MUST omit suit-set-version and convey any human-facing numbering via suit-text-current-version (<xref target="text-current-version"/>). Because suit-set-version is a machine-readable parameter for determining compatibility and build metadata is ignored for semantic-version precedence, build metadata MUST NOT be included.</t>

<t>suit-set-version encodes a version using SUIT_Condition_Version_Comparison_Value, the version-value array defined for suit-parameter-version in <xref target="suit-parameter-version"/>. It does not include a SUIT_Condition_Version_Comparison_Types comparison operator.</t>

<t>If build metadata is desired, the Manifest Author MAY include it via suit-text-current-version (<xref target="text-current-version"/>).</t>

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

<t>A CoSWID can enable Software Bill of Materials (SBOM) use-cases. Tightly coupling update and attestation ensures that verification infrastructure always knows what software to expect on each device.</t>

<t>suit-coswid is a member of the suit-manifest. It contains a Concise Software Identifier (CoSWID) as defined in <xref target="RFC9393"/>. This element SHOULD be made severable so that it can be discarded by the Recipient or an intermediary if it is not used by the Recipient while preserving the manifest signature. An implementation that cannot generate severable elements MAY include suit-coswid using the non-severable CDDL alternative.</t>

<t>suit-coswid is RECOMMENDED to implement and RECOMMENDED to include in manifests because management systems commonly need a durable software identity after update installation. CoSWID and related Software Bill of Materials metadata can support inventory, vulnerability management, compliance checks, and reconciliation between the installed update state and management-system records. This recommendation is scoped to the operational and security value of identifying installed software; it does not imply that the presence of SBOM metadata proves that the software is free of vulnerabilities or policy issues. Other extension metadata is not generally RECOMMENDED unless required by deployment policy or by a SUIT profile.</t>

<t>A Recipient that claims support for suit-coswid MUST accept the non-severable form when it is well-formed and permitted by local policy. A Recipient that does not consume CoSWID metadata need not interpret the CoSWID fields beyond any validation needed to establish well-formedness. When suit-coswid is severable, such Recipients or intermediaries can discard it without invalidating the manifest signature. When suit-coswid is not severable, a Recipient MUST NOT fail solely because a well-formed, policy-permitted suit-coswid field is present.</t>

<t>Recipients that use or validate suit-coswid MAY still fail or reject the manifest when the suit-coswid field or its digest is malformed, when local policy rejects the metadata, when processing would exhaust available resources, when validation of processed CoSWID metadata fails, or when a manifest relies on unsupported critical behaviour. These requirements do not imply that every Recipient implements CoSWID processing.</t>

</section>
<section anchor="text-version-required"><name>suit-text-version-required</name>

<t>suit-text-version-required is used to represent a version-based dependency on suit-parameter-version as described in <xref target="suit-parameter-version"/> and <xref target="suit-condition-version"/>. When a Manifest Author communicates such a dependency to operators through the manifest, the Manifest Author MUST populate the suit-text map with a SUIT_Component_Identifier key for the dependency component and place a suit-text-version-required key with a free-text expression in the corresponding map. Deployments that provide operator guidance exclusively through other channels MAY omit this field. The expression is intended to provide enough context for a device operator to understand and validate the dependency; predefined tokens can be used when supporting documentation provides equivalent clarity.</t>

<t>Expressions in this field MUST be encoded as UTF-8 text containing only characters in Unicode general categories L, M, N, P, S, or Zs. The following ASCII strings are defined to represent the five comparison operators defined by suit-parameter-version: <spanx style="verb">&gt;</spanx> (Greater), <spanx style="verb">&gt;=</spanx> (Greater or Equal), <spanx style="verb">=</spanx> (Equal), <spanx style="verb">&lt;=</spanx> (Lesser or Equal), and <spanx style="verb">&lt;</spanx> (Lesser). No other comparison-operator syntax is defined by this document. When a Manifest Author uses comparison-operator syntax in this field, the Manifest Author MUST use these strings. All other content is free text, and there are no additional formatting rules. A Manifest Processor MUST NOT interpret or otherwise process the content of this field. An implementation that renders this text MUST do so in a manner that prevents markup, control-code, log, or user-interface injection.</t>

<t>By way of example only, to express a dependency on a component "['x', 'y']", where the intended version is any v1.x later than v1.2.5, but not v2.0 or above, the Manifest Author would add the following structure to the suit-text element. Note that this text is in cbor-diag notation.</t>

<figure><sourcecode type="CDDL"><![CDATA[
['x','y'] : {
    7 : ">=1.2.5,<2"
}
]]></sourcecode></figure>

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

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

<t>When a Manifest Author describes a version through the manifest, the Manifest Author MUST populate the suit-text map with a SUIT_Component_Identifier key for the component and place a suit-text-current-version key with a free-text version in the corresponding map. Deployments that provide human-facing version information exclusively through other channels MAY omit this field. The text is intended to provide enough context for a device operator to understand the version and reconcile machine-readable and human-readable records; environments that rely on catalog identifiers can use those identifiers when supporting documentation provides the necessary context. Values in this field MUST be encoded as UTF-8 text containing only characters in Unicode general categories L, M, N, P, S, or Zs. Implementations MUST treat suit-set-version and suit-parameter-version as authoritative when a discrepancy exists. A Manifest Processor MUST NOT interpret or otherwise process the content of this field and MUST treat it as display-only information. An implementation that renders this text MUST do so in a manner that prevents markup, control-code, log, or user-interface injection. This is a free-text field, and there are no additional formatting rules beyond the character restrictions above.</t>

<t>When the component uses Semantic Versioning, the Manifest Author SHOULD use the component's full Semantic Version in this field so that human-readable and machine-readable records remain aligned. A deployment that uses another versioning scheme MAY instead use its customary human-readable form. Unlike suit-set-version (<xref target="suit-set-version"/>), the full Semantic Versioning specification <xref target="semver"/> can be used in this field.</t>

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

<t>Several parameters are needed to define the behaviour of the commands specified in Extension Commands (<xref target="extension-commands"/>). These parameters follow the same considerations as defined in Section 8.4.8 of <xref target="I-D.ietf-suit-manifest"/>.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>CDDL Structure</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>Use Before</c>
      <c>suit-parameter-use-before</c>
      <c><xref target="suit-parameter-use-before"/></c>
      <c>Minimum Battery</c>
      <c>suit-parameter-minimum-battery</c>
      <c><xref target="suit-parameter-minimum-battery"/></c>
      <c>Update Priority</c>
      <c>suit-parameter-update-priority</c>
      <c><xref target="suit-parameter-update-priority"/></c>
      <c>Version</c>
      <c>suit-parameter-version</c>
      <c><xref target="suit-parameter-version"/></c>
      <c>Wait Info</c>
      <c>suit-parameter-wait-info</c>
      <c><xref target="suit-parameter-wait-info"/></c>
      <c>Component Metadata</c>
      <c>suit-parameter-component-metadata</c>
      <c><xref target="suit-parameter-component-metadata"/></c>
</texttable>

<section anchor="suit-parameter-use-before"><name>suit-parameter-use-before</name>

<t>An expiry date for the use of the manifest encoded as the non-negative 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 non-negative 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>Numerically smaller values indicate higher update priority. Recipients and applications that compare suit-parameter-update-priority values MUST use this ordering. Local policy MAY assign deployment-specific meanings to particular values or ranges. For example, critical reliability and vulnerability fixes might be given negative numbers, while bug fixes might be given small positive numbers, and feature additions might be given larger positive numbers, which allows an application to make an informed decision about whether and when to allow an update to proceed.</t>

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

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

<t>Each suit-parameter-version contains a comparison operator and a version, according to the following CDDL:</t>

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

<t>The comparison type can be:</t>

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

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

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

<t>Manifest Authors MUST use the constrained Semantic Versioning encoding summarized in <xref target="conventions-and-terminology"/> unless the component uses another numbering scheme that cannot be represented faithfully. When another numbering scheme is used, the sequence of integers encoded here MUST preserve release ordering (for example, <spanx style="verb">[2025,12,6]</spanx> for a calendar-based release).</t>

<t>Versions are composed of:</t>

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

<t>Semantic Versioning permits arbitrary pre-release identifiers and build metadata. This specification only defines encodings for alpha, beta, and release-candidate pre-release classes. Because suit-parameter-version exists solely to enable the Manifest Processor to make a decision about version compatibility, and because build metadata is ignored for semantic-version precedence, build metadata MUST NOT be included.</t>

<t>In semantic versioning terminology:</t>

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

<t>The pre-release indicator MUST NOT appear as element 0. The pre-release indicator is encoded as:</t>

<t><list style="symbols">
  <t>-1: Release Candidate (RC)</t>
  <t>-2: Beta</t>
  <t>-3: Alpha</t>
</list></t>

<t>This allows these releases to compare correctly with final releases. For example, Version 2.0, RC1 is 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>

<t>Pre-release identifiers other than alpha, beta, and release candidate cannot be represented directly in this encoding. Deployments that need other identifiers MUST either map them to one of the defined classes while preserving the intended ordering or omit the machine-readable version field and convey the identifier as suit-text-current-version (<xref target="text-current-version"/>).</t>

<t>For example:</t>

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

</section>
</section>
<section anchor="suit-parameter-wait-info"><name>suit-parameter-wait-info</name>

<t>suit-directive-wait (<xref target="suit-directive-wait"/>) directs the manifest processor to pause until a specified event occurs. The suit-parameter-wait-info encodes the parameters needed for the directive.</t>

<t>The exact implementation of the pause is implementation-defined. For example, this could be done by blocking on a semaphore, registering an event handler and suspending the manifest processor, polling for a notification, or aborting the update entirely, then restarting when a notification is received.</t>

<t>suit-parameter-wait-info is encoded as a map of wait events. All wait events MUST be satisfied before the Manifest Processor continues. The wait events currently defined are described in the following table.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>suit-wait-event-authorization</c>
      <c>int</c>
      <c>Same as suit-parameter-update-priority</c>
      <c>suit-wait-event-power</c>
      <c>int</c>
      <c>Wait until power state</c>
      <c>suit-wait-event-network</c>
      <c>int</c>
      <c>Wait until network state</c>
      <c>suit-wait-event-other-device-version</c>
      <c>See below</c>
      <c>Wait for other device to match version</c>
      <c>suit-wait-event-time</c>
      <c>uint</c>
      <c>Wait until time (seconds since 1970-01-01)</c>
      <c>suit-wait-event-time-of-day</c>
      <c>uint</c>
      <c>Wait until seconds since 00:00:00 Local Time</c>
      <c>suit-wait-event-time-of-day-utc</c>
      <c>uint</c>
      <c>Wait until seconds since 00:00:00 UTC</c>
      <c>suit-wait-event-day-of-week</c>
      <c>uint</c>
      <c>Wait until days since Sunday Local Time</c>
      <c>suit-wait-event-day-of-week-utc</c>
      <c>uint</c>
      <c>Wait until days since Sunday UTC</c>
</texttable>

<t>Local Time means the Recipient's configured local civil time zone at the time the wait event is evaluated, including any daylight-saving-time rules available to the Recipient. If the local time zone changes while a Recipient is waiting, the Recipient reevaluates the wait event using the updated time-zone configuration. During daylight-saving-time transitions, a skipped local time is treated as satisfied at the first representable local time after the skipped interval, and a repeated local time is satisfied at its first occurrence. Recipients that do not have configured local-time and daylight-saving-time information MUST treat local-time wait events as unsupported. Manifest Authors SHOULD use the UTC wait events when a deployment does not have a common local-time policy.</t>

<t>suit-wait-event-other-device-version reuses the encoding of SUIT_Parameter_Version_Match. It is encoded as a sequence that contains an opaque bstr identifier for the other device and a list of one or more SUIT_Parameter_Version_Match. This document does not assign a namespace for the identifier. For interoperable use, the deployment profile MUST define the identifier namespace and byte-string encoding, the scope within which identifiers are unique, the mechanism by which the Recipient obtains the referenced device's version, and that device's version encoding. For example, a profile might use a fixed-width binary device identifier or the binary encoding of a management-inventory key. Manifests using this event are not portable between deployments that use different definitions. A Recipient MUST treat suit-wait-event-other-device-version as unsupported when these definitions are unavailable.</t>

</section>
<section anchor="suit-parameter-component-metadata"><name>suit-parameter-component-metadata</name>

<t>In some instances, a system needs 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>Unless otherwise stated, all text-string values in this structure MUST be encoded as UTF-8 text containing only characters in Unicode general categories L, M, N, P, S, or Zs. Text-string values are intended for human-readable identifiers such as names or POSIX-style paths. Binary values conveyed via <spanx style="verb">bstr</spanx> MUST be well-formed for the consuming platform (for example, a UUID or permissions bitmap) and MUST NOT exceed the minimum length required to represent the value canonically.</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, and 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 / tstr / 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 = &(
    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,
    createdir_append: 3,
    list_read: 2,
    create_write: 1,
    traverse_exec: 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>Both the Component Identifier naming the symbolic link and the link target carried in suit-parameter-content are untrusted inputs subject to local authorization. Authorization to create the link does not by itself authorize access to every object that the link could reference.</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>

<t>All commands defined in this specification are OPTIONAL to implement.</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 is to 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 a primary cell is a single-use, non-rechargeable battery and energy budgeting is therefore a one-way operation. 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. Smaller integer values indicate higher priority; deployment policy defines the action taken for a given priority. 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" type="1">
  <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>Implementations can structure code so 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="operational-and-deployment-considerations"><name>Operational and Deployment Considerations</name>

<t>Deployments that enable these extensions need to define the mappings and local information sources on which their processing depends. These include mappings from actor identifiers and permissions to local access-control mechanisms; the source and accuracy of battery telemetry; the meanings assigned to update-priority values and the associated authorization policy; the time, network, power, and other event sources used by suit-directive-wait; and the other-device identifier and version mappings described in <xref target="suit-parameter-wait-info"/>.</t>

<t>Management interfaces SHOULD expose the update-management extensions supported by a Recipient and the reason that an update is waiting or has failed so that operators can diagnose stalled and failed updates. Deployment policy SHOULD also define whether waits survive a reboot and how an operator can cancel a wait or apply a deployment-specific timeout. Without this information, protocol processing remains well-defined, but diagnosing or recovering from an indefinitely waiting update can require implementation-specific procedures.</t>

</section>
<section anchor="iana"><name>IANA Considerations</name>

<t>IANA is requested to allocate the commands, parameters, and metadata values shown in the following tables in the registries of the Software Update for the Internet of Things (SUIT) registry group <xref target="IANA-SUIT"/>.</t>

<section anchor="suit-envelope-elements"><name>SUIT Envelope Elements</name>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>14</c>
      <c>CoSWID</c>
      <c><xref target="manifest-digest-coswid"/></c>
</texttable>

</section>
<section anchor="suit-manifest-elements"><name>SUIT Manifest Elements</name>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>6</c>
      <c>Set Version</c>
      <c><xref target="suit-set-version"/></c>
      <c>14</c>
      <c>CoSWID</c>
      <c><xref target="manifest-digest-coswid"/></c>
</texttable>

</section>
<section anchor="suit-commands"><name>SUIT Commands</name>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>4</c>
      <c>Use Before</c>
      <c><xref target="suit-condition-use-before"/></c>
      <c>25</c>
      <c>Image Not Match</c>
      <c><xref target="suit-condition-image-not-match"/></c>
      <c>26</c>
      <c>Minimum Battery</c>
      <c><xref target="suit-condition-minimum-battery"/></c>
      <c>27</c>
      <c>Update Authorized</c>
      <c><xref target="suit-condition-update-authorized"/></c>
      <c>28</c>
      <c>Version</c>
      <c><xref target="suit-condition-version"/></c>
      <c>29</c>
      <c>Wait For Event</c>
      <c><xref target="suit-directive-wait"/></c>
      <c>34</c>
      <c>Override Multiple</c>
      <c><xref target="suit-directive-override-multiple"/></c>
      <c>35</c>
      <c>Copy Params</c>
      <c><xref target="suit-directive-copy-params"/></c>
</texttable>

</section>
<section anchor="suit-parameters"><name>SUIT Parameters</name>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>4</c>
      <c>Use Before</c>
      <c><xref target="suit-parameter-use-before"/></c>
      <c>26</c>
      <c>Minimum Battery</c>
      <c><xref target="suit-parameter-minimum-battery"/></c>
      <c>27</c>
      <c>Update Priority</c>
      <c><xref target="suit-parameter-update-priority"/></c>
      <c>28</c>
      <c>Version</c>
      <c><xref target="suit-parameter-version"/></c>
      <c>29</c>
      <c>Wait Info</c>
      <c><xref target="suit-parameter-wait-info"/></c>
      <c>30</c>
      <c>Component Metadata</c>
      <c><xref target="suit-parameter-component-metadata"/></c>
</texttable>

</section>
<section anchor="suit-component-text-values"><name>SUIT Component Text Values</name>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>7</c>
      <c>Component Version Required</c>
      <c><xref target="text-version-required"/></c>
      <c>8</c>
      <c>Current Version</c>
      <c><xref target="text-current-version"/></c>
</texttable>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>This document extends the SUIT manifest specification. The extensions defined here are optional and do not make support for update-management extensions mandatory for implementations of the base SUIT manifest specification. A detailed security treatment can be found in the architecture <xref target="RFC9019"/> and in the information model <xref target="RFC9124"/> documents.</t>

<t>The free-text fields introduced by <xref target="text-version-required"/> and <xref target="text-current-version"/> are intended solely for human consumption. Recipients MUST treat those values as untrusted input: they MUST NOT evaluate the text, execute embedded markup, or override machine-readable decisions derived from suit-set-version or suit-parameter-version. Implementations SHOULD bound the length of displayed text to mitigate interface flooding and log injection.</t>

<t>The suit-coswid element can expose detailed software identity and SBOM information. Such information can help authorized operators assess inventory, vulnerability exposure, and compliance, but the same information can also help an attacker or unauthorized observer quickly identify software components and versions on a device. Deployments SHOULD treat manifests containing suit-coswid as sensitive metadata, limit access to authorized parties, and consider using severable suit-coswid content so that intermediaries and Recipients that do not need this metadata can discard it without invalidating the manifest signature.</t>

<t>Component metadata (<xref target="suit-parameter-component-metadata"/>) can expose operator identifiers, file paths, or other locally meaningful strings. Deployments SHOULD validate these values against local policy before applying them, and MUST handle missing or malformed metadata defensively so that the update agent does not escalate privileges or disclose sensitive information inadvertently.</t>

<t>Recipients that map Component Identifiers to file-system paths MUST defend against path traversal and symbolic-link races. Before a fetch, copy, or write, the Recipient MUST ensure that the resolved destination remains within storage authorized for the current component and manifest authority. This requirement applies both to pre-existing links and to links created by an earlier command or dependency manifest. Path validation and the file-system operation MUST be performed atomically with respect to namespace changes, or using descriptor-relative or non-link-following operations that provide an equivalent guarantee. A Recipient MUST NOT follow a symbolic link across component or authority boundaries unless local policy explicitly authorizes both the resolved target and that use of the link.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>The authors would like to thank Roman Danyliw, Mohamed Boucadair, Mahesh Jethanandani, Andy Newton, and Éric Vyncke for their detailed IESG reviews and constructive suggestions.</t>

<t>The authors also thank Hannes Tschofenig for the IoT Directorate review, Roni Even for the GEN-ART review, Niclas Comstedt for the Operations Directorate review, and Russ Housley for the ARTART review. Their comments substantially improved the clarity, interoperability, operational guidance, and security considerations of this document.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC9393">
  <front>
    <title>Concise Software Identification Tags</title>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <author fullname="J. Fitzgerald-McKay" initials="J." surname="Fitzgerald-McKay"/>
    <author fullname="C. Schmidt" initials="C." surname="Schmidt"/>
    <author fullname="D. Waltermire" initials="D." surname="Waltermire"/>
    <date month="June" year="2023"/>
    <abstract>
      <t>ISO/IEC 19770-2:2015 Software Identification (SWID) tags provide an extensible XML-based structure to identify and describe individual software components, patches, and installation bundles. SWID tag representations can be too large for devices with network and storage constraints. This document defines a concise representation of SWID tags: Concise SWID (CoSWID) tags. CoSWID supports a set of semantics and features that are similar to those for SWID tags, as well as new semantics that allow CoSWIDs to describe additional types of information, all in a more memory-efficient format.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9393"/>
  <seriesInfo name="DOI" value="10.17487/RFC9393"/>
</reference>


<reference anchor="I-D.ietf-suit-manifest">
   <front>
      <title>A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>
      <author fullname="Brendan Moran" initials="B." surname="Moran">
         <organization>Arm Limited</organization>
      </author>
      <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         <organization>University of Applied Sciences Bonn-Rhein-Sieg</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="18" month="June" year="2026"/>
      <abstract>
	 <t>   This specification describes the format of a manifest.  A manifest is
   a bundle of metadata about code/data obtained by a recipient (chiefly
   the firmware for an Internet of Things (IoT) device), where to find
   the code/data, the devices to which it applies, and cryptographic
   information protecting the manifest.  Software updates and Trusted
   Invocation both tend to use sequences of common operations, so the
   manifest encodes those sequences of operations, rather than declaring
   the metadata.

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

<reference anchor="RFC8949">
  <front>
    <title>Concise Binary Object Representation (CBOR)</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <date month="December" year="2020"/>
    <abstract>
      <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
      <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="94"/>
  <seriesInfo name="RFC" value="8949"/>
  <seriesInfo name="DOI" value="10.17487/RFC8949"/>
</reference>

<reference anchor="RFC8610">
  <front>
    <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <author fullname="C. Vigano" initials="C." surname="Vigano"/>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <date month="June" year="2019"/>
    <abstract>
      <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8610"/>
  <seriesInfo name="DOI" value="10.17487/RFC8610"/>
</reference>


<reference anchor="semver" target="https://semver.org">
  <front>
    <title>Semantic Versioning 2.0.0</title>
    <author >
      <organization></organization>
    </author>
    <date year="2013" month="June" day="18"/>
  </front>
</reference>


<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>

<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>




    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC9124">
  <front>
    <title>A Manifest Information Model for Firmware Updates in Internet of Things (IoT) Devices</title>
    <author fullname="B. Moran" initials="B." surname="Moran"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <date month="January" year="2022"/>
    <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.</t>
      <t>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="RFC" value="9124"/>
  <seriesInfo name="DOI" value="10.17487/RFC9124"/>
</reference>

<reference anchor="RFC9019">
  <front>
    <title>A Firmware Update Architecture for Internet of Things</title>
    <author fullname="B. Moran" initials="B." surname="Moran"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <author fullname="D. Brown" initials="D." surname="Brown"/>
    <author fullname="M. Meriac" initials="M." surname="Meriac"/>
    <date month="April" year="2021"/>
    <abstract>
      <t>Vulnerabilities in Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism suitable for devices with resource constraints. Incorporating such an update mechanism is a fundamental requirement for fixing vulnerabilities, but it also enables other important capabilities such as updating configuration settings and adding new functionality.</t>
      <t>In addition to the definition of terminology and an architecture, this document provides the motivation for the standardization of a manifest format as a transport-agnostic means for describing and protecting firmware updates.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9019"/>
  <seriesInfo name="DOI" value="10.17487/RFC9019"/>
</reference>


<reference anchor="IANA-SUIT" target="https://www.iana.org/assignments/suit/suit.xhtml">
  <front>
    <title>Software Update for the Internet of Things (SUIT)</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>

</references>


<?line 553?>

<section anchor="full-cddl"><name>Full CDDL</name>

<t>The following definitions use the CDDL notation specified in <xref target="RFC8610"/> and MUST be appended to the SUIT Manifest CDDL. The SUIT CDDL is defined in Appendix A of <xref target="I-D.ietf-suit-manifest"/>.</t>

<figure><sourcecode type="CDDL"><![CDATA[
$$unseverable-manifest-member-extensions //= (
    suit-set-version =>
        bstr .cbor SUIT_Condition_Version_Comparison_Value
)
$$SUIT_severable-members-extensions //= (
    suit-coswid => bstr .cbor concise-swid-tag)

$$severable-manifest-members-choice-extensions //= (
    suit-coswid => bstr .cbor concise-swid-tag / 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_Events //= (suit-wait-event-time-of-day-utc
    => uint); Time of Day UTC (seconds since 00:00:00)
SUIT_Wait_Events //= (suit-wait-event-day-of-week-utc
    => uint); Days since Sunday UTC

SUIT_Wait_Event_Argument_Other_Device_Version = [
    other-device: bstr,
    other-device-version: [ + SUIT_Parameter_Version_Match ]
]

$$SUIT_Parameters //= (suit-parameter-use-before => uint)
$$SUIT_Parameters //= (suit-parameter-minimum-battery => uint)
$$SUIT_Parameters //= (suit-parameter-update-priority => int)
$$SUIT_Parameters //= (suit-parameter-version =>
    bstr .cbor SUIT_Parameter_Version_Match)
$$SUIT_Parameters //= (suit-parameter-wait-info =>
    bstr .cbor SUIT_Wait_Event)
$$SUIT_Parameters //= (suit-parameter-component-metadata =>
    bstr .cbor SUIT_Component_Metadata)

SUIT_Parameter_Version_Match = [
    suit-condition-version-comparison-type:
        SUIT_Condition_Version_Comparison_Types,
    suit-condition-version-comparison-value:
        SUIT_Condition_Version_Comparison_Value
]
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-greater
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-greater-equal
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-equal
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-lesser-equal
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-lesser

suit-condition-version-comparison-greater = 1
suit-condition-version-comparison-greater-equal = 2
suit-condition-version-comparison-equal = 3
suit-condition-version-comparison-lesser-equal = 4
suit-condition-version-comparison-lesser = 5

SUIT_Condition_Version_Comparison_Value = [+int]


SUIT_Component_Metadata = {
    ? suit-meta-default-permissions => SUIT_meta_permissions,
    ? suit-meta-user-permissions => SUIT_meta_permission_map,
    ? suit-meta-group-permissions => SUIT_meta_permission_map,
    ? suit-meta-role-permissions => SUIT_meta_permission_map,
    ? suit-meta-file-type => SUIT_Filetype,
    ? suit-meta-modification-time => #6.1(uint),
    ? suit-meta-creation-time => #6.1(uint),
    ? suit-meta-creator => SUIT_meta_actor_id,
    * $$SUIT_Component_Metadata_Extensions
}

suit-meta-default-permissions = 1
suit-meta-user-permissions = 2
suit-meta-group-permissions = 3
suit-meta-role-permissions = 4
suit-meta-file-type = 5
suit-meta-modification-time = 6
suit-meta-creation-time = 7
suit-meta-creator = 8

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,
    createdir_append: 3,
    list_read: 2,
    create_write: 1,
    traverse_exec: 0,
    * $$SUIT_meta_permission_bits_extensions
)

SUIT_meta_permission_map = {
    + SUIT_meta_actor_id => SUIT_meta_permissions
}

SUIT_meta_actor_id = UUID_Tagged / bstr / tstr / int
UUID_Tagged = #6.37(bstr)

SUIT_Filetype /= suit-filetype-regular
SUIT_Filetype /= suit-filetype-directory
SUIT_Filetype /= suit-filetype-symlink

suit-filetype-regular = 1
suit-filetype-directory = 2
suit-filetype-symlink = 3



$$suit-text-component-key-extensions //= (
    suit-text-version-required => tstr)
$$suit-text-component-key-extensions //= (
    suit-text-current-version => tstr)

suit-set-version = 6
suit-coswid = 14
suit-condition-use-before        = 4
suit-condition-image-not-match          = 25
suit-condition-minimum-battery          = 26
suit-condition-update-authorized        = 27
suit-condition-version                  = 28

suit-directive-wait                     = 29
suit-directive-override-multiple        = 34
suit-directive-copy-params              = 35

suit-wait-event-authorization        = 1
suit-wait-event-power                = 2
suit-wait-event-network              = 3
suit-wait-event-other-device-version = 4
suit-wait-event-time                 = 5
suit-wait-event-time-of-day          = 6
suit-wait-event-day-of-week          = 7
suit-wait-event-time-of-day-utc      = 8
suit-wait-event-day-of-week-utc      = 9

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-parameter-component-metadata = 30

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

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+196XYkx7He/36K9FDnEhC7ewDMDmqoi1kowZrNA4xom+QB
C93ZjbqormpVVQPTIqH/fgs/i/1iji8icqmlAcyQ8r3Hx3MkAqiqzIzMjIiM
PUej0aBO68zumw/LaVJb8zrJk7ld2Lw2Lz/WNq/SIq/MrCjNUTGrL5PS6pfy
8DCvbZnb2hQzc3yW5vPKbB19ODzeRkfpzFZ1NUhOT0t7sW/w/NphBtNikicL
AmZaJrN6lNp6NqpWaT1acavRwrca7T4cTOjRvCjX+6aqp4OqLm2y2DeHL4+/
HQzSZblv6nJV1Xs7O0929gYEeEIg2MmqTOv14LIoz+dlsVoKWINzu6ZH030/
odELgDCgbpN8epJkRU5grW01WKb7A2PK2cROq3qd6VNj6mIS/ZrmU4LSPaiK
kqCbVf7v9aLxZ12mE//xpFhghv5tmmdpHoaxH+tRllb1iDo5LTL6bFT8/it6
Q4u3SJZL2oMIjpPMXlh8dH8wSFb1WVES9CN6h39pTi+ejc3rokxyfSbr/6y0
+TTJG2+Kck5b+vekpq3aNwflwrxKF2ltp/reLpI0803H3HSMLfzXOd6MaV6t
of8yNsfJebJOFklj9L/YvP2iOfjRy+dvX5vnb8dD8+r4xbgJwLnNx7W2bo8/
yItyQZ1cWGzi+2+fP7n35B5+PRy9GAd0Wyju6kePn9x/4n59uLuDXyu7uLBY
S/qnBHTniADI63Ri/mpL4DPthNkb74x37vBnfvnpH7B53+zt7N4b7Twc7T6W
fpJybgkNzup6We3fvStjjGnqhM/5rA357t599+vOLsN3ePDmYAR0bsHVJFym
2/rMbqbdLrxt0C4vL8cpESOAu5tUVTrPGWfvYvn4P+OPZ/UiGwxGo5FJTgnD
k0k9oFEq4OmKCb9a2kk6S4mT2MBp6oJhY17htsHI3Albzmxl46+TLCsuTeKZ
zeCAgR4aYRhmmoK2Tlc1ntG0p/YinVhTLG2Z1FiGwiwKWpllSaBUNlsT9eV1
WWQDAOFb01iG2ACwtqYhGQuxaivlhNSN9FwpjIMGjFVBAxQX6dQSqAs7OSNo
qwVaybbiaeCH1bqq7YK6H/iNOwQzwVKVDIZ//izNMvN2RtOnnUxpIOPxBBCf
FquaGgwEzKnCOJZNWaTTaWYHgy8MEKEspqsJWg0G366o0wgemmflBlxFrH+V
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

-->

</rfc>

