<?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.26 (Ruby 3.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc rfcedstyle="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>
<?rfc toc_levels="4"?>

<rfc ipr="trust200902" docName="draft-ietf-suit-firmware-encryption-24" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Encrypted Payloads in SUIT Manifests">Encrypted Payloads in SUIT Manifests</title>

    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization abbrev="H-BRS">University of Applied Sciences Bonn-Rhein-Sieg</organization>
      <address>
        <email>Hannes.Tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="R." surname="Housley" fullname="Russ Housley">
      <organization abbrev="Vigil Security">Vigil Security, LLC</organization>
      <address>
        <email>housley@vigilsec.com</email>
      </address>
    </author>
    <author initials="B." surname="Moran" fullname="Brendan Moran">
      <organization>Arm Limited</organization>
      <address>
        <email>Brendan.Moran@arm.com</email>
      </address>
    </author>
    <author initials="D." surname="Brown" fullname="David Brown">
      <organization>Linaro</organization>
      <address>
        <email>david.brown@linaro.org</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="2025" month="March" day="19"/>

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

    <abstract>


<?line 98?>

<t>This document specifies techniques for encrypting software, firmware,
machine learning models, and personalization data by utilizing the IETF
SUIT manifest. Key agreement is provided by ephemeral-static (ES)
Diffie-Hellman (DH) and AES Key Wrap (AES-KW). ES-DH uses public key
cryptography while AES-KW uses a pre-shared key. Encryption of the
plaintext is accomplished with conventional symmetric key cryptography.</t>



    </abstract>



  </front>

  <middle>


<?line 107?>

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

<t>Vulnerabilities in Internet of Things (IoT) devices have highlighted the need for a reliable and secure firmware update mechanism, especially for constrained devices. To protect firmware images, the SUIT manifest format was developed <xref target="I-D.ietf-suit-manifest"/>. A manifest is a bundle of metadata about the firmware for an IoT device, where to find the firmware, and the devices to which it applies. <xref target="RFC9124"/> outlines the necessary information a SUIT manifest has to provide. In addition to protecting against modification via digital signatures or message authentication codes, the format can also offer confidentiality.</t>

<t>Encryption prevents third parties, including attackers, from accessing the payload. Attackers often require detailed knowledge of a binary, such as a firmware image, to launch successful attacks. For instance, return-oriented programming (ROP) <xref target="ROP"/> requires access to the binary, and encryption makes writing exploits significantly more difficult. Beyond ensuring the confidentiality of the binary itself, protecting the confidentiality of the source code will also be necessary to prevent reverse engineering and reproduction of the firmware.</t>

<t>The initial motivation for this document was firmware encryption. However, the use of SUIT manifests has expanded to encompass other scenarios that require integrity and confidentiality protection, including:</t>

<t><list style="symbols">
  <t>Software packages</t>
  <t>Personalization and configuration data</t>
  <t>Machine learning models</t>
</list></t>

<t>These additional use cases stem from the work on Trusted Execution Environment Provisioning (TEEP), as detailed in <xref target="RFC9397"/> and <xref target="I-D.ietf-teep-usecase-for-cc-in-network"/>. The distinction between software and firmware is clarified in <xref target="RFC9019"/>.</t>

<t>For consistency and simplicity, we use the term "payload" generically to refer to all objects subject to encryption.</t>

<t>The payload is encrypted using a symmetric content encryption key, which can be established through various mechanisms. This document defines two content key distribution methods for use with the SUIT manifest:</t>

<t><list style="symbols">
  <t>Ephemeral-Static (ES) Diffie-Hellman (DH), and</t>
  <t>AES Key Wrap (AES-KW).</t>
</list></t>

<t>The first method relies on asymmetric cryptography, while the second uses symmetric cryptography.</t>

<t>Our design aims to reduce the number of content key distribution methods for payload encryption, thereby increasing interoperability between different SUIT manifest parser implementations. The mandatory-to-implement
algorithms are described in a separate document <xref target="I-D.ietf-suit-mti"/>.</t>

<t>The goal of this specification is to protect payloads both during end-to-end transport (from the distribution system to the device) and at rest when stored on the device. Constrained devices often employ eXecute In Place (XIP), a method of executing code directly from flash memory rather than loading it into RAM. Many of these devices lack hardware-based, on-the-fly decryption for code stored in flash memory, which may require decrypting and storing firmware images in on-chip flash before execution. However, we expect hardware-based, on-the-fly decryption to become more common in the future, enhancing confidentiality at rest.</t>

</section>
<section anchor="conventions-and-terminology"><name>Conventions and Terminology</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>

<t>This document assumes familiarity with the SUIT manifest <xref target="I-D.ietf-suit-manifest"/>,
the SUIT information model <xref target="RFC9124"/>, and the SUIT architecture <xref target="RFC9019"/>.</t>

<t>The following abbreviations are used in this document:</t>

<t><list style="symbols">
  <t>Key Wrap (KW), defined in <xref target="RFC3394"/> (for use with AES)</t>
  <t>Key-Encryption Key (KEK) <xref target="RFC3394"/></t>
  <t>Content-Encryption Key (CEK) <xref target="RFC5652"/></t>
  <t>Ephemeral-Static (ES) Diffie-Hellman (DH) <xref target="RFC9052"/></t>
  <t>Authenticated Encryption with Associated Data (AEAD)</t>
  <t>Execute in Place (XIP)</t>
</list></t>

<t>The terms sender and recipient have the following meaning:</t>

<t><list style="symbols">
  <t>Sender: Entity that sends an encrypted payload.</t>
  <t>Recipient: Entity that receives an encrypted payload.</t>
</list></t>

<t>Additionally, we introduce the term "distribution system" (or distributor)
to refer to an entity that knows the recipients of payloads. It is important
to note that the distribution system is far more than a file server. For
use of encryption, the distribution system either knows the public key
of the recipient (for ES-DH), or the KEK (for AES-KW).</t>

<t>The author, which is responsible for creating the payload, does not
know the recipients. The author may, for example, be a developer building
a firmware image.</t>

<t>The author and the distribution system are logical roles. In some
deployments these roles are separated in different physical entities
and in others they are co-located.</t>

</section>
<section anchor="arch"><name>Architecture</name>

<t><xref target="RFC9019"/> outlines the architecture for distributing payloads and manifests from an author to devices. However, it does not cover payload encryption in detail. This document extends that architecture to support encryption, as illustrated in <xref target="arch-fig"/>.</t>

<t>To encrypt a payload, it is essential to know the recipient. For AES-KW, the Key Encryption Key (KEK) must be known, and for ES-DH, the sender needs access to the recipient's public key. This public key and its associated parameters may be found in the recipient's X.509 certificate <xref target="RFC5280"/>. For authentication and integrity protection, recipients must be provisioned with a trust anchor when the manifest is protected by a digital signature. If a MAC is used for manifest protection, a symmetric key must be shared between the recipient and the sender.</t>

<t>With encryption, the author cannot simply create and sign a manifest for the payload, as the recipients are often unknown. Therefore, the author must collaborate with the distribution system. The degree of this collaboration is discussed below.</t>

<t>The primary purpose of encryption is to protect against adversaries along the path between the distribution system and the device. There is also a risk that adversaries may extract the decrypted firmware image from the device itself. Consequently, the device must be safeguarded against physical attacks. Such countermeasures are outside the scope of this specification.</t>

<t>Note: It is assumed that a mutually authenticated communication channel with integrity and confidentiality protection exists between the author and the distribution system. For example, the author could upload the manifest and firmware image to the distribution system via a mutually authenticated HTTPS REST API.</t>

<figure title="Architecture for the distribution of Encrypted Payloads." anchor="arch-fig"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="384" width="472" viewBox="0 0 472 384" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
<path d="M 8,32 L 8,96" fill="none" stroke="black"/>
<path d="M 8,160 L 8,224" fill="none" stroke="black"/>
<path d="M 8,288 L 8,352" fill="none" stroke="black"/>
<path d="M 96,32 L 96,96" fill="none" stroke="black"/>
<path d="M 96,160 L 96,224" fill="none" stroke="black"/>
<path d="M 96,288 L 96,352" fill="none" stroke="black"/>
<path d="M 128,64 L 128,320" fill="none" stroke="black"/>
<path d="M 328,160 L 328,208" fill="none" stroke="black"/>
<path d="M 344,48 L 344,80" fill="none" stroke="black"/>
<path d="M 384,80 L 384,152" fill="none" stroke="black"/>
<path d="M 432,48 L 432,80" fill="none" stroke="black"/>
<path d="M 448,160 L 448,208" fill="none" stroke="black"/>
<path d="M 8,32 L 96,32" fill="none" stroke="black"/>
<path d="M 344,48 L 432,48" fill="none" stroke="black"/>
<path d="M 104,64 L 128,64" fill="none" stroke="black"/>
<path d="M 344,80 L 432,80" fill="none" stroke="black"/>
<path d="M 8,96 L 96,96" fill="none" stroke="black"/>
<path d="M 8,160 L 96,160" fill="none" stroke="black"/>
<path d="M 328,160 L 448,160" fill="none" stroke="black"/>
<path d="M 104,192 L 328,192" fill="none" stroke="black"/>
<path d="M 328,208 L 448,208" fill="none" stroke="black"/>
<path d="M 8,224 L 96,224" fill="none" stroke="black"/>
<path d="M 8,288 L 96,288" fill="none" stroke="black"/>
<path d="M 104,320 L 128,320" fill="none" stroke="black"/>
<path d="M 8,352 L 96,352" fill="none" stroke="black"/>
<polygon class="arrowhead" points="392,152 380,146.4 380,157.6" fill="black" transform="rotate(90,384,152)"/>
<polygon class="arrowhead" points="112,320 100,314.4 100,325.6" fill="black" transform="rotate(180,104,320)"/>
<polygon class="arrowhead" points="112,192 100,186.4 100,197.6" fill="black" transform="rotate(180,104,192)"/>
<polygon class="arrowhead" points="112,64 100,58.4 100,69.6" fill="black" transform="rotate(180,104,64)"/>
<g class="text">
<text x="52" y="52">Device</text>
<text x="48" y="68">1</text>
<text x="388" y="68">Author</text>
<text x="424" y="116">Payload</text>
<text x="464" y="116">+</text>
<text x="428" y="132">Manifest</text>
<text x="52" y="180">Device</text>
<text x="176" y="180">Payload</text>
<text x="216" y="180">+</text>
<text x="260" y="180">Manifest</text>
<text x="388" y="180">Distribution</text>
<text x="48" y="196">2</text>
<text x="388" y="196">System</text>
<text x="56" y="260">...</text>
<text x="52" y="308">Device</text>
<text x="48" y="324">n</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
 +----------+
 |  Device  |                              +----------+
 |    1     |<--+                          |  Author  |
 |          |   |                          +----+-----+
 +----------+   |                               |
                |                               | Payload +
                |                               | Manifest
                |                               v
 +----------+   |                        +--------------+
 |  Device  |   |  Payload + Manifest    | Distribution |
 |    2     |<--+------------------------+    System    |
 |          |   |                        +--------------+
 +----------+   |
                |
      ...       |
                |
 +----------+   |
 |  Device  |   |
 |    n     |<--+
 |          |
 +----------+
]]></artwork></artset></figure>

<t>When the author delegates encryption rights to the distributor, two models are possible:</t>

<t><list style="numbers" type="1">
  <t>Replacing the COSE_Encrypt and Re-signing the Manifest:
The distributor replaces the COSE_Encrypt structure in the manifest and then signs the manifest again. However, since the COSE_Encrypt structure is within a signed container, this presents a challenge: replacing COSE_Encrypt alters the digest of the manifest, thereby invalidating the signature. As a result, the distributor must be able to sign the new manifest. If this is the case, the distributor gains the authority to construct and sign manifests, effectively allowing them to sign code and giving them full control over the recipient. Distributors typically perform re-encryption online to manage large numbers of devices efficiently, which prevents air-gapping the signing operations. This approach necessitates the secure storage of signing keys, as outlined in Section <xref target="RFC9124" section="4.3.17" sectionFormat="bare"/> and Section <xref target="RFC9124" section="4.3.18" sectionFormat="bare"/> of <xref target="RFC9124"/>. Despite these issues, this model represents the current standard practice for IoT firmware updates.</t>
  <t>Two-Layer Manifest System:
The distributor creates a new manifest that overrides the COSE_Encrypt using the dependency system defined in <xref target="I-D.ietf-suit-trust-domains"/>. This method introduces additional overhead, including one more signature verification, one extra manifest, and the need for extra mechanisms on the recipient side to handle dependency processing. While this adds complexity, it also enhances security.</t>
</list></t>

<t>These two models offer different threat profiles for the distributor. If the distributor is limited to encryption rights, an attacker who breaches the distributor can only launch a limited attack by encrypting a modified binary. However, recipients will detect the attack during the image digest check and immediately revert to the correct image.</t>

<t>It is RECOMMENDED that distributors adopt the two-layer manifest approach to distribute content encryption keys without re-signing the manifest, despite the added complexity and the increased number of signature verifications required on the recipient side.</t>

</section>
<section anchor="parameters"><name>Encryption Extensions</name>

<t>Extending the SUIT manifest to support payload encryption requires minimal
changes and is achieved by adding the suit-parameter-encryption-info field
to the SUIT_Parameters structure, as illustrated in <xref target="parameter-fig"/>. When
the suit-parameter-encryption-info is included, the manifest processor will
attempt to decrypt data during copy or write operations.</t>

<t>The SUIT_Encryption_Info structure contains the content key distribution
information. The details of the SUIT_Encryption_Info structure are provided
in <xref target="AES-KW"/> (for AES-KW) and <xref target="ES-DH"/> (for ES-DH).</t>

<figure title="CDDL of the SUIT_Parameters Extension." anchor="parameter-fig"><sourcecode type="cddl"><![CDATA[
SUIT_Parameters //= (suit-parameter-encryption-info
    => bstr .cbor SUIT_Encryption_Info)

suit-parameter-encryption-info = TBD19
]]></sourcecode></figure>

<t>RFC Editor's Note (TBD19): The value for the suit-parameter-encryption-info
parameter is set to 19, as the proposed value.</t>

<t>Once a CEK is available, the steps outlined in <xref target="content-enc"/> apply to both
content key distribution methods described in this section.</t>

<t>When used with the "Directive Write" and "Directive Copy" directives, the
SUIT_Encryption_Info structure MUST be included in either the
suit-directive-override-parameters or the suit-directive-set-parameters.
An implementation conforming to this specification MUST support both of these parameters.</t>

<section anchor="directive-write"><name>Directive Write</name>

<t>An author uses the Directive Write (suit-directive-write) to decrypt the content specified
by suit-parameter-content using suit-parameter-encryption-info. This directive is used to
write a specific data directly to a component.</t>

