<?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 4.0.6) -->


<!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-15" 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="August" day="07"/>

    <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. 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 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. 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:
H4sIAAAAAAAAA+1963YbR5Lm/3qKXLnPmGwDEEnd6ZZ7qYtneEaytCLV3lnb
hy4ABbCahSp0VYEUbLGfZZ9lnmzii4i81AUgJbt3ZvesTrdJVmVlRmZGRMY9
h8NhVKd1lhya98tpXCfmdZzH82SR5LV5+aFO8iot8srMitKcFLP6Ki4TbSkP
j/M6KfOkNsXMnJ6n+bwyOyfvj0930VE6S6q6iuLxuEwuDw2ebx0mmhaTPF4Q
MNMyntXDNKlnw2qV1sMVfzVcuK+G+w+iCT2aF+X60FT1NKrqMokXh+b45em3
UZQuy0NTl6uqPtjbe7J3EBHgMYGQTFZlWq+jq6K8mJfFailgRRfJmh5ND92E
hi8AQkTdxvn0LM6KnMBaJ1W0TA8jY8rZJJlW9TrTp8bUxST4Nc2nBKV9UBUl
QTer3N/rRePPukwnrvGkWGCG7m2aZ2nuh0k+1MMsreohdTIuMmo2LP74Fb2h
xVvEyyXtQQDHWZZcJmh0P4riVX1elAT9kN7hX5rTi2cj87oo41yfyfo/K5N8
GueNN0U5py39Ja5pqw7NUbkwr9JFWidTfZ8s4jRzn4740xG28L/P8WZE82oN
/a8jcxpfxOt4ETdG/9ckb79oDn7y8vmb1+b5m9HAvDp9MWoCcJHko1q/bo8f
5UW5oE4uE2ziu2+fP7n35B5+PR6+GHl0WyjuaqPHT+4/sb8+3N/Dr1WyuEyw
lvRPCejOCQGQ1+nE/CUpgc+0E+ZgtDfau8PN3PLTP2DzoTnY27833Hs43H8s
/cTlPCE0OK/rZXV4966MMaKpEz7nszbk+wf37a97+wzf8dF3R0OgcwuuJuEy
3dbnyWba7cLbBu3q6mqUEjECuLtxVaXznHH2LpaP/zP6cF4vsigaDocmHhOG
x5M6olEq4OmKCb9aJpN0lhInSTynqQuGjXmF3QYjcydsOU+qJGwdZ1lxZWLH
bKIjBnpghGGYaQraGq9qPKNpT5PLdJKYYpmUcY1lKMyioJVZlgRKlWRror68
LossAhDuaxrLEBsA1tY0JGMhVm2lnJC6kZ4rhTFqwFgVNEBxmU4TAnWRTM4J
2mqBr2Rb8dTzw2pd1cmCuo/cxh2DmWCpSgbDPX+WZpl5M6Pp006mNJBxeAKI
x8Wqpg8iAXOqMI5kUxbpdJolUfSFASKUxXQ1wVdR9O2KOg3goXlWdsBVwPpX
eVzTJKfJdIBVy5OJH6MyZfK3VVrSL5NCVhsQjZP6KiHitttlZLsqnpUfctBY
+YFZFlk6WZsEc5toC3wRr6ZpDSqTJePFJwRTvJrImLryNyPZr7/2M4Hra2oc
1zR8PM6SLuzUGc2xnKY5MO4qrc/ROeFpQT/KELYW8m7pEIhW0oa45aRnyYd4
QQeBRe1lmRY4ygYmKyZxZh8L1aZVLEunTzMaoU4XiaybYhitDO1MnSrWrgVT
Fapg4DJZ0vnFXwb0pBPPMtr3FkYWIUbunDx783o3RExCwEC0SHNars6uoa83
b0+P33x39IoXZLHMBB0BRuNNPslWRFnUj90xms+ReUfdLVN8obs3KVZgeIRs
fMSiH8LiZVzSmUPPTUqrXdCM86IOhnv9/uSUVuCvmCVwxo7BOF/RcqCR3XT3
dph8IKgwQTQDlupUtyAZySY89Yej/QGBW5GgQqjNwOsujpPz+DItVgQrgUkH
O7GDxTidr4oVTfl5kdMTMLGBuTonKotpE5dZseZ5lEkGTkv9d2SpoN9pMiMU
mxpCXMIVzKiFnbIeDF0isMnRQN+4BacVnl4CsQjdq9WSkceeOcoWpiEd7OAl
sJvW3FymsaIgg6akTw0m8TIepxlhPE19XtQpI8ouAT8DB6/OU5Z9aMTJuccE
Yl0CphtY976iTSNUHSfmvMhp6vSGmBQIlprnuuPJdMQMkpc2l00E3pwmJZFi
kRXztfn1i4l/O6S3w9q/vY7ozEtIJFkbiJeVuYP1uzOQn+a7N/z7u5f/4/3x
u5cv8PvJvxy9euV+ibTFyb+8ef/qhf/Nf0mC0OuX372Qj+mpaTyK7rw++rc7
QvV3LNXccTTnjmKQG9HSGGRE4NNxiB2NSSJPqgkRfIKzzzx7/vbf//f+fULi
/0ZSx8H+/hNCW/nj8f6j+/QH8E5GK3I6TOVPWtV1RJJpEpfohQ5QbGZKJ2lF
bWmLzournFFuFP3pzxB2zfDhn7+Jopa8sKoIgZlnBys8UAaArW/jKuBwWMlD
WfzeSomj3oErK91deukugMPMymJBnYrQdn0dwrWI/wr5A03pxzKuJ+cDiBxD
IsokrpQrj1dpRqdgUsdEnzGzZPpyQoIZGtJDsGUdnNkZ992YEU/EcbShNqZ9
SYXr4VSJtTnpToTsrp8xwYFdU6L2EzsEY+RmfKozwBaMCmtKmpEcqGWSEPPM
h0SeLKjaQWiXlQ1UghZgBMH0zSQjETKpbjcXWSzmr4CouWqyC51VI5qnntKK
IKbNfeG5Ih2BsxRC8lHr/AH2zGlC3Ar8KcZJQdu/ygiLGQkD5sprRpyXWAZN
cSmMIktmNSRNEnvWbXLDUcqTrbAYaalnuOpvfH5NO1AS1UCEAiirMamA57RU
Hahpk2d0IqjAxXMgQl4UXfKgbfEsW1ZVj7CmJPo1ECCVczEm3ntFnJM2T45z
U4z5aLRb154q80932pvXuk8RybYLmslUjkZM3e7gIr6gVWnKn7zeVvYklEmh
ekV/xK61qNLkq8WY8NqeN3pykghDsij1ZkH0RzV1Q+wd0r/pkbfpdHpenHx/
/GKXUFL1xetr+uaUDjAj3FH3m+DUQ4ZVoZ42aIKhJ6uyxMwcFdFzoChREj6M
vvjCMPZXSW3xno6Z9qNrZVNu5SyRxt1VscvhRqEmirbhWtg1DplXnK+BixD0
aZUSK2TLGV25EQIS05OEZEvgiHCVQDT7jliEGzBd0DZXCrrSglsWGFFk4Jq4
hi6e/ZQwqyM56+GovXXWEMcRS00iiSjzEaLqwZCQX34m37XSRyAbYTxZrCQQ
U6aJsFwSKImYs2w9Mp5NVdIJfQkaBC+l5WA5J3aAQQSFupcVFePTjHQeFpZY
0CgWad1dD5A8Cy9r3uXzFcEznMUTzE/oCL9BIuNP2fSkuOv62Pn1177n19e7
I/MsmcSrqmcj+DjqcGkvis9YVdcVIRB4vepUxb/uYYkO0zmdrrQh+NbivxsQ
+n0CBKaztvWpFcRE+OFTBVJfB2ZPXfYJyfcEG3jT2XMr5J+p7YeeWHo4+0uc
rVSa1k+Hl3hEUlcZrx0mMeC9iLQdyUbmONRcVB2KbwHY6XrJCrp94OwiNP/j
Wc8a0/whQ2/QDI7+zStj9eejjed/k6K6SqfE+pxaNU3n+CEviAEeGeHOTFWq
ud6sixJODidE++Bl6fy8ZrPPaplhO60aDfNCTaywloNUNB4lRALWn7mk2Jax
aOvQieLsKl5X5iIvrkjFYLnAwsM6/BKnJTok7PcGmXC6QhwJH2PK8xoCKu83
zFTEmdB0y+nlD6+27OuOMsvOVd9SDjoGbwILBbvkVbWcLK0tx5ym1SQup55f
eo2bZW9RJYj/p3G5NuksECNWVd9XV+cQcpgNl5ei+wZHE2yMMZaYhKPcK+iy
CSF/nBOTL7GHHnidXdXA0XDNhZQxHgRY/+HzFy9e0ZbCTsoibXerAnWra6do
v+wxVdBKCpPsyF1MmQsWmHMW4sx0ZfdCdzrlnQZLnIFtKu6GVsqRJRCAQ0ce
2wG3UIijdmyyVd5T1m+LkpSty1WG1VVOHJrswEayNCYWaybnyeRCRUpivMDP
LG1aALHUCicBpICD2JKWLXCoxir0Qwq0oiv+gpdkqjRI6tmEmNfUWvacyZEk
S7Z4qd/HCOOlKcvSzdbYdw+IXdmvO9agtZeWRFCYcDdgKH7RYGu0TILp1m1U
RZpJwl+EK8gWmdIaOdKqWoEnvWEzhDOQNDiwR3CSERr4tcpJHKu8nWO8bqgQ
zo5Cz+VssGrFCGy0ZS0jjSwlBAytNyHe85kZTybJsu4hGjZpswVKKP4qybKh
ioLYjCXO9VoFLVF8BLwes53bAwhjpFFYdHZrwqQhB58aLhgibUZMMJuCxtYF
GHrOCJAq1uBTQRmwedaoQlhJOaPN+B7zaNG8m+pApLBAuivKkO1hf0FIyiqx
HlZOI5pSSLYwur7BWQT0AMTBijlRZhanGSFfBoeG5S9xODdrUx/6vQiH4WXD
YCoTE4oEcxSTJAzcpV3OJjcFlyU5lngLA0LNegyogiHudGuMjFWEUMynPeBY
xJkFnD8LsUY7r6R3xQttRyg+oW3EGl8Vqwx2g3NaDeLOlwQZYyvNsFiVEyg9
/EmAIESt2gGtTxvxMLWKnUpqbHUTC0ytuVIQ7I7EfyDae2urdQmEWiMhfJvl
YK/XwS67I6ayMPlZBsITi1dW3nRc4dcvep9f67nW/xFtAJ/Y4gsQlPBy8FBM
R05HXGPmGwRZFkMCi+IW1QmcQl87E3oo9H4vq96WQnEurHIIZ7DZiY4UgEZT
sEIuEKYsVvOm5X6L1XtZLFc4QD3SYrlgtBEHgBO5Vcc+CwQxWICtEh6A4/Vx
ZoxZPAGhbtkKtiTLYDhQBAKSKkvsv2gKorqSWF0tsW5sf1z2qJPWJemcofMV
IT7ONXVeXCaMgrJG4syC6zJPMhGkWKlkaw9TrVgsQ1gq5oW5Mlk7XpJzh5Bg
AbwY13ocsyv6sOTwC14cx2maS/g1eJQVbevigs5MK6Ayzl4JC2UqZL1dDVNt
5yCtL42AnaCzD6ICe6nsXLybShgU48M4UaUQlnLz/vTb4WMOz7DCOYZj8Y1W
De5vWJOom/eEnTBP6DFuNIwFLOPVwLwemO8G5u3AnDBv+V/im6NVgqcbPR6d
PD8+5pAROOwhXPjZB+SJVZrBCNuj3lWhua6fAA/Nz9/8bHb+mZRzero7oD+f
+r8B2cu/reIML/Dc/fEn/PUKHLPRCBv485/cq11YgSxKOfiGbverNS3gB9E4
N9gVN9E/2+q39Rnu4xZix/kmblxdahJOICwrzDn7/axYh113FlQogSVkotC8
KdZSxsBylSVs4XXjvhX+bYfGCe6lGXrKg15Bx1NOb81TtdpHQyLcoBwhKidh
nkdNGUt5LDpuqoK9MuCAubi/wBuSS+YUi7i8WC0HNixiCMyFx3nO2EmLVA4Z
1Bk4V5r/VXyYRDvPiE/FbLSznj2QwkCVYJBVkzHjcAjY4Z0ff/jyw5cD8+X6
yx9/usNHc5mo1qAsJTQmQbDbH30wGWMne/Do74PRA5h7aj5RLw9Ge6yYjklG
7994ERFo14R6HMl57V7VC8/8VbMEPtfWIepWmBmgmYyLckjS4BxgWAf43//+
d+iWEc+SJvmTOTS/cqjNI/rtzjdPBfo/HdyJrtG4da63zSl6rLetKeGp3v4k
ONQtZxYDYMfXFMaUBHySPuwYyXb0xA7N1LAENg3VODxIBkoCWxoi2tQGxpYR
tiAE56NwwW0UYxUEXn7t1rou0C1PzsjkRHsFQtJWbGAkVk4JLX7/SQLDTVJC
e2t7hYTAlvipEkLDMNyLFb9BYPCU8ruICoGVtWF/6PGl4nUL5dXK8DWNfJmW
RR4sRonJwdFBGEz8zxoQ2EcEgUMOjKJKGm9uKX6wEp0ApWEr0/mODFuO/1Nl
j+PGUVLJ4Ii03eBO2Cz3a2BSLa5hG6BCijHJLDFOgORDqqE7/4iDkaELoCdM
hDKSVkRO6yEvVRii9F/jGBW+yQZhT8gquXyKtGENILw6FiGg+XLgsTjycSxa
bthkOhJ30Q1u7ed8akFW+cl38yVtBCIL2x21sNvamVuEKUbBFgErtdLPRcyB
JemcZMWW89xaKyAlCE8KAjiqyTntsJqF6QSKpww4jA+TVVUXC5BjCxQs7ogo
KUsvelxb/SegLFXv/BmMhhffB5E0NJnGOrX86m8txVUkCjjLoSfEikSBEzYa
Zd7NJtqDt4KJrM2Q+ogw67K2UVM2aJfh8QA8t+9p/n58+5XKAJCmg9FFwJLD
kZ5JQN1UDbdVy2Vho+Mej+6PHgOqrfE736G/j2K+P3HS20fzLpkRxZCOixDY
j/r/6D3B9UzCyD62ORh8RWP7rmOu8G+vr6PXxHYXq4V5BscR4U2nr4U0GI5d
g06HrSbUqwZtv9Vwzx4IJZ5v6Rt0wWw2oV4t8XV6u3QvNttmou9jYp/HxC67
31/Rq2Eqrzo9uJfUh5N6XFBItzPHPIYL36bTa7cVde/k5d6t1GiK3o2MoiNI
NMuUdqgRL88mz2YQQngIW0N4O/zJhqQgjhrCCIgohZll/8mjveHePv2ve846
GyuTvPeMO900Ng/vD8ep2r3B9J3uH4exJgoEMSy2hkAq7FjVQiwe9a1cCys1
8MRDRcxOza9KAhbDOfuE/V3fn+tpFgTcVuHyxb2LF8LdgrpNTTudeXWIabd3
di3q2Dw7R2K6tvLhTfPK/VyOa6d2IaNo3jsvBUflpV+obXdmnTY0N7DwuLrA
gPFymdnTBNjLVn4xyrEbMkX0LA7V5hQazpY6rVc1B5uV6SXJz/OE/YDCHZxT
gSmFxkolwlaTNaywJ/k6pOtBAkmcvOt8v8rbjlQ0XFvlhD1Ioe972+roIQOu
T6J1KeEzplrAo1eKw49DidgmbM7T+bl3ldodHTWil2Fx9Ctoo280ZucG7qvj
BTakFF6hKcfSjMyr0HEBsUOSZwKBZWiFAdKX45yNfNCIfPChjgCvSpzPYUr6
1sdPD7yfAW6IOAiZabpuZ+kHhNkh/AESxpxoDh4xpT5hWewSgeo0Xs37P+BV
pulUafMzjDdLYomImNr499bHGSLHy56vaVDY7SEdVG10RsZOfJEIWalTcYrk
ndRlvJBuwXIegBAnU2EThSzCq5I5SSTCu8MSWlF33TMwio4VozQJKbSYVO7I
8NJSYMl4kyc9YXNW1uO4C+YLbAjpH7+P5yiCTn02gte+SMEIA9s0/tCL+FeB
o7Hla+nhPl6uFcX9srhIVJvvdo1pCQB9sY8aC8HGwkbYIQnfZcw8R0JvLS/W
xzjlxxw6LUqXFQ8kHHUgflh6gTgccRfWNkoubes3JO0n2Qz2/s0LHgbc9FjU
hWfYSQ3gG+eMoLm1GHpjImTSQ28AZAuQE99dlNZrBImbp+YHtgn2r/8wMHPX
62VyqHmQ5rahX4Nbds4c51N6Z7tF9JMYLk/PG04IQKq4zjG86lIY+V+d4wDP
3C8tp4J/NJIheihKgj3aYsbzZ2/eSQQU8jrhaeQwPMSEaLw6gmZ8NCu7WBDk
bqO2rFxHiFThzCNZLvwCOLqsNCQH7NF2a0+3ZthfKxxZDKN8WqpFc2oIXu2N
ZaQE8w/nifO1mDBlTVunQdqSV23UeYjFA3OHl9T8+MM+G9trsQGkmiOzYFzE
TOwa22lXCNkRwxYzHQiys9AVbocbk+Zt7rT3FwMO9mhIyU/RHcbD/T0PCAdN
ODAci90f7Y0+EDsnCvNGfs8/9kf7e8zaN/L2PkXchffCF5ogFaXqCTMOHUSN
KOGtXdJeLmIRWdjzvS1t6NqG8/RYYqwZw0foqhUjDIJrRTTPSPE6h/lhbR1n
mzpR+VQMFnafQ+JwxMS2J7FzS8iej6m28k4jtWtgfv7hYO/gwWD/YPDwp5/V
mjuBM2EalxpFoD1AUP+LyzEpdQ04Q2VGXGMfNp5WLkqTyEPI98GE7/Wnppid
2DLmX5KyUOFqNzpgC6CkckBgC7JVVJQsypb20up6oDxfSJw7p08427gXEhho
utgj8TlYA9L1SlijGqAElub+FKJOYiVbOi1ZWtwUgSXOlufxACF6sY3d42GG
hFPTVOXlTtZOK8y7S2di17XhSLXLMG0YD72l1wl4bbGuweBtMLimTikE//Co
8OP8pjwwwU522adlVbvDwlGjKspICVPqs2ZeJ1COiU9ecNz7OUv4VojwMiTw
85QJFAf3xkGQcNYapMIBrDqSkq2sDhJ7VGRn5YKl8wHjahueUXRPfTfnaelH
T1VLDvn0jcM61UKP8X5Kc9uhaYSxj1jeE1D6v2uc/SxuDPcPSdeTds8dXu+8
e76LlweHhM11jF/vHZojEISaA1QbqTViizvQFGjRC9mhNkEsOR+FRGCigyUS
aN44la317WC0NzDvnu8DTrAKdV0Hr0d74qYSrZXfQlq2LfZHH4j+1v6Qefcc
azPcH+j5XZQXlQftkA7Xg8HegN7TSW9BZ1NrMLy0oRN4ZE7SRUqIAMc92ILZ
GR7stoDFiBB+sVb0/l73Pe3s2w1Mq/AZt5u4j/Hcp/9sm6a67tZAbhejx6PJ
0aIyaAiGJDWn/BzeWfqFyzOw1DfTiCMR12yuYm+wuvNhugMQTirxem5J5vQO
Ks3G4b6Cmg/V52ZSBFjH2I+ognukVkDGOhjcoy2Wh8NyEjwn9Ahe8ca7Vwf+
hWy5e+M/Gd2Td6P7fih6P7iPFj3atjMLa7yC7CgdjvzGKaDNx9A+5UnVFHGX
4VGy5HNhRSuZQSpw6jj75URo1girjXZsm/gjvM15L9Rv4oL6LHDKx2jVJ3Xb
hai4JECBLTZeDxXHWsyCcXrCoSlj1URIoBiTTnshXl5N+FuSbErNy2SOWIpS
cvd0okRg00xNItWqQtRNJ+7YrRsHB3MyjIhoRHNOfhhoCE3p4pbVoAJkLbn2
AAvt8C1azUBcvWEvRkL4E1oul2vVt/Rt1Q20SWvIWCGeVYnKCh449zgqYFS8
12rz3yBvQLFP85UWwWh0pSSVeWVNwu2CANambo8o8sS7n15arvyROJHLAm24
nnjqPGEec9g0nH4ER6H/nqA/ywU2G67bnS2ZC9tO2GkjlCAvON2i81Ge1Dg1
+j6zr/o/ZLY6lOiMwI10kkCdhfVN+5pZx72N5GCJL5AZOj2jcgl9veoAxC92
NnlVdns7Ghaz4TRe9/bX7Glv75D/p0bbU/p4W4/DVT35lF7fnz7vdIduqLer
JLno7WqK3DLp52SVYxpbYAs62whbt0OAFfle2QotzM+ZyL+sXJo5UYHE4k/g
JJAN+QUsSjNg+EHdoCumauhZyEXqZBrH6wxW4mEV41SVrZcYBh+yr+Kwg4et
DngioHggrPwsh3WYKgHZKObiQYNmX8SXLHBVG3CfJWYrKvH2y1Bh3j1JHlK9
pXc6pMfllZjEkb9RXaTLpVtHbgFxmW0lzPc8J4ttXG/JaQbW34c1Cb4WWxHr
79o1+whpVlo2CZ9K780xGwNB65SB1LTEZq52GoimK7DRqo0TMluuddC3DGEA
WRCYE3wa8mJahyCbYtStmtSKOyE0bnzfrYjjvF0aiijZduH4mpUU3Y7VlQmb
ZzC4E8e1dsEmA6/1CPabLtTtZO3OMEfE9MqgmlooHloRpMFUZaMRVgkgWJBV
68N2gJqVT9waqZsq5gp91RJhSnZYD4kILoxsbBgHXq4qDbbtqWchoVM+6iSY
kx+G9fs1HXMSh+3WVi1USPuzZn3xGzWMIqhZlqd/s/nXvvjaeK3Nm9RfjGW1
a64QoMEitqrZl1Vg4edwqrjuvArUj4YYF7tpixtMnPhQfafDq3RKKuOYVEbE
HMgGBouhC63vQ+QKC8cNXZomAkA9hVSObzHjTbTcD3YVxMS7ZNMyp22FCVBO
0xkvhJpzhXM1c/XaYYE30UqTml0qWJWEQ+juOb7fqzv0hIh0nHY9ASJiyikW
moWac/5XbCujQbZn5R7uI2W5WRLkfonpMgxOTlu5s2o0Yq1rgoUpSvsbuzFx
YP+RCHLqhWJ9RisQr7I6cNpXZqe8+gADhROBETJ4N3DrL2Ni1WGDssiSrQ24
+mlfC54qvDRR9F6M0D7MkiU/BB+S0M1apxLlZTNQ1QfM/59NlOlCxMm3Vit3
YeBeBQ+ZhWSLVcJ70OfbNyfH/3PIVV5h1TqHrVNoUHsXdR25CGlsfgZf/tnN
OMx69YHc8OiwXTeLa45yaFrIY/P+/fEL0wjZqIjwa9q0XR/CCktY8gHe60bU
TZbkc+IjLlmskxAkDjFCzyLXKiNREIcV2k3Z5a4SB45CVBRJuG4VMdy1pD2S
zpF8TcdVsiUWb2AD9yqO3NvfG90f2N8eCBfVvx6y/lWyrjZo+T18gnUzEApq
XlKzp3d6Gau5v/npOGFFFrBLocqlxC7Ca6STIOygdTDsK3oupGp5CAYeKvle
S9EiLAfximaBIqYZm7bvSl+6PHDtgbNh4EHk5mlgmNNQVgg21pquRidmBcH3
+NTXrgsUcIImr621AMLCuJqsVO0lmmKXYQ8YovXaaftaQraKgZg9C2LcZeps
BhYuHyYqSfa1swrozOyQahSxAASJXbGNA63EKW68VxzAnBHoRXmWTs1TJo2z
03g+p8/uihR019TygzY0Ct8/NV88HN17tINWu94Pzb0ZrRcCIqUd4opAYN8F
8oKXqIpZpjbuDzqJhrrw7nZsM0GfLrwl1pwxs5OM5qMBM2swld2Bs5XrG+Yw
/D6d7jJCMv3r29OXL9+a0yN+Bmuex1Dw638yr8PTg1VAv8o2IL9zwjRzBkkM
Yn+4KCYICrCBumErWzJEHOaOps09Il31REgv8VxqYkg9QznX1a7qoGI5tAUU
j2ajw0YBIngqDL8R8fzpN9jk/R1otbtRi143tNJUqi+MZ3svFJnfeo5L6yje
igYb7qnQoaTOaUUD4Yi2Pl0yQfhc+D2zA0zUMleJS+Lth4JSNLSpmmthIXrF
RdgFnYW7FFJkOJ47ddoxOSM357B507alYQl9cSttEg07eSo2htEY6mNfkzO8
6f2Y31AH/7TDkSa8mGdxXZdnyYdDs39PolWw0sHTA41hWecT+mtf/poS90J9
7f09+w3MvMmZff5k0Brh0DyWR2IwOKNVT+jho8ZDQHpoHgZgyJMHLcAOzX39
TlT4tDyD1yqfHhqdA7SyM7Q/NAdh0zOGiOCWh3UZc0HXMyDTodHJ/NH84Q8b
l+/Ml1WNAmR/X8Ef/a4Ay/pnyH3hxnOAw1oOFkVrRkBBSyAzi4qQ+F2GCQIs
ITxzQ4iaeDvRpPrYYzAwtKqKSaqRlGC7/M4FOTYwUJsGMWwLnxIYoC8HaslR
XyUSn4taDUFXwQnj8guu4vWhzYtTIVh4dygEwmcQkFkrUKu95ujmqSZufmX6
Tq1veqmgslmdYJ09n6krtVK7b1giTI/qgQ3jbogo1/aU+BYSxikL8e7XwAXr
Zlz5aEknlcTqzOCCP2Uy56hTvOQDSq4doJ3L0vyCLW9ckcR6VgZ+aMuUtIi0
78cWWLU1BH3EayBULV0iCF8+gYI1tmyzCz9i7eq0UPIJAY+UVk5cPRjL7o9J
FfhgTYjB40DdngUeHajTUs9QyXljx770iDdpOtWRo964rJ2D0PfTUVclfw3H
A3H/xbJes7SjXxxzvKVpu8TAOtrL0dir32FJ0M3vuhpNAG+zIh4MrjttbrMo
zwoNiO2dWx4vLHANcFxF1HC4SUxysEhEG2AUowVfPcLtlisEv6ykTCpNQEyu
DT/PyEbA/+JinHUL3fDOEEfnssSrui4SrsRUSY14rhWjNVmd+sE9iAfR2bSa
zuFB67B/G6+zIp6ab6E3kaR5LBWygsA/1kAcoiF45O6qKu/y7O6O0zzkIVM6
T7k7e33EZJqPdOS7+vPeCB9BL9PupC5vs1PXWL2MIaLLltXyRdBWlmFZpLkw
og09jiIuBMsmYMRT+nqsQNRDSzzt3sPHrtPeh24kDGTXl/VS1zl02SAsmany
qdkP3nr/s34kryzuPTXnX34ZPHfqHJ1RWE8JE/Zbc21HFkLZBsVB8Pb9u2N6
cuem3byjn/AkIwepyBBS+VVLPGFJFMVuWIy9T1mMOxt24M7NS6QI1VqgRs6l
TXmUQ7zlBA7LO7uQsaqTTRkoWD2XIKh/2QovkAT00ZHeqGJeS0xJ6F/26tlD
GFtuSpWE//yW8Gy8lOG29y38X37FQhR9tLtuwgzT4DD56GOAda/fWEEmgsM/
8P0Pqbcg89RmP/al5dE7SaHYyYurnV3zJ6vTjZgGqh9/8G1//GkXYKIEozlm
GvuuAJ6AkXeGYCIc0nYMF9rAjVOrv0He7Aih7ui4u4MOBNKARvfDb0iI3ZzC
54a3D7552hmn9U043WY6GQKtu2vaSR9zY9KO+y93OuPaKIvGDFtptN3kGde7
Pjjj2ph2GburqM10EHbU45h+yW6bjx35Bu8/qiuf3S07JKbQ5uAFff9GzHaJ
eU1ieIrDsNOFWvaS4cI38Wffjz+kP/7kgLv48Sdz+NRc4kQcsk52MbgEyU39
k3TA3IPAYGJZriU3veqODEOyyE942V4IjPV0KySQHy8wFtc7oIEzO3BYQbhL
TBxZns6Cgp7WQGL94M9efvvm3UvhvS5iDC9HW0g0qKcjH4kBJYsr7TiubWKb
y0JLba10V4FUjGml46XNWIQGoPEcnkotNLox09lbzHe2Zq/v2rQ75sbiEs9g
o1hLMgoOXHZPu88HoVPHxrhI7IGPwWmEu4zYSEkzXSxDnu18RDYoBPv48D7c
HhUroHE5FT/UzA3J5saKKPWGLek/rvoQpMUKN2OJF0rcWSbMs2cjpFOtY7nT
qGEwerj9aN5V3Tqoghko2epNUlmKa1F2VqLN3D9pOTop3zewblfKpnXDGUpo
h5E3X1at5HC7V0IBGrXYSEsOZEZUJE2RRZNJdSSOo8z14Xo4SUiYCVN3beGw
2DYx3ISNHHCKk7zHAQo511iE+3GeiENcYWRbbp6UcyKD1ZQ0QK4XzNQorirq
iJBhyLXO7EkvTgLpIk0Cw68MMB308nF2QYh12LogBhqalYaJW3fQ+o6NgDtP
2sn20DZnJLOlqjHryga+og6mtDczbdX54Oz9m7/ZIBve8KGmuXWiGzfl928p
lrHbi8qdMx/VbCVXvRluyZfHsEsnSDjmVGaUsU3F0uW7sejJwetyDyFsplJK
ZcL3GAWofEPeeA93bhft2A2IzBUV8EUJZPsduwrn4OpTFe5ahcQZ/pD7UYi1
yVkUQlw50Ux6O+CGjHoLx9c9ZadDZSgWHljHF0mugRTiYPO5+DfKbJ/EyWxU
aZuDuVgUcXFqPqSvcKbXaJQLVPAeGTkOmPwDzbXSKsmzpFSPu0tT4iLoLjXJ
NudrP4IrJzuz9WlTfN1fFQaaBFFG4ekflmRrEu6GlKwusvXev9BiUOoTb4Xh
98fs/16R+XxN0LKoqpTr+Essn4+t2W+ZzpAXBQ2dC6JwlDNSlb7TuGWNJOLE
sei+LbSu8VZ2p10U8gMRV6KH8hPYMI3X0aOReSHpwgis7Vusjkht7xOzLbzh
Wz3mjaJIpXGieGCEshXloXaKKBqmJcVaiYFwUK7xxOb7QDEC6BzuJthZbAHy
DpSDZuhi1+9i1fFKkjDVDBNEV4mRZueA4/WqXW7hhgnmuLPPLcxXgXSKABcL
3u8DWzMORGBDZUQdfdc1agARRW86GlEQ0OFsN9TN0E5UL7xr3meFNKLCnBfZ
tDUIu6ssECIqSACxgjoQ4UJqvRuJmNUEsh7ECFrHwZbrZ0BThRJurTCDMGqX
HOIbH1zgltygpMXYukqixmwwc+LNpV3LE2SKqW+J44qLXgT5qg8prE/ImYoI
4BXXXAynFWdpXGkyZ7dj3oaerqUyRQsVuI6/dylATfNNtBypWtu60ycxTgJk
OcKh+54vw6DBbVZj043ePA9tV+6ShS2chFD7559/9v5Ii6tnUPDPjsp54I1k
R/zTb8yvX1mPsa8Sdx1do6M+7hWo5R3WHqrslod1K6cGGnAYdxwwM06bXK4b
fI9kr0Erajl4bb9gEU0Ko7gTQ+r3N3Aba94w5XE6ll49aL2qdnWDcaSSAPMg
T7Aq8AS2UU5pthdTyZxGYQ0+HCMS0CjhZja81pMGMSJiArnMilkaJgbDem01
voEJQgNdMh+mTp2UrlYSMZrBpmPWVa5qL5GaHVos0poxXfSHUIpGaXp6AG/j
EGMHUVCIxnfiCq3QvmFLN4LJq9RKsPPCeB/s/WEtv4nWAtxuU9kL2+gMBq0z
NWh1Ke2HryAk/+Roy9t+9Rqa4ObJ541ih+GllJU1oNss+eat0ZzC2qzWaK+N
5DHEvxgmV+j9FsgUdCHvaRnejSF1uF1Qkb2nyPXLe9GNlXCXudgAJ+fdZIfk
UKudeoNA9XW4o0zskPPiCctTVtGrOfiQUPxrjdnXMliSgyCz31B2y7psg0iS
poonCol0LBdia1LbQMRFvbyWBUORRO3q2TureqTdr924YbB7I4M39/XK3apu
vwkjqJUoVx3ayAhXKNbfd/gBtTECpS283DlAHR9wz5cAeY+NBb9M4spWum1Y
KTVXiiNm48rdjuwFBHezgFx3E8/zQsLF+Volq0Mn9qqnKszNtlqizoZvIVfs
tjoqxgf85WXKuTplMi4Kgftc6nq5Skx8vyJigaFWsC4CHZOvTAzTf3yZNaAB
CcQj871KxrVUY3AEhLt6i7qYFFlIM1J0Vm830rNBjg+dvq4XInsvJR1XyChn
tspZDhBv7NLqYk+4SLlEFbbSg33MFKCYolCDXE99fPTdUYuhkLKWEg4gzwEv
08qW53Nhh8XEBhhY79+gcRBy8Kh1jip5yU3N/WmvzjcpCchs+FIXmLtvTB00
NjDxmEtXJnzWk/AHmtgBw921fawl9AxWUprFEO9shUoOCHqZXyYZEoBe6o04
UfQqHtPOf7T+uf6Cr/v34bqTy3NQUHTD/YLXfiQn43ziSA/ZI1gHjqK++sCf
AZD3Pt8KDvTfKHO7tQhodPCAmnS9h52PWiZmfIkZdx1/N9fmjA4eAcYeF95t
ql9GB4+pZWeVe2rWRQdPTI9nbUONgegeVq7Pj9b5oCOs4+sHpu0F63wXCB7h
Bntx8jdu8YZqxds3altF4nCj3n5S1eH+TeqrMOw36fgWtYTv7fEy9xQUvn2x
YEtV2gff3Sz192+5/o8aMNhZvrPJOICl/+6t6wjL8lzF2XB5+gt7MM8/sTca
tgXJZgInn/5TkX55hv6auTC0w97d5EQFq+y4AvOuFBbn8xbq9uKQO39H4Fbp
A+wq5nhKdte2rA96VKAK2HZAUdy9FlnC3erImYc8nuZ1zIpV7hSQuJyc01kr
dg25+nRv/4leMZbauyi9vLwoprTb0nD/4D41tMvp1PlmMX6+vKIspquJiFYb
N1ovNevf1maumpbL8jeXiJtkKYsQpGEHqZdy/YQVhat2GOIhZroOMsjU3yrC
MF9hZNMWcPvsFGDYiwtgpLJMsFPHxhbqAtqUKVd2gqTTqY1fbLrguFv/2t5D
y/vIBhrJbYMRVu5sgCCDHUD1CGLxc7n5VEVjM8sKtRixSjRv3E10ah21eumg
TXaaSDnjgtNQLY5171qlHvnaz8Z9EScrrgzpsYhD3ZNsGTiMAjGZiwhx7dSk
92ZVBmNVajaJv1tVJExnxWgPyLKzjJrj/uJ4ciEenlUegjHmAlylIbycXPhw
8LWfbWh59rpLJdVm9NriRnkl3TBBRH+7bZDhGa44RwzkWvfXhwpnKWol+XDW
AGYugJxUdj2E52lmc3BLcTCGjQN0Nxc37+Xk+3n7qxmIit1J6f3MWzx7Uyy7
Hpi+g2k3REmn4QQq+EDiqTk5deBuRBEtnPZVVefZKvO3mPVsWni1XsBA1MPU
uGtTvfWsT+mc1WyncSOoM2TYIiDqj7u508+dzhbsPd8WZDfH666SyOhjK0hJ
jjOt1S11yDk3F5uRsY7p8CgkhjSPp5coeozyPT3Xl8KE1RcNzmjHcaCaCs5L
6yoVJDBZ6LqwzVtzdOw1wxo/PuRg5BI6+sjKY3F/Am27/IiUIuPbxv3K4I7S
7JLrEMDuKFN0CqgUP7CVkQOa2ZgAZu9YFlS1N/Os3eXK7j5STVXTAq5cNDsZ
OusnZqk2l0L/0LQANjCgXG6ZpeJ2YKM+X6vlrnzzF5q/xVIGF69ae0S4ES66
wsUL0QN7q3BdLDSzhW23uNlKw+19IQktBqM37ojZS4Jmi3LIV2MDidgbnvMG
Dr2GG2SjNG7Gihs3os1XRM3EZZKe4gh8LW+hYQKtPINJWVRBxLnxBfSR+YEj
UFiW1oRtEKRNDoR5w+683a4QczR/wZWtCC6z4ESeKIIwS/LX5ILly29xVw0b
UH/9AoVjh5PpNLtuW1jDag02aZk/slfdNd3RkkT6cH9PRSG7k5Ifl7jru5sq
NzoUAVVkdPSfNuzxR/x9+oGW/aZwZ5e/+Ic/rHJ3cLg2xHxRLXMYyK137z41
O75SdijQPP3GRZJzOvIId/3duj72bqR+mQAMHr3aMrwebk+/CUfkK85IucOr
YR3PdyPqeuPkquHkvEA1jt84irlr1DzOMfw0aHPm3U43mA0Gtqj4u2R59pbx
evfWfXmldtAoUP45fbV03d8GV9tIMfj8vlzVGf+v01fLVdHurGnYCHv6TZ31
eOr7HZO7PV329hiYQwYheL1OGIL0tztCP9PHI9/BRnEmRiRqbJNA/dPKdFsq
uW2v/Udjccb67b6Vin6f9o0t5/dpX/XV8+E1sqmuvgfsA+vNZxxpc/aCP7IM
8bYD2ix+TuD/2ocQf8LnWqHPghn0hPMC4Tw7/UX6bgtjUGqvNciLdoG9Twcb
xfu2gI5KZ78f+D2DdaYgNQI/abPdVRYh+hzy6TLoPPeXUP9gCWrTDRk/RT9F
UYeqg1n2BsXbud3yy3Yk6id+3vZVWnq73dctWaMtZ2xYmNv27mutbujfb/Bt
u+ypyLWhb3/xrbXY2pPn/9ULUW4Jh7n79JaQzOVKjX9Yx3LZyO/f/T+o24yv
EPnH9r4pkLhn9Th79xPXmnNtb7mA1PbeLdqGq0Kf3L/1J9T4QVuq34jeIM6v
WDZyn7TJ28lTfza+doVWiRg2yshsKJsx6HzNd+fe4lOU6uh+ze7lz/8clU8+
/2uXbuw+Q+kMPOi2vaH6UfeDLUWQNjQuyib4thhJq+xMd1fPXvqiMzYcfPPO
WorYsHsW+Tdtj0X4Detvkbu9wITHWxfTPNxcQMo8ar/DUpnH0f+vgfRfvwbS
71+35/cuThc1SJ9OIyHMmT4YauWcm5r5wjI3NNTSBkqo7WE8gXZ79tTZ7ozp
MmKrE16Lg9PJgRfJeoutqddXig2oeXk+u8v2RRmux6hrx7Pkb+1eZr9zSAbq
g/7rOUnbKZfGtz14cFMKZdj4YWf4ThKUb/xoU2pT5x81ftyfsNP3j1o/aTfu
xrq7xvfub4sXb/V870G3rHbTAOKa7m+42KAL7cbLDNqD366it9vgtjWiO/SD
rXcNBA0fbq35HzR8dONdA9rw8Y2F/7Xhk85NG12c9nPerP6aEEM3q7kmxM2u
PtvcucebLwHpQcftyqa5t6cz7WctzQXu5RV+bVGl7T8A59QcjSavAAA=

-->

</rfc>

