<?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.4.5) -->


<!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-14" 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="July" day="21"/>

    <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 an update
author, update distributor or device operator to more precisely control
the distribution and installation of updates to devices. These
extensions also provide a mechanism to inform a management system of
Software Identifier and Software Bill Of Materials information about an
updated device.</t>



    </abstract>



  </front>

  <middle>


<?line 66?>

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

<t>Full management of software updates for unattended, connected devices requires a cooperation between the update author(s) and management, distribution, policy enforcement, and auditing systems. This specification provides the extensions to the SUIT manifest <xref target="I-D.ietf-suit-manifest"/> that enable an author to coordinate with these other systems. These extensions enable authors to instruct devices to examine update priority, local update authorisation, update lifetime, and system properties. They also enable devices to report and distributors to collect Software Bill of Materials (SBOM) information.</t>

<t>Extensions in this specification are OPTIONAL to implement and OPTIONAL to include in manifests. A Recipient that encounters a command or parameter it does not implement MUST reject the manifest, consistent with the manifest-exclusion conditions in <xref target="I-D.ietf-suit-manifest"/> Section 6.1, ensuring that update behaviour is never ambiguous. Conversely, when a deployment relies on update-management behaviour defined here, the manifest author MUST ensure that targeted recipients advertise support for the required extensions (for example via enablement policy or capability negotiation) before shipping such manifests so that required commands will be honoured rather than rejected.</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 draft makes use of terminology defined in <xref target="RFC9019"/> and <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 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 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 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 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. A Recipient that encounters a command it does not implement MUST reject the manifest, consistent with the manifest-exclusion conditions in <xref target="I-D.ietf-suit-manifest"/> Section 6.1, ensuring that update behaviour is never ambiguous.</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 was rejected 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>


  </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 548?>

<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:
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
9/IKv7ZYpe0/AKvFDyPdrgAA

-->

</rfc>