<t><xref target="encryption-info-consumed-with-write"/> illustrates an example of the Directive Write,
which is described in the CDDL in <xref target="parameter-fig"/>. The
encrypted payload specified by parameter-content, represented as h'EA1...CED'
in the example, is decrypted using the SUIT_Encryption_Info structure referenced
by parameter-encryption-info, i.e., h'D86...1F0' in L3. The resulting plaintext payload
is then stored in component #0, which is the default if no specific component is explicitly designated.</t>

<figure title="Example showing the extended suit-directive-write." anchor="encryption-info-consumed-with-write"><artwork><![CDATA[
/  1/  / directive-override-parameters / 20, {
/  2/    / parameter-content / 18: h'EA1...CED',
/  3/    / parameter-encryption-info / TBD19: h'D86...1F0'
/  4/  },
/  5/  / directive-write / 18, 15
]]></artwork></figure>

<t>RFC Editor's Note (TBD19): The value for the parameter-encryption-info
parameter is set to 19, as the proposed value.</t>

</section>
<section anchor="directive-copy"><name>Directive Copy</name>

<t>An author uses the Directive Copy (suit-directive-copy) to decrypt the content of the
component specified by suit-parameter-source-component using suit-parameter-encryption-info.
This directive is used to copy data from one component to another.</t>

<t><xref target="encryption-info-consumed-with-copy"/> illustrates the Directive Copy.
In this example the encrypted payload is found at the URI indicated
by the parameter-uri, i.e., "coaps://example.com/encrypted.bin" in L3. The
encrypted payload will be downloaded and stored in component #1,
as indicated by directive-set-component-index in L1.</t>

<t>Then, the information in the SUIT_Encryption_Info structure referred
to by parameter-encryption-info, i.e., h'D86...1F0' in L9, will be used to
decrypt the content in component #1 and the resulting plaintext
payload will be stored into component #0 (as set in L7).
The command in L12 invokes the operation.</t>

<figure title="Example showing the extended suit-directive-copy." anchor="encryption-info-consumed-with-copy"><artwork><![CDATA[
/  1/  / directive-set-component-index / 12, 1,
/  2/  / directive-override-parameters / 20, {
/  3/    / parameter-uri / 21: "coaps://example.com/encrypted.bin",
/  4/   },
/  5/  / directive-fetch / 21, 15,
/  6/
/  7/  / directive-set-component-index / 12, 0,
/  8/  / directive-override-parameters / 20, {
/  9/    / parameter-encryption-info / TBD19: h'D86...1F0',
/ 10/    / parameter-source-component / 22: 1
/ 11/  },
/ 12/  / directive-copy / 22, 15
]]></artwork></figure>

<t>RFC Editor's Note (TBD19): The value for the suit-parameter-encryption-info
parameter is set to 19, as the proposed value.</t>

</section>
<section anchor="authenticating-the-payload"><name>Authenticating the Payload</name>

<t>The payload to be encrypted MAY be detached and, in that case, it is
not covered by the digital signature or the MAC protecting the manifest.
(To be more precise, the suit-authentication-wrapper found in the envelope
contains a digest of the manifest in the SUIT Digest Container.)</t>

<t>The lack of authentication and integrity protection of the payload is
particularly a concern when a cipher without integrity protection is
used.</t>

<t>To provide authentication and integrity protection of the payload
in the detached case a SUIT Digest Container with the hash
of the encrypted and/or plaintext payload MUST be included in the
manifest. See suit-parameter-image-digest parameter in <xref section="8.4.8.6" sectionFormat="of" target="I-D.ietf-suit-manifest"/>.</t>

<t>Once a CEK is available, the steps described in <xref target="content-enc"/> are applicable.
These steps apply to both content key distribution methods.</t>

<t>More detailed examples for the two directives can be found in <xref target="example-AES-KW-write"/>.</t>

</section>
</section>
<section anchor="content-key-distribution"><name>Content Key Distribution</name>

<t>The following sub-sections describe two content key distribution methods:
AES Key Wrap (AES-KW) and Ephemeral-Static Diffie-Hellman (ES-DH). While
many other methods are specified in the literature and supported by COSE,
AES-KW and ES-DH were chosen for their widespread use in the market today.
They were selected for their maturity, differing security properties, and
strong interoperability.</t>

<t>Interoperability requirements for content key distribution methods differ:
since a device typically supports only one of the two specified methods,
the distribution system must be aware of the supported method.
Restricting a constrained device to a single content key distribution
method also helps minimize code size.</t>

<t>Both content key distribution methods require the CEKs to be randomly
generated. The guidelines for random number generation in <xref target="RFC8937"/>
MUST be followed.</t>

<t>When sending an encrypted payload to multiple recipients, various
deployment options are available. The following notation is used to
explain these options:</t>

<figure><artwork><![CDATA[
  - KEK[R1, S] refers to a KEK shared between recipient R1 and
    the sender S.
  - CEK[R1, S] refers to a CEK shared between R1 and S.
  - CEK[*, S] or KEK[*, S] are used when a single CEK or a single
    KEK is shared with all authorized recipients by a given sender
    S in a certain context.
  - ENC(plaintext, k) refers to the encryption of plaintext with
    a key k.
]]></artwork></figure>

<section anchor="AES-KW"><name>Content Key Distribution with AES Key Wrap</name>

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

<t>The AES Key Wrap (AES-KW) algorithm, as described in <xref target="RFC3394"/>,
is used to encrypt a randomly generated content-encryption key (CEK)
with a pre-shared key-encryption key (KEK). The COSE conventions for using
AES-KW are specified in <xref section="8.5.2" sectionFormat="of" target="RFC9052"/> and in <xref section="6.2.1" sectionFormat="of" target="RFC9053"/>. The encrypted CEK is carried within the COSE_recipient structure
, which includes the necessary information for AES-KW. The COSE_recipient structure,
a substructure of COSE_Encrypt, contains the CEK
encrypted by the KEK.</t>

<t>To ensure high security when using AES Key Wrap, it is important that the
KEK is of high entropy and that implementations protect the KEK
from disclosure. A compromised KEK could expose all data encrypted with it,
including binaries and configuration data.</t>

<t>The COSE_Encrypt structure conveys the information needed to encrypt the payload,
including details such as the algorithm and IV. Even though the payload may
be conveyed as detached content, the encryption information is still embedded
in the COSE_Encrypt.ciphertext structure.</t>

</section>
<section anchor="deployment-options"><name>Deployment Options</name>

<t>There are three deployment options for use with AES Key Wrap for payload
encryption:</t>

<t><list style="symbols">
  <t>If all recipients (typically of the same product family) share the same KEK,
a single COSE_recipient structure contains the encrypted CEK. The sender executes
the following steps:</t>
</list></t>

<figure><artwork><![CDATA[
     1. Fetch KEK[*, S]
     2. Generate CEK
     3. ENC(CEK, KEK)
     4. ENC(payload, CEK)
]]></artwork></figure>

<t>This deployment option is strongly discouraged. An attacker gaining access to
the KEK will be able to encrypt and send payloads to all recipients configured
to use this KEK.</t>

<t><list style="symbols">
  <t>If recipients have different KEKs, then multiple COSE_recipient structures
are included but only a single CEK is used. Each COSE_recipient structure
contains the CEK encrypted with the KEKs appropriate for a given recipient.
The benefit of this approach is that the payload is encrypted only once with
a CEK while there is no sharing of the KEK across recipients. Hence, authorized
recipients still use their individual KEK to decrypt the CEK and to subsequently
obtain the plaintext. The steps taken by the sender are:</t>
</list></t>

<figure><artwork><![CDATA[
    1.  Generate CEK
    2.  for i=1 to n
        {
    2a.    Fetch KEK[Ri, S]
    2b.    ENC(CEK, KEK[Ri, S])
        }
    3.  ENC(payload, CEK)
]]></artwork></figure>

<t><list style="symbols">
  <t>The third option is to use different CEKs encrypted with KEKs of
authorized recipients. This approach is appropriate when no benefits can
be gained from encrypting and transmitting payloads only once. Assume there
are n recipients with their unique KEKs - KEK[R1, S], ..., KEK[Rn, S] and
unique CEKs. The sender needs to execute the following steps:</t>
</list></t>

<figure><artwork><![CDATA[
    1.  for i=1 to n
        {
    1a.    Fetch KEK[Ri, S]
    1b.    Generate CEK[Ri, S]
    1c.    ENC(CEK[Ri, S], KEK[Ri, S])
    1d.    ENC(payload, CEK[Ri, S])
    2.  }
]]></artwork></figure>

</section>
<section anchor="the-cddl-of-suitencryptioninfo-for-aes-kw-binary"><name>The CDDL of SUIT_Encryption_Info for AES-KW binary</name>

<t>The CDDL for the AES-KW binary is shown in <xref target="cddl-aeskw"/>.
empty_or_serialized_map and header_map are structures defined in <xref target="RFC9052"/>.</t>

<figure title="CDDL for AES-KW-based Content Key Distribution" anchor="cddl-aeskw"><sourcecode type="cddl"><![CDATA[
SUIT_Encryption_Info_AESKW = #6.96([
  protected   : outer_header_map_protected,
  unprotected : outer_header_map_unprotected,
  ciphertext  : bstr / nil,
  recipients  : [ + COSE_recipient_AESKW ]
])

outer_header_map_protected = empty_or_serialized_map
outer_header_map_unprotected = header_map

COSE_recipient_AESKW = [
  protected   : bstr .size 0 / bstr .cbor empty_map,
  unprotected : recipient_header_unpr_map_aeskw,
  ciphertext  : bstr        ; CEK encrypted with KEK
]

empty_map = {}

recipient_header_unpr_map_aeskw =
{
  ? 1 => int / tstr,  ; content encryption algorithm identifier
  ? 4 => bstr,        ; identifier of the KEK
                      ; pre-shared with the recipient
  * label => values   ; extension point
}
]]></sourcecode></figure>

<t>Note that the AES-KW algorithm, as defined in <xref section="2.2.3.1" sectionFormat="of" target="RFC3394"/>,
does not have public parameters that vary on a per-invocation basis. Hence,
the protected header in the COSE_recipient structure is a byte string
of zero length.</t>

</section>
</section>
<section anchor="ES-DH"><name>Content Key Distribution with Ephemeral-Static Diffie-Hellman</name>

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

<t>Ephemeral-Static Diffie-Hellman (ES-DH) is a public key encryption scheme
that enables encryption using the recipient's public key. There are several
variations of this scheme; this document adopts the version specified in
<xref section="8.5.5" sectionFormat="of" target="RFC9052"/>.</t>

<t>The structure is composed of two layers:</t>

<t><list style="symbols">
  <t>Layer 0: Contains content encrypted with a Content Encryption Key (CEK).
The content may be provided separately.</t>
  <t>Layer 1: Uses the AES Key Wrap (AES-KW) algorithm to encrypt the randomly
generated CEK with a Key Encryption Key (KEK) derived via ES-DH. The
resulting symmetric key is processed through an HKDF-based key derivation
function <xref target="RFC5869"/>.</t>
</list></t>

<t>This two-layer structure combines ES-DH with AES-KW and HKDF, referred to
as ECDH-ES + AES-KW. An example can be found in <xref target="esdh-aesgcm-example"/>.</t>

<t>Another variant of the ES-DH algorithm, called ECDH-ES + HKDF, does not
utilize AES Key Wrap. However, this version is not covered in this document.</t>

</section>
<section anchor="deployment-options-1"><name>Deployment Options</name>

<t>This approach supports only two deployment options, as it assumes that each
recipient is always equipped with a device-specific public/private key pair.</t>

<t><list style="symbols">
  <t>When a sender transmits a payload to multiple recipients, all recipients
receive the same encrypted payload, meaning the same CEK is used to encrypt
the content. For each recipient, a separate COSE_recipient structure is used,
which contains the CEK encrypted with the recipient-specific KEK. To derive
the KEK, each COSE_recipient structure includes a COSE_recipient_inner
structure that carries the sender's ephemeral key and an identifier for the
recipient's public key.</t>
</list></t>

<t>The steps taken by the sender are:</t>

<figure><artwork><![CDATA[
    1.  Generate CEK
    2.  for i=1 to n
        {
    2a.     Generate KEK[Ri, S] using ES-DH
    2b.     ENC(CEK, KEK[Ri, S])
        }
    3.  ENC(payload,CEK)
]]></artwork></figure>

<t><list style="symbols">
  <t>The alternative is to encrypt each device specific payload with a unique content encryption
key (CEK), resulting in a manifest per device specific payload. his approach is useful when payloads contain
device-specific information or when the optimization in previous approach are not applicable
or not valuable enough. In this case, the encryption operation becomes
ENC(payload_i, CEK[Ri, S]) where each recipient Ri receives a unique CEK. Assume
that KEK[R1, S],..., KEK[Rn, S] have been generated for the recipients using ES-DH.
The sender must then follow these steps:</t>
</list></t>

<figure><artwork><![CDATA[
    1.  for i=1 to n
        {
    1a.     Generate KEK[Ri, S] using ES-DH
    1b.     Generate CEK[Ri, S]
    1c.     ENC(CEK[Ri, S], KEK[Ri, S])
    1d.     ENC(payload, CEK[Ri, S])
        }
]]></artwork></figure>

</section>
<section anchor="the-cddl-of-suitencryptioninfo-for-es-dh-binary"><name>The CDDL of SUIT_Encryption_Info for ES-DH binary</name>

<t>The CDDL for the ECDH-ES+AES-KW binary is provided in <xref target="cddl-esdh"/>.
Only the essential parameters are included. The structures empty_or_serialized_map
and header_map are defined in <xref target="RFC9052"/>.</t>

<figure title="CDDL for ES-DH-based Content Key Distribution" anchor="cddl-esdh"><sourcecode type="cddl"><![CDATA[
SUIT_Encryption_Info_ESDH = #6.96([
  protected   : outer_header_map_protected,
  unprotected : outer_header_map_unprotected,
  ciphertext  : bstr / nil,
  recipients  : [ + COSE_recipient_ESDH ]
])

outer_header_map_protected = empty_or_serialized_map
outer_header_map_unprotected = header_map

COSE_recipient_ESDH = [
  protected   : bstr .cbor recipient_header_map_esdh,
  unprotected : recipient_header_unpr_map_esdh,
  ciphertext  : bstr        ; CEK encrypted with KEK
]

recipient_header_map_esdh =
{
  ?  1 => int / tstr, ; content encryption algorithm identifier
  * label => values   ; extension point
}

recipient_header_unpr_map_esdh =
{
  ? 4 => bstr,        ; identifier of the recipient public key
   -1 => COSE_Key,    ; ephemeral public key for the sender
  * label => values   ; extension point
}
]]></sourcecode></figure>

<t>See <xref target="content-enc"/> for a description on how to encrypt the payload.</t>

</section>
<section anchor="context-information-structure"><name>Context Information Structure</name>

<t>The context information structure ensures that the derived keying material
is "bound" to the specific context of the transaction. This specification
reuses the structure defined in <xref section="5.2" sectionFormat="of" target="RFC9053"/>, with modifications
to fit the current use case.</t>

<t>The following elements are bound to the context:</t>

