<?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.21 (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-25" 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="July" day="07"/>

    <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">
<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">
<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,192" fill="none" stroke="black"/>
<path d="M 64,224 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,192" fill="none" stroke="black"/>
<path d="M 184,224 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"/>
<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="64" y="212">⊕</text>
<text x="148" y="212">P2</text>
<text x="184" y="212">⊕</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">
<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">
<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: -9 / ESP256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / signature: / h'2B20A797AC7DBEBC53147592BB110AEC
/ 15/                        43A2489AC19A169BB59FF6BD429300A9
/ 16/                        719FEB7DF277E4B8D1D821C816854229
/ 17/                        F266AC62AFD9DB52114F608EE66B187B'
/ 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
B4ADD03902BDB3D1EDF3DA2075F593584AD28443A10128A0F658402B20A7
97AC7DBEBC53147592BB110AEC43A2489AC19A169BB59FF6BD429300A971
9FEB7DF277E4B8D1D821C816854229F266AC62AFD9DB52114F608EE66B18
7B0358E8A4010102010357A1028181526465637279707465642D6669726D
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: -9 / ESP256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / signature: / h'3000301B7C54B3383CC4723C4B7BE667
/ 15/                        C6760C504213A105DD38401BED5EEF8E
/ 16/                        B915F8313420104F59467D76790A0EA2
/ 17/                        20B6021B4ED87051B3B4A8D05F7E0254'
/ 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: -9 / ESP256 /
/110/           } >>,
/111/           / unprotected: / {},
/112/           / payload: / null,
/113/           / signature: / h'BF95C29295B45470EF819E7F4E3C9084
/114/                            F4534E26469C0A0F2B8B9664881A5359
/115/                            D500F81BD3A6436A025C3E92E51CD714
/116/                            8F83DF47D29FF253F8D41B4D350A2B75'
/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
71B3C7EA2A43DE13D32C4A99056FE9584AD28443A10128A0F65840300030
1B7C54B3383CC4723C4B7BE667C6760C504213A105DD38401BED5EEF8EB9
15F8313420104F59467D76790A0EA220B6021B4ED87051B3B4A8D05F7E02
540359016CA501010201035837A201A101A101815818646570656E64656E
63792D6D616E69666573742E73756974028181526465637279707465642D
6669726D77617265058157646570656E64656E742D6D616E69666573742E
737569741459010F8E0C0014A212582E758C4B7BBAE2C4C1D462423E0F0D
C3164FFA7B85BB94D4BD6D7ED26AB32FEB063385D4D3465927EC82CB5E19
8A5913588CD8608443A10101A1054CF14AAB9D81D51F7AD943FE87F68183
44A101381CA220A40102200121582073024F415AA51529A66CCEFD88F3F6
2A734492FF45F6AD37FD2888E73EAF19DA2258204005B48A6FD091AA6ABF
E3CFBEEDE88B347E521D43405FDBD7D2CFF0EBC21B2604456B69642D3258
18A06B8E6550F308712B1DF044B21B7D11D9B22792F1DE09970C0114A303
5824822F58204B15C90FBD776A820E7E733DF040D90B356B5C75982ECAEC
E8673818179BDF160E18F7157423646570656E64656E63792D6D616E6966
657374150F070F0B0F7423646570656E64656E63792D6D616E6966657374
58F7D86BA2025873825824822F58204B15C90FBD776A820E7E733DF040D9
0B356B5C75982ECAECE8673818179BDF16584AD28443A10128A0F65840BF
95C29295B45470EF819E7F4E3C9084F4534E26469C0A0F2B8B9664881A53
59D500F81BD3A6436A025C3E92E51CD7148F83DF47D29FF253F8D41B4D35
0A2B7503587BA601010201035849A2028181526465637279707465642D66
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">
         <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
      </author>
      <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname="Koen Zandberg" initials="K." surname="Zandberg">
         <organization>Inria</organization>
      </author>
      <author fullname="Øyvind Rønningstad" initials="O." surname="Rønningstad">
         <organization>Nordic Semiconductor</organization>
      </author>
      <date day="28" month="May" 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-34"/>
   
</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>Cryptographic Algorithms for Internet of Things (IoT) Devices</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="6" month="July" year="2025"/>
      <abstract>
	 <t>   This document defines cryptographic algorithm profiles for use with
   the Software Updates for Internet of Things (SUIT) manifest.  These
   profiles specify sets of algorithms to promote interoperability
   across implementations.

   The SUIT manifest, as defined in &quot;A Manifest Information Model for
   Firmware Updates in Internet of Things (IoT) Devices&quot; (RFC 9124),
   provides a flexible and extensible format for describing how firmware
   and software updates are to be fetched, verified, decrypted, and
   installed on resource-constrained devices.  To ensure the security of
   these update processes, the manifest relies on cryptographic
   algorithms for functions such as digital signature verification,
   integrity checking, and confidentiality.

   Given the diversity of IoT deployments and the evolving cryptographic
   landscape, algorithm agility is essential.  This document groups
   algorithms into named profiles to accommodate varying levels of
   device capabilities and security requirements.  These profiles
   support the use cases laid out in the SUIT architecture, published in
   &quot;A Firmware Update Architecture for Internet of Things&quot; (RFC 9019).

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-suit-mti-21"/>
   
</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="Meiling Chen" initials="M." surname="Chen">
         <organization>China Mobile</organization>
      </author>
      <author fullname="Penglin Yang" initials="P." surname="Yang">
         <organization>Dawning Information Industry Co., Ltd.</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="30" month="June" 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-11"/>
   