<t><list style="symbols">
  <t>the protocol employing the key-derivation method,</t>
  <t>information about the utilized AES Key Wrap algorithm, and the key length.</t>
  <t>the protected header field, which contains the content key encryption algorithm.</t>
</list></t>

<t>The sender and recipient identities are left empty.</t>

<t>The following fields in <xref target="cddl-context-info"/> require an explanation:</t>

<t><list style="symbols">
  <t>The COSE_KDF_Context.AlgorithmID field MUST contain the identifier for the
AES Key Wrap algorithm being used. This specification uses the following
values: A128KW (value -3), A192KW (value -4), or A256KW (value -5)</t>
  <t>The COSE_KDF_Context.SuppPubInfo.keyDataLength field MUST specify the key
length, in bits, corresponding to the algorithm in the AlgorithmID field.
For A128KW the value is 128, for A192KW the value is 192, and for A256KW
the value 256.</t>
  <t>The COSE_KDF_Context.SuppPubInfo.other field captures the protocol that
uses the ES-DH content key distribution algorithm. It MUST be set to
the constant string "SUIT Payload Encryption".</t>
  <t>The COSE_KDF_Context.SuppPubInfo.protected field MUST contain the serialized
content of the recipient_header_map_esdh field, which contains (among other
elements) the identifier of the content key distribution method.</t>
</list></t>

<figure title="CDDL for COSE_KDF_Context Structure" anchor="cddl-context-info"><sourcecode type="cddl"><![CDATA[
COSE_KDF_Context = [
    AlgorithmID : int,
    PartyUInfo : [ PartyInfoSender ],
    PartyVInfo : [ PartyInfoRecipient ],
    SuppPubInfo : [
        keyDataLength : uint,
        protected : bstr,
        other: 'SUIT Payload Encryption'
    ],
    ? SuppPrivInfo : bstr
]

PartyInfoSender = (
    identity : nil,
    nonce : nil,
    other : nil
)

PartyInfoRecipient = (
    identity : nil,
    nonce : nil,
    other : nil
)
]]></sourcecode></figure>

<t>The HKDF-based key derivation function MAY contain a salt value,
as described in <xref section="5.1" sectionFormat="of" target="RFC9053"/>. This optional value
influences the key generation process, though this specification
does not require the use of a salt.  If the salt is public and
included in the message, the "salt" algorithm header parameter
MUST be used. The salt adds extra randomness to the KDF context.
When the salt is transmitted via the "salt" algorithm header
parameter, the receiver MUST be capable of processing it and MUST
pass it into the key derivation function. For more details on salt
usage, refer to <xref target="RFC5869"/> and NIST SP800-56 <xref target="SP800-56"/>.</t>

<t>Profiles of this specification MAY define an extended version of
the context information structure or MAY employ a different context
information structure.</t>

</section>
</section>
</section>
<section anchor="content-enc"><name>Content Encryption</name>

<t>This section summarizes the steps involved in content encryption,
applicable to both content key distribution methods.</t>

<t>When using AEAD ciphers, such as AES-GCM or ChaCha20/Poly1305, the
COSE specification requires a consistent byte stream to create the
authenticated data structure. This structure is illustrated in
<xref target="cddl-enc-aeskw"/> and defined in <xref section="5.3" sectionFormat="of" target="RFC9052"/>.</t>

<figure title="CDDL for Enc_structure Data Structure" anchor="cddl-enc-aeskw"><sourcecode type="cddl"><![CDATA[
 Enc_structure = [
   context : "Encrypt",
   protected : empty_or_serialized_map,
   external_aad : bstr
 ]
]]></sourcecode></figure>

<t>This Enc_structure must be populated as follows:</t>

<t><list style="symbols">
  <t>The protected field in the Enc_structure from <xref target="cddl-enc-aeskw"/> refers
to the content of the protected field in the COSE_Encrypt structure.</t>
  <t>The value of external_aad MUST be set to a zero-length byte string,
 represented as h'' in diagnostic notation and encoded as 0x40.</t>
</list></t>

<t>Some ciphers, such as AES-CTR, provide confidentiality
without integrity protection (see <xref target="RFC9459"/>). For these ciphers,
the Enc_structure shown in <xref target="cddl-enc-aeskw"/> cannot be used, as
the Additional Authenticated Data (AAD) byte string is only
applicable to AEAD ciphers. Therefore, the AAD structure is not
passed to the API for these ciphers, and the protected header in
the SUIT_Encryption_Info structure MUST be a zero-length byte string.</t>

<section anchor="aes-gcm"><name>AES-GCM</name>

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

<t>AES-GCM is an AEAD cipher and provides confidentiality and integrity protection.</t>

<t>Examples in this section use the following parameters:</t>

<t><list style="symbols">
  <t>Algorithm for payload encryption: AES-GCM-128
  <list style="symbols">
      <t>k: h'15F785B5C931414411B4B71373A9C0F7'</t>
      <t>IV: h'F14AAB9D81D51F7AD943FE87AF4F70CD'</t>
    </list></t>
  <t>Plaintext: "This is a real firmware image."
  <list style="symbols">
      <t>in hex: 546869732069732061207265616C206669726D7761726520696D6167652E</t>
    </list></t>
</list></t>

</section>
<section anchor="aes-kw-aes-gcm-example"><name>AES-KW + AES-GCM Example</name>

<t>This example uses the following parameters:</t>

<t><list style="symbols">
  <t>Algorithm id for key wrap: A128KW</t>
  <t>KEK COSE_Key (Secret Key):
  <list style="symbols">
      <t>kty: Symmetric</t>
      <t>k: 'aaaaaaaaaaaaaaaa'</t>
      <t>kid: 'kid-1'</t>
    </list></t>
</list></t>

<t>The COSE_Encrypt structure, in hex format, is (with a line break inserted):</t>

<figure><sourcecode type="cbor-pretty"><![CDATA[
D8608443A10101A1054CF14AAB9D81D51F7AD943FE87F6818340A2012204
456B69642D31581875603FFC9518D794713C8CA8A115A7FB32565A6D5953
4D62
]]></sourcecode></figure>

<t>The resulting COSE_Encrypt structure in a diagnostic format is shown in
<xref target="aeskw-aesgcm-example"/>.</t>

<figure title="COSE_Encrypt Example for AES Key Wrap" anchor="aeskw-aesgcm-example"><sourcecode type="cbor-diag"><![CDATA[
96([
  / protected: / << {
    / alg / 1: 1 / A128GCM /
  } >>,
  / unprotected: / {
    / IV / 5: h'F14AAB9D81D51F7AD943FE87'
  },
  / ciphertext: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / h'',
      / unprotected: / {
        / alg / 1: -3 / A128KW /,
        / kid / 4: 'kid-1'
      },
      / ciphertext: /
        h'75603FFC9518D794713C8CA8A115A7FB32565A6D59534D62'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></sourcecode></figure>

<t>The encrypted payload (with a line feed added) was:</t>

<figure><sourcecode type="test-vectors"><![CDATA[
758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4BD6D7ED26AB32F
EB063385D4D3465927EC82CB5E198A59
]]></sourcecode></figure>

</section>
<section anchor="ecdh-esaes-kw-aes-gcm-example"><name>ECDH-ES+AES-KW + AES-GCM Example</name>

<t>This example uses the following parameters:</t>

<t><list style="symbols">
  <t>Algorithm for content key distribution: ECDH-ES + A128KW</t>
  <t>KEK COSE_Key (Receiver's Private Key):
  <list style="symbols">
      <t>kty: EC2</t>
      <t>crv: P-256</t>
      <t>x: h'5886CD61DD875862E5AAA820E7A15274C968A9BC96048DDCACE32F50C3651BA3'</t>
      <t>y: h'9EED8125E932CD60C0EAD3650D0A485CF726D378D1B016ED4298B2961E258F1B'</t>
      <t>d: h'60FE6DD6D85D5740A5349B6F91267EEAC5BA81B8CB53EE249E4B4EB102C476B3'</t>
      <t>kid: 'kid-2'</t>
    </list></t>
  <t>KDF Context
  <list style="symbols">
      <t>Algorithm ID: -3 (A128KW)</t>
      <t>SuppPubInfo
      <list style="symbols">
          <t>keyDataLength: 128</t>
          <t>protected: &lt;&lt; { / alg / 1: -29 / ECDH-ES+A128KW / } &gt;&gt;</t>
          <t>other: 'SUIT Payload Encryption'</t>
        </list></t>
    </list></t>
</list></t>

<t>The COSE_Encrypt structure, in hex format, is (with a line break inserted):</t>

<figure><sourcecode type="cbor-pretty"><![CDATA[
D8608443A10101A1054CF14AAB9D81D51F7AD943FE87F6818344A101381C
A120A40102200121582073024F415AA51529A66CCEFD88F3F62A734492FF
45F6AD37FD2888E73EAF19DA2258204005B48A6FD091AA6ABFE3CFBEEDE8
8B347E521D43405FDBD7D2CFF0EBC21B265818A06B8E6550F308712B1DF0
44B21B7D11D9B22792F1DE0997
]]></sourcecode></figure>

<t>The resulting COSE_Encrypt structure in a diagnostic format is shown in
<xref target="esdh-aesgcm-example"/>.</t>

<figure title="COSE_Encrypt Example for ES-DH" anchor="esdh-aesgcm-example"><sourcecode type="cbor-diag"><![CDATA[
96([
  / protected: / << {
    / alg / 1: 1 / A128GCM /
  } >>,
  / unprotected: / {
    / IV / 5: h'F14AAB9D81D51F7AD943FE87'
  },
  / ciphertext: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / << {
        / alg / 1: -29 / ECDH-ES + A128KW /
      } >>,
      / unprotected: / {
        / ephemeral key / -1: {
          / kty / 1: 2 / EC2 /,
          / crv / -1: 1 / P-256 /,
          / x / -2: h'73024F415AA51529A66CCEFD88F3F62A
                      734492FF45F6AD37FD2888E73EAF19DA',
          / y / -3: h'4005B48A6FD091AA6ABFE3CFBEEDE88B
                      347E521D43405FDBD7D2CFF0EBC21B26'
        }
      },
      / ciphertext: /
        h'A06B8E6550F308712B1DF044B21B7D11D9B22792F1DE0997'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></sourcecode></figure>

<t>The encrypted payload (with a line feed added) was:</t>

<figure><sourcecode type="test-vectors"><![CDATA[
758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4BD6D7ED26AB32F
EB063385D4D3465927EC82CB5E198A59
]]></sourcecode></figure>

</section>
</section>
<section anchor="aes-ctr"><name>AES-CTR</name>

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

<t>AES-CTR is a non-AEAD cipher that provides confidentiality but lacks integrity protection.
Unlike AES-CBC, AES-CTR uses an IV per block, as shown in <xref target="aes-ctr-fig"/>. Hence, when an
image is encrypted using AES-CTR-128 or AES-CTR-256, the counter value MUST start with the
IV value and incremented by one for each 16-byte plaintext block. The IV value MAY be
provided by the COSE header field or is communicated via out-of-band means, for example by
setting it to a given value (e.g. the value of zero). Firmware authors MUST make sure that
the same IV and AES content key encryption combination is not used more than once.
Communicating the IV value inside the COSE header is RECOMMENDED.</t>

<t>The following abbreviations are used in <xref target="aes-ctr-fig"/>:</t>

<t><list style="symbols">
  <t>Pi = Plaintext blocks</t>
  <t>Ci = Ciphertext blocks</t>
  <t>E = Encryption function</t>
  <t>k = Symmetric key</t>
  <t>⊕ = XOR operation</t>
</list></t>

<figure title="AES-CTR Operation" anchor="aes-ctr-fig"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="288" width="224" viewBox="0 0 224 288" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
<path d="M 32,96 L 32,176" fill="none" stroke="black"/>
<path d="M 64,48 L 64,96" fill="none" stroke="black"/>
<path d="M 64,176 L 64,240" fill="none" stroke="black"/>
<path d="M 96,96 L 96,176" fill="none" stroke="black"/>
<path d="M 152,96 L 152,176" fill="none" stroke="black"/>
<path d="M 184,48 L 184,96" fill="none" stroke="black"/>
<path d="M 184,176 L 184,240" fill="none" stroke="black"/>
<path d="M 216,96 L 216,176" fill="none" stroke="black"/>
<path d="M 32,96 L 96,96" fill="none" stroke="black"/>
<path d="M 152,96 L 216,96" fill="none" stroke="black"/>
<path d="M 16,144 L 32,144" fill="none" stroke="black"/>
<path d="M 136,144 L 152,144" fill="none" stroke="black"/>
<path d="M 32,176 L 96,176" fill="none" stroke="black"/>
<path d="M 152,176 L 216,176" fill="none" stroke="black"/>
<path d="M 40,208 L 56,208" fill="none" stroke="black"/>
<path d="M 160,208 L 176,208" fill="none" stroke="black"/>
<circle cx="64" cy="208" r="6" class="xordot" fill="white" stroke="black"/>
<line x1="58" y1="208" x2="70" y2="208" stroke="black"/><line x1="64" y1="202" x2="64" y2="214" stroke="black"/><circle cx="184" cy="208" r="6" class="xordot" fill="white" stroke="black"/>
<line x1="178" y1="208" x2="190" y2="208" stroke="black"/><line x1="184" y1="202" x2="184" y2="214" stroke="black"/><g class="text">
<text x="64" y="36">IV1</text>
<text x="184" y="36">IV2</text>
<text x="8" y="148">k</text>
<text x="64" y="148">E</text>
<text x="128" y="148">k</text>
<text x="184" y="148">E</text>
<text x="28" y="212">P1</text>
<text x="148" y="212">P2</text>
<text x="68" y="260">C1</text>
<text x="188" y="260">C2</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
         IV1            IV2
          |              |
          |              |
          |              |
      +---+---+      +---+---+
      |       |      |       |
      |       |      |       |
   k--+   E   |   k--+   E   |
      |       |      |       |
      +---+---+      +---+---+
          |              |
     P1---⊕         P2---⊕
          |              |
          |              |
          C1             C2
]]></artwork></artset></figure>

<t>Examples in this section use the following parameters:</t>

<t><list style="symbols">
  <t>Algorithm for payload encryption: AES-CTR-128
  <list style="symbols">
      <t>k: h'261DE6165070FB8951EC5D7B92A065FE'</t>
      <t>IV: h'DAE613B2E0DC55F4322BE38BDBA9DC68'</t>
    </list></t>
  <t>Plaintext: "This is a real firmware image."
  <list style="symbols">
      <t>in hex: 546869732069732061207265616C206669726D7761726520696D6167652E</t>
    </list></t>
</list></t>

</section>
<section anchor="aes-kw-aes-ctr-example"><name>AES-KW + AES-CTR Example</name>

<t>This example uses the following parameters:</t>

<t><list style="symbols">
  <t>Algorithm id for key wrap: A128KW</t>
  <t>KEK COSE_Key (Secret Key):
  <list style="symbols">
      <t>kty: Symmetric</t>
      <t>k: 'aaaaaaaaaaaaaaaa'</t>
      <t>kid: 'kid-1'</t>
    </list></t>
</list></t>

<t>The COSE_Encrypt structure, in hex format, is (with a line break inserted):</t>

<figure><sourcecode type="cbor-pretty"><![CDATA[
D8608440A20139FFFD0550DAE613B2E0DC55F4322BE38BDBA9DC68F68183
40A2012204456B69642D315818CE34035CE5C2E2666E46D4C131FC561DD1
90A6D26CFA1990
]]></sourcecode></figure>

<t>The resulting COSE_Encrypt structure in a diagnostic format is shown in
<xref target="aeskw-aesctr-example"/>.</t>

<figure title="COSE_Encrypt Example for AES Key Wrap" anchor="aeskw-aesctr-example"><sourcecode type="cbor-diag"><![CDATA[
96([
  / protected: / h'',
  / unprotected: / {
    / alg / 1: -65534 / A128CTR /,
    / IV / 5: h'DAE613B2E0DC55F4322BE38BDBA9DC68'
  },
  / ciphertext: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / h'',
      / unprotected: / {
        / alg / 1: -3 / A128KW /,
        / kid / 4: 'kid-1'
      },
      / ciphertext: /
        h'CE34035CE5C2E2666E46D4C131FC561DD190A6D26CFA1990'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></sourcecode></figure>

<t>The encrypted payload (with a line feed added) was:</t>

<figure><sourcecode type="test-vectors"><![CDATA[
2BB8DB522AE978246CC775C3B0241BD4B0333FFDD2DB70C7EE7A4966E3B7
]]></sourcecode></figure>

</section>
<section anchor="ecdh-esaes-kw-aes-ctr-example"><name>ECDH-ES+AES-KW + AES-CTR Example</name>

<t>This example uses the following parameters:</t>

<t><list style="symbols">
  <t>Algorithm for content key distribution: ECDH-ES + A128KW</t>
  <t>KEK COSE_Key (Receiver's Private Key):
  <list style="symbols">
      <t>kty: EC2</t>
      <t>crv: P-256</t>
      <t>x: h'5886CD61DD875862E5AAA820E7A15274C968A9BC96048DDCACE32F50C3651BA3'</t>
      <t>y: h'9EED8125E932CD60C0EAD3650D0A485CF726D378D1B016ED4298B2961E258F1B'</t>
      <t>d: h'60FE6DD6D85D5740A5349B6F91267EEAC5BA81B8CB53EE249E4B4EB102C476B3'</t>
      <t>kid: 'kid-2'</t>
    </list></t>
  <t>KDF Context
  <list style="symbols">
      <t>Algorithm ID: -3 (A128KW)</t>
      <t>SuppPubInfo
      <list style="symbols">
          <t>keyDataLength: 128</t>
          <t>protected: &lt;&lt; { / alg / 1: -29 / ECDH-ES+A128KW / } &gt;&gt;</t>
          <t>other: 'SUIT Payload Encryption'</t>
        </list></t>
    </list></t>
</list></t>

<t>The COSE_Encrypt structure, in hex format, is (with a line break inserted):</t>

<figure><sourcecode type="cbor-pretty"><![CDATA[
D8608440A20139FFFD0550DAE613B2E0DC55F4322BE38BDBA9DC68F68183
44A101381CA120A401022001215820EE0718F6B019C29CC611C18CEDE221
4066DDCEDC2F0DBEF873CB224C715C1174225820279F2A88E4AB9E2ED30C
0FCB69515B31B5D36725BFDB9AE02032ED4D5AB52CB85818E28B4502E4F5
151884A995405579006E9465C3E94E3E0808
]]></sourcecode></figure>

<t>The resulting COSE_Encrypt structure in a diagnostic format is shown in
<xref target="esdh-aesctr-example"/>.</t>

<figure title="COSE_Encrypt Example for ES-DH" anchor="esdh-aesctr-example"><sourcecode type="cbor-diag"><![CDATA[
96([
  / protected: / h'',
  / unprotected: / {
    / alg / 1: -65534 / A128CTR /,
    / IV / 5: h'DAE613B2E0DC55F4322BE38BDBA9DC68'
  },
  / ciphertext: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / << {
        / alg / 1: -29 / ECDH-ES + A128KW /
      } >>,
      / unprotected: / {
        / ephemeral key / -1: {
          / kty / 1: 2 / EC2 /,
          / crv / -1: 1 / P-256 /,
          / x / -2: h'EE0718F6B019C29CC611C18CEDE22140
                      66DDCEDC2F0DBEF873CB224C715C1174',
          / y / -3: h'279F2A88E4AB9E2ED30C0FCB69515B31
                      B5D36725BFDB9AE02032ED4D5AB52CB8'
        }
      },
      / ciphertext: /
        h'E28B4502E4F5151884A995405579006E9465C3E94E3E0808'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></sourcecode></figure>

<t>The encrypted payload (with a line feed added) was:</t>

<figure><sourcecode type="test-vectors"><![CDATA[
2BB8DB522AE978246CC775C3B0241BD4B0333FFDD2DB70C7EE7A4966E3B7
]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="integrity-check-on-encrypted-and-decrypted-payloads"><name>Integrity Check on Encrypted and Decrypted Payloads</name>

<t>In addition to suit-condition-image-match (see <xref section="8.4.9.2" sectionFormat="of" target="I-D.ietf-suit-manifest"/>),
AEAD algorithms used for content encryption provides another way
to validate the integrity of components.
This section provides a guideline to construct secure but not redundant
SUIT Manifest for encrypted payloads.</t>

<section anchor="validating-payload-integrity"><name>Validating Payload Integrity</name>

<t>This sub-section explains three ways to validate the integrity
of payloads.</t>

<section anchor="image-match-after-decryption"><name>Image Match after Decryption</name>

<t>The suit-condition-image-match on the plaintext payload is used after decryption.
An example command sequence is shown in <xref target="_figure-image-match-after-decryption"/>.</t>

<figure title="Check Image Match After Decryption" anchor="_figure-image-match-after-decryption"><artwork><![CDATA[
/ directive-set-component-index / 12, 1,
/ directive-override-parameters / 20, {
  / parameter-uri / 21: "coaps://example.com/encrypted.bin"
},
/ directive-fetch / 21, 15,

/ directive-set-component-index / 12, 0,
/ directive-override-parameters / 20, {
  / parameter-image-digest / 3: << {
    / algorithm-id: / -16 / SHA256 /,
    / digest-bytes: / h'3B1...92A' / digest of plaintext payload /
  } >>,
  / parameter-image-size / 14: 30 / size of plaintext payload /,
  / parameter-encryption-info / TBD19: h'369...50F',
  / parameter-source-component / 22: 1
},
/ directive-copy / 22, 15,
/ condition-image-match / 3, 15 / check decrypted payload integrity /
]]></artwork></figure>

<t>RFC Editor's Note (TBD19): The value for the suit-parameter-encryption-info
parameter is set to 19, as the proposed value.</t>

</section>
<section anchor="image-match-before-decryption"><name>Image Match before Decryption</name>

<t>The suit-condition-image-match can also be applied on encrypted payloads
before decryption takes place. An example command sequence is shown in
<xref target="_figure-image-match-before-decryption"/>.</t>

<t>This option mitigates battery exhaustion attacks discussed in <xref target="sec-cons"/>.</t>

<figure title="Check Image Match Before Decryption" anchor="_figure-image-match-before-decryption"><artwork><![CDATA[
/ directive-set-component-index / 12, 1,
/ directive-override-parameters / 20, {
  / parameter-image-digest / 3: << {
    / algorithm-id: / -16 / SHA256 /,
    / digest-bytes: / h'8B4...D34' / digest of encrypted payload /
  } >>,
  / parameter-image-size / 14: 30 / size of encrypted payload /,
  / parameter-uri / 21: "coaps://example.com/encrypted.bin"
},

/ directive-fetch / 21, 15,
/ condition-image-match / 3, 15 / check decrypted payload integrity /,

/ directive-set-component-index / 12, 0,
/ directive-override-parameters / 20, {
  / parameter-encryption-info / TBD19: h'D86...1F0',
  / parameter-source-component / 22: 1
},
/ directive-copy / 22, 15
]]></artwork></figure>

<t>RFC Editor's Note (TBD19): The value for the suit-parameter-encryption-info
parameter is set to 19, as the proposed value.</t>

</section>
<section anchor="checking-authentication-tag-while-decrypting"><name>Checking Authentication Tag while Decrypting</name>

<t>AEAD algorithms, such as AES-GCM and ChaCha20/Poly1305, verify the integrity of
the encrypted concent.</t>

</section>
</section>
<section anchor="payload-integrity-validation"><name>Payload Integrity Validation</name>

<t>This subsection offers guidelines for validating the integrity of payloads within
the SUIT manifest. The decision tree in <xref target="payload-integrity-decision-tree"/>
illustrates the process for establishing payload integrity.</t>

<figure title="Decision Tree: Validating the Payload" anchor="payload-integrity-decision-tree"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="416" width="408" viewBox="0 0 408 416" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
<path d="M 8,32 L 8,64" fill="none" stroke="black"/>
<path d="M 8,352 L 8,384" fill="none" stroke="black"/>
<path d="M 24,64 L 24,328" fill="none" stroke="black"/>
<path d="M 40,240 L 40,272" fill="none" stroke="black"/>
<path d="M 80,272 L 80,328" fill="none" stroke="black"/>
<path d="M 96,352 L 96,384" fill="none" stroke="black"/>
<path d="M 136,128 L 136,176" fill="none" stroke="black"/>
<path d="M 136,352 L 136,384" fill="none" stroke="black"/>
<path d="M 152,176 L 152,232" fill="none" stroke="black"/>
<path d="M 192,272 L 192,328" fill="none" stroke="black"/>
<path d="M 232,240 L 232,272" fill="none" stroke="black"/>
<path d="M 248,352 L 248,384" fill="none" stroke="black"/>
<path d="M 288,352 L 288,384" fill="none" stroke="black"/>
<path d="M 384,64 L 384,120" fill="none" stroke="black"/>
<path d="M 384,176 L 384,328" fill="none" stroke="black"/>
<path d="M 400,32 L 400,64" fill="none" stroke="black"/>
<path d="M 400,128 L 400,176" fill="none" stroke="black"/>
<path d="M 400,352 L 400,384" fill="none" stroke="black"/>
<path d="M 8,32 L 400,32" fill="none" stroke="black"/>
<path d="M 8,64 L 400,64" fill="none" stroke="black"/>
<path d="M 136,128 L 400,128" fill="none" stroke="black"/>
<path d="M 136,176 L 400,176" fill="none" stroke="black"/>
<path d="M 40,240 L 232,240" fill="none" stroke="black"/>
<path d="M 40,272 L 232,272" fill="none" stroke="black"/>
<path d="M 24,336 L 80,336" fill="none" stroke="black"/>
<path d="M 152,336 L 232,336" fill="none" stroke="black"/>
<path d="M 304,336 L 384,336" fill="none" stroke="black"/>
<path d="M 24,400 L 80,400" fill="none" stroke="black"/>
<path d="M 152,400 L 232,400" fill="none" stroke="black"/>
<path d="M 304,400 L 384,400" fill="none" stroke="black"/>
<path d="M 24,336 C 15.16936,336 8,343.16936 8,352" fill="none" stroke="black"/>
<path d="M 80,336 C 88.83064,336 96,343.16936 96,352" fill="none" stroke="black"/>
<path d="M 152,336 C 143.16936,336 136,343.16936 136,352" fill="none" stroke="black"/>
<path d="M 232,336 C 240.83064,336 248,343.16936 248,352" fill="none" stroke="black"/>
<path d="M 304,336 C 295.16936,336 288,343.16936 288,352" fill="none" stroke="black"/>
<path d="M 384,336 C 392.83064,336 400,343.16936 400,352" fill="none" stroke="black"/>
<path d="M 24,400 C 15.16936,400 8,392.83064 8,384" fill="none" stroke="black"/>
<path d="M 80,400 C 88.83064,400 96,392.83064 96,384" fill="none" stroke="black"/>
<path d="M 152,400 C 143.16936,400 136,392.83064 136,384" fill="none" stroke="black"/>
<path d="M 232,400 C 240.83064,400 248,392.83064 248,384" fill="none" stroke="black"/>
<path d="M 304,400 C 295.16936,400 288,392.83064 288,384" fill="none" stroke="black"/>
<path d="M 384,400 C 392.83064,400 400,392.83064 400,384" fill="none" stroke="black"/>
<polygon class="arrowhead" points="392,328 380,322.4 380,333.6" fill="black" transform="rotate(90,384,328)"/>
<polygon class="arrowhead" points="392,120 380,114.4 380,125.6" fill="black" transform="rotate(90,384,120)"/>
<polygon class="arrowhead" points="200,328 188,322.4 188,333.6" fill="black" transform="rotate(90,192,328)"/>
<polygon class="arrowhead" points="160,232 148,226.4 148,237.6" fill="black" transform="rotate(90,152,232)"/>
<polygon class="arrowhead" points="88,328 76,322.4 76,333.6" fill="black" transform="rotate(90,80,328)"/>
<polygon class="arrowhead" points="32,328 20,322.4 20,333.6" fill="black" transform="rotate(90,24,328)"/>
<g class="text">
<text x="88" y="52">Q1.</text>
<text x="120" y="52">How</text>
<text x="148" y="52">is</text>
<text x="176" y="52">the</text>
<text x="224" y="52">Payload</text>
<text x="300" y="52">delivered?</text>
<text x="44" y="100">in</text>
<text x="88" y="100">Content</text>
<text x="348" y="100">others</text>
<text x="200" y="148">Q2.</text>
<text x="252" y="148">Mitigate</text>
<text x="320" y="148">Battery</text>
<text x="236" y="164">Exhaustion</text>
<text x="316" y="164">Attacks?</text>
<text x="172" y="212">No</text>
<text x="360" y="212">Yes</text>
<text x="64" y="260">Q3.</text>
<text x="100" y="260">AEAD</text>
<text x="148" y="260">cipher</text>
<text x="200" y="260">used?</text>
<text x="104" y="308">Yes</text>
<text x="172" y="308">No</text>
<text x="48" y="356">Not</text>
<text x="180" y="356">BEFORE</text>
<text x="220" y="356">or</text>
<text x="340" y="356">BEFORE</text>
<text x="52" y="372">Required</text>
<text x="192" y="372">AFTER</text>
<text x="340" y="372">Decryption</text>
<text x="188" y="388">Decryption</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
+------------------------------------------------+
|        Q1. How is the Payload delivered?       |
+-+--------------------------------------------+-+
  |                                            |
  | in Content                          others |
  |                                            v
  |             +--------------------------------+
  |             |      Q2. Mitigate Battery      |
  |             |       Exhaustion Attacks?      |
  |             +-+----------------------------+-+
  |               |                            |
  |               | No                     Yes |
  |               v                            |
  | +-----------------------+                  |
  | | Q3. AEAD cipher used? |                  |
  | +----+-------------+----+                  |
  |      |             |                       |
  |      | Yes      No |                       |
  v      v             v                       v
 .+------+.      .-----+-----.      .----------+.
|   Not    |    |  BEFORE or  |    |   BEFORE    |
| Required |    |    AFTER    |    | Decryption  |
|          |    | Decryption  |    |             |
 '--------'      '-----------'      '-----------'
]]></artwork></artset></figure>

<t>There are three questions to ask:</t>

<t><list style="symbols">
  <t>Q1. How does the recipient receive the encrypted payload?
If the encrypted payload is used as the value of the suit-parameter-content, its integrity is already verified by the suit-authentication-wrapper. Therefore, no additional integrity check is required. However, if the encrypted payload is delivered via suit-directive-fetch from an integrated payload or from outside the SUIT envelope, for example "coaps://example.com/encrypted.bin", additional considerations must be addressed.</t>
  <t>Q2. Are battery exhaustion attacks a concern?
If yes, the integrity of the encrypted payload must be checked before the payload is decrypted. If no, then other questions need to be asked.</t>
  <t>Q3. Is the payload encrypted with an AEAD cipher?
If yes, no additional integrity check is required, as the recipient verifies
the payload's integrity during decryption. If no, integrity validation can
occur either before or after decryption. However, validating integrity before
decryption is RECOMMENDED especially for the AES-CTR mode (see <xref section="8" sectionFormat="of" target="RFC9459"/>).</t>
</list></t>

</section>
</section>
<section anchor="flash"><name>Firmware Updates on IoT Devices with Flash Memory</name>

<t>Embedded devices come in many forms, and the market is both large and fragmented.
As a result, some implementations and deployments may adopt firmware update
procedures that differ from the descriptions provided here. On a positive note,
the SUIT manifest accommodates various deployment scenarios, thanks to the
"scripting" functionality offered by its commands.</t>

<t>This section specifically addresses firmware images on microcontrollers and does
not pertain to generic software, configuration data, or machine learning models.
The differences arise from two main aspects:</t>

<t><list style="symbols">
  <t>Use of Flash Memory: Flash memory in microcontrollers is a type of non-volatile
memory that typically erases data in larger units called blocks, pages, or sectors,
and rewrites data at the byte level (often 4 bytes) or larger units. Furthermore,
flash memory is segmented into different regions, storing the bootloader, various
versions of firmware images (in designated slots), and configuration data. An
example layout of a microcontroller flash area is illustrated in <xref target="image-layout"/>.</t>
  <t>Microcontroller Design: Code on microcontrollers typically cannot be executed
from arbitrary locations in flash memory without additional software development
and design efforts. Consequently, developers often compile firmware so that the
bootloader can execute code from a specific location in flash memory, commonly
referred to as the "primary slot."</t>
</list></t>

<t>Once the encrypted firmware image is transferred to the device, it is usually
stored in a dedicated area known as the "secondary slot."</t>

<t>During the next boot, the bootloader detects the new firmware image and begins
decrypting it sector by sector, swapping it with the image located in the primary
slot. This method of swapping the newly downloaded image with the previously
valid one requires two slots, allowing for a rollback if the new firmware fails
to boot, thereby enhancing the robustness of the firmware update process.</t>

<t>The swap occurs only after verifying the signature on the plaintext. It is
important to note that the plaintext firmware image is available in the primary
slot only after the swap is completed, unless "dummy decrypt" is used to compute
the hash over the plaintext prior to executing the decryption during the swap.
In this context, dummy decryption refers to decrypting the firmware image in the
secondary slot sector by sector while computing a rolling hash over the resulting
plaintext (also sector by sector) without performing the swap operation. Although
performance optimizations, such as conveying hashes for each sector in the manifest
rather than a hash of the entire firmware image, are possible, these optimizations
are not detailed in this specification.</t>

<t>Without hardware-based, on-the-fly decryption, the image in the primary slot is
available in cleartext and may need to be re-encrypted before copying it to the
secondary slot. This step might be necessary if the secondary slot has different
access permissions or is located in off-chip flash memory, which tends to be more
vulnerable to physical attacks.</t>

<figure title="Example Flash Area Layout" anchor="image-layout"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="424" viewBox="0 0 424 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
<path d="M 8,32 L 8,528" fill="none" stroke="black"/>
<path d="M 416,32 L 416,528" fill="none" stroke="black"/>
<path d="M 8,32 L 416,32" fill="none" stroke="black"/>
<path d="M 8,64 L 416,64" fill="none" stroke="black"/>
<path d="M 8,256 L 416,256" fill="none" stroke="black"/>
<path d="M 8,448 L 416,448" fill="none" stroke="black"/>
<path d="M 8,496 L 416,496" fill="none" stroke="black"/>
<path d="M 8,528 L 416,528" fill="none" stroke="black"/>
<g class="text">
<text x="60" y="52">Bootloader</text>
<text x="48" y="84">Primary</text>
<text x="100" y="84">Slot</text>
<text x="360" y="100">(sector</text>
<text x="404" y="100">0)</text>
<text x="212" y="116">..................................................</text>
<text x="360" y="148">(sector</text>
<text x="404" y="148">1)</text>
<text x="212" y="164">..................................................</text>
<text x="360" y="196">(sector</text>
<text x="404" y="196">2)</text>
<text x="212" y="212">..................................................</text>
<text x="368" y="244">...</text>
<text x="56" y="276">Secondary</text>
<text x="116" y="276">Slot</text>
<text x="360" y="292">(sector</text>
<text x="404" y="292">0)</text>
<text x="212" y="308">..................................................</text>
<text x="360" y="340">(sector</text>
<text x="404" y="340">1)</text>
<text x="212" y="356">..................................................</text>
<text x="360" y="388">(sector</text>
<text x="404" y="388">2)</text>
<text x="212" y="404">..................................................</text>
<text x="368" y="436">...</text>
<text x="36" y="468">Swap</text>
<text x="76" y="468">Area</text>
<text x="72" y="516">Configuration</text>
<text x="148" y="516">Data</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
+--------------------------------------------------+
| Bootloader                                       |
+--------------------------------------------------+
| Primary Slot                                     |
|                                        (sector 0)|
|..................................................|
|                                                  |
|                                        (sector 1)|
|..................................................|
|                                                  |
|                                        (sector 2)|
|..................................................|
|                                                  |
|                                           ...    |
+--------------------------------------------------+
| Secondary Slot                                   |
|                                        (sector 0)|
|..................................................|
|                                                  |
|                                        (sector 1)|
|..................................................|
|                                                  |
|                                        (sector 2)|
|..................................................|
|                                                  |
|                                           ...    |
+--------------------------------------------------+
| Swap Area                                        |
|                                                  |
+--------------------------------------------------+
| Configuration Data                               |
+--------------------------------------------------+
]]></artwork></artset></figure>

<t>The ability to resume an interrupted firmware update is often essential
for unattended devices, including low-end, constrained IoT devices. To
meet this requirement, a firmware image must be divided into sectors, with
each sector encrypted individually using a cipher that does not increase
the size of the resulting ciphertext (i.e., by avoiding the addition of
an authentication tag after each encrypted block).</t>

<t>If an update is aborted while the bootloader is decrypting the newly received
image and swapping the sectors, the bootloader can restart from where it
left off. This technique enhances robustness and performance.</t>

<t>For this purpose, ciphers without integrity protection are employed to
encrypt the firmware image. It is crucial that integrity protection for the
firmware image is provided, and the suit-parameter-image-digest, defined in
<xref section="8.4.8.6" sectionFormat="of" target="I-D.ietf-suit-manifest"/>, MUST be utilized.</t>

<t><xref target="RFC9459"/> specifies the AES Counter (AES-CTR) mode and AES Cipher Block
Chaining (AES-CBC) ciphers, both of which do not provide integrity protection.
These ciphers are suitable for firmware encryption in IoT devices. However,
for many other scenarios involving software packages, configuration information,
or personalization data, the use of AEAD ciphers is RECOMMENDED.</t>

<t>The following subsections offer additional information on the selection of
initialization vectors (IVs) for use with AES-CTR in the context
of firmware encryption. A random CEK MUST be used with every plaintexts, as specified
in <xref target="content-key-distribution"/>, since the IVs are not random but are instead based on
the slot/sector combination in flash memory. The discussion assumes that the block size
of AES is significantly smaller than the sector size. Typically, flash memory sectors are
measured in KiB, necessitating the decryption of multiple AES blocks to complete the
decryption of an entire sector.</t>

<t>To offer a specific example, let us assume the slot size of a specific flash controller
on an IoT device is 64 KiB, the sector size 4096 bytes (4 KiB) and an AES plaintext block
size of 16 bytes. The counter values used with AES-CTR range from IV+0 to IV+255 in the
first sector, and 16 * 256 counter values are required for the slot. This</t>

<t>IV value is either communicated in the COSE header or via out-of-band means.</t>

</section>
<section anchor="complete-examples"><name>Complete Examples</name>

<t>The following manifests illustrate how to deliver an encrypted payload along
with its encryption information to devices.</t>

<t>In the AES-KW examples, HMAC-256 MACs are included, utilizing the following
secret key:</t>

<figure><artwork><![CDATA[
  'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
  (616161... in hex, and its length is 32)
]]></artwork></figure>

<t>ES-DH examples are signed using the following ECDSA secp256r1 key:</t>

<figure><artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgApZYjZCUGLM50VBC
CjYStX+09jGmnyJPrpDLTz/hiXOhRANCAASEloEarguqq9JhVxie7NomvqqL8Rtv
P+bitWWchdvArTsfKktsCYExwKNtrNHXi9OB3N+wnAUtszmR23M4tKiW
-----END PRIVATE KEY-----
]]></artwork></figure>

<t>The corresponding public key can be used to verify these examples:</t>

<figure><artwork><![CDATA[
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhJaBGq4LqqvSYVcYnuzaJr6qi/Eb
bz/m4rVlnIXbwK07HypLbAmBMcCjbazR14vTgdzfsJwFLbM5kdtzOLSolg==
-----END PUBLIC KEY-----
]]></artwork></figure>

<t>Each example uses SHA-256 as the digest function.</t>

<section anchor="example-AES-KW-write"><name>AES Key Wrap Example with Write Directive</name>

<t>The following SUIT manifest instructs a parser to authenticate the manifest
using COSE_Mac0 with HMAC256. It also directs the parser to write and decrypt
the encrypted payload into a component using the suit-directive-write directive.</t>

<t>The SUIT manifest in diagnostic notation (with line breaks added for clarity) is displayed below:</t>

<figure><sourcecode type="cbor-diag"><![CDATA[
/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'037A5C325CE14078A0AADF007428EAC6
/  6/                           59361AD9402A732410BDA542FAE94E2C'
/  7/     ] >>,
/  8/     << / COSE_Mac0_Tagged / 17([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: 5 / HMAC256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / tag: / h'8D92599011C451A4C5FB69709FA6CA6C
/ 15/                  0F846D692BDBB3F624EC91F82F9F620A'
/ 16/     ]) >>
/ 17/   ] >>,
/ 18/   / manifest / 3: << {
/ 19/     / manifest-version / 1: 1,
/ 20/     / manifest-sequence-number / 2: 1,
/ 21/     / common / 3: << {
/ 22/       / components / 2: [
/ 23/         ['plaintext-firmware']
/ 24/       ]
/ 25/     } >>,
/ 26/     / install / 20: << [
/ 27/       / fetch encrypted firmware /
/ 28/       / directive-override-parameters / 20, {
/ 29/         / parameter-content / 18:
/ 30/           h'758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4
/ 31/             BD6D7ED26AB32FEB063385D4D3465927EC82CB5E198A59',
/ 32/         / parameter-encryption-info / 19: << 96([
/ 33/           / protected: / << {
/ 34/             / alg / 1: 1 / A128GCM /
/ 35/           } >>,
/ 36/           / unprotected: / {
/ 37/             / IV / 5: h'F14AAB9D81D51F7AD943FE87'
/ 38/           },
/ 39/           / ciphertext: / null / detached ciphertext /,
/ 40/           / recipients: / [
/ 41/             [
/ 42/               / protected: / h'',
/ 43/               / unprotected: / {
/ 44/                 / alg / 1: -3 / A128KW /,
/ 45/                 / kid / 4: 'kid-1'
/ 46/               },
/ 47/               / ciphertext: /
/ 48/                 h'75603FFC9518D794713C8CA8
/ 49/                   A115A7FB32565A6D59534D62'
/ 50/                 / CEK encrypted with KEK /
/ 51/             ]
/ 52/           ]
/ 53/         ]) >>
/ 54/       },
/ 55/ 
/ 56/       / decrypt encrypted firmware /
/ 57/       / directive-write / 18, 15
/ 58/         / consumes the SUIT_Encryption_Info above /
/ 59/     ] >>
/ 60/   } >>
/ 61/ })
]]></sourcecode></figure>

<t>In hex format, the SUIT manifest is:</t>

<figure><sourcecode type="cbor-pretty"><![CDATA[
D86BA2025853825824822F5820037A5C325CE14078A0AADF007428EAC659
361AD9402A732410BDA542FAE94E2C582AD18443A10105A0F658208D9259
9011C451A4C5FB69709FA6CA6C0F846D692BDBB3F624EC91F82F9F620A03
5898A4010102010357A102818152706C61696E746578742D6669726D7761
72651458778414A212582E758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B
85BB94D4BD6D7ED26AB32FEB063385D4D3465927EC82CB5E198A5913583E
D8608443A10101A1054CF14AAB9D81D51F7AD943FE87F6818340A2012204
456B69642D31581875603FFC9518D794713C8CA8A115A7FB32565A6D5953
4D62120F
]]></sourcecode></figure>

</section>
<section anchor="example-AES-KW-copy"><name>AES Key Wrap Example with Fetch + Copy Directives</name>

<t>The following SUIT manifest instructs a parser to fetch and store the
encrypted payload. Subsequently, the payload is decrypted and copied into
another component using the suit-directive-copy directive. This approach
is particularly effective for constrained devices with execute-in-place
(XIP) flash memory.</t>

<t>The SUIT manifest in diagnostic notation (with line breaks added for
clarity) is displayed below:</t>

<figure><sourcecode type="cbor-diag"><![CDATA[
/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'3C92AECEAA7225DDD5129A83B2842BF2
/  6/                           8CC53B2C9467C5BF256E7108F2DA7C9C'
/  7/     ] >>,
/  8/     << / COSE_Mac0_Tagged / 17([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: 5 / HMAC256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / tag: / h'46CB34181A04B967023D4C9E136DC5DC
/ 15/                  591D8A9BE9365DE4D282C9D6168C01FB'
/ 16/     ]) >>
/ 17/   ] >>,
/ 18/   / manifest / 3: << {
/ 19/     / manifest-version / 1: 1,
/ 20/     / manifest-sequence-number / 2: 1,
/ 21/     / common / 3: << {
/ 22/       / components / 2: [
/ 23/         ['plaintext-firmware'],
/ 24/         ['encrypted-firmware']
/ 25/       ]
/ 26/     } >>,
/ 27/     / install / 20: << [
/ 28/       / fetch encrypted firmware /
/ 29/       / directive-set-component-index / 12,
/ 30/         1 / ['encrypted-firmware'] /,
/ 31/       / directive-override-parameters / 20, {
/ 32/         / parameter-image-size / 14: 46,
/ 33/         / parameter-uri / 21:
/ 34/           "coaps://example.com/encrypted-firmware"
/ 35/       },
/ 36/       / directive-fetch / 21, 15,
/ 37/ 
/ 38/       / decrypt encrypted firmware /
/ 39/       / directive-set-component-index / 12,
/ 40/         0 / ['plaintext-firmware'] /,
/ 41/       / directive-override-parameters / 20, {
/ 42/         / parameter-encryption-info / 19: << 96([
/ 43/           / protected: / << {
/ 44/             / alg / 1: 1 / A128GCM /
/ 45/           } >>,
/ 46/           / unprotected: / {
/ 47/             / IV / 5: h'F14AAB9D81D51F7AD943FE87'
/ 48/           },
/ 49/           / ciphertext: / null / detached ciphertext /,
/ 50/           / recipients: / [
/ 51/             [
/ 52/               / protected: / h'',
/ 53/               / unprotected: / {
/ 54/                 / alg / 1: -3 / A128KW /,
/ 55/                 / kid / 4: 'kid-1'
/ 56/               },
/ 57/               / ciphertext: /
/ 58/                 h'75603FFC9518D794713C8CA8
/ 59/                   A115A7FB32565A6D59534D62'
/ 60/                 / CEK encrypted with KEK /
/ 61/             ]
/ 62/           ]
/ 63/         ]) >>,
/ 64/         / parameter-source-component / 22:
/ 65/           1 / ['encrypted-firmware'] /
/ 66/       },
/ 67/       / directive-copy / 22,
/ 68/         15 / consumes the SUIT_Encryption_Info above /
/ 69/     ] >>
/ 70/   } >>
/ 71/ })
]]></sourcecode></figure>

<t>The default storage area is defined by the component identifier (see
<xref section="8.4.5.1" sectionFormat="of" target="I-D.ietf-suit-manifest"/>). In this example,
the component identifier for component #0 is ['plaintext-firmware']
and the file path "/plaintext-firmware" is the expected location.</t>

<t>While parsing the manifest, the behavior of SUIT manifest processor would be</t>

<t><list style="symbols">
  <t>[L2-L17] authenticates the manifest part on [L18-L68]</t>
  <t>[L22-L25] gets two component identifiers; ['plaintext-firmware'] for component #0, and ['encrypted-firmware'] for component # 1 respectively</t>
  <t>[L29] sets current component index # 1 (the lasting directives target ['encrypted-firmware'])</t>
  <t>[L33-L34] sets source uri parameter "coaps://example.com/encrypted-firmware"</t>
  <t>[L36] fetches content from source uri into ['encrypted-firmware']</t>
  <t>[L39] sets current component index # 0 (the lasting directives target ['plaintext-firmware'])</t>
  <t>[L42-L62] sets SUIT encryption info parameter</t>
  <t>[L63-L64] sets source component index parameter # 1</t>
  <t>[L66] decrypts component # 1 (source component index) and stores the result into component # 0 (current component index)</t>
</list></t>

<t><xref target="_table-manifest-feature"/> lists the features from the SUIT manifest specification, which
are re-used by this specification.</t>

<texttable title="Example Flash Area Layout" anchor="_table-manifest-feature">
      <ttcol align='left'>Feature Name</ttcol>
      <ttcol align='left'>Abbr.</ttcol>
      <ttcol align='left'>Manifest Ref.</ttcol>
      <c>component identifier</c>
      <c>CI</c>
      <c>Sec. 8.4.5.1</c>
      <c>(destination) component index</c>
      <c>dst-CI</c>
      <c>Sec. 8.4.10.1</c>
      <c>(destination) component slot OPTIONAL param</c>
      <c>dst-CS</c>
      <c>Sec. 8.4.8.8</c>
      <c>(source) uri OPTIONAL parameter</c>
      <c>src-URI</c>
      <c>Sec. 8.4.8.10</c>
      <c>source component index OPTIONAL parameter</c>
      <c>src-CI</c>
      <c>Sec. 8.4.8.11</c>
</texttable>

<t>The resulting state of the SUIT manifest processor is shown in <xref target="_table-suit-processor"/>.</t>

<texttable title="Manifest Processor State" anchor="_table-suit-processor">
      <ttcol align='left'>Abbreviation</ttcol>
      <ttcol align='left'>Plaintext</ttcol>
      <ttcol align='left'>Ciphertext</ttcol>
      <c>CI</c>
      <c>['plaintext-firmware']</c>
      <c>['encrypted-firmware']</c>
      <c>dst-CI</c>
      <c>0</c>
      <c>1</c>
      <c>dst-CS</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>src-URI</c>
      <c>N/A</c>
      <c>"coaps://example.com/encrypted-firmware"</c>
      <c>src-CI</c>
      <c>1</c>
      <c>N/A</c>
</texttable>

<t>In hex format, the SUIT manifest shown above is:</t>

<figure><sourcecode type="cbor-pretty"><![CDATA[
D86BA2025853825824822F58203C92AECEAA7225DDD5129A83B2842BF28C
C53B2C9467C5BF256E7108F2DA7C9C582AD18443A10105A0F6582046CB34
181A04B967023D4C9E136DC5DC591D8A9BE9365DE4D282C9D6168C01FB03
58B2A40101020103582BA102828152706C61696E746578742D6669726D77
6172658152656E637279707465642D6669726D7761726514587C8C0C0114
A20E182E157826636F6170733A2F2F6578616D706C652E636F6D2F656E63
7279707465642D6669726D77617265150F0C0014A213583ED8608443A101
01A1054CF14AAB9D81D51F7AD943FE87F6818340A2012204456B69642D31
581875603FFC9518D794713C8CA8A115A7FB32565A6D59534D621601160F
]]></sourcecode></figure>

<t>The encrypted payload (with a line feed added) to be fetched from "coaps://example.com/encrypted-firmware" is:</t>

<figure><sourcecode type="test-vectors"><![CDATA[
758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4BD6D7ED26AB32F
EB063385D4D3465927EC82CB5E198A59
]]></sourcecode></figure>

<t>The previous example does not utilize storage slots. However, it is possible to
implement this functionality for devices that support slots in flash memory. In
the enhanced example below, we reference the slots using [h'00'] and [h'01']. In
this context, the component identifier [h'00'] designates component slot #0.</t>

<figure><sourcecode type="cbor-diag"><![CDATA[
/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'6D74BD3110A2573236E03DD78693D5B2
/  6/                           1C299C917A4327D9939DDF3582A41DE3'
/  7/     ] >>,
/  8/     << / COSE_Mac0_Tagged / 17([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: 5 / HMAC256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / tag: / h'E6837A54A9B5813F8D5EDAD48AB96D5D
/ 15/                  7388D9D1C89AB29EC55AE964F67E01ED'
/ 16/     ]) >>
/ 17/   ] >>,
/ 18/   / manifest / 3: << {
/ 19/     / manifest-version / 1: 1,
/ 20/     / manifest-sequence-number / 2: 1,
/ 21/     / common / 3: << {
/ 22/       / components / 2: [
/ 23/         [h'00'],
/ 24/         [h'01']
/ 25/       ]
/ 26/     } >>,
/ 27/     / install / 20: << [
/ 28/       / fetch encrypted firmware /
/ 29/       / directive-set-component-index / 12, 1 / [h'01'] /,
/ 30/       / directive-override-parameters / 20, {
/ 31/         / parameter-image-size / 14: 46,
/ 32/         / parameter-uri / 21:
/ 33/           "coaps://example.com/encrypted-firmware"
/ 34/       },
/ 35/       / directive-fetch / 21, 15,
/ 36/ 
/ 37/       / decrypt encrypted firmware /
/ 38/       / directive-set-component-index / 12, 0 / ['00'] /,
/ 39/       / directive-override-parameters / 20, {
/ 40/         / parameter-encryption-info / 19: << 96([
/ 41/           / protected: / << {
/ 42/             / alg / 1: 1 / A128GCM /
/ 43/           } >>,
/ 44/           / unprotected: / {
/ 45/             / IV / 5: h'F14AAB9D81D51F7AD943FE87'
/ 46/           },
/ 47/           / ciphertext: / null / detached ciphertext /,
/ 48/           / recipients: / [
/ 49/             [
/ 50/               / protected: / h'',
/ 51/               / unprotected: / {
/ 52/                 / alg / 1: -3 / A128KW /,
/ 53/                 / kid / 4: 'kid-1'
/ 54/               },
/ 55/               / ciphertext: /
/ 56/                 h'75603FFC9518D794713C8CA8
/ 57/                   A115A7FB32565A6D59534D62'
/ 58/                 / CEK encrypted with KEK /
/ 59/             ]
/ 60/           ]
/ 61/         ]) >>,
/ 62/         / parameter-source-component / 22: 1 / [h'01'] /
/ 63/       },
/ 64/       / directive-copy / 22, 15
/ 65/         / consumes the SUIT_Encryption_Info above /
/ 66/     ] >>
/ 67/   } >>
/ 68/ })
]]></sourcecode></figure>