</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+292XLbWJYo+s4I/QPCPnEtlUkKEyd1Z1eDBJhWeUzLdlZW
HkcGREISSiTBBEjJSqf7/Zz3E3E/5T7ct/6T+yV3DXsCCJKSK6u6uqvZnWWK
2NjD2muvea/VarUOGqt0NUtOrGgxye+Wq2RqvYnvZlk8Lax0YZ29P31nvYwX
6UVSrIqDRnx+nic39209zSaLeA6dT/P4YtVKk9VFq1inq9ZFms9v4zxpJdxP
mi1abuegMYlXyWWW351YxWp60DhopMv8xFrl62Ll2vbAdmEGeRKfWGfJZJ2n
q7uDxm2WX1/m2Xp5QsMfNK6TO/htemKdLlZJvkhWrRBHx96KVbyY/hTPsgXM
6S6BGS7Tk4OGZeUXk2RarO5m8nfLWmUT83u6mCaLlfqlyPJVnlwU+oe7efnv
VZ5OdPtJNp/D+/p5upilC2O05NOqNUuLVQs6Os9m0LCV/e4pPgIgzuPlMl1c
mvP5aZbcJNjMx4XF69VVluNSWvicPgz5Z/FikRTWu2JylV0ki/RSPc9y6PD9
Ir1J8gIgaWUXVrBczlLY07NJChsDrw2zxaL19ipJF62zNNHvSjR41hq+PVO/
JvM4nckh23rIf72cf2rDRuBMjQmmC5j+27b1LFsXs+SuMvG366LYeARzBuz6
JUaEObE+pJfpTKFC03rxYrQxw3Kb6lSvuP9/vcFWRTJpwz6VZ0mTHLatl1ke
L+SPPMNhniym8aL8qDzDIJ9bL9J5CgdFNhAji5fb9PK/xvl8y9BhG5pmt5Wh
w/gmnZYflAd+kS7iPKuMOcW32uf41r/OqEEb3qoZ9Hnbehdfx3fxPC6P+zxZ
bDwpD3wWjV6/tEav27Ad78J2ZQbXyaK9Eu+3kRwAasADufZFls+hn5uEDuXb
8ch1nIH87nkDX34f2B3X+O7J732nx21OW2Fbk5u5IEnqFb8zqGlGdKY1zWBK
AIWablZILYAoLS6qEx3YeqIDb9BT3x1XTbrT76o2/YGn2nS6ejEdt29vtFez
WCXJsrUGPI2LpAVzaE0mLTiacLSQClLbNF7ENNsTBr2mDPrQS8JoBUWRXi7g
wL9az8+BDFgBtVYHRbCG0+BVUKbt1tvkEohVLtpNgWyfWK7teuK9OL9MgPi9
G4a0ltdvdszm+/Q6XSbTNC6N+TZZrfNF63UOlIjYTJ5d5vF8DmTQHNPutm2v
vTny1Wq1LE6OjwHfbmX/iOzH+Nex6DwTnf+0LHd+9qZv261Od8ekX52evavM
l0n8lM6BBZsDnDHNW9+nRQLH5s6KgPmcA4W/Qj4AFPYqmQOBfV/AmFaYFpM8
WSXWi+wyBvBfza0RskWc1fIKKBsOZ50tk0kaz6w3a+hnwuPwRAMY/iYt8AfP
hE6wzIH4ubbT34QOAGdxM1uuz4v2ArayfZndHOMX/OVYDGWMVBzjHNpnb9pi
yNxrL6cXeBxarRaQW8CGeEIk/t1VWiDXWtNKC+zqIoW1rpLJ1SL9eQ1fETyS
9cP6i+xiheJA05KCQfOgMY8nV8AirVkS5wtsNc+mwPGaFvBwawnYmi3imaA7
uN7YOr+z1qsUfsPWq6vEOo3ejQ8ahLmSBLRpM+LLPEloejBV2H2gi4Bj8H6y
xH3J41kLtmuVTqzD6OzooBGmF7CE1rNkNoOOrMPw2RFNI4jOqL/vYZ+sQ/ir
9fz7o7YF/4bPLDio0DmBEAgfHJWJsafW7VU6Syx+hZvGMJOkVVzB8qf4QltK
WbhA4M6wIhBYZkCcUFrAmccTQLolIhW8cQt4A3LG4gaWlSJsUCaZJyiHYG+W
OXpb7ts8nU5nCf712EK6kGfT9QRfx58+rGcLgMU5gHSFGwgSniIdMB/Y58Vl
YR2eZu+OrCkgIEoMV/FNYl2ll1cz+A8PLu7DIoEvuOexlSezFM5BQuArkC0n
atOt9RLx1poDosB2FfOmlRSMibM7eh+Wh3iWIs0SIwKrynALAbtWuqd0Hl8m
gCs4emn/LSbd1m1cYA/JLAPaYH3+XM8wvnxpW4F+F0Funa8XADIEAAA3JsSL
z7P1isZSE6DVAryyd2KiTdjxBB6sMmi0mJZaM07jLxKM0AoQZHJlpSsrJqkM
Fvr5s+AoX75YMCAKkIWAL7xTxPmdpVgToExcWflVTP0KdG/DXlrxdJpS25WC
IZ6d+BI54ApPHBxdQWpu0tiagpy0QswCthEDDYXxYZ1zHPwyIUKJyCdemMB5
FVsggD4BiMSzIgPgXSS0mxcpitWwwcBzCCkNlIfTgLiMS0xzOPJxjljYhDVO
ZuspzXO1iifXQAqAcOTZHM8DTEWe/iVrJrCDshmMuwIJJk9+Xqc5AnsFwgce
tkV2C/9e0q7CDqNsBFS3WMMGxLjnZbxqIrhm8XoBj6ENjnmxnonZwD6NASYI
v3iB256XmY1lMBvrEFjjEe7r6zewp2JehVgHjoLrkNNBHNH6EuzrNTS9BXaB
PSWflrMsBWDh1tCmLVZwaOYZrhOp12Q9A+I3TO4y6qYAeVjAqbINgtSIYQEB
i2R20TTRY8dLRbbOJwltPRCk2Yy3+9xEUUI12lkL/8mBPyaLS8DlhGaEq8yT
pSJEsme5BW1mMbAVixQHhyWCIKa57qrEffCYq83TwEOl4xYHZ/QE8ovDlI5L
QecFwAoTQjKW4etAbWPYmAxeyq1ikgCE0gwRNF4prELyfIkyFC2lCicJxmxh
IDJJlS3rTLBBwNzJNdIv/PFNhdOpTi/XueZ92PJlPcMU8IIlytMOQMMVoxQJ
+LJK5nx6EBIoR1rQ5zsUhWHZ0Scg0TRKtLhJ82xBUH2DJATFDcLhd1H05qhp
EUEVBwo4BRMrEIUBsXHOBondLcYizcX9nYIwAhCiwc/hUQInVwoK1KM+lIU1
mcFOXKTm0CCRQ1e4+rHgHNAh7CHvS5Ei45yQ3njLGIDrB+42tx4JyvHIukyA
AcJZQv4DGAAaPuw7fIEfrOz8z7CRAMA1fREYIhFMYqnoCueYKJvJmmhUbDBo
mN4KIWucb+DZTcEEkG7CGUqkCElsNc/Wl1fWDWLgutA8Exli6QhMkwtmFLeZ
GgblAYRvnp7z7sI0rrIpC2YICxImNpinwNNICUlnWkiyamQkoln4Rr2cJGEE
G4nMhqZAAgKyFcB0AzwlaZhFJyI3IHUvpiw+1bemQV6vcwADUkYrTucFbyXQ
F+5kQcoPEoB7gUfuqN4qIiJ5co7sF+T4mHYXyUAOwoWQn+4UDiM1htaoBJTY
M/C3AqaBeEmiKYvdfBagEZzyLL9rrbKWanHQiGeXGekLwDOIoYEekZ7zKQD0
SqBPFKgULmzIOatUnBEc5TIDykDkFvBHyO2Cl6eFISJIEBTWOVBCa8qsBHQf
nF2CkkweL4pllq+sQ0VZSvAs7ojsCAbHQg9L1ERIARogLEEzWDIsBuUT1axt
jTaFQMHYE4BMBkL8H5FoJSjgvJnFsMuHfzwlCiVxDNaYMGGDeROvmgLlniDD
pPlezOLiChoD97yzAIJI7YHGLyxcNW3uCvc3s94GL9uoFEv+V2gJDga+BhaS
T8nOeQ6kbtqElbSgVesCBpom6qSzZAuzEOuFzTNnIKnAPL4zRBelPBE1gxfx
e0X+xZ5gSGALS9HjeXKBEkEiybrBCG/x5yVu7/1mvUK+DhwxYSED1V9EFN6r
izVKhyC/LwBsEwZzmRGKjW6z7jFSektBC3oHdDhdZLPs8k5iJx5KNOwW1qOX
78/ePWryv9ar1/T9bfTd+9O3UYjfz54FL16oL7LF2bPX71/A84OG+KpfHb1+
+TJ6FfLb8KtV+ell8MMjFsAevX7z7vT1q+DFI15qymZuPl4xy/fnLATkS9Tp
p8wYjYM5HL35vxbnxfKfHJ9ZFVq5gEvSd7Rgffly0ED85xGzxezO4j8Bsneo
DgCDpxMOXGgSL1EiL4j/FlfZ7cJCWtTeVMRBcFmjyeEingNBiklCqSfzO9Qh
AJ5qbuoaJGqYCopWaahtnAMSIu1Afa/Kn4kHZLNZdkv4TJbbNBbIkBNznkpo
q/UQL/qdwVWAozQFs9NSABoNAbSHJb4WkE5P77YMfQO7OnwePT8yX8V2I2YL
G21Hqi2a8LjtvXmjhIJ8MdDKE8pdeiieclFkoAfjoxA1TuChQUiLYAkNMc4k
dhKsKM8AXgBRTnIhWk/SJWoirKmvSqCfJ/FCiqO/s87oLfT1rBBXSMjFnvCE
GsKMVLPwlbey9/JbMGiS3iRbXzxoBEo0nbFAlgpbhCmW1bCQR9Yh7Kx6kOWw
8pKghgPqiaCixyqzggPyDsXQQCkmLR9YLHCvGFksdLIArsfvb2NkKR6rnAkh
MQpUGWcon+RAW0kjPGgILaMiN9T2l6TEc/R0TTOSUIj0ThJ2k80JTgCpQIkF
eMy/V4UttmZKngITByq8ROEYjTLEiUCCWVV0aDhYGWwfAOKggZOqgJCFFO4Z
2VSTDXyfYpRUmkgPY2Vsya3zdTqbkqm1qlhXJqmtIjUgwpeAPaBwbuXZDO0j
p6ggzBMgyAnKAXNhPECuTC3oHSkUEY3QshiIigX1ReiSou6FoyMDxa0oBO0l
RteaZXRKBe8KSrTtMZK6L/jEIHNlc02JGF6Y+ItgV8IVjq+1UTZwLCRoAC2V
AUyxcBBL5D7BNOGnGmGVlk16WlVRSD6t6HQTppfmCIMV6yUJdCb2AscBFX+N
wthK0lx8rwXKqSTtSilC86ZEppQOWVIULA5g/5tYxXYURl8+KWRGr6PXc5gD
Yhl2IrimOhJNoSgQBURDZNW8ogZ8YlprBXD0D9QrGlhiTYoRk0CkRPRA4ewc
d3O9mEohyOz5j+2OPbAmSb5ioVpwQfT3oMKLS62Yzxj9pC3BtBsYtEuufCk1
cmkIjtlrDr1MEF1InF6xJqFsmaJPtnzXGPfgRKE57GUwwtbEhS/ogEuNxZhT
XLE2y4kJc7ZUfsqES55v3h1CmO9x8lUSKXAe1GDEbFLd75hOCTsyaXYlG2+Z
esUbRB9PMisN6wWhDdGwnMTj0qC0kAmwyPg8I2VKyUw1VElYLhJ0LyhNSr8s
NCl4cbIuCgILcF5tK8iBCoLGsVzny6zKLCoqmDTRxlM0oYE0h+Rtlimyvboq
wbyWgpZszmL9ZONGm11s5WlxLYiBMQgiOlAKdPaItyU/L9NybVPi/oUhkdU3
0GIStE82zQYKZeKL5HINOgjKzmKZijwrI+sZGmcncNxQNgCdm4zRtKvrVQGK
BiPWBDhOvUpLUH+VoZuMeT7Lx1OxYpjNak12n7gkmKGas14oE/cVxjrMGCfu
a/gD8KVI0c392c/wmEYonmoei2w9m1rrJRH60hkvW8loV6TKXYMPaODfuu5n
7969OQO1CBSu4M0pAe/f/u3frDgubtBn+rSlPhi08qtlhbyp+HXXZ/NFy3Lo
ya//DD9tfxFasrcavsoX1ZNdo9KIT9WI5gR2v8idqxCS0ng7X5ExUtbTr3lZ
+twf/u7NA5ZntNuyifCfWocOBKAHoYlNajdcnuQ/S2jXfGh/zxj9rIdtZM2E
q2utgZj8qd1uV38qt6rpqwoPOdmFXmdl/hsHA44MyIUn1mMpJnH4wDePgqpI
uHFIgYhtBt21H5Gk+f1VmYyALp5cwrEtTP6Ro0O22CAAqAugaZidBURBgfmQ
OkB6oNMGrW4JmqVUCUavz6KfIinUAYV5m7TI6SSev9TG4nflgdCvgypqsdkP
tFnz4tPFJg1bkTEQxigqz5A7GPJvkS6Ewrit84JINVtHOfQFbb5oSyRXEAlF
ScESAlL32SxZXAKLyBUIysufrYRugNITTkkoZ3KKpmn4BhjBVKtWhpgVFOQZ
L9azVbO6O4otktccJXEUdtjre2uENZwKJpfydNC3stkXcVMDU0gxzoRbfT1Z
aWlKKR5NKwEdaYLBTsgUpKkA+pir2ZDxEl+9TG/Uw4s1mqcy1ONnFikjFfE+
1BODOd0thZ8FVES0K1ml6FC0gqFvC0aEmSEjm2Esi7Ddkw4vDa8JOjtTIV6w
lqs8yRiRc8nBlGoP8DvZ6ZW9HYWBJfDrGF5lvyXIxSuBtiJmAS2uMTuMZScg
9rIZTih7QiM6E1zfb3ttp0dgKv3Uxz6U3QzAAvp4SgYHVFxTkErYiw6zYisb
ekcFjtJOr3PSYCm4NUZHOcpmSKaQjmAAQiW+oiDu7cJKb7PWi/gOdkaRc6bF
NUeXpW3EUxPtWFjCzc1B1qk512vljQedHKV89L8JeaNkq9sRiccOQVw+W++V
aagwPZo4iauEtEsVHwDqENtk1FmzoJUSAZvUgIRZ48BKGUwFrYgGysEm/RFa
j2F5M7OgAYaGGEsFLBIhCW3re+G2SmneqBegKPeJXJAY5oFSN9vL0ZslIlbb
2n1rUGmOn9DWi9UVbg+OhmanYpODZLmgEOVdhanMODy17L4UzKJJBgcRPQFn
KbPOYZzJVVJs9IQuSrJUi7iIWHXM71NwlY74ikVsCepAFGdgUHFDS6MQgmlC
Gg9RLe5rqoMXWKoVxBdmBk9JcQZddIpK+uyOowxWkvFNshxdPYbBicV/w+LP
WD01yVM8zZY8BdiF1owOjWZDkligUUa+lWzx6TIHwnihvMw3NQZONQVATGGt
Q6CKQk/haoSH2n9Zj+aF9BpN6zFXmLEMy0qElqCCXv38WBs5SNagZ1M56bLf
wLAT1RieVHjLPF0A9GcHDTxRlwlbuiic7SqFvWJzxFSNQRRBzcK8MoAeCKBu
yWxKdlo5oZ/eaLuM4v315irdLdusLBSl2MexZ1hktURo0ENWkkrEmUerC4x3
0ACkTebLFZvsmCxS1JjAYlBR79Bqi5E8icmJpFmAlqR356dTHF7LNEKAKWRY
Tq0H2whazhbSSoFGwEJKLHtGIblQBEpiZwA7Ns1J74qwM4tYDzK9yUdsmlY6
42Q6nXFUprlRx8ffWIe7Yc6S+jf/YmGwqdWenEPfddMm78ee7fsGg5OdgSGS
l1BByuWjMHxRgpAxY3VKhBQOPNyKgB9l+ZPCQsuCdUhjHJ0QvEH8W2vZft9K
1SNEtCIh7HEGypIFW4Emoin3ykEOKPvG1ih6TmfpBjYXRUZh/1wly6pgInAF
x8YYneWSg1zQpw9Hc18oRMmlyeYVlmraSiMhi6Eylz0KyccOcqT1PaL6I/an
6l9HcBAeCU88eoto5gJRtiMm+YDJ48qHEacj3Cf0OgFaddqSskrLsN2aW6Jb
AtCNRrCqYFEJziAbT5ZTJB+Rn42wCZqcJIkULKHiBEpdA/19bFXgQ24xZe+n
EBecZaWVODN62kRGjkxiY9IFGY0NZxiIbAUJZSMW2nZjqHQeqNlIC/EKkJdJ
WayAIeidjLFAvxyxNBC/FhwB8PlzpX+cDNnjWohAvCrAUk3A2ZnI5jB5Qiuw
aaIbXXi5KugK2IYnu54HvEO82fBTatghf9qAWlPL5ezzv3oSBU673R5F4ROi
mDiqst/RlMrxYPegwuTXxKtZvH9bdwf6byftJswh7HdhDs7YfoKLfeEx7Wdd
k7xNKp5cLBOmWgiFW0WjqL2yHtuG55DF+osYurLSC2uR6Q3Xb6QUREmhdhQ/
wjKKcJ4R8T22LAf+O7Z2n9Jjy4XBP1N79xg5wfHmLsBvTv+kBPsmveFtvFHl
CMfMEU5KQKN3ffjvC3fTqUyUMR0HbVpOx+Am90BnyWMigcQYvSHxgH1xAP26
0/01/OY3ZTUlYoVkey+twkYbpAoln62USl540JhUOn8V6sRxxy3d+F40TIbI
1BAxFsuIbpEjAzVF3TtFFpBj+F7UC/uqEK9N8EBPp4KTSrJGmLBBhzDYgNyM
IiDh/dtTOKRTNtQTXShvOIiZkh48mmQx34viEfDi3bEaoQ2q2CODTNQRQdLI
zjGk8HaBPyCtEwFoG7TCgTODQrecG+5bmb+qxi28X/uJxnak4Cucf2aYkaCi
96GSecJKwVeRScB+uVDF1OqQtLJepZzV0Fc8Z2UQKpgRtmkKax3GfA5xJr2j
NmsB6HgSEQkvHBfNidm1wCOlM7StXUS1DuBAuVygXE1FVR9ChTdpKqAatnBO
7oNpTUVct1HXi2QFnAY7ROrKbbrH9E/v3ouz+b3+Axc3+DqGQYM59sbLGwQK
xnJPLIeaO4rBONU9IDKEbR/EX+itr2Av+N7fhzYDLMaIiJPzfiNllHJwPcdc
amL1MviBaBRouJMrplBNph10CQkt4xSCgjeORaQMUydhyC+HQUj9AOMgKrdg
lPn9oHH4jiZB5sYlGlik/Z1gU47tADaOUZx5OVwkWXCEFCtfpNLHW9wKJiEE
NkJNRtKR0T6yJIAoCBnvNN0vtEQOozkNbd0KLw/FOZr/kfJNknzBASXwZ7pE
TUuatGo7xV6QisqAIGFG+MpJKVFa7S5uqLzsVoWFVj+v4uJKxc5pVIFRjzGo
vyoG1+qVJJBol8tZsoH5ZFVsiU0zsN5wBBw0+m2/3W93cWFbrx3eU6MvqTUb
Kj3abfDy4ARfa0s7Mr9Z0vf33nyg+bzMzEtzgrBrYzPap7X2Li+tKBQHIYnf
aLGpSOp0OgKcZoBRXSV/8ufHclUwuZY5uS+bwcPF+rwl7BAaOPe6+nICEmzd
LRXCy42o3mpArzBxsY2fcORO3BKT9hKKPVQSrMDhGUAgZyJDUhRbCpgWoR+l
SZPCG8I0C7pWfItROpMroJfywluSIp6j1ThPYroNo72o+TVR22l8x/t/x+8X
yYwjv3QPc5wHOSPYr0DgFF4IotCJuH9Jd3oAgFnNLRc2qFevvgjLLwdkinu8
e6xLNAXYE3bpxjJGSLsJBawK9jqgeC7ONm62BrToUMSt14W9KP/qLceECaIt
d4I7gHW9TTinC7svNm8is1kD1Y7ZLjuscGKRt+cqmS2FOTz9RdyaLOAbQXF4
n3OpLoSQSSN6XghemMMmZfMZKGZ0hY0UbuLbl2tAFA5FxY3gdtKFINoKSZvv
Iwy8HgaoS3LIR00Qc7LyFcIdUBfbTf5alIRRANF+naa8tmaG6oIYq0P+FbHj
WesDDgxbxdEp0RwNDDGjPIbNcT8nSha2rBbGQ//4FsTIs4+sHhS8XRgmXQlR
1M6Rtw7jOspyKxWmaJ21uctRfZejzS65o9KLv6P3YAeeqz/UVQfBWwUqYX90
dZ7/5uk8Z54gxuGIT7xty179X5Kp6UWj6M5LIMoLsQTu44xviWFMakyKDDFA
Mcfo1ehQMcWmdX1krNHgoII/a/aJUxFpMwhpr9tiE0ik20rk5b0MTX8/Pxb+
BX718UZ2AsSLLRRb3oprbty9MW52NMnSJdV9HaUsj46lTo5lsFXDk8cXQA4a
It62nLxhoy0GKjMyI2E3EjXIS5cUES+pfZVZ6DCCfrvTdmXIAN0eEZKT0abb
dtsOtCEpHvPjyDu1+oAKoWISgxIkMEgaRmF6//Mnw0Uo9eqDhrL9sUy0K/mA
dgnpRdf2ijYCZNtafYe1cWuh4TfLLi6YuWmYEFI7gFcHnGMwKCWh0Azslh0S
SEJMpJGx6OrChyXveRw0xBmD6VBXCeLfUjpg41X1pqYKzRXTOWiQ4QiDfWdZ
wXE+pOfDryliHfbPsZtAvzDeF08wWZz06jiwdIW4qqIayGGeCrfp5lVw5Tcs
AbHsMLxBP3TVuIIBD+XDYIjdpRlI16FMkECOannoaFqnH9pWdENRaXRN2dQq
5jGwpXM5D3lBTgrz0ppeITIlKxC6ddGIkgDXmkqHZDX2pM26CVEltfi2pCah
5juvmV8IsAlfJ0ZUUCRHlTtVb5Jp+mNcDlYICq+IS9MYSj+bmWT5UAszUuoA
dcESqQ/4nt7dEdN4/Riwho+M4A7bzlX50JQOPp9Iwc34Kijed1mVJWnUEkwe
Ch+nbY3JJKOYlnjgtq1vBbXk80m/em1iI/BDE984Ej/7/LMKzmcqKpgEG2Sr
YOctR4lzRnIQHBuMvsLcHkaACka3kSQi73fwmvCcSZubDKJT5J6y0Cym+taN
uN1v7JM8YsKgyKkCYEKS5NDeGu3pYp2OzYFm7MpcaFFo664VlOBQK53AHlnA
LYkDgm8BHDHqZAfBrhLOKmUR4BHxbsscI2ZEoh6WF3S4HtOUc9jli3SlQupV
6EtaKMpZn/NAiOmTRIgILCipq/wcnIkuJEB3it26kLOD/cyzoijdN3uWUG4V
Le8cNIwdYOogcjqkOVmgb9LpOp5RfxWPA86DiHpGfEjeTThoZOcrIVVqAUec
HVKhV/E1gEgwIHnHMk/KhwbOTM3ZgANDcE6/cXDchQ5C/iwaxBSgrI/b21Sf
N/ecHpqHSzw/0h194a9wCHcctxYthxPs6KMmsFzjMGkWFdwhvEEZo1borMZR
pmUcI3a8yCQ+kbWAmMIlq1TEOs14MZlVYJ6uyrfkFF5hGC2aQBmb+BwtysFk
jPGAEGvKQ8ZLMHWDJgaGC3guWChHBUA0RyiUaCdfJ0NyIi7h7iWhzr59d3bt
u8P7bqJT+fnExAvxqAY9nKlqZ6JFuRGi6BdDeH/McpwIiKl1wWihT0T1KVEE
35J2olIL1mLw2jobsKbTWStOiutbMgxh3NTdT1n+U5HkeI8GcOynObBaRAcM
9kxy/pMCciUJ3bgEzmJyXfxRZQE/wdRgZt9Yj7vtQffwR4CDviNnWScYQAND
6pF/Uo+b0Ha90K1r2hqPsbUhnkBrCmk6thbpDJ8ZWAvPfrSesmSjfhYT/dj4
eNRobJ8UrGQLBDdfMif/jQHcRqN26G+sTehwWBYaMCwb1mJEafEsoLdNMOmO
xZj4mGZEaLAFUuLzT3VMDdC98bHRUGPCXD9/aTT2DGR90/gMY/3ecjDCLCUP
zQqGauIoNaGcWt7lW16gqeX0vi8j1Jp6lrqJwdc27p3I1oYmqbi0mj289Ttr
Fp8nMxyHHCYFvZXIcDRrmcH0G18Mb5E+VqXANn1eOdXHVv2cXUKvSvfgpapa
UbYvNiPfXVBHPVJILVP7VleVSWASN20NbxyNdIM0gpLZLdG8vrjJhLsAJpwq
QYAFPY1WvMOWqRXUicicz+9uRdSD9G+Y4i9Jnll47WN11b6X2WKfcfjzY46G
3GbIuKdxmWdrXEg2kLGgdKIIhRiRFKXc0t0fHWC0/baz1HwKDJfG6Fy00QnV
Vt2gpHH+ySonWaPgaJYxKZk0TsgwXmB8hGm96JSsF0pdLW0L+UkRI3HkW8y2
dwc9C1WK7yzYJ9LNU1TPp74ELXeuLnWHcqxzE3GDW2UDlYkCZiJbphjWObHe
y/iWPeanqipdY5RlIZjnuvV6O6ByimHReEGTcEFEZ+gog/Lda77ajTqQkSgM
EOnZ83AsDjrZk7HbmLHwYi0yrfGt9H5X52ZJCyPm3VQv5+dkRhZeCaEOS18F
jtVUkRikiwF5iEbhsxYA7amyDQU6iK/GYVRMr5BsXU7mLdFKTCvg6BuyI8cq
WkjMxSBJqF5jOhU1Ls9LZ7PghLHlrSxlB4TlS6ROjcwKNRlp9toWTHm47L4g
19mGrYFD1nXmHj7d8Lah7PB97dv4Ds77z+t0udS4z26JlorJ4+N+vKRd53xK
yzjNBXZ/L4zOLNlKWbvQaRu22vLL6jLNDbO9aJPFhlugKTPN6DaGWmscG6br
4oSKG9AIPTVc00xztt0WInpWAaH30YtVPxqCz8l2kokDqawLTZ7UjuGlvTSu
NvqfP6WLBRrkdWMRpJCTiU9rlkCvVXJilY8CTowhWggB28COMpHXlPZvpL3q
V7UKIngRndSSNvt16myNNkuXMhexDOgziDBtk/DW6WOhwrLo1Ahdb1Pio8oS
zDmaRoBXWso8gUEdWwZoW1WFGFAS88aSLqz0WYGa6BkrH1/TAmpm9EBiMZfZ
QVNOm0spIdVQpAlnKyMWAASdnH5C+ZFsYskCuQTl0OGkFer+qOnpkYFmIvMb
HHZjL35KS1qkyHdcPq/W29TIBmVpxVpq70KGMVTyqkZO0uI5utU0F5WqpaE3
GWgmGL3AcfL3kjmONXXhNfwLlPX7oblQ3vdq7/dW3/fo7+LQPFR/Zxa6Q30X
vPTphhqvJCetySMDJ479mrgcYpNK+mNI+qbJUxrYlDa/RYPl/EwVI8DXa/7R
Gaz6P4HiT/P8D9H7BYS2qf2k52/o2DgCIsFD9H7Z/uvU/q1TUAr+pob/EAX/
nsr3LntDaTb3MxdoAqr5OZ7yFq2Fduo55gvmySg5wdAWVagmUcGvtyLQ5KtG
BCIa97IhYMxcNU6NHQ7sp5e3/a0rpMy1rkglZ484YsE6NTjjmXZ+GOodlksw
Gmlhi33Fhu9C6loAMsqICIQazw/FCjw6R9XkkQyBMC678BAyAAll53gib1pW
L4WheKZuSOiZ1FpOSq5+D7NqEqqbefkLckqhT4ZEZZEMQOb3rsmvmcxEIBYS
TFqRvhpN6xDpH6VFJZtkM5FZV0rsFIintEcRi9TEl0r1B1RVBKFkVeplmJYj
ETePiKpML3oKJaMO3fdVmbG3XX6tO8haAK7Lh8mHjgpdUG7B5GLFVLQGhjSH
wmB0AnQU7qwz+fMVteUsXsSGJ1j65n8CVfQngcPtQE7yNOTeOQBVrI999TWS
fj1AQTzCWbKPcBMD9QUdtSK09iANOLECx+0DWz/kAO+WB8Ju4Axc4yefs0wG
bqdr/No52rG6M9B236zP8aC2YXcwhekL2mZzrTzHO4kIBw3GBIrcPk9R06S7
+5itcqquXJqBBwJOG6Bscwp4sbKVil4HuMBPnKxSrLH8cODqZIK8XNb5uAX8
0L7nmtlYwWudxMuVoDnGAUMCRGHShWHI2Br9p1Eak5fJ2DwOrFc6c0HxLGzZ
tB5ReLRM4KSln0f3XYI+h1vQUwsa+vZwlXtt8OT6w3wYzzG4lKB20JAE66h6
CkTve2IkK9JfdZFCpLFKaHOC4kGTfn4T56u79yQeo0BGf+JfnB3X+mi0+rDZ
SiXElQ0NkGJLJamXT8WJtVYTwI8pOJGsoJ4QjE6sJ1u29wk1FGP/nkcHui2G
x65QZqou6hvrkF4QJPEOmgr51AKtEX34xg+M2/RD48joSy/967urCh8mmd0Q
QjZ2VskCj1Sk+FYTqKUsoHh5ROJ1bBXxjLXkhC+zVaIJNaN2SoxakF025IEg
Rj1QEgb4dyFTYOEUjJhbYbRt6qCpTdlBOU3MwF+RWZhnC7rhqQwnmnGeT5YC
yZVduc4ga/ewqv8I33hkUFTBcpWqpuOAJW8Ro1BCG06Uw1buhZFhFWBuRJeq
ZGVyesqvL0zcO2Zi3CRqSsqCtoRc0UCgrmTPwKBUlXuHjKgLplnYRVGoDP5y
G2owge2Nc33pgTL/4MSQUBPQVJ5pw2xOI3HBNlFHDvFEfBXK6BuZqKe+2gKi
IMuDLEGIy1rSDo1BF4a8tkW0hbljP6ImQmxEc4j3SjlBqiFydZ4TfRMD5XZl
0xb3LaxiPZ/HGAciRVu0MqLHbnYjr4ZWlSw8U8oo9bDLKN+bAZ1BKLTFQldt
QvvEt6OXCIfRVQz/79rHb7LZnePZHZFagiJxy6DXNZh0yZiV8hEmMTl1ROpZ
6qOcJpPCNzUohfBl2qHLKWjQN8Zq1WIi4x4IgbaoA96m70yzNtyrn/RgwNjI
EiTR5MR6JDYTr15WuMoWewE3RAzMgYz9FMeSA8HvHzdUQ7mGTf2wNDHKYL9B
nAE25WYqt3G2XM9ikVWBJdbCEKWrgokgbOW+KJ6oBtQc1K6yB1Xkli1d1ycX
NAQplg+pyogBuLKYBgiGnuYWC7mmFxphvpFL4gmnK48vF1mBPmJ1D0JUBcum
3NL+5Ns0kzOszFF7KEbv3jbVJbxKmlqOZt96le+wSGT5Br8DtO6IaSRbUOVg
TJzK8K+G+Jh7INI6C6aCTi/uQdcEqBRHEBUQgvDIBBvFai/Qu1omKSZ12Ejy
DJ2Ujyc5BZFDJEotDt6cSoXLWKXSWWuiDnSRjHskrtmKB+oeLBOybeEDks6l
lBHFWC0XyuR9Ljbrr2y5bslV+OTdvkpuH1UnS6vC2owrzqSSo7dUSzqRC2qB
8sWXTa7xDrXTGff6nWFnNPAc3/F9xxn6w57j9bxgMLLHvSfc9vQDNh47fhAM
B2HfCTvOuBeEA98bR/1eMPbHPXuEGVdaWA+DgzaB8r0TuTExzyYgVKXuwCPu
O8XiKZ9OrI7fBVbe81xb/K/j2j232+k63RH81YVf3W7Y63Ud/BVbdUN41oPv
kdwmYR5/qviQgKkidtLtvamM74JpytooFcMBnV/q69gIQ1ulJdA6BJ6RJ2SF
OzoRUF7dnVhnMlJAQf5JXPkIQF+nU3gI/9tynphXCjYpX1MATpR5pOQ2h8Kd
Rlk7MWvgNZZERHPu9OhEsa3zLG9hlRwkPGG/a/d93wscG/4P/rfjj7Zt87jb
d/qebweu7biu7Tf8TncIu+C7oed04Fmv07W9MZCpjtMPewMf8GjUHwX9wHE6
QW889EB57wTdsDPoeA0/7LpGALqZvmF7ktrYpMaivqURy4iMnQhcffyCWj12
ctAQPodjTUxO4I9//mfrM+lExygIYzqDE8uBf3DLEaOO4eEX61/+pUmvGuZ1
fFm+efoB/qez68ygjviF+9Amd+xigRlcj427Gdogf8zttbsC27M2K3XaymKA
hTXVk9q5Vlba8sRS4RQdN40WgJLwv75CTvHoi+6+tAz15tWTh2AFIsUTY9R6
j4Po/mPDIqeMmeG5ZvOVXGRilczPIILxlDlPK62b1ypLp+sCE5VSnsgjrHep
TtcqKVatGwByhhJOr9MfAT0dDoPIHfkjJ/S7ru96kT22w5HndP3xOOgNgQAP
B37oD0Ogb1HodgMAyrgRDe2u5/U7oR96frczcHvRqO+Ohp3IGfSDzqDkZqw4
CH9rCrjr/vCJGWG0hTC+FSrjk8J6I0JhqkQyGrn81yS/ObHetAAt+O9PeI46
/X53BPQ+DIHM9Ltu1AmCoO/aUS9wOm7PHw26/WAwhH9svx+Go2AUAQw79sjr
dpxh4An6eod9DaIIzqPbiQaeC33aIxv4N7SzQzvw+53RGBmN1+uHztB2ulHo
u4P+0B10ncjt9MfOUPQ1xb669jjqhrBxsE+dHhBHQOLBsDseOG63F0XBqDMM
+s6wD9vmRZHrDyJ/6EdDxwZ86HWH3gbdd4mLovY+khojNtBbcRrSMT1kUB/x
Y8PCxY7oVtm4dWIJvo9PDDKA1K50/t0BfFHIJAgBETz59j7j198p2/Kxrdd3
Rg1YFewzvAhMDDgZsC4QNDzb9cc+UKSgA/g0CLrd0Sgah/3+2Bt33aAHHQzc
8Rh43rgLyNIbh26/3496XhSMnUEYuC5249t2Z+j3g+44tAdOEMBJHkfeaDwE
jIv6jf7Q83tRxwU6AHy0Mw6HYS90R+OxHQ1HrjMEuQbmGtjdYT/qdjr22LP7
PccdOuHYbvj+EJr0QscJB0PX7cF0nDCyB4PeX4ONbo8C/MfjomoxVWZpHhZF
/BTzk+vby33LIWbHVgv61s+J+67ueEiXBnRN3kyLz2/Eewhkop3VJpiZqeUi
MPfh+pYQeXkEtp2AJ+XxaCEejrf7UPSHW8bbd1S0nPDl/sJI/dnafrT+EmGk
5gjtlUXIBfWfVAiRdo5dOjM8ZoVwkS1aptpMsQBb9Wa8kYlplYpt2vP7xSy9
5usRo+GoKafCUg5o6EBKqAreLJtcG1U7uXpaUrQmK5WIVNxy5HwQmMOZkp3X
lJIWY6BGbYk7HfgnnL2msGtRnSRhmGJv6yrOVyra9aAB0+KnbBiYcLoWvmCP
2VUuZOyt022RkULnfKClsDNA9cIpuA4aKihMBJqSydX05Fuchl7XVRJegGy9
amUXrXOqgpfEGA1tFBWE7g4aRcJ3AVNhT+Mrqzz+YdK+bBvuXHGxAw1WUvXn
e4sFg2MeX2PWFxF/KzKAY2AyrAingJL5lvgCjoRXV9PRlkVhzLoaJF1PPGiM
dO0oEUihwAVChqxZZUKonJf+QcVSK8gkxOg3qfWNtovwzlGZ+RE+GGnWpJ9E
8MBwAkjvCD66hkdn5tUD/PH/+9//B37+4+u3Oly0Wi1Kfk4/OCaZPf3gmsV4
KqV/fv1Lnz0VdZ+eVv6Uz38tv/9r9f2dz6+530g8MP+8b//75rdjbW8caIiA
l583Lv/wW8BzVNoka+SWtVyJY6qUkaB3r+XuP/rytzEpCgJomBRdUNKirgPq
VM8eD/ug9kejTtgbDlxgvp1xVDIphgE09YZuBKyo0xn7nusOI68/DIfBIBx1
+39nJkUE8X+bFO+lm5GZ0BuMxyD1gbi1b6NZS2to62LVuAj6vG97nVHUGbmR
C3sX+d0QpBnPwUrQThg6jYEddEFwGY0DZzCw/6rGRTx+X6EWCXvcVo1HqxYg
onq+UJgQ64Q0bypFe8/OP4yJcT9ulFHjNzExGijwH2lidIfDfjjsuG4QDXp9
1wddrtfrjLwhKHnOEOR52/M8OIShGw579qgXRb3AHwCIvGFvvwXxtyN4/21B
/G8L4t+fBfEruZQyJtbZEqPI7jnQFLZ+MHIHo1HXcUbIwMLIdR1gcV3Ybvhr
5IICPozG/Z43GrquP+o5nZHj9Hy2Jbq9wdgN+v3ID4aDyI1Czx417PEIuGLH
6Qw9Z9gBlOu5neE4HA6CyHZtD1r5YScAcjAChR7mGrn9od+x3cgfdxpOx+n3
/WAw6Piw2N7AtrvRAJT6kQf/RF5k9+3+X9OW+N9M87+oRXE3xvv2FgvfvnOw
1aJYdzTMk7FlvH0H5qssiuYJu88B+y0sig8RPf4aFsXfRuZAA6Gw5Y2ohiAW
wTNzhFuhKtYja+9ypmNVgpLTh6VYhWDBv4hk4ECFJlcyckrnwfDbA77cA71s
SQJ+ROmfg1CHwYoL8qYAYxiilM1S1CYBsN1RaJuoPMt6tjZbwuCqHkHRrkRz
6s50zuByrVhRCRUNohyQPF0vpvFixTcsdU1RMttV91pVvfqgq+JK/qs2Q4eY
6rTelkj2i/Iepmik1Adb10gZXSpDwm6THfUlbUx8gYZRsb1Gatkde5lVcsKZ
Ce9of7jPqeqTi4epPBeikgdnmpsklRRYnGvQHLBF/bV0f5plYc2I+1f4uGf1
i7+gpsdB40tlpI0aHvedsv31Uy5l4T+2PBYNDzST5tPUSolbtRzgJ9bZs4AZ
i2zGr5Otu2De7w2xptTADZ6ox+XkxxIPjg+kT7F+ZpQiC1YJCqaHmbLo7/qe
NnrYUYXE6w5gfh17/GTjre3lR6r7VSo4Qs/qDwGAFVsgOyKKqauZqdOgCM2x
wTjugd6KkVDH5mENKof176RUSZminFN86cNICua+oZTw56JkA2XMrCGbmCTx
gq8kaHDFWAmISquXE+rsIDQoDNdsBXe+SWqM2yzWHKbP1eXPsbRpfgcDXsXr
gsORKRlrQUla14XyRQDxphI1f1PK9VciAyBkwTELPb9MBjbFma8lAzU9bfTw
FVR5D13+TQ7634a+37cS029CA3fTro0Ds514Dat04e+GetFcyY9cLsnzLr4U
GXrlpPGm8IZQunnnBqlOzaUbqkp9tyGFsrdVYz3VGFL5tDbFQiUz0p0kgYUt
1WPrRj3+YkqQUoCk4ulFtRLGjZZDN6RklZyH0+Tr8H5dAEqUVJ6kdENrhZKp
KC5anZ1s1MJGWFqjWhZQ3FtjublYxeeztLgyct7quSnDhXCsorvwQZ+nBw3l
+fvOobxnsrCnhDrCiPKd/V60+xXHedBIT9mHWfEx7v78ym8ADOVFtK0f0nUK
+cYDPjebb+xdV81KxF/fuW3rpWCN1lBwRnMtNe+Aeqw4Z8Cc8/db39kD9S1Q
3gmRWpj9ClSotvUPyRYo39xjjG1zf7r1jV+t77x26UILKle/r1uROUZ5oKe7
xxALLi9/5zpEmx8oXwp8AFY73xCwKYNoG8AQI9tiAU85yZPV1utolX4SrfgI
A+NQk4f/GUbj128jjK1RP8nfeGK/Wm/5puNUN7CC8bvordGNZlXinTKQKg02
gYcAeCJn+oR/e6LnXvtTqSL7TtopOW0oqe47+PHENCgYdEyZnUr1HUAuLjh0
BgOIimvhKpKkkC5blxIYyAvH1qrOgPX7g8ZptcDchm2gKEcl1XB1VQMD8y9q
RkSZHrHC1x0z0lRHVe2oMVi68rbIlL0qnhlds2SXqnJSUyMFZrpjRYo5UMhW
pZgkS5h08xLzFNJgsdkBYCfX1l2vVPQTcVVZCbEc8nWfkqLm8uj+7lQEoRS6
ztd0mlNqVHFhE+l2gHas7cqMKnvIG3wnatOXhYR6IMlRCcK4YSwErq6SMhzl
KvDu/iIT9SLYiqeRFPPNiwJfgKx6BUAmT4tSn9VEuKWLgcYq7o0QSoTUR0Eg
obitKUZ+YmLsdJ1zuRhlCJPL0220sMY1ALLJZA17ntLSBbQwP1TVpKYR1JDc
dLf8pqraK2LzjGA6EK3w4jeVXzEz06OzZo6F2KoWW3nzWlx8ZbuxCiZ8v5yS
AActT7N3QBgxeaOoOTCexcWV9TKZZ4Benx9f4J8cEyXq14iUkRQFSXIj1Q9E
D5Zxz1TU8oNV0CX5WZxfcrDmRR5fcqwm2hk5HgmdZSCWU3eVMkV8u1zmmi0o
7zFlcNYRTGtaDAVvTpKpTpDFKQT40K5I3lUpu4z0f0hu2tZrytmdFSnl4VyA
XtOskZuxVks2B3gT8ERVODMVbgGaAP5KJy5eXMukEgeNR2LsxeUjFZTIIbok
4DNxpNISbAYptCFDZSyQV/8RCSRdKCqRXLSn83QCsMgwjHg2o5SFCMUsESVk
l6KGGsyN8nmkE4D9xQo7adaUaKL8SfN4coU29VkS55QLF7FuVohklTJbw4TS
UaWFuMKOiYLnlJkE576SsQ3vOQGIiWgn4q85o11aswaKXVvdLeldjIK+yWYw
SSpgyW9xWjRVpghoKcKHkhxAh4SCVEyDCnhQpmWOG20CObhE+gLrLNhV0+SE
jXlCZT9FJyLpGsUTz+A0z6xDABtQPp9+K46wA3OYtjVe50gaMLgWurworRF3
VhwFzu6hc17kySWnVMaq21I2OM+yFRUxz42KhCLLBuXmqGLCIV7CT7gyMKYI
n2Wr4qi5rRCXFSywNiFzr1l8h9fqKU1LZScsXgWME29miAASxPYG7kAY0Fqg
apT7CGlamBMdaFcdxupt1BfuRd2SqahVFufnKQwMoJyJNPsUrlkCsswPYLAN
iepIxpBv4w7wbjOsrOTiAnNdt1GXU/V1mrI5To53HU0zaG1QYC8yS9dj07tF
5lJZc4WqZvL0dUo+Of/q9JtEDThNgJGcXDK3R8scgA2rxJ3FEE5RhLfM28tY
oVLY6N6YNiJJl/Xl1sUaQY95nkXRd8p4OBUB77T11ws0zcqZwLHJFtPyXMK1
Qt0FBWkDRJoVTMawAKQMotVtdba4LedwGBaFZo4cQ88HFakmf4OzcgsipHiq
8mJzNwRgnUZIwA3Wh5PltCei0ilgvOpHzAmLeMFaacJT0aHqX+YvRmgRa6fr
ByovC5V3xXNHicdFOj5KIImIfo4Fr4XEWlr8BebvIWeoAlqenGMcP3CViaqO
kJ3D0aPcRUKiq/BEaZzRqQRhaRbJLCKVOwsqbOlSGc51KfGNclKnXIjcKECY
EbfUKSm1V2gT8VSd1NqNMGe0kpMV1RVmCaajBao6w9U+mq7n8zspXz0yU7Fj
4/VKZDvHKtoWWmqrHlAgnrmuhCQXbkhfU427OI02Oc851XQmioyW5sDJeGTJ
UQNTS7siACFKc5fPzAZCC1smL4jL+CLO4LfyulSwEYhAaomH5J+p9nmkCCLQ
MZTYzEXqGxDAC2ac1Qu65IYxEhYzebdhR+XSiHJiwkJJt2/E+Kq+M4tRQMzi
lbi7hJSFlyN1khXmCSuDrElKMIhnRSoriheV2YgKWgBHVfJbhe6bKZM4G5MA
wlWcT3EUzrEG/B9U9StQBWfmvjYNOlJGW943PA8lxJ6gjESbQLeBQGA1NCEY
zKgGygoDGvD1zaAa3FCZmZIlcMrLK+KGRiVToZeX8ekqLrREAVPkMoOwnfO0
ECID2d0N2giiaAvEvGWFCXG+Q0zrJQs2z0lbuVnPMBucyFyzvLorkGVLPfQv
NvcKg+9QM4v7fX79+rHeiI09m2U7TLjlse5txD0Up8E+wrfaD/48ZKy/bIbO
3/0M3b/bGcIHxhFvfS0enqmjfE9M/G88/I+Z4X91PESxIEBx/68zQ/3W185w
VFJkKdfaX2ksZeg3FVxp1ZeBo2zFIIi9oAY6gDQ+T8neA6wSJbZ5Iu3Meb4u
K2pCeE+loqmqUIDii/WcF2j7XRiWuKalq12DkgESxrQpQh+5QCka+URbLAmE
FhP0tl9pk+lclCeqyKrSIEwVaaWdQtpIRG1cU9LTso2uYgvSFN/7jkt31lVu
WLq+DQKYuMYswkpKkq0ZNH6YtpN2E2Xa+CZLp1KCVZGtVOR1YZX9C9YqvhSq
BU3XkMHQBMQGUix6vTCgH59nORmlZdlfU3HVdvCyqihcLlN5/51CmkyNUkGv
0iFaCfKEL7qTgYAr0qQrTC1+gbaYCyEHgsZ8xaVoWB8EOBqqIOXR00I7rYzT
HlJy3RxDKpoyMaC1M4Ei4gFnZBVF0cz6BpUbpKwaWpN8jWZq3uLaTlU2+E39
UBpltRm54msyY6SaRtbRctE+v91vdxGHtoUqN1U6Q5nrn6BkpIpUJQF16byR
yEpwKOzuR2x4l9ft+Ta6NUR0OmiMrkR170ORWeFIp2IkgzjMjsXqKSnQKsPl
ljQN78xsjlz4EJZEojfCU4GyVIO+fOylB4KJCNns2WOjjNYi/S2V6JNGsiWI
8mwcLZsMjWS8TarPhIYxMmn/YlqOEXgi37OZ2XJ/qgAdAVOwhbzs+TGKS8l8
7jMVMIOpglPKgCHmIuLvrcPTD8URAQznpIoAUm6NhU6pihe/THOqBiooxiJj
NF1BMNNLc3cI4TttaeCieKq8JE7MqCdChSmM23yImEAohQUP5qpqYYkxMXid
qw+BKhhPLU4NnokQH9T6jgUdLmV5KBsVRfAPRzzSKTcL9hFRQhwmQkxwQOxG
7TO9XJAajeZQq5jHZMglFV6TNXoLRpDW22bZHCtoHy4CeVCMKSxI83yeDptC
o01XcZ1FBiai6vnhjNh0L00+aB9iqlJ+BS2vbFHgoRnTMolS2gQrDN9NC3qy
sByZqs4trDOCLRmv8Mq00RqAtaCUKerUIdi6Pi+uAiPLtwdddhtYh9TkSNbI
w9VV0pUcNOT4jniJd7GUKaUw8FCiNSDOpbA3n354aiO44F+301FWKMDyYqVs
qDgFGOJ3WC6i2jtinnSw6hA/ZZ4gDvpB16MQTtFSqhQjJbFMGoLBbHUJVFRi
b7G5KiPDJq2QhN10RsiKPMLnz4hQdXfHswytZgQx9AqVqKcmMdQNU1FxjUa6
X59/LxEHTvqzl8GIrnvBv+UqYU3BZ5RBUBcyKThLAZACs5rbRkqC2hQFh10H
/w/FfL7ZyfuHKxH5eWEbPFdXHOQ6HXLGzEbgVKvEPKW54W26swAxYwmLyp3y
HEkqHkbfnr6y3rw9/RC8i6zn0Q/060Hj5em3z4LLKHg5fPnt8O7nb89e+gP4
+9vRSHy/jZ4Nv7Vv49vTYfDdd5fB8k8//PlPo/ffvnjZsT8MR8A///zD2eqP
T+3Bn7+dL+7+8CZfhi/e/XJ8lf7x9dXb4NUoCM6iWRbF+eX6558Hf7j68ClN
eq+y+c3PP7/ov13dHDTePD1PV99/P7ma3gT5u+Li+fWqGP0Qfbp9/mqVv3r2
x3Tweui9enq7CN6vil/mb13vpb96nn4vlgZ8qWZhxhXPcnUXo3SVKAwrDdI6
irRIFOjr4fh++OJ0ZIJxfH0b3f7w7Hn2p9Nf/myPgu9+OBXfw+C7SQiAi67+
EA+//dl/8fPPN2c/fJj8sFj/Ev8h7/6cHkfnB43zX47nfv5htjj94/ntc7v3
7G754jyYD19ORn8+j3956/g37y6nv1wUf7gdvzh/2bmern55/eIsm11+840J
iOrMJD6RKG3eaj97FtAREH4hEW+uahTofFe6DpBUnegUfo/uViuUUTnW58ei
+5ao/E3+2C+bNKDsp0/FrS8uCJsXXPbATH5fMUgz/tNdwJfxxObJ4IHGsjko
2pI5naOFZOyK7JamJAIVjDqwNSFIC0r8pEO69amrBCNxl+pvJR9VV1mbY53v
Jeob3QXfS+R7eLMYhUsqzw0iwBLrJKMdGqBYvu7N94qPLcs5xnsGnBycHaA/
vYsvLxNMOeHYvcPP2MiF//CSQm1MF8am02WGH7Gpd0xquPzTPxZ6ubq7sOem
A77U2XjJuPBge72gM/LczihyfLvXD+wgCMe23fPdfhSMuthB97jONCA+nYHX
dTBToo3pK13fsYdh0PHdcYCXUd3RE+yhxz18pIvF8L2vlnWs0ciAVO+QljvQ
M9+814wA1RMr3/ngO8d4r0FgpXWM7R3Z/ouYiOPqEar3nL9QA8+YAiOmvKVN
j40NAZ1Z3CEJB25nMLAdZ+R3nMAfdcbD7qBnD8ZBdwT/j+91akBqj/t+N+wO
3GE4HGKKRD8aDZxx3x0P4A87QEg6Yi8+HsEK8G+CrISr02fMUjivLsbgQwFN
/bgli45w3kzswbU3GskbRq3Fen4u8ZMbO7IxO95Lw7kGaPVNVH4bN9f1NAh+
fKIkuJbUI558xEYKvvSXgJrcPbcrx0cKFtPFeddWh8ft6RlwvGKNmx/xwu2b
J+Qed1bwnYGJexvxnQjS/gm082xzpzFN9UOyJGIHThlVyokT9+VNfIJw8tz6
uW5etcF7NgA9SpAA73nm0PVn0PPL09uaiBWalpBebqLXLQ+ykW4AmvSqY9wn
ZSu81y8NSKMNyqM9JPnCMWgh5berqRigRWW36De3etjrMk9AO2+zXQ00fH+T
dmzPewTta2hNTRYk+GODzhPI/N7mtMpZCqBNf3OM7SnZ8YXB5guWtT1XO+y2
XbeMrakN4IXKViAF6ZS2gn4xgC6JakdBmADQAQDiP12DSiSi6Hg9Qen06ggK
iylIGPDqGTbrm+cSLdDCsrClvkh8DjSJBxhohgp/dgk2X8QfsO4vWos5LWex
2YzSTIutqWuGgWu7nX7H62OqGL/vumNMGbNPZugMGrtlAugkCB2VWbsT2OMu
dsycs7Gdde5jkbbX6PSB8GGqHMd24T+v04Mx3L7Tx+xLdncEOuCgG/WAWPb6
MOHQTM/XwPx8jt/p93p9HwiL6+C6o/vR7EZ9att9FNrxOn0v+g+ukOG49lhh
zB6lY0ys9Kk1wouUSvcoNpUPDNT4St2D2TU5A1YipF6Z07WK0LbO0O6pYg63
Bd6LGM5lKlwy6PHIpLlln3JB90W1bsE+BZDU8wx4BJUOhmmDEL8GXQHDaC8u
hDImEnkor9LUDBsXAY7Ad1t0t/ugcfjH0zdHZdPjb6XHHDT+ARQZbzRwg2gU
BUHPdTthCEfGHQR9b+j2fXc4dvcqMv3RqAOtRwO/2xt14I0OkAnH7o/dMOiN
Bv+AiozfHQ09HyhnYPvDQbdnu17ojwaR43XDUSfcqsgAUQsxx10EqmEnjPzQ
BYI3wJSn/ZHtjIf/aIpMs6TJYCtFyirqjoLmR0O9UepOb7e6Y2gxu9WdgXmO
9l7mrygxKNXXL4BPqdZX7q9MbVNQNlIp+N1mRS+pzZuwoZfsvl6m1vCopKV8
KasnOxIsCB2lpHLsFRK9B2+DqX7YtA112Cak/q/YBv8r9UT/HnpiVWvZoSf6
tXqiv19PrGoq99UT/U090f+L9MTOXj2xqpz8uKGc1IBS6Imd++mJnQfqiZ37
6omdej2xcw89sfNQPbHzYD2x+1A9sVujJ3Y39MRuVU/EJXf9+gNTn40EXyjB
eBcpxcbdEiXq1iqVOp0JNjHAy1ldHqBTdss6Zc/UKXtlnZJc4slFvJ6tSECn
yB1xw0mGmYjbyxoGRnF3vH5ZDUIRVba35strW/JOgXQ+y0LJNQOw7C0fPLZx
YvXUku8ycYTODNUHwIxHx5stH8ncGcmnJVcEldeQRMVifjtXaoScuohcSq7i
G7xGAUssi/Pi0gneYMjWsykV1sA7YD++cFsvnN7Hkh+mKHVNmgeGdPz4wum3
XnT7H8WL8Kbb+WhdJiu+U1MHo+KftvGPKvDYT7oFUSuNAadzunyLyDm7E/MZ
fMR8NYU1WeeiSLWaDzE4fO0QVwbaD0UzTLVaucIbgqstwx/xAJ7XeuH5YhA+
fBYKAzpjzn0FANFf9yOLUEmhcjFSVIDRN7mn6mclOtm/anv/qut2SKzah23u
umIQcbe+5JE3a7vjC10AU7cCpuqkNMgeY/Ykeg2gIWSZorLXh/W9HGnVXV4s
x9BEhpnZAwBgC3SOOMSMgrYUGQC5i65affkCim4hXIvit0JfXS4fsNKFFnE9
g++/5EmL/M5Eqmqvvvxqjbl36xXWi9n9+dUKzs/zNn1TCTLfJhdtivN9SPzs
rzXfxN84p1qSt21Oo1P5DahtW5Fajj0+nGL6AY58OtrAhUpPU9gA7M3oybGh
q509UTjQ6zfvTl+/Cl4wdomezko99dt9OSfGqSM6ZeU3CS9LcyrySev929Ny
T47NPW1B8bo+uafK6qAnWh2GMdcj4gMCmnV0LuhuKxW0u40ZlPOG8ugc3imb
iNvCjHWyThDOX5cAqqKCFlP3YPImvm7F3wcgNm2KxEc5qS1M6NdtDKd+tgo5
Zbf2tvPg1D/Y1e2ZfvvVcVDf7ZYHW7qVaLu32/vyLd2tCYQta33YbDX2l/FP
4r4idW/UkzPEcEb9ve4HxnIWQx/uithn9euPGrutettcEWz7amw3fu0zcpEr
YuiWXBF9d0jOCHe/M6LBxYKwYRem3PV6bm/Qs7Fpt+K1UE4LUJpsGNvxGwCs
yOm7kQP9ut2u1x1DM7vneYE7dsc4Gowc0gw6bkTPQ/wdB2rsGaljj2EUm9wj
5LswXReNh/ouTNdF46G+C3JddGHFXcN98a42mmhr+nG+osnS3pRliHsfuvQ/
thbiO+NGvQosUxdFRLC+UtDoYr2Z+4luIMhrwnRhQaWTYXmonHkFJX3pw6Dg
52K9xHvt3PFm3PTpQkZ20a2LqS7vh24HEMQSvgOeyBBu7ocdMT9ePbFtoPak
ecB358lH2aN5q3yrAijfVwk9iqpM8tiuKw3xn9HzAcgDKOQ5DhyqTs9zvW5k
e2EIZ3zghZ3hfs+HM3IHg9HA6QW+5/bCwcAbhOEYyVXgO2Hk/eN5PqJuH33c
PtB3oEneuB92ojAI/T6QNCA94TbPR8/r98NB6Iz6g2DoDqJRpxNEQN3G3V5k
O1H4X9jzwQduw9XBZ/fv1bfBJjieo3Bf2HUd7HFfOCYS73dfbDGzl9wXJRvv
Q9wX5dgVr1O3nBr3RZfdF6aNcY/7ojZobkdKaDJ2ElE+LkdiPcBBYddDbq+D
omTi3eKgqFjfdzkoSpujHBR+eZA6B0WnOsY9HRQl8l0TlfXgQLZ++e2aQLaK
4f3HDbdGDSilg8LZbFfnoNjwd+xxUGz4PbY5KDY8H1/qHRw1DooaRrnbQbHh
9cDPzkC2Gh/I7kC2ylZ83PByfKy4MbSDYgup2ZYu3aSGJafHl7K7Y2tC9YqP
44EeCMkZRSBbz/BAoGvD8EBgIUG6nlNzH2JXaBK99De4FnEGUqfDk4rO/qq3
IvA62G9+J4LVdYWJZlSReS+Cw5/ypBDVxP8rxRM5IeilEVDlXi8aDHxU2cfu
YNzrR/Zg0OkN90rVbnfoB2FoewMbwxW9EOS/sReC4tvrjDuDe0rVhEgGqPq/
iVjdovpvZ2/+NmK1SpHGkHWHrh30Br1g1AuH0XDU8QDIoOYOh6jCRFvDivjj
e4Hrg3g9cgaB0x0Mh53BeNwdYu1Lz7aDgSFh13x6zmAcDXvh2IVt9Yf90An7
LojrTrff8V13oOTx2s/Y7XaDUdcNxiDkDzuu44Bkb/ejqNsdOv0eBzb1K+L9
wBTvWTjfIt5rYXyXeO8+RLz3don3xhbVivfGJvz4REVTVkKWFKw/GmK8Euv7
u8X6vygSaV8IzG8ZibRxraMki3zNtY6KjPI11zo69XPde62jEklTe61jI5Rm
+7WOcvSMvNZRCaCpk4bt6hj3lIZL4iVLw255tAdKw5X4pRppuLJbP9YI81sV
ixpqdJ9anHU3L5SusSFD1kO4JnpmW9XO+hsWJGHX1PCsE/IF6OsretaL+/iC
qO+5RcDHDxwvz3b9sQ9CddBxOu4g6HZHo2gc9vtjvAUQ1Ar98tPzfH/gjsd+
Z9wNQq83Dt1+vx/1vCgYO4MweLIt+glnJ6qBblENeHa+bXeGfj/ojkN74AQB
nOFx5I3GwygKo35/uFVNwI/n9yLgJKHv+XZnHA7DXuiOxmMbGKPrDN3uNpWB
VZraDS6rRFuioliir9HUqipRt2bfrp4EdnfYj7qdjj327H7PcYdOOLZ9v1EO
ldKfIaymFzpOOBi6bg/2wwlRkqIT3a0NVdsVs1XZrY8NM1xK/WIAXbJjHSLF
AKjlQMZNnYaMhOLPg6Oqek5Jp+m5hk7T8x56U4fs8vt8ZL2Kj2yfJOt2G7sl
1U4fHrvSxeP22Ufm2yzINbZLcvtktZ7T2C2O7Ra4Gr0hOtWirfd9uujD2uI5
a5ius1Gv31VOrXvc+WnsduHsZt8NvvTTH33FnR+/oUqCu5slwfeSyX2kkEuC
19OzhiZo+2hWya3nolevsY1ebCMLpRtJ9dp+mCwxr9ticreh4E/Vo71aPuZo
oWwoppIPKm02E5VgdF9tHfvIP61KZ1MkBxFFOfiC0bYsINGoLhHIs8ko+C6K
Tk+/i7u9pNOd90c/vOj88iH+wzh9MfPsP9s/fzrv5/GdGybvX/787OnPP2RB
phKFHDQwVUj2/jvKdREuR89/fjOcu5/6p+8ub933xQ+d97n7p/7P3w+K9GkS
vPtTN//udb7MVp57dfNDHvVfHjRWfxh1T7/70+mNN8/H184f8ncf3jqf7E9n
d9M/9K5fnM3LuS5q11GKElV7ZIIqkcUx4qJcP8bYOVlTQKdeFyGljx7rRioi
55H1/u3pb3hjCmvxiByERzoYB3PM/VcxcAS2PRp2R/1OB+ugR2O/5ww79pCu
aY7CsL/XwNEfwhveqBcFbuB7YeR4cNhHWJfc7nTH0eAf1sABvM32bKBro44/
BD7gjUZ+z/WInwDn6u02cIy6PeBFHdt3HeQMnTD0gNc6wyjsRNG4H+02cAwH
wN37nuP5yA19YN9+txf2ur2BHdiwU7sNHK497NpAkf0o7PfsDmwvSAb9EIh8
LwLRwv/Pa+BQJAOTFNJgnysmDsMIoo0OollFYzboD4hfF6loWk46IT5PaohV
G421Twz7CH8+lkwigKolg8eXqk2jzmZj2i+22my08eKjYYlQmntnA/4GYKas
oZftCGqNq80lSksCuYa93fYg0yf46vW76ITKnNZK2MclA8K9b1AZ+g6bj+pA
JKwCbl3vexyUW26mVc1HZXvCV5iPqsaHrzAfmXaJBzlTK57HWptHRWHd5Uwt
qbASCas3qOrch051jPuZj8p2iC+bnsUH3/aqOH5rbntVduvHWnNCPSjrLAf3
Mx9tWg0UdDfMBrUQrr9Ktc18tGlL4Pb15qM6q8JO81G9VcE0H9VZEfBzL/NR
1aKgP/cyH3VrObJpPupu4br3Mh91awxA/LmP+ahbYyX6UrVs6DnXmI96G3vL
79fcWKyaj3o1+7bTfNSr3cZd5qNe7c3FHeajXmW3kA32SvtDvxhAl8JOT4GS
ANC3KWymb3Bl5luYztWq4fw0fL+Ws+ziW30DiI7gW4LjVqUKwb36tb763dyr
v8WhYOaRVgIW0rB+RS6qyOGbGkm/wjtMrYREZ38IysjAHg8x3jjou3bUg5Pm
IW7Y4cDGs9DfehbEx+t0h51RrzPou9EIg8P73Z6HBqHeYBiOHToSfeNISNF1
sCW6aCOMy/V71H5L2JeK49qiqeKrbgmNBl7dZm1GaQ1KHrsFZ3g2VGZdTRca
9NRbtTFgIo7feBtX54ggjkE5FGOgQjGoQ9qB+sUhbmATFam4WyV2bEOG268W
O7YBc/mTW4tTe9Vjx/a2IyPRLtCfyqh2H/wEja2Kn/dASMfubiAkgKi02F0K
s2NXIrpqRAnHrvCBeyjOjlNiEQIDHKcSUFenQDtOZWM2lWjHqWxBRZEejged
kTtwB8AfO37PBvXXGUS9sQ/scWD3fexhq9uHPsC1PT9CQ/BgBArw2B32h4Nu
1+/3naDjdQbYw3ZVHD9hx7Zh2GHoBV3f6wagBo+8aOBGHWcU9hyaw04zidUH
fTwc+8CYB+Ox28FoYh9U7NDr2IE77HVw+51NV4XjqC2VCOEY+lGdgu24JRK2
Xcl2XKe24VZF23FLjvFNZdtxqzL0pnbquFU36hYN1XFLe/KRJlDhNcUVNJ6q
GbPEIkhCVQmvZ7NVLuu4G5xlj47ouBsn6p681vHqYin3clynmg2SX9zHdx2v
NtSyzH2xWa2MffXE6w5cB87MOOp2+zZIa2MQiiPHGXf6Yb8XRfjqlnM47HZD
NPLjBR6Qnn0fKJ3dd/wwcLpwtMaI/N7GCZQI79UpSdsZs2fjO5XN/4K/le0s
fL7MEAVJ2Pz6A1RrAHHKgQi7DD2OGaBA6Fy2FIgy17iOntrrakCx5vi88HnM
8oHHPNsxbQISgGUlv87o4lT1+XtJpE5Vw993UqoJVbanRXSqcQj3cbgi9m4a
BNB6JJwG2mVD0+lUA0b2wLYamnAsqqiv6irF68RzMmqTpueXtwd/0rmGxA/y
WsQR/kEbw7/3f2tPsVfnKd7nEgBddLfJf5unmC3ije0m8X1G7+Ggsduuvdty
3ejAHDoD2+mOgo55IdPr4UXEgN2v6DMGsQy9xj2bLkOizzhqdD1QOMMu3u2M
uiA9wGOv57sg+PU63UHP3+VublTvT9p4p7NXHYMuf24M0JAjwNmGyYMcEt3f
S93Yd9Fwl5WwIVNTfo2XuuH7X++lbmDK0K/1UjdMu8lDvdQNp/9QLzVft4XD
hJd99TnapyVUFYJGVSPA27vjHuAJbGYVVarY2GBsoXu5PfhvaI/v8xq/BdMe
97aHjuxeSGNzJdWFbCMIsFW7RfvdgnujM9gnl2+XuhssduPx7w2DrkkO/AHC
YVfwSKNymn0A0xgWJI4lXfLWt9MrclOjKjjtk44QD5yISAai5/321CBMPd/D
adjjBkgTMsbFhX49M7rCei1LGcczKuMOUmsuCwWLcnxSwiyw9sxMFBLja8LT
bLKmS8OqCpAsbh3nK6rFjoU/+JYx3h6QTFE7Gk445RGJ9BiIgaWejFw2aGc+
fB49P9KFxJWNnSq7lGpUyQpkKnttMUGD9VHTyigPDt54xhqBLE3onp4UZl2S
cp8UVcJl74ZYj0wXAdNVmFAQoDpaRhEfWQ9Hlq3iqn3QKwwBCwUd6lKIEFhK
jASGfJVyvaK04HqHMefI4kIpB42LeIJRCVQgCKv6yeJJwPtBcKF9QF08m2Qz
Kqc1TYoJjK0Kv2HRNtsZYPUsKmx2xxXOrSTOZ3hzWhQdEr3OQJ6Y3E2w1BPW
rz5oYI9c7RsGXMNkVvwXp4ESxZLhB0rXpaoMykLN11z4GqSWJAdINQnURk4q
Luokca1UVghrK8LweIXmPOECcDhUMpXlns3kPUa5xDlW8IN+CRFV8cZCVUKj
Kz5Uvp2Ft/KMZAmjSZKvYgAN7PRaFvQG5M+nLUJy0nZB+ELshUN0BxoJFhTL
Uy7vDQtfYPhIkQCkUVCUtaBxJ1Oz3NzmjZ/CukLJOxdX31d3S66shcMUKbyK
B7aUA7lI6qd20KD6lKLSFADxMo/p3o4ods2bZBbTwiXcibrbKv8y1Qqj99Fe
Bzv1SzI1fF66NHl1IaJG1ZkEQpnSWJ8fA3jQU1qImC2ME+JqZIrCXMAXPLmZ
hiXvEFdTFB3SVSQu07UWxQHxEE2o8DaeaVXom88h7ZD+TVR9BNCOqRo76EyL
CddR30qZDhqyNiIeIC5LhjmwueacdP9ic7OEnQV67FUmIo6MbosrkQqOWqeL
yUont8IiXC04PnOruJvD+zkTLHhflp5EylWp54lzqpAlAzhMLWSxt4t1Tggy
B3I2R92a6oVSlXKgATkc+YSSRyDpQCSY3gAWAenBJBSYRKIMYD1dCWpF94EQ
3CARXTNWF1SLUCELAV/VmQMY/+RgiTUGiy7dpkAtgUxEphbKsPmyIme1cmtT
VC3FYdyDBmfik43LpRyxUiOBKqCqi4AbRPM5Fd9FhSMa+GrgACKbnl6p3Nlt
BvvBVdV51sVJmZkd8mopw9pBI5K+2Bam3AFMCAHwadJ6lsxmQJ+tQ8G4qPwd
wgU2G3j9ighVUWSTFPmIqOkG+5xiig9EI+bnVDhzDrORiP358yS5rlRhFFmo
XrHFMLv45/P8+F9e4La/g22nv57j1htN8OgjMOihVuUtanc4ip4XR9bG51fr
PWDWCA7U5rOaz6/W2wQxnkr//l7/fK9UbA/K1vaXv7+lOeV0OsPEc7B1BCs6
2rMZfZe5WKAJoA4gLzo8YXPpoZSx2EpKP/FxIbfkDe6/BtSL5DKe3AF4MU3M
fri+yprWecydKspKc3290FNFz40QIsyX/9K5RoDfk1Tizht+lb6H5pGXzX8w
Xi7hAM31+e65YhMxUcnEqLlBqVfAQguW0Ko9/Wq9yYCRtlZZi+eKf1lbZ7x9
rpiAq3rsZPItcZCIPpjdnVApSDi4RbbQOehEbdkt9W/P8cZvftdagiySl8tg
oySaZ9M15/4BWQA6vuYCn+ItINVXMYgXVCKVmIUslcCcI/kEZCVdidev0ktM
4ZHklyifFEQ5S6VPM6mRUAVuWS6BqCsIgdRlUxSyRucG0UtRfDvmbEZURloH
7Ui+IvK9Ate8NuVculYtXKJUfBshQkULJytVbuKg8UaiqixRjVmSkph1m2wx
A9GRpJ+canousjLPpfqVZaYLE17dJklJ5pYJac39hlfvilUyR8krvdh4bImn
AOBkdmFdgZR+jr2i7AeCQ1qIms3fq9rcaiYqfaYsJy0tpsqYiJoHwBEgIWRQ
saVUOjsHsXWxMqdPkgpW6kb4CB6NpXwFNLEa7nq5nKV6U5pCYER0IBc2iHFY
QAMR4qChUQF6A5JwFd+gPooB2kJ3yVEJCFBx5CSLQgouvUqLSFGmKVhFRM2m
AMFYG21Fcfh5fE21Rncdh1LJj2IN6iCcIol3rCcRjIQYI0Uqo4xwVqo3LbJe
mUegidiSAMelHwWbPVWF6416kRsCt5ZtFpUMBaC1ns+E5iu2i8q14ubuOsuG
DkCbxAZ5ylmrCwgjPpQOMWWGwAq+cFpKm7GKr0nPEPXWA6PoM0sZKjE0Lk6V
GW+aagYdd1G5HdFL2uDJLl+ICZvTg4XOQdu6RE19iZopaa0x6LYHjYo+1ixv
8C2I0kaBGFktGAuaCyIn2eBBA3VOIgTiZBSVsQRAC65Ojdqs8JwD+l7GqGxQ
xXFQes1sEKxz4fuFUOo14QbgXafLJYLugqlrBRjWRZzOqpgIdBF+RDQ0Mkvw
WwAOdkeRcMpIKBrpAJOWbiNwExlMgcKKWU0bM3p/UFXfUQKlKuCvXlMl8DxB
QV4WRDbUcyywM0uFCk/ghN0z4V6uFF6pae9XsEaBGjqRdX+YbWoGiKYFaeJq
ilLEuGulOuyz9Jq3/9vRS8bcGcjo68srkRlcVAreMIyti0SkqouXhbBHsdIn
gZ+jIpfcoEkknsEZRPABmcMcodxcDI49EDivVis4U0jVpElEgxJOYfIp5csr
pRx/58kklnNBh9FBQxF5ZjqUXZ3oL9lQuJp6AuAX1pJ3L84srB3EGdZLKvgI
tSSym1C6wKbGJ84fXtFIWfzgiubMcA4aZR+WZINqQjq3fBXAhNtYzFwhNdWz
3nCLzZNEZF5R7M+0CQGNMmybbCpzXJ8JzwXfDNNY5ri78tUDTAJh/QLtUA03
Kds8ZF1wwsLsEhS8K1DiUANMOXMNbioeaFURWcECASj4SZVqOo48AHbH+/KF
VcVtRFVYZazT4FVQY/yln5HnF9d8CQuoWaXyNdcwF9YjAvgbFfGAp/oSBZU7
IHwwxTRexAQqBCql4qbrYAUmmAXOzMhgrqTd2QVlfbfuRXyezFhkrk3V/Vam
mhSX1+7zAZo2DJ0Bd2CoqeRxpo+iOMqYDnC1Itj3LH9SgKYEvOaQOjk6IR2c
YSW3vdInkgOZkRrJerJCqDqDpiwQjdp7httN3dDOwTSBbWPNe9zFMYaqj8Lw
hfX58QV8b02m0xmI/1b1DiS1URLzknzj09IeqrS+2JQNCPQ7vZmaZxEwnTpI
P1kBbtbnz9u2S7mjYVZ83Dcc+d9Yj7vtQfeQQt3Ew6NG43/8D2r9xgilOf7G
OuSMxFuvLnzzLw3cpXPAP6uNPvDa4AHofl8/sAmGuySYoDl3lkwvJd0AFY0j
ppLpN48WGWtc3yeipANRboJtvLi2niXwP8M0v77KZr8QKhDJTpIp7qOktARm
tt0rBa1M80wCg5bf2/rhXsIZi+FovMV/82mBPD1E7WeYZ9k18Lp//7/vblKg
tW///f9ZoOUeziJI5CFK2e+u4hkapV/Ea3F2XqwX0/NZjAx4dJWjcRINcPPi
3//fArp6u15PrTDJb9PLJiAQiFAL6CObw6Bt6zk0t57fpvHqOrsFkaVpnaHe
cUUPrhYxC5CjOAdNZmENUQZaLORRSXMLE90mtwpQ7R0gRgCeRmffIhMyRDmY
2jmQuGyWALj+/X+h5fTD3WJyzSrX2wwtZmG8uJult01j4KtktsS+U9SlxKXg
n9ecFLdq8YNZ/f+U2foaeVMBAA==

-->

</rfc>