</section>
<section anchor="example-ES-DH-write"><name>ES-DH Example with Write + Copy Directives</name>

<t>The following SUIT manifest instructs a parser to authenticate the manifest
using COSE_Sign1 with ES256. It also directs the parser to write and decrypt
the encrypted payload into a component via the suit-directive-write directive.</t>

<t>The SUIT manifest in diagnostic notation (formatted with line breaks for clarity)
is presented below:</t>

<figure><sourcecode type="cbor-diag"><![CDATA[
/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'1DB69EF1477E9942815F29F78E09957B
/  6/                           26B4ADD03902BDB3D1EDF3DA2075F593'
/  7/     ] >>,
/  8/     << / COSE_Sign1_Tagged / 18([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: -7 / ES256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / signature: / h'CB4EADA6BEC17EEB22EB836FB2BF9136
/ 15/                        A6EF733C11DAC955F543BBDCAA373B85
/ 16/                        9321BC77969917E4C70F049527607F4C
/ 17/                        32752D53E01346E96BFF4880B437DF64'
/ 18/     ]) >>
/ 19/   ] >>,
/ 20/   / manifest / 3: << {
/ 21/     / manifest-version / 1: 1,
/ 22/     / manifest-sequence-number / 2: 1,
/ 23/     / common / 3: << {
/ 24/       / components / 2: [
/ 25/         ['decrypted-firmware']
/ 26/       ]
/ 27/     } >>,
/ 28/     / install / 20: << [
/ 29/       / directive-set-component-index / 12,
/ 30/         0 / ['plaintext-firmware'] /,
/ 31/       / directive-override-parameters / 20, {
/ 32/         / parameter-content / 18:
/ 33/           h'758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4
/ 34/             BD6D7ED26AB32FEB063385D4D3465927EC82CB5E198A59',
/ 35/         / parameter-encryption-info / 19: << 96([
/ 36/           / protected: / << {
/ 37/             / alg / 1: 1 / A128GCM /
/ 38/           } >>,
/ 39/           / unprotected: / {
/ 40/             / IV / 5: h'F14AAB9D81D51F7AD943FE87'
/ 41/           },
/ 42/           / ciphertext: / null / detached ciphertext /,
/ 43/           / recipients: / [
/ 44/             [
/ 45/               / protected: / << {
/ 46/                 / alg / 1: -29 / ECDH-ES + A128KW /
/ 47/               } >>,
/ 48/               / unprotected: / {
/ 49/                 / ephemeral key / -1: {
/ 50/                   / kty / 1: 2 / EC2 /,
/ 51/                   / crv / -1: 1 / P-256 /,
/ 52/                   / x / -2:
/ 53/                     h'73024F415AA51529A66CCEFD88F3F62A
/ 54/                       734492FF45F6AD37FD2888E73EAF19DA',
/ 55/                   / y / -3:
/ 56/                     h'4005B48A6FD091AA6ABFE3CFBEEDE88B
/ 57/                       347E521D43405FDBD7D2CFF0EBC21B26'
/ 58/                 },
/ 59/                 / kid / 4: 'kid-2'
/ 60/               },
/ 61/               / ciphertext: /
/ 62/                 h'A06B8E6550F308712B1DF044
/ 63/                   B21B7D11D9B22792F1DE0997'
/ 64/                 / CEK encrypted with KEK /
/ 65/             ]
/ 66/           ]
/ 67/         ]) >>
/ 68/       },
/ 69/       / directive-write / 18,
/ 70/         15 / consumes the SUIT_Encryption_Info above /
/ 71/     ] >>
/ 72/   } >>
/ 73/ })
]]></sourcecode></figure>

<t>In hex format, the SUIT manifest is this:</t>

<figure><sourcecode type="cbor-pretty"><![CDATA[
D86BA2025873825824822F58201DB69EF1477E9942815F29F78E09957B26
B4ADD03902BDB3D1EDF3DA2075F593584AD28443A10126A0F65840CB4EAD
A6BEC17EEB22EB836FB2BF9136A6EF733C11DAC955F543BBDCAA373B8593
21BC77969917E4C70F049527607F4C32752D53E01346E96BFF4880B437DF
640358E8A4010102010357A1028181526465637279707465642D6669726D
776172651458C7860C0014A212582E758C4B7BBAE2C4C1D462423E0F0DC3
164FFA7B85BB94D4BD6D7ED26AB32FEB063385D4D3465927EC82CB5E198A
5913588CD8608443A10101A1054CF14AAB9D81D51F7AD943FE87F6818344
A101381CA220A40102200121582073024F415AA51529A66CCEFD88F3F62A
734492FF45F6AD37FD2888E73EAF19DA2258204005B48A6FD091AA6ABFE3
CFBEEDE88B347E521D43405FDBD7D2CFF0EBC21B2604456B69642D325818
A06B8E6550F308712B1DF044B21B7D11D9B22792F1DE0997120F
]]></sourcecode></figure>

</section>
<section anchor="example-ES-DH-dependency"><name>ES-DH Example with Dependency</name>

<t>The following SUIT manifest requests a parser to resolve the dependency.</t>

<t>The dependent manifest is signed with another key:</t>

<figure><artwork><![CDATA[
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIIQa67e56m8CYL5zVaJFiLl30j0qxb8ray2DeUMqH+qYoAoGCCqGSM49
AwEHoUQDQgAEDpCKqPBm2x8ITgw2UsY5Ur2Z8qW9si+eATZ6rQOrpot32hvYrE8M
tJC6IQZIv3mrFk1JrTVR1x0xSydJ7kLSmg==
-----END EC PRIVATE KEY-----
]]></artwork></figure>

<t>The dependency manifest is embedded as an integrated-dependency
and referred to by the "#dependency-manifest" URI.</t>

<t>The SUIT manifest in diagnostic notation (with line breaks added for
readability) is shown here:</t>

<figure><sourcecode type="cbor-diag"><![CDATA[
/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'A00CB6C85515C1EF471B50B542FACDD8
/  6/                           8B71B3C7EA2A43DE13D32C4A99056FE9'
/  7/     ] >>,
/  8/     << / COSE_Sign1_Tagged / 18([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: -7 / ES256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / signature: / h'421B30FE76DA848616D72FC1115EA610
/ 15/                        5578CB95DF9C6BEAD931105C9D555CF8
/ 16/                        CD38C8FD68ACE43445D8D2CAE6391A99
/ 17/                        5A212487D92F8DAD789F65511AC61778'
/ 18/     ]) >>
/ 19/   ] >>,
/ 20/   / manifest / 3: << {
/ 21/     / manifest-version / 1: 1,
/ 22/     / manifest-sequence-number / 2: 1,
/ 23/     / common / 3: << {
/ 24/       / dependencies / 1: {
/ 25/         / component-index / 1: {
/ 26/           / dependency-prefix / 1: [
/ 27/              'dependency-manifest.suit'
/ 28/           ]
/ 29/         }
/ 30/       },
/ 31/       / components / 2: [
/ 32/         ['decrypted-firmware']
/ 33/       ]
/ 34/     } >>,
/ 35/     / manifest-component-id / 5: [
/ 36/       'dependent-manifest.suit'
/ 37/     ],
/ 38/     / install / 20: << [
/ 39/       / NOTE: set SUIT_Encryption_Info /
/ 40/       / directive-set-component-index / 12,
/ 41/         0 / ['decrypted-firmware'] /,
/ 42/       / directive-override-parameters / 20, {
/ 43/         / parameter-content / 18:
/ 44/           h'758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4
/ 45/             BD6D7ED26AB32FEB063385D4D3465927EC82CB5E198A59',
/ 46/         / parameter-encryption-info / 19: << 96([
/ 47/           / protected: / << {
/ 48/             / alg / 1: 1 / A128GCM /
/ 49/           } >>,
/ 50/           / unprotected: / {
/ 51/             / IV / 5: h'F14AAB9D81D51F7AD943FE87'
/ 52/           },
/ 53/           / ciphertext: / null / detached ciphertext /,
/ 54/           / recipients: / [
/ 55/             [
/ 56/               / protected: / << {
/ 57/                 / alg / 1: -29 / ECDH-ES + A128KW /
/ 58/               } >>,
/ 59/               / unprotected: / {
/ 60/                 / ephemeral key / -1: {
/ 61/                   / kty / 1: 2 / EC2 /,
/ 62/                   / crv / -1: 1 / P-256 /,
/ 63/                   / x / -2:
/ 64/                     h'73024F415AA51529A66CCEFD88F3F62A
/ 65/                       734492FF45F6AD37FD2888E73EAF19DA',
/ 66/                   / y / -3:
/ 67/                     h'4005B48A6FD091AA6ABFE3CFBEEDE88B
/ 68/                       347E521D43405FDBD7D2CFF0EBC21B26'
/ 69/                 },
/ 70/                 / kid / 4: 'kid-2'
/ 71/               },
/ 72/               / ciphertext: /
/ 73/                 h'A06B8E6550F308712B1DF044
/ 74/                   B21B7D11D9B22792F1DE0997'
/ 75/                 / CEK encrypted with KEK /
/ 76/             ]
/ 77/           ]
/ 78/         ]) >>
/ 79/       },
/ 80/ 
/ 81/       / NOTE: call dependency-manifest /
/ 82/       / directive-set-component-index / 12,
/ 83/         1 / ['dependenty-manifest.suit'] /,
/ 84/       / directive-override-parameters / 20, {
/ 85/         / parameter-image-digest / 3: << [
/ 86/           / algorithm-id / -16 / SHA256 /,
/ 87/           / digest-bytes / h'4B15C90FBD776A820E7E733DF040D90B
/ 88/                              356B5C75982ECAECE8673818179BDF16'
/ 89/         ] >>,
/ 90/         / parameter-image-size / 14: 247,
/ 91/         / parameter-uri / 21: "#dependency-manifest"
/ 92/       },
/ 93/       / directive-fetch / 21, 15,
/ 94/       / condition-dependency-integrity / 7, 15,
/ 95/       / directive-process-dependency / 11, 15
/ 96/     ] >>
/ 97/   } >>,
/ 98/   "#dependency-manifest": <<
/ 99/     / SUIT_Envelope_Tagged / 107({
/100/       / authentication-wrapper / 2: << [
/101/         << [
/102/           / digest-algorithm-id: / -16 / SHA256 /,
/103/           / digest-bytes: /
/104/             h'4B15C90FBD776A820E7E733DF040D90B
/105/               356B5C75982ECAECE8673818179BDF16'
/106/         ] >>,
/107/         << / COSE_Sign1_Tagged / 18([
/108/           / protected: / << {
/109/             / algorithm-id / 1: -7 / ES256 /
/110/           } >>,
/111/           / unprotected: / {},
/112/           / payload: / null,
/113/           / signature: / h'2B1B9C4E44E52863A78F73DA2A935823
/114/                            B28AEAE6A85CADAC4C4E3AABAAD56CBC
/115/                            E5A47D288F86B54D0186657E972E748B
/116/                            48CDB1D420FBAC1285DCC978382F62CC'
/117/         ]) >>
/118/       ] >>,
/119/       / manifest / 3: << {
/120/         / manifest-version / 1: 1,
/121/         / manifest-sequence-number / 2: 1,
/122/         / common / 3: << {
/123/           / components / 2: [
/124/             ['decrypted-firmware']
/125/           ],
/126/           / shared-sequence / 4: << [
/127/             / directive-set-componnt-index / 12,
/128/               0 / ['decrypted-firmware'] /,
/129/             / directive-override-parameters / 20, {
/130/               / parameter-image-digest / 3: << [
/131/                 / algorithm-id / -16 / SHA256 /,
/132/                 / digest-bytes /
/133/                   h'36921488FE6680712F734E11F58D87EE
/134/                     B66D4B21A8A1AD3441060814DA16D50F'
/135/               ] >>,
/136/               / parameter-image-size / 14: 30
/137/             }
/138/           ] >>
/139/         } >>,
/140/         / manifest-component-id / 5: [
/141/           'dependency-manifest.suit'
/142/         ],
/143/         / validate / 7: << [
/144/           / condition-image-match / 3, 15
/145/         ] >>,
/146/         / install / 20: << [
/147/           / directive-set-component-index / 12,
/148/             0 / ['decrypted-firmware'] /,
/149/           / directive-write / 18, 15
/150/             / consumes the SUIT_Encryption_Info /
/151/             / set by the dependent /,
/152/           / condition-image-match / 3, 15
/153/             / check the integrity of the decrypted payload /
/154/         ] >>
/155/       } >>
/156/     })
/157/   >>
/158/ })
]]></sourcecode></figure>

<t>In hex format, the SUIT manifest is this:</t>

<figure><sourcecode type="cbor-pretty"><![CDATA[
D86BA3025873825824822F5820A00CB6C85515C1EF471B50B542FACDD88B
71B3C7EA2A43DE13D32C4A99056FE9584AD28443A10126A0F65840421B30
FE76DA848616D72FC1115EA6105578CB95DF9C6BEAD931105C9D555CF8CD
38C8FD68ACE43445D8D2CAE6391A995A212487D92F8DAD789F65511AC617
780359016CA501010201035837A201A101A101815818646570656E64656E
63792D6D616E69666573742E73756974028181526465637279707465642D
6669726D77617265058157646570656E64656E742D6D616E69666573742E
737569741459010F8E0C0014A212582E758C4B7BBAE2C4C1D462423E0F0D
C3164FFA7B85BB94D4BD6D7ED26AB32FEB063385D4D3465927EC82CB5E19
8A5913588CD8608443A10101A1054CF14AAB9D81D51F7AD943FE87F68183
44A101381CA220A40102200121582073024F415AA51529A66CCEFD88F3F6
2A734492FF45F6AD37FD2888E73EAF19DA2258204005B48A6FD091AA6ABF
E3CFBEEDE88B347E521D43405FDBD7D2CFF0EBC21B2604456B69642D3258
18A06B8E6550F308712B1DF044B21B7D11D9B22792F1DE09970C0114A303
5824822F58204B15C90FBD776A820E7E733DF040D90B356B5C75982ECAEC
E8673818179BDF160E18F7157423646570656E64656E63792D6D616E6966
657374150F070F0B0F7423646570656E64656E63792D6D616E6966657374
58F7D86BA2025873825824822F58204B15C90FBD776A820E7E733DF040D9
0B356B5C75982ECAECE8673818179BDF16584AD28443A10126A0F658402B
1B9C4E44E52863A78F73DA2A935823B28AEAE6A85CADAC4C4E3AABAAD56C
BCE5A47D288F86B54D0186657E972E748B48CDB1D420FBAC1285DCC97838
2F62CC03587BA601010201035849A2028181526465637279707465642D66
69726D7761726504582F840C0014A2035824822F582036921488FE668071
2F734E11F58D87EEB66D4B21A8A1AD3441060814DA16D50F0E181E058158
18646570656E64656E63792D6D616E69666573742E73756974074382030F
1447860C00120F030F
]]></sourcecode></figure>

</section>
</section>
<section anchor="operational-considerations"><name>Operational Considerations</name>

<t>The algorithms outlined in this document assume that the party
responsible for payload encryption:</t>

<t><list style="symbols">
  <t>shares a key-encryption key (KEK) with the recipient
(for use with the AES Key Wrap scheme), or</t>
  <t>possesses the  recipient's public key (for use with ES-DH).</t>
</list></t>

<t>Both scenarios necessitate initial communication to distribute
these keys among the involved parties. This interaction can be
facilitated by a device management protocol, as described in
<xref target="RFC9019"/>, or may occur earlier in the device lifecycle, such
as during manufacturing or commissioning. In addition to the
keying material, key identifiers and algorithm information must
also be provisioned. This specification does not impose any
requirements on the structure of the key identifier.</t>

<t>In certain situations, third-party companies analyze binaries for
known security vulnerabilities. However, encrypted payloads hinder
this type of analysis. Consequently, these third-party companies
must either be granted access to the plaintext binary before
encryption or be authorized recipients of the encrypted payloads.</t>

</section>
<section anchor="sec-cons"><name>Security Considerations</name>

<t>This entire document focuses on security.</t>

<t>It is considered best security practice to use different keys for
different purposes. For instance, the key-encryption key (KEK)
utilized in an AES-KW-based content key distribution method for
encryption should be distinct from the long-term symmetric key
employed for authentication in a communication security protocol.</t>

<t>To further minimize the attack surface, it may be advantageous to
use different long-term keys for encrypting various types of
payloads. For example, KEK_1 could be used with an AES-KW content
key distribution method to encrypt a firmware image, while KEK_2
would encrypt configuration data.</t>

<t>A substantial part of this document focuses on content key
distribution, utilizing two primary methods: AES Key Wrap (AES-KW) and
Ephemeral-Static Diffie-Hellman (ES-DH). The key properties associated
with their deployment are summarized in <xref target="cek-distribution"/>.</t>

<texttable title="Content Key Distribution: Comparison" anchor="cek-distribution">
      <ttcol align='left'>Number of Long-Term Keys</ttcol>
      <ttcol align='left'>Number of Content Encryption Keys (CEKs)</ttcol>
      <ttcol align='left'>Use Case</ttcol>
      <ttcol align='left'>Recommended?</ttcol>
      <c>Same key<br />for all<br />devices</c>
      <c>Single CEK per<br />payload shared<br />with all devies</c>
      <c>Legacy Usage</c>
      <c>No, bad<br />practice</c>
      <c>One key<br />per device</c>
      <c>Single CEK per<br />payload shared<br />with all devies</c>
      <c>Efficient<br />Payload<br />Distribution</c>
      <c>Yes</c>
      <c>One Key<br />per device</c>
      <c>One CEK per payload<br />encryption transaction<br />per device</c>
      <c>Point-to-<br />Point Payload<br />Distribution</c>
      <c>Yes</c>
</texttable>

<t>The use of firmware encryption in battery-powered IoT devices introduces the
risk of a battery exhaustion attack. This attack exploits the
high energy cost of flash memory operations. To execute this
attack, the adversary must be able to swap detached payloads
and trick the device into processing an incorrect payload.
Payload swapping is feasible only if there is no communication
security protocol between the device and the distribution
system or if the distribution system itself has been compromised.</t>

<t>While the security features provided by the manifest can detect
this attack and prevent the device from booting with an
incorrectly supplied payload, the energy-intensive flash
operations will have already occurred. As a result, these
operations can diminish the lifespan of the devices, making
battery-powered IoT devices particularly susceptible to such
attacks. For further discussion on IoT devices using flash memory,
see <xref target="flash"/>.</t>

<t>Including the digest of the encrypted firmware in the manifest
enables the device to detect a battery exhaustion attack before
energy-consuming decryption and flash memory copy or swap
operations take place.</t>

<t>As specified in <xref section="8" sectionFormat="of" target="RFC9459"/>, recipients must perform
integrity checks before decryption to mitigate padding oracle
vulnerabilities, particularly when using the AES-CTR mode. This practice
not only prevents padding oracle attacks but also protects against
format and decryption oracles, as decryption is skipped if the
integrity check fails. For further details on payload integrity
validation, see <xref target="payload-integrity-validation"/>.</t>

<t>The same combination of IV and AES key MUST NOT be reused. This
requirement applies not only to AES-CTR mode, as specified in
<xref section="4" sectionFormat="of" target="RFC9459"/>, but also to other content encryption
algorithms, including AEAD ciphers like AES-GCM.</t>

<t>Although the examples in this document use the coaps scheme for
payload retrieval, alternative URI schemes like coap and http
can also be used. This flexibility is possible because the SUIT
manifest and this extension do not rely on the TLS layer for security.</t>

<t>Confidentiality, integrity, and authentication are ensured by the
SUIT manifest and the extensions defined in this document. For
details on how the SUIT manifest meets the security requirements
outlined in <xref target="RFC9124"/>, refer to <xref section="12" sectionFormat="of" target="I-D.ietf-suit-manifest"/>.
Additional security considerations for the cryptographic primitives used
in these extensions are discussed in <xref section="11" sectionFormat="of" target="RFC9053"/> and
<xref section="8" sectionFormat="of" target="RFC9459"/>.</t>

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

<t>IANA is asked to add the following value to the SUIT Parameters
registry at <xref target="iana-suit"/>, which is established by <xref section="11.5" sectionFormat="of" target="I-D.ietf-suit-manifest"/>:</t>

<figure><artwork><![CDATA[
Label      Name                 Reference
-----------------------------------------
TBD19      Encryption Info      Section 4
]]></artwork></figure>

<t>RFC Editor's Note (TBD19): The value for the Encryption Info
parameter is set to 19, as the proposed value.</t>

</section>


  </middle>

  <back>


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

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



<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="RFC3394">
  <front>
    <title>Advanced Encryption Standard (AES) Key Wrap Algorithm</title>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <date month="September" year="2002"/>
  </front>
  <seriesInfo name="RFC" value="3394"/>
  <seriesInfo name="DOI" value="10.17487/RFC3394"/>
</reference>

<reference anchor="RFC9052">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
      <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="96"/>
  <seriesInfo name="RFC" value="9052"/>
  <seriesInfo name="DOI" value="10.17487/RFC9052"/>
</reference>

<reference anchor="RFC9053">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
      <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9053"/>
  <seriesInfo name="DOI" value="10.17487/RFC9053"/>
</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>


<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">
         </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="24" month="February" year="2025"/>
      <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-33"/>
   
</reference>

<reference anchor="RFC9459">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): AES-CTR and AES-CBC</title>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <date month="September" year="2023"/>
    <abstract>
      <t>The Concise Binary Object Representation (CBOR) data format is designed for small code size and small message size. CBOR Object Signing and Encryption (COSE) is specified in RFC 9052 to provide basic security services using the CBOR data format. This document specifies the conventions for using AES-CTR and AES-CBC as content encryption algorithms with COSE.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9459"/>
  <seriesInfo name="DOI" value="10.17487/RFC9459"/>
</reference>


<reference anchor="I-D.ietf-suit-trust-domains">
   <front>
      <title>SUIT Manifest Extensions for Multiple Trust Domains</title>
      <author fullname="Brendan Moran" initials="B." surname="Moran">
         <organization>Arm Limited</organization>
      </author>
      <author fullname="Ken Takayama" initials="K." surname="Takayama">
         <organization>SECOM CO., LTD.</organization>
      </author>
      <date day="3" month="March" year="2025"/>
      <abstract>
	 <t>   This specification describes extensions to the SUIT Manifest format
   for use in deployments with multiple trust domains.  A device has
   more than one trust domain when it enables delegation of different
   rights to mutually distrusting entities for use for different
   purposes or Components in the context of firmware or software update.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-suit-trust-domains-10"/>
   
</reference>


<reference anchor="I-D.ietf-suit-mti">
   <front>
      <title>Mandatory-to-Implement Algorithms for Authors and Recipients of Software Update for the Internet of Things manifests</title>
      <author fullname="Brendan Moran" initials="B." surname="Moran">
         <organization>Arm Limited</organization>
      </author>
      <author fullname="Øyvind Rønningstad" initials="O." surname="Rønningstad">
         <organization>Nordic Semiconductor</organization>
      </author>
      <author fullname="Akira Tsukamoto" initials="A." surname="Tsukamoto">
         <organization>Openchip &amp; Software Technologies, S.L.</organization>
      </author>
      <date day="17" month="March" year="2025"/>
      <abstract>
	 <t>   This document specifies cryptographic algorithm profiles to be used
   with the SUIT manifest (see draft-ietf-suit-manifest).  These are the
   mandatory-to-implement algorithms to ensure interoperability.

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




    </references>

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



<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="RFC9397">
  <front>
    <title>Trusted Execution Environment Provisioning (TEEP) Architecture</title>
    <author fullname="M. Pei" initials="M." surname="Pei"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <author fullname="D. Thaler" initials="D." surname="Thaler"/>
    <author fullname="D. Wheeler" initials="D." surname="Wheeler"/>
    <date month="July" year="2023"/>
    <abstract>
      <t>A Trusted Execution Environment (TEE) is an environment that enforces the following: any code within the environment cannot be tampered with, and any data used by such code cannot be read or tampered with by any code outside the environment. This architecture document discusses the motivation for designing and standardizing a protocol for managing the lifecycle of Trusted Applications running inside such a TEE.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9397"/>
  <seriesInfo name="DOI" value="10.17487/RFC9397"/>
</reference>

<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="RFC5869">
  <front>
    <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
    <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
    <author fullname="P. Eronen" initials="P." surname="Eronen"/>
    <date month="May" year="2010"/>
    <abstract>
      <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5869"/>
  <seriesInfo name="DOI" value="10.17487/RFC5869"/>
</reference>

<reference anchor="RFC8937">
  <front>
    <title>Randomness Improvements for Security Protocols</title>
    <author fullname="C. Cremers" initials="C." surname="Cremers"/>
    <author fullname="L. Garratt" initials="L." surname="Garratt"/>
    <author fullname="S. Smyshlyaev" initials="S." surname="Smyshlyaev"/>
    <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
    <author fullname="C. Wood" initials="C." surname="Wood"/>
    <date month="October" year="2020"/>
    <abstract>
      <t>Randomness is a crucial ingredient for Transport Layer Security (TLS) and related security protocols. Weak or predictable "cryptographically secure" pseudorandom number generators (CSPRNGs) can be abused or exploited for malicious purposes. An initial entropy source that seeds a CSPRNG might be weak or broken as well, which can also lead to critical and systemic security problems. This document describes a way for security protocol implementations to augment their CSPRNGs using long-term private keys. This improves randomness from broken or otherwise subverted CSPRNGs.</t>
      <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8937"/>
  <seriesInfo name="DOI" value="10.17487/RFC8937"/>
</reference>

<reference anchor="RFC5652">
  <front>
    <title>Cryptographic Message Syntax (CMS)</title>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <date month="September" year="2009"/>
    <abstract>
      <t>This document describes the Cryptographic Message Syntax (CMS). This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="70"/>
  <seriesInfo name="RFC" value="5652"/>
  <seriesInfo name="DOI" value="10.17487/RFC5652"/>
</reference>

<reference anchor="RFC5280">
  <front>
    <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
    <author fullname="D. Cooper" initials="D." surname="Cooper"/>
    <author fullname="S. Santesson" initials="S." surname="Santesson"/>
    <author fullname="S. Farrell" initials="S." surname="Farrell"/>
    <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <author fullname="W. Polk" initials="W." surname="Polk"/>
    <date month="May" year="2008"/>
    <abstract>
      <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5280"/>
  <seriesInfo name="DOI" value="10.17487/RFC5280"/>
</reference>


<reference anchor="I-D.ietf-teep-usecase-for-cc-in-network">
   <front>
      <title>TEEP Usecase for Confidential Computing in Network</title>
      <author fullname="Penglin Yang" initials="P." surname="Yang">
         <organization>Dawning Information Industry Co., Ltd.</organization>
      </author>
      <author fullname="Meiling Chen" initials="M." surname="Chen">
         <organization>China Mobile</organization>
      </author>
      <author fullname="Li Su" initials="L." surname="Su">
         <organization>China Mobile</organization>
      </author>
      <author fullname="Ting Pang" initials="T." surname="Pang">
         <organization>Huawei Technology Co.,Ltd.</organization>
      </author>
      <date day="1" month="January" year="2025"/>
      <abstract>
	 <t>   Confidential computing is the protection of data in use by performing
   computation in a hardware-based Trusted Execution Environment.
   Confidential computing could provide integrity and confidentiality
   for users who want to run applications and process data in that
   environment.  When confidential computing is used in scenarios which
   need network to provision user data and applications, TEEP
   architecture and protocol could be used.  This usecase illustrates
   the steps of how to deploy applications, containers, VMs and data in
   different confidential computing hardware in network.  This document
   is a use case and extension of TEEP architecture and could provide
   guidance for cloud computing, MEC (Multi-access Computing) and other
   scenarios to use confidential computing in network.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-teep-usecase-for-cc-in-network-09"/>
   
</reference>


<reference anchor="iana-suit" target="TBD">
  <front>
    <title>IANA SUIT Manifest Registry</title>
    <author >
      <organization>Internet Assigned Numbers Authority</organization>
    </author>
    <date year="2023"/>
  </front>
</reference>
<reference anchor="ROP" target="https://en.wikipedia.org/wiki/Return-oriented_programming">
  <front>
    <title>Return-Oriented Programming</title>
    <author >
      <organization>Wikipedia</organization>
    </author>
    <date year="2023" month="March"/>
  </front>
</reference>
<reference anchor="SP800-56" target="http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf">
  <front>
    <title>Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography, NIST Special Publication 800-56A Revision 3</title>
    <author >
      <organization>NIST</organization>
    </author>
    <date year="2018" month="April"/>
  </front>
</reference>


    </references>

</references>


<?line 2044?>

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

<t>The following CDDL must be appended to the SUIT Manifest CDDL. The SUIT CDDL is defined in
Appendix A of <xref target="I-D.ietf-suit-manifest"/></t>

<figure><sourcecode type="cddl"><![CDATA[
SUIT_Encryption_Info = #6.96(COSE_Encrypt)

$$SUIT_Parameters //= (suit-parameter-encryption-info =>
    bstr .cbor SUIT_Encryption_Info)

suit-parameter-encryption-info = 19
]]></sourcecode></figure>

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

<t>We would like to thank Henk Birkholz for his feedback on the CDDL description in this document.
Additionally, we would like to thank Michael Richardson, Dick Brooks, Øyvind Rønningstad, Dave Thaler, Laurence
Lundblade, Christian Amsüss, Ruud Derwig, Martin Thomson. Kris Kwiatkowski, Suresh Krishnan and Carsten Bormann for their review feedback.</t>

<t>We would like to thank the IESG, in particular Deb Cooley, Éric Vyncke and Roman Danyliw, for their help to improve the quality of this document.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+292XLjVpYo+s4I/QMifeKmVElSGDiA6nZXgwDoVOXoVNou
l0+GAyIhCSWSkAFSspzOfj/n/UTcT7kP963/5H7JXcOeAIKklOWqru5qdpeT
Ijb2sPbaa95rdTqdg9YqW83TEyteTov7m1U6s94m9/M8mZVWtrTOvjl9b71K
ltlFWq7Kg1Zyfl6ktw9tPcuny2QBnc+K5GLVydLVRadcZ6vORVYs7pIi7aTc
T5YvO27voDVNVullXtyfWOVqdtA6aGU3xYm1KtblyrXtke3CDIo0ObHO0um6
yFb3B627vLi+LPL1zQkNf9C6Tu/ht9mJdbpcpcUyXXUiHB17K1fJcvZjMs+X
MKf7FGZ4k50ctCyruJims3J1P5e/W9Yqn5rfs+UsXa7UL2VerIr0otQ/3C+q
f6+KbKrbT/PFAt7Xz7PlPFsao6U/rzrzrFx1oKPzfA4NO/nvnuEjAOIiubnJ
lpfmfH6cp7cpNuvhwpL16iovcCkdfE4fhvzzZLlMS+t9Ob3KL9Jldqme5wV0
+M0yu02LEiBp5RdWcHMzz2BPz6YZbAy8Ns6Xy867qzRbds6yVL8r0eB5Z/zu
TP2aLpJsLofs6iH/9XLxcxc2AmdqTDBbwvTfda3n+bqcp/e1ib9bl+XGI5gz
YNcvCSLMifVtdpnNFSq0rZcvw40ZVtvUp3rF/f/rLbYq02kX9qk6S5rkuGu9
yotkKX/kGY6LdDlLltVH1RkGxcJ6mS0yOCiygRhZvNyll/81KRZbho660DS/
qw0dJbfZrPqgOvDLbJkUeW3MGb7VPce3/nVODbrwVsOgL7rW++Q6uU8WSXXc
F+ly40l14LM4fPPKCt90YTveR93aDK7TZXcl3u8iOQDUgAdy7cu8WEA/tykd
yneT0HWckfzueaOe/D6y+67x3ZPffWfIbU47UVeTm4UgSeqVXn/U0IzoTGeW
w5QACg3drJBaAFFaXtQnOrL1REfeaKi+O66adN8fqDb+yFNt+gO9mL7r2xvt
1SxWaXrTWQOeJmXagTl0ptMOHE04WkgFqW2WLBOa7QmDXlMGfeglYbSCsswu
l3DgX68X50AGrIBaq4MiWMNp8Dqo0nbrXXoJxKoQ7WZAtk8s13Y98V5SXKZA
/N6PI1rLm7c7ZvNddp3dpLMsqYz5Ll2ti2XnTQGUiNhMkV8WyWIBZNAc0x50
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
OGmvVY2U0p8xrGYYAdceAcMfwn44EQpSdKIHjZFqu0K2arv1oWVGS6lfDKBL
dqwjpBgAjRzIuKjTkoFQ/Hl0UNXQqag0Q9dQaYbeYy/qkFl+n4tsWHOR7RNk
3UFrt6Da9+GxKz08wKLIRdazWZBrbZfk9slqI6+1WxzbLXC1Bj30qcVbr/sM
0IW1xXHWMj1n4dAfKJ/WA678tHZ7cHaz7xbf+fHDz7jy02upiuDuZkXwvWRy
HynkiuDN9KylCdo+mlXx6rno1GttoxfbyELlQlKzsh+lN5jWbTm939DvZ+rR
XiUfU7RQMhRTxweNNp+LQjC6r64OfeSfVpWzKXKDiJocfL9oWxKQOGzKA/J8
GgZfx/Hp6dfJYJj2Bws//P5l/5dvkz9Mspdzz/6z/dPP536R3LtR+s2rn54/
++n7PMhVnpCDFmYKyb/5mlJdRDfhi5/ejhfuz/7p+8s795vy+/43hfsn/6fv
RmX2LA3e/2lQfP2muMlXnnt1+30R+68OWqs/hIPTr/90eustism184fi/bfv
nJ/tn8/uZ38YXr88W1RTXTSuoxIkqvbIBFUqa2MkZbV8jLFzsqSAzrwuIkqf
fKEbqYCcJ9Y3705/wwtTWIpHpCA80rE4mGLuv4p9I7CBgA9Cv9/HMujxpDd0
xn17TLc0wyjy99o3/DG84YXDOHCDnhfFjgeHPcSy5HZ/MIlH/6j2jR6QNM+e
xMNBFPg9DrRwJ8AEnX4cDBx7t32j3x/64XjUjyajEBgrMAB07PbDUdTv98OJ
v9u+EUaeH/qTaOAHYQzkudePfKDNQTzwgJKPRrvtG33kfj1/GAEd9qMgGvoj
4PR9xwlC4JVD/z+vfUNRDExRSIN9rFk4DBuItjmIZjWF2SA/IH1dZKJpNeWE
+DxtoFVdNNU+Ncwj/PlQsYgAqlbsHZ/qJo0mk41pvthqstG2iw+GIUIp7v0N
+BuAmbGCXjUjqDWuNpcoDQnkGPZ2m4NMj+DrN+/jEypy2ihgH1fsBw++P2Wo
O2w9agKRMAq4Tb3vcU9uuZdWtx5VzQmfYT2q2x4+w3pkmiUe5Uqt+R0bTR41
fXWXK7WiwUokrN+fanIeOvUxHmY9qpohPm36FR9916vm9m2461XbrR8arQnN
oGwyHDzMerRpNFDQ3bAaNEK4+SLVNuvRpimB2zdbj5qMCjutR81GBdN61GRE
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
KXEl+Kc1Z8StW/xgVv8/OK4xMnZTAQA=

-->

</rfc>

