<?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.1 (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-21" 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="2024" month="October" day="21"/>

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

    <abstract>


<?line 94?>

<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 103?>

<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"/>. This format provides a bundle of metadata, including the payload location, applicable devices, and a security wrapper.</t>

<t><xref target="RFC9124"/> outlines the necessary information provided by the SUIT manifest format. 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 (e.g., in the case of open source software) may also be necessary to prevent reverse engineering and reproduction of the firmware.</t>

<t>While the initial motivation for this document was firmware encryption, the use of SUIT manifests has expanded to cover other scenarios requiring integrity and confidentiality protection, such as:</t>

<t><list style="symbols">
  <t>software packages,</t>
  <t>personalization data,</t>
  <t>configuration data, and</t>
  <t>machine learning models.</t>
</list></t>

<t>Thus, the term "payload" is used generically to refer to all these objects.</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 IETF 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.</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 IETF 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 authors 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, though such countermeasures are typically beyond the scope of IETF specifications.</t>

<t>Note: It is assumed that the communication between the author and the distribution system is secure. For example, the author might upload the manifest and firmware image to the distribution system using a secure 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,88 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 320,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">
  <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 has implications for the recommendations in <xref section="4.3.17" sectionFormat="of" 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>This specification introduces a new extension to the SUIT_Parameters structure.</t>

<t>The SUIT_Encryption_Info structure (referred to as suit-parameter-encryption-info
in <xref target="parameter-fig"/>) 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>

<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>The SUIT_Encryption_Info structure is carried within either the
suit-directive-override-parameters or suit-directive-set-parameters used in
the "Directive Write" and "Directive Copy" operations. An implementation
conforming to this specification must support these two parameters.</t>

<t>Interoperability requirements for content key distribution methods vary:
since a device will typically support only one of the two specified methods,
the distribution system needs to know which method is supported. Limiting a
constrained device to a single content key distribution method also helps
reduce code size.</t>

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

suit-parameter-encryption-info = TBD19
]]></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="extended-directives"><name>Extended Directives</name>

<t>Here’s an improved version of your text:</t>

<t>This specification extends the following directives:</t>

<t><list style="symbols">
  <t>Directive Write (suit-directive-write): Used to decrypt the content specified
by suit-parameter-content using suit-parameter-encryption-info.</t>
  <t>Directive Copy (suit-directive-copy): Used to decrypt the content of the
component specified by suit-parameter-source-component using suit-parameter-encryption-info.</t>
</list></t>

<t>Examples of these two directives are provided below, focusing on the essential
aspects. A complete example for AES Key Wrap with the Fetch and Copy directives
can be found in <xref target="example-AES-KW-copy"/>, while an example illustrating the
Write directive is shown in <xref target="example-AES-KW-write"/>.</t>

<t><xref target="encryption-info-consumed-with-write"/> illustrates the Directive Write. 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'. The resulting plaintext payload
is then stored in component #0.</t>

<figure title="Example showing the extended suit-directive-write." anchor="encryption-info-consumed-with-write"><artwork><![CDATA[
/ directive-override-parameters / 20, {
  / parameter-content / 18: h'EA1...CED',
  / parameter-encryption-info / TBD19: h'D86...1F0'
},
/ 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>

<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. "http://example.com/encrypted.bin". The
encrypted payload will be downloaded and stored in component #1.
Then, the information in the SUIT_Encryption_Info structure referred
to by parameter-encryption-info, i.e. h'D86...1F0', will be used to
decrypt the content in component #1 and the resulting plaintext
payload will be stored into component #0.</t>

<figure title="Example showing the extended suit-directive-copy." anchor="encryption-info-consumed-with-copy"><artwork><![CDATA[
/ directive-set-component-index / 12, 1,
/ directive-override-parameters / 20, {
  / parameter-uri / 21: "http://example.com/encrypted.bin",
},
/ directive-fetch / 21, 15,
/ 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>

<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 payload 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>

</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>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="cddl"><name>CDDL</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"><artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

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,     ; algorithm identifier
  ? 4 => bstr,    ; identifier of the KEK pre-shared with the \
                                                            recipient
  * label => values   ; extension point
}
]]></artwork></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.</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 the payload with a unique CEK for each
recipient, resulting in multiple manifests. This approach is useful when payloads contain
device-specific information. 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="cddl-1"><name>CDDL</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"><artwork><![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,         ; 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
}
]]></artwork></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"><artwork><![CDATA[
 Enc_structure = [
   context : "Encrypt",
   protected : empty_or_serialized_map,
   external_aad : bstr
 ]
]]></artwork></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 and AES-CBC, 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>

<t>AES-CTR and AES-CBC are discussed in separate sub-sections below and
<xref target="aes-ctr-fig"/> and <xref target="aes-cbc-fig"/> use the following abbreviations:</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>

<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><artwork><![CDATA[
D8608443A10101A1054CF14AAB9D81D51F7AD943FE87F6818340A2012204
456B69642D31581875603FFC9518D794713C8CA8A115A7FB32565A6D5953
4D62
]]></artwork></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"><artwork><![CDATA[
96([
  / protected: / << {
    / alg / 1: 1 / A128GCM /
  } >>,
  / unprotected: / {
    / IV / 5: h'F14AAB9D81D51F7AD943FE87'
  },
  / payload: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / h'',
      / unprotected: / {
        / alg / 1: -3 / A128KW /,
        / kid / 4: 'kid-1'
      },
      / payload: /
        h'75603FFC9518D794713C8CA8A115A7FB32565A6D59534D62'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></artwork></figure>

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

<figure><artwork><![CDATA[
758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4BD6D7ED26AB32F
EB063385D4D3465927EC82CB5E198A59
]]></artwork></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: { / alg / 1: -29 / ECDH-ES+A128KW / }</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><artwork><![CDATA[
D8608443A10101A1054CF14AAB9D81D51F7AD943FE87F6818344A101381C
A120A40102200121582073024F415AA51529A66CCEFD88F3F62A734492FF
45F6AD37FD2888E73EAF19DA2258204005B48A6FD091AA6ABFE3CFBEEDE8
8B347E521D43405FDBD7D2CFF0EBC21B265818A06B8E6550F308712B1DF0
44B21B7D11D9B22792F1DE0997
]]></artwork></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"><artwork><![CDATA[
96([
  / protected: / << {
    / alg / 1: 1 / A128GCM /
  } >>,
  / unprotected: / {
    / IV / 5: h'F14AAB9D81D51F7AD943FE87'
  },
  / payload: / 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'
        }
      },
      / payload:
        / h'A06B8E6550F308712B1DF044B21B7D11D9B22792F1DE0997'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></artwork></figure>

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

<figure><artwork><![CDATA[
758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4BD6D7ED26AB32F
EB063385D4D3465927EC82CB5E198A59
]]></artwork></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 AES operation, as shown in <xref target="aes-ctr-fig"/>.
Hence, when an image is encrypted using AES-CTR-128 or AES-CTR-256, the IV MUST
start with zero (0) and MUST be incremented by one for each 16-byte plaintext block
within the entire slot.</t>

<t>Using the previous example with a slot size of 64 KiB, the sector size 4096 bytes and
the AES plaintext block size of 16 byte requires IVs from 0 to 255 in the first sector
and 16 * 256 IVs for the remaining sectors in the slot.</t>

<t>In our example, we 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 IVs range from 0 to 255 in the first sector, and 16 * 256 IVs are required for the
remaining sectors in the slot.</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,88" 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,88" 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 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 152,208 L 168,208" fill="none" stroke="black"/>
<g class="text">
<text x="64" y="36">IV1</text>
<text x="184" y="36">IV2</text>
<text x="16" y="148">k--</text>
<text x="56" y="148">E</text>
<text x="136" y="148">k--</text>
<text x="176" y="148">E</text>
<text x="64" y="196">|</text>
<text x="184" y="196">|</text>
<text x="28" y="212">P1</text>
<text x="64" y="212">⊕</text>
<text x="140" y="212">P2</text>
<text x="176" 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>Note: The abbreviations shown in <xref target="aes-ctr-fig"/> are described
in <xref target="content-enc"/>.</t>

<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><artwork><![CDATA[
D8608440A20139FFFD0550DAE613B2E0DC55F4322BE38BDBA9DC68F68183
40A2012204456B69642D315818CE34035CE5C2E2666E46D4C131FC561DD1
90A6D26CFA1990
]]></artwork></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"><artwork><![CDATA[
96([
  / protected: / h'',
  / unprotected: / {
    / alg / 1: -65534 / A128CTR /,
    / IV / 5: h'DAE613B2E0DC55F4322BE38BDBA9DC68'
  },
  / payload: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / h'',
      / unprotected: / {
        / alg / 1: -3 / A128KW /,
        / kid / 4: 'kid-1'
      },
      / payload: /
        h'CE34035CE5C2E2666E46D4C131FC561DD190A6D26CFA1990'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></artwork></figure>

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

<figure><artwork><![CDATA[
2BB8DB522AE978246CC775C3B0241BD4B0333FFDD2DB70C7EE7A4966E3B7
]]></artwork></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: { / alg / 1: -29 / ECDH-ES+A128KW / }</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><artwork><![CDATA[
D8608440A20139FFFD0550DAE613B2E0DC55F4322BE38BDBA9DC68F68183
44A101381CA120A401022001215820EE0718F6B019C29CC611C18CEDE221
4066DDCEDC2F0DBEF873CB224C715C1174225820279F2A88E4AB9E2ED30C
0FCB69515B31B5D36725BFDB9AE02032ED4D5AB52CB85818E28B4502E4F5
151884A995405579006E9465C3E94E3E0808
]]></artwork></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"><artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

96([
  / protected: / h'',
  / unprotected: / {
    / alg / 1: -65534 / A128CTR /,
    / IV / 5: h'DAE613B2E0DC55F4322BE38BDBA9DC68'
  },
  / payload: / 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'
        }
      },
      / payload: / h'\
                    E28B4502E4F5151884A995405579006E9465C3E94E3E0808'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></artwork></figure>

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

<figure><artwork><![CDATA[
2BB8DB522AE978246CC775C3B0241BD4B0333FFDD2DB70C7EE7A4966E3B7
]]></artwork></figure>

</section>
</section>
<section anchor="aes-cbc"><name>AES-CBC</name>

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

<t>AES-CBC is a non-AEAD cipher that provides confidentiality but but does not offer
integrity protection.
In AES-CBC, a single IV is used to  encrypt the firmware belonging to a single sector,
as  individual AES blocks are chained together, as illustrated  in <xref target="aes-cbc-fig"/>. The
numbering  of sectors in a slot start with zero (0) and increase by one with
every sector till the end of the slot is reached. The IV follows this numbering.</t>

<t>For 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 AES-128-CBC uses an AES-block size of
128 bit (16 bytes). Hence, sector 0 needs 4096/16=256 AES-128-CBC operations using IV 0.
If the firmware image occupies the entire slot, it will contain 16 sectors, corresponding
to IVs ranging from 0 to 15.</t>

<figure title="AES-CBC Operation" anchor="aes-cbc-fig"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="304" width="224" viewBox="0 0 224 304" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
<path d="M 32,112 L 32,192" fill="none" stroke="black"/>
<path d="M 64,80 L 64,104" fill="none" stroke="black"/>
<path d="M 64,200 L 64,256" fill="none" stroke="black"/>
<path d="M 96,112 L 96,192" fill="none" stroke="black"/>
<path d="M 112,72 L 112,224" fill="none" stroke="black"/>
<path d="M 152,112 L 152,192" fill="none" stroke="black"/>
<path d="M 184,80 L 184,104" fill="none" stroke="black"/>
<path d="M 184,200 L 184,256" fill="none" stroke="black"/>
<path d="M 216,112 L 216,192" fill="none" stroke="black"/>
<path d="M 40,64 L 56,64" fill="none" stroke="black"/>
<path d="M 104,64 L 168,64" fill="none" stroke="black"/>
<path d="M 32,112 L 96,112" fill="none" stroke="black"/>
<path d="M 152,112 L 216,112" fill="none" stroke="black"/>
<path d="M 32,192 L 96,192" fill="none" stroke="black"/>
<path d="M 152,192 L 216,192" fill="none" stroke="black"/>
<path d="M 64,224 L 112,224" fill="none" stroke="black"/>
<g class="text">
<text x="60" y="36">P1</text>
<text x="188" y="36">P2</text>
<text x="64" y="52">|</text>
<text x="184" y="52">|</text>
<text x="28" y="68">IV</text>
<text x="64" y="68">⊕</text>
<text x="176" y="68">⊕</text>
<text x="16" y="164">k--</text>
<text x="56" y="164">E</text>
<text x="136" y="164">k--</text>
<text x="176" y="164">E</text>
<text x="68" y="276">C1</text>
<text x="188" y="276">C2</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
       P1              P2
        |              |
   IV---⊕    +--------⊕
        |     |        |
        |     |        |
    +-------+ |    +-------+
    |       | |    |       |
    |       | |    |       |
 k--|  E    | | k--|  E    |
    |       | |    |       |
    +-------+ |    +-------+
        |     |        |
        +-----+        |
        |              |
        |              |
        C1             C2
]]></artwork></artset></figure>

<t>Note: The abbreviations shown in <xref target="aes-cbc-fig"/> are described
in <xref target="content-enc"/>.</t>

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

<t><list style="symbols">
  <t>Algorithm for payload encryption: AES-CBC-128
  <list style="symbols">
      <t>k: h'627FCF0EA82C967D5ED8981EB325F303'</t>
      <t>IV: h'93702C81590F845D9EC866CCAC767BD1'</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-cbc-example"><name>AES-KW + AES-CBC 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><artwork><![CDATA[
D8608440A20139FFFA055093702C81590F845D9EC866CCAC767BD1F68183
40A2012204456B69642D315818E198FF269626EC43299D33586FC7B2646B
13292261160422
]]></artwork></figure>

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

<figure title="COSE_Encrypt Example for AES Key Wrap" anchor="aeskw-aescbc-example"><artwork><![CDATA[
96([
  / protected: / h'',
  / unprotected: / {
    / alg / 1: -65531 / A128CBC /,
    / IV / 5: h'93702C81590F845D9EC866CCAC767BD1'
  },
  / payload: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / h'',
      / unprotected: / {
        / alg / 1: -3 / A128KW /,
        / kid / 4: 'kid-1'
      },
      / payload: /
        h'E198FF269626EC43299D33586FC7B2646B13292261160422'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></artwork></figure>

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

<figure><artwork><![CDATA[
9C09156CF4ACE0401086D98586E0B09FA5B5CF78F2BCCBF6C914DDB42BF0
E21E
]]></artwork></figure>

</section>
<section anchor="ecdh-esaes-kw-aes-cbc-example"><name>ECDH-ES+AES-KW + AES-CBC 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: { / alg / 1: -29 / ECDH-ES+A128KW / }</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><artwork><![CDATA[
D8608440A20139FFFA055093702C81590F845D9EC866CCAC767BD1F68183
44A101381CA120A40102200121582084C1768A1AFA92BAF27C3289A3FAF7
5E7511B27C654947BBD391E8A12EB8295B225820F32B0AECA4F8B6C51C15
5037B1FB726CAE3D0C77976864EF725DB2B30ABCE6F6581804928D52CD34
AC8CA0427CEED6D7C5D06A21B5F4F79CAA18
]]></artwork></figure>

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

<figure title="COSE_Encrypt Example for ES-DH" anchor="esdh-aescbc-example"><artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

96([
  / protected: / h'',
  / unprotected: / {
    / alg / 1: -65531 / A128CBC /,
    / IV / 5: h'93702C81590F845D9EC866CCAC767BD1'
  },
  / payload: / 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'84C1768A1AFA92BAF27C3289A3FAF75E
                      7511B27C654947BBD391E8A12EB8295B',
          / y / -3: h'F32B0AECA4F8B6C51C155037B1FB726C
                      AE3D0C77976864EF725DB2B30ABCE6F6'
        }
      },
      / payload: / h'\
                    04928D52CD34AC8CA0427CEED6D7C5D06A21B5F4F79CAA18'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></artwork></figure>

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

<figure><artwork><![CDATA[
9C09156CF4ACE0401086D98586E0B09FA5B5CF78F2BCCBF6C914DDB42BF0
E21E
]]></artwork></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: "http://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: "http://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="400" width="408" viewBox="0 0 408 400" 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,368" fill="none" stroke="black"/>
<path d="M 24,64 L 24,328" fill="none" stroke="black"/>
<path d="M 64,240 L 64,272" fill="none" stroke="black"/>
<path d="M 80,272 L 80,328" fill="none" stroke="black"/>
<path d="M 96,352 L 96,368" fill="none" stroke="black"/>
<path d="M 136,128 L 136,176" fill="none" stroke="black"/>
<path d="M 136,352 L 136,368" 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 208,240 L 208,272" fill="none" stroke="black"/>
<path d="M 248,352 L 248,368" fill="none" stroke="black"/>
<path d="M 288,352 L 288,368" 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,368" 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 64,240 L 208,240" fill="none" stroke="black"/>
<path d="M 64,272 L 208,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,384 L 80,384" fill="none" stroke="black"/>
<path d="M 152,384 L 232,384" fill="none" stroke="black"/>
<path d="M 304,384 L 384,384" 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,384 C 15.16936,384 8,376.83064 8,368" fill="none" stroke="black"/>
<path d="M 80,384 C 88.83064,384 96,376.83064 96,368" fill="none" stroke="black"/>
<path d="M 152,384 C 143.16936,384 136,376.83064 136,368" fill="none" stroke="black"/>
<path d="M 232,384 C 240.83064,384 248,376.83064 248,368" fill="none" stroke="black"/>
<path d="M 304,384 C 295.16936,384 288,376.83064 288,368" fill="none" stroke="black"/>
<path d="M 384,384 C 392.83064,384 400,376.83064 400,368" 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="136" y="52">Q1.</text>
<text x="184" y="52">Payload</text>
<text x="252" y="52">Delivery</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="312" y="164">Attacks</text>
<text x="172" y="212">No</text>
<text x="360" y="212">Yes</text>
<text x="88" y="260">Q3.</text>
<text x="124" y="260">AEAD</text>
<text x="172" y="260">cipher</text>
<text x="104" y="308">Yes</text>
<text x="172" y="308">No</text>
<text x="48" y="356">NOT</text>
<text x="192" y="356">AFTER</text>
<text x="340" y="356">BEFORE</text>
<text x="52" y="372">Required</text>
<text x="188" y="372">Decryption</text>
<text x="340" y="372">Decryption</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
+------------------------------------------------+
|              Q1. Payload Delivery              |
+-+--------------------------------------------+-+
  |                                            |
  | in Content                          others |
  |                                            v
  |             +--------------------------------+
  |             |      Q2. Mitigate Battery      |
  |             |       Exhaustion Attacks       |
  |             +-+----------------------------+-+
  |               |                            |
  |               | No                     Yes |
  |               v                            |
  |    +-----------------+                     |
  |    | Q3. AEAD cipher |                     |
  |    +-+-------------+-+                     |
  |      |             |                       |
  |      | Yes      No |                       |
  v      v             v                       v
 .+------+.      .-----+-----.      .----------+.
|   NOT    |    |    AFTER    |    |   BEFORE    |
| Required |    | Decryption  |    | Decryption  |
 '--------'      '-----------'      '-----------'
]]></artwork></artset></figure>

<t>There are three conditions to consider:</t>

<t><list style="symbols">
  <t>Q1. How does the recipient receive the encrypted payload?
If the encrypted payload is part of an integrated payload, its integrity is already validated by the suit-authentication-wrapper, so no additional integrity check is necessary.</t>
  <t>Q2. Does the sender wish to mitigate battery exhaustion attacks?
If so, the encrypted payload must be validated before decryption.</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.</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 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">1)</text>
<text x="212" y="116">..................................................</text>
<text x="360" y="148">(sector</text>
<text x="404" y="148">2)</text>
<text x="212" y="164">..................................................</text>
<text x="360" y="196">(sector</text>
<text x="404" y="196">3)</text>
<text x="212" y="212">..................................................</text>
<text x="360" y="244">(sector</text>
<text x="404" y="244">4)</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">1)</text>
<text x="212" y="308">..................................................</text>
<text x="360" y="340">(sector</text>
<text x="404" y="340">2)</text>
<text x="212" y="356">..................................................</text>
<text x="360" y="388">(sector</text>
<text x="404" y="388">3)</text>
<text x="212" y="404">..................................................</text>
<text x="360" y="436">(sector</text>
<text x="404" y="436">4)</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 1)|
|..................................................|
|                                                  |
|                                        (sector 2)|
|..................................................|
|                                                  |
|                                        (sector 3)|
|..................................................|
|                                                  |
|                                        (sector 4)|
+--------------------------------------------------+
| Secondary Slot                                   |
|                                        (sector 1)|
|..................................................|
|                                                  |
|                                        (sector 2)|
|..................................................|
|                                                  |
|                                        (sector 3)|
|..................................................|
|                                                  |
|                                        (sector 4)|
+--------------------------------------------------+
| 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-CBC and AES-CTR in the context
of firmware encryption. An IV MUST NOT be reused when the same key is employed.
In this application, 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>

</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><artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

/  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/           / payload: / null / detached ciphertext /,
/ 40/           / recipients: / [
/ 41/             [
/ 42/               / protected: / h'',
/ 43/               / unprotected: / {
/ 44/                 / alg / 1: -3 / A128KW /,
/ 45/                 / kid / 4: 'kid-1'
/ 46/               },
/ 47/               / payload: /
/ 48/               h'\
                    75603FFC9518D794713C8CA8A115A7FB32565A6D59534D62'
/ 49/                 / CEK encrypted with KEK /
/ 50/             ]
/ 51/           ]
/ 52/         ]) >>
/ 53/       },
/ 54/ 
/ 55/       / decrypt encrypted firmware /
/ 56/       / directive-write / 18, 15
/ 57/         / consumes the SUIT_Encryption_Info above /
/ 58/     ] >>
/ 59/   } >>
/ 60/ })
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA2025853825824822F5820037A5C325CE14078A0AADF007428EAC659
361AD9402A732410BDA542FAE94E2C582AD18443A10105A0F658208D9259
9011C451A4C5FB69709FA6CA6C0F846D692BDBB3F624EC91F82F9F620A03
5898A4010102010357A102818152706C61696E746578742D6669726D7761
72651458778414A212582E758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B
85BB94D4BD6D7ED26AB32FEB063385D4D3465927EC82CB5E198A5913583E
D8608443A10101A1054CF14AAB9D81D51F7AD943FE87F6818340A2012204
456B69642D31581875603FFC9518D794713C8CA8A115A7FB32565A6D5953
4D62120F
]]></artwork></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><artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'8814BC46089ACA6A863A7BA8393F9747
/  6/                           589940EFA40641335EF86155598F06C3'
/  7/     ] >>,
/  8/     << / COSE_Mac0_Tagged / 17([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: 5 / HMAC256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / tag: / h'B68572F6F0494FEAF390CE44B462F2A7
/ 15/                  BDF73EF5DFE9FB8E12585A12F8F641AD'
/ 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, 1
/ 30/         / ['encrypted-firmware'] /,
/ 31/       / directive-override-parameters / 20, {
/ 32/         / parameter-image-size / 14: 46,
/ 33/         / parameter-uri / 21:
/ 34/           "https://example.com/encrypted-firmware"
/ 35/       },
/ 36/       / directive-fetch / 21, 15,
/ 37/ 
/ 38/       / decrypt encrypted firmware /
/ 39/       / directive-set-component-index / 12, 0
/ 40/         / ['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/           / payload: / null / detached ciphertext /,
/ 50/           / recipients: / [
/ 51/             [
/ 52/               / protected: / h'',
/ 53/               / unprotected: / {
/ 54/                 / alg / 1: -3 / A128KW /,
/ 55/                 / kid / 4: 'kid-1'
/ 56/               },
/ 57/               / payload: /
/ 58/               h'\
                    75603FFC9518D794713C8CA8A115A7FB32565A6D59534D62'
/ 59/                 / CEK encrypted with KEK /
/ 60/             ]
/ 61/           ]
/ 62/         ]) >>,
/ 63/         / parameter-source-component / 22: 1
/ 64/           / ['encrypted-firmware'] /
/ 65/       },
/ 66/       / directive-copy / 22, 15
/ 67/         / consumes the SUIT_Encryption_Info above /
/ 68/     ] >>
/ 69/   } >>
/ 70/ })
]]></artwork></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 "https://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>The following attributes and features from the SUIT manifest specification are used:</t>

<texttable>
      <ttcol align='left'>Attribute Name</ttcol>
      <ttcol align='left'>Abb.</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 SUIT manifest processor is shown in the following table:</t>

<texttable>
      <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>"https://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><artwork><![CDATA[
D86BA2025853825824822F58208814BC46089ACA6A863A7BA8393F974758
9940EFA40641335EF86155598F06C3582AD18443A10105A0F65820B68572
F6F0494FEAF390CE44B462F2A7BDF73EF5DFE9FB8E12585A12F8F641AD03
58B2A40101020103582BA102828152706C61696E746578742D6669726D77
6172658152656E637279707465642D6669726D7761726514587C8C0C0114
A20E182E15782668747470733A2F2F6578616D706C652E636F6D2F656E63
7279707465642D6669726D77617265150F0C0014A213583ED8608443A101
01A1054CF14AAB9D81D51F7AD943FE87F6818340A2012204456B69642D31
581875603FFC9518D794713C8CA8A115A7FB32565A6D59534D621601160F
]]></artwork></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><artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'A6D2C13A0DEFD57A09FA65C24206A9A8
/  6/                           747261E6EA017532B3DAB0419C42A2FC'
/  7/     ] >>,
/  8/     << / COSE_Mac0_Tagged / 17([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: 5 / HMAC256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / tag: / h'DB350AC9603B0BBA3895B85019699363
/ 15/                  3F314A9066634B31BF62E596FD870434'
/ 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/           "https://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/           / payload: / null / detached ciphertext /,
/ 48/           / recipients: / [
/ 49/             [
/ 50/               / protected: / h'',
/ 51/               / unprotected: / {
/ 52/                 / alg / 1: -3 / A128KW /,
/ 53/                 / kid / 4: 'kid-1'
/ 54/               },
/ 55/               / payload: /
/ 56/               h'\
                    75603FFC9518D794713C8CA8A115A7FB32565A6D59534D62'
/ 57/                 / CEK encrypted with KEK /
/ 58/             ]
/ 59/           ]
/ 60/         ]) >>,
/ 61/         / parameter-source-component / 22: 1 / [h'01'] /
/ 62/       },
/ 63/       / directive-copy / 22, 15
/ 64/         / consumes the SUIT_Encryption_Info above /
/ 65/     ] >>
/ 66/   } >>
/ 67/ })
]]></artwork></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><artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'1DB69EF1477E9942815F29F78E09957B
/  6/                           26B4ADD03902BDB3D1EDF3DA2075F593'
/  7/     ] >>,
/  8/     << / COSE_Sign1_Tagged / 18([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: -7 / ES256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / signature: / h'CB4EADA6BEC17EEB22EB836FB2BF9136
/ 15/                        A6EF733C11DAC955F543BBDCAA373B85
/ 16/                        9321BC77969917E4C70F049527607F4C
/ 17/                        32752D53E01346E96BFF4880B437DF64'
/ 18/     ]) >>
/ 19/   ] >>,
/ 20/   / manifest / 3: << {
/ 21/     / manifest-version / 1: 1,
/ 22/     / manifest-sequence-number / 2: 1,
/ 23/     / common / 3: << {
/ 24/       / components / 2: [
/ 25/         ['decrypted-firmware']
/ 26/       ]
/ 27/     } >>,
/ 28/     / install / 20: << [
/ 29/       / directive-set-component-index / 12, 0
/ 30/         / ['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/           / payload: / 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: h'73024F415AA51529A66CCEFD88F3F62A
/ 53/                               734492FF45F6AD37FD2888E73EAF19DA\
                                                                   ',
/ 54/                   / y / -3: h'4005B48A6FD091AA6ABFE3CFBEEDE88B
/ 55/                               347E521D43405FDBD7D2CFF0EBC21B26'
/ 56/                 },
/ 57/                 / kid / 4: 'kid-2'
/ 58/               },
/ 59/               / payload: /
/ 60/               h'\
                    A06B8E6550F308712B1DF044B21B7D11D9B22792F1DE0997'
/ 61/                 / CEK encrypted with KEK /
/ 62/             ]
/ 63/           ]
/ 64/         ]) >>
/ 65/       },
/ 66/       / directive-write / 18, 15
/ 67/         / consumes the SUIT_Encryption_Info above /
/ 68/     ] >>
/ 69/   } >>
/ 70/ })
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA2025873825824822F58201DB69EF1477E9942815F29F78E09957B26
B4ADD03902BDB3D1EDF3DA2075F593584AD28443A10126A0F65840CB4EAD
A6BEC17EEB22EB836FB2BF9136A6EF733C11DAC955F543BBDCAA373B8593
21BC77969917E4C70F049527607F4C32752D53E01346E96BFF4880B437DF
640358E8A4010102010357A1028181526465637279707465642D6669726D
776172651458C7860C0014A212582E758C4B7BBAE2C4C1D462423E0F0DC3
164FFA7B85BB94D4BD6D7ED26AB32FEB063385D4D3465927EC82CB5E198A
5913588CD8608443A10101A1054CF14AAB9D81D51F7AD943FE87F6818344
A101381CA220A40102200121582073024F415AA51529A66CCEFD88F3F62A
734492FF45F6AD37FD2888E73EAF19DA2258204005B48A6FD091AA6ABFE3
CFBEEDE88B347E521D43405FDBD7D2CFF0EBC21B2604456B69642D325818
A06B8E6550F308712B1DF044B21B7D11D9B22792F1DE0997120F
]]></artwork></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><artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'A00CB6C85515C1EF471B50B542FACDD8
/  6/                           8B71B3C7EA2A43DE13D32C4A99056FE9'
/  7/     ] >>,
/  8/     << / COSE_Sign1_Tagged / 18([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: -7 / ES256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / signature: / h'421B30FE76DA848616D72FC1115EA610
/ 15/                        5578CB95DF9C6BEAD931105C9D555CF8
/ 16/                        CD38C8FD68ACE43445D8D2CAE6391A99
/ 17/                        5A212487D92F8DAD789F65511AC61778'
/ 18/     ]) >>
/ 19/   ] >>,
/ 20/   / manifest / 3: << {
/ 21/     / manifest-version / 1: 1,
/ 22/     / manifest-sequence-number / 2: 1,
/ 23/     / common / 3: << {
/ 24/       / dependencies / 1: {
/ 25/         / component-index / 1: {
/ 26/           / dependency-prefix / 1: [
/ 27/              'dependency-manifest.suit'
/ 28/           ]
/ 29/         }
/ 30/       },
/ 31/       / components / 2: [
/ 32/         ['decrypted-firmware']
/ 33/       ]
/ 34/     } >>,
/ 35/     / manifest-component-id / 5: [
/ 36/       'dependent-manifest.suit'
/ 37/     ],
/ 38/     / install / 20: << [
/ 39/       / NOTE: set SUIT_Encryption_Info /
/ 40/       / directive-set-component-index / 12, 0
/ 41/         / ['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/           / payload: / 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: h'73024F415AA51529A66CCEFD88F3F62A
/ 64/                               734492FF45F6AD37FD2888E73EAF19DA\
                                                                   ',
/ 65/                   / y / -3: h'4005B48A6FD091AA6ABFE3CFBEEDE88B
/ 66/                               347E521D43405FDBD7D2CFF0EBC21B26'
/ 67/                 },
/ 68/                 / kid / 4: 'kid-2'
/ 69/               },
/ 70/               / payload: /
/ 71/               h'\
                    A06B8E6550F308712B1DF044B21B7D11D9B22792F1DE0997'
/ 72/                 / CEK encrypted with KEK /
/ 73/             ]
/ 74/           ]
/ 75/         ]) >>
/ 76/       },
/ 77/ 
/ 78/       / NOTE: call dependency-manifest /
/ 79/       / directive-set-component-index / 12, 1
/ 80/         / ['dependenty-manifest.suit'] /,
/ 81/       / directive-override-parameters / 20, {
/ 82/         / parameter-image-digest / 3: << [
/ 83/           / algorithm-id / -16 / SHA256 /,
/ 84/           / digest-bytes / h'4B15C90FBD776A820E7E733DF040D90B
/ 85/                              356B5C75982ECAECE8673818179BDF16'
/ 86/         ] >>,
/ 87/         / parameter-image-size / 14: 247,
/ 88/         / parameter-uri / 21: "#dependency-manifest"
/ 89/       },
/ 90/       / directive-fetch / 21, 15,
/ 91/       / condition-dependency-integrity / 7, 15,
/ 92/       / directive-process-dependency / 11, 15
/ 93/     ] >>
/ 94/   } >>,
/ 95/   "#dependency-manifest": <<
/ 96/     / SUIT_Envelope_Tagged / 107({
/ 97/       / authentication-wrapper / 2: << [
/ 98/         << [
/ 99/           / digest-algorithm-id: / -16 / SHA256 /,
/100/           / digest-bytes: / h'4B15C90FBD776A820E7E733DF040D90B
/101/                               356B5C75982ECAECE8673818179BDF16'
/102/         ] >>,
/103/         << / COSE_Sign1_Tagged / 18([
/104/           / protected: / << {
/105/             / algorithm-id / 1: -7 / ES256 /
/106/           } >>,
/107/           / unprotected: / {},
/108/           / payload: / null,
/109/           / signature: / h'2B1B9C4E44E52863A78F73DA2A935823
/110/                            B28AEAE6A85CADAC4C4E3AABAAD56CBC
/111/                            E5A47D288F86B54D0186657E972E748B
/112/                            48CDB1D420FBAC1285DCC978382F62CC'
/113/         ]) >>
/114/       ] >>,
/115/       / manifest / 3: << {
/116/         / manifest-version / 1: 1,
/117/         / manifest-sequence-number / 2: 1,
/118/         / common / 3: << {
/119/           / components / 2: [
/120/             ['decrypted-firmware']
/121/           ],
/122/           / shared-sequence / 4: << [
/123/             / directive-set-componnt-index / 12, 0
/124/               / ['decrypted-firmware'] /,
/125/             / directive-override-parameters / 20, {
/126/               / parameter-image-digest / 3: << [
/127/                 / algorithm-id / -16 / SHA256 /,
/128/                 / digest-bytes /
/129/                   h'36921488FE6680712F734E11F58D87EE
/130/                     B66D4B21A8A1AD3441060814DA16D50F'
/131/               ] >>,
/132/               / parameter-image-size / 14: 30
/133/             }
/134/           ] >>
/135/         } >>,
/136/         / manifest-component-id / 5: [
/137/           'dependency-manifest.suit'
/138/         ],
/139/         / validate / 7: << [
/140/           / condition-image-match / 3, 15
/141/         ] >>,
/142/         / install / 20: << [
/143/           / directive-set-component-index / 12, 0
/144/             / ['decrypted-firmware'] /,
/145/           / directive-write / 18, 15
/146/             / consumes the SUIT_Encryption_Info in dependent /,
/147/           / condition-image-match / 3, 15
/148/             / check the integrity of the decrypted payload /
/149/         ] >>
/150/       } >>
/151/     })
/152/   >>
/153/ })
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA3025873825824822F5820A00CB6C85515C1EF471B50B542FACDD88B
71B3C7EA2A43DE13D32C4A99056FE9584AD28443A10126A0F65840421B30
FE76DA848616D72FC1115EA6105578CB95DF9C6BEAD931105C9D555CF8CD
38C8FD68ACE43445D8D2CAE6391A995A212487D92F8DAD789F65511AC617
780359016CA501010201035837A201A101A101815818646570656E64656E
63792D6D616E69666573742E73756974028181526465637279707465642D
6669726D77617265058157646570656E64656E742D6D616E69666573742E
737569741459010F8E0C0014A212582E758C4B7BBAE2C4C1D462423E0F0D
C3164FFA7B85BB94D4BD6D7ED26AB32FEB063385D4D3465927EC82CB5E19
8A5913588CD8608443A10101A1054CF14AAB9D81D51F7AD943FE87F68183
44A101381CA220A40102200121582073024F415AA51529A66CCEFD88F3F6
2A734492FF45F6AD37FD2888E73EAF19DA2258204005B48A6FD091AA6ABF
E3CFBEEDE88B347E521D43405FDBD7D2CFF0EBC21B2604456B69642D3258
18A06B8E6550F308712B1DF044B21B7D11D9B22792F1DE09970C0114A303
5824822F58204B15C90FBD776A820E7E733DF040D90B356B5C75982ECAEC
E8673818179BDF160E18F7157423646570656E64656E63792D6D616E6966
657374150F070F0B0F7423646570656E64656E63792D6D616E6966657374
58F7D86BA2025873825824822F58204B15C90FBD776A820E7E733DF040D9
0B356B5C75982ECAECE8673818179BDF16584AD28443A10126A0F658402B
1B9C4E44E52863A78F73DA2A935823B28AEAE6A85CADAC4C4E3AABAAD56C
BCE5A47D288F86B54D0186657E972E748B48CDB1D420FBAC1285DCC97838
2F62CC03587BA601010201035849A2028181526465637279707465642D66
69726D7761726504582F840C0014A2035824822F582036921488FE668071
2F734E11F58D87EEB66D4B21A8A1AD3441060814DA16D50F0E181E058158
18646570656E64656E63792D6D616E69666573742E73756974074382030F
1447860C00120F030F
]]></artwork></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.
In either case, it is essential to explicitly consider these
third parties in the software supply chain when binary analysis
is required.</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 significant portion of this document addresses content key
distribution, employing two methods: AES Key Wrap (AES-KW) and
Ephemeral-Static Diffie-Hellman (ES-DH). The table below
summarizes the main properties related to their deployment:</t>

<texttable>
      <ttcol align='left'>Number ofLong-TermKeys</ttcol>
      <ttcol align='left'>Number ofContentEncryptionKeys (CEKs)</ttcol>
      <ttcol align='left'>Use Case</ttcol>
      <ttcol align='left'>Recommended?</ttcol>
      <c>Same key<br />for all<br />devices</c>
      <c>Single<br />CEK per<br />payload<br />shared<br />with all<br />devies</c>
      <c>Legacy<br />Usage</c>
      <c>No, bad<br />practice</c>
      <c>One key<br />per device</c>
      <c>Single<br />CEK per<br />payload<br />shared<br />with all<br />devies</c>
      <c>Efficient<br />Payload<br />Distribution</c>
      <c>Yes</c>
      <c>One Key<br />per device</c>
      <c>One CEK<br />per payload<br />encryption<br />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 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 payload 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>

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

<t>IANA is asked to add the following value to the SUIT Parameters
registry 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='Normative References' anchor="sec-normative-references">



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

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

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

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

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


<reference anchor="I-D.ietf-suit-manifest">
   <front>
      <title>A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>
      <author fullname="Brendan Moran" initials="B." surname="Moran">
         <organization>Arm Limited</organization>
      </author>
      <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
      <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname="Koen Zandberg" initials="K." surname="Zandberg">
         <organization>Inria</organization>
      </author>
      <author fullname="Øyvind Rønningstad" initials="O." surname="Rønningstad">
         <organization>Nordic Semiconductor</organization>
      </author>
      <date day="21" month="October" year="2024"/>
      <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 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-28"/>
   
</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="21" month="October" year="2024"/>
      <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-08"/>
   
</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="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="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="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="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>


<?line 2182?>

<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, Øyvind Rønningstad, Dave Thaler, Laurence
Lundblade, Christian Amsüss, Ruud Derwig, Martin Thomson and Carsten Bormann for their review feedback. Finally,
we would like to thank Dick Brooks for making us aware of the challenges encryption imposes on
binary analysis.</t>

<t>Reviews from the IESG include Deb Cooley and Roman Danyliw.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+2923LjVpYo+M4I/QMifWJSKpMU7gTU7e7GjU5VXp3KtMvl
znBAJCShRBI0QEopZ2bHeZ73iZj5k3mYt/Mn50tmrbUv2ABBUspKV7u7it3l
FImNfV173S+DweCgt8pXs+xESxaT8m65yqbaq/RuVqTTSssX2tnb0zfa83SR
X2TVqjropefnZXZz39bTYrJI59D5tEwvVoM8W10MqnW+Glzk5fw2LbNBxvrJ
i8XANA56k3SVXRbl3YlWraYHvYNevixPtFW5rlamrvu6CTMos/REO8sm6zJf
3R30bovy+rIs1ssTGv6gd53dwW/TE+10scrKRbYaxDg69lat0sX053RWLGBO
dxnMcJmfHPQ0rbyYZNNqdTcTv2vaqpiof+eLabZYyV+qolyV2UVV/3A3b35f
lfmkbj8p5nN4v36eL2b5Qhkte78azPJqNYCOzosZNBwUf/gaH8EmztPlMl9c
qvP5eZbdZNjMxoWl69VVUeJSBvicPmznn6SLRVZpb6rJVXGRLfJL+bwoocO3
i/wmKyvYSa240ILlcpbDmZ5NcjgYeC0sFovB66ssXwzO8qx+V4DBk0H4+kz+
ms3TfCaGHNZD/tvl/P0QDgJnqkwwX8D0Xw+1J8W6mmV3rYm/XlfVxiOYM0DX
rykCzIn2fX6ZzyQo9LVnz6KNGTbbtKd6xfr/txtsVWWTIZxTc5Y0yXCoPS/K
dCF+ZDMMy2wxTRfNR80ZBuVce5bPc7googEfmb88pJf/LS3nW4aOh9C0uG0N
Hac3+bT5oDnws3yRlkVrzCm+NTzHt/5tRg2G8FbHoE+H2pv0Or1L52lz3KfZ
YuNJc+CzJHr5XIteDuE43sTD1gyus8Vwxd8fIjoA0IAHYu2LopxDPzcZXcrX
48g0DF/8bVm+Lf72dcdU/rbE354xYm1OB/GwRjdzjpLkK7bjdzQjPDOYFjAl
2AVCP4uL9pR8vZ6Sb5hySp5vjcTfjltPzzE9Xf7tuezdPF2kNOYJ26D6/tZX
U6AvLaiq/HIB1/LFen4Ol1ULqLUEZ47AT4MXQRMDa6+zS0ApJW83BeR6opm6
afH30vIyAxT1Joxpfi9f7ZjND/l1vsymedoY83W2WpeLwcsS8AURg7K4LNP5
HJCVOqbuDnVruDny1Wq1rE6OjwEqbkX/CJLH+O2Yd17wzn9eNjs/e+Xp+sBx
d0z6xenZm9Z8GSKeErRqcLhAv/Jy8ENeZQDcd1oCJOIc8PAVYmvAg1fZHNDg
2wrG1OK8mpTZKtOeFZcpbP/VXIuQeOGslleAf3A47WyZTfJ0pr1aQz8TNg6b
aADD3+QV/mCpuxMsS0BRpm54m7sDm7O4mS3X59VwAUc5vCxujvEP/OWYD6WM
VB3jHIZnr4Z8yNIaLqcXCMqDwQCQIkBDOiFE/OYqr5C2rGmlFXZ1kcNaV9nk
apH/soY/cXsEgYb1V8XFCol2XxPku3/Qm6eTKyBk2ixLywW2mhdToEt9DSit
tgRoLRbpjGMHXG+qnd9p61UOv2Hr1VWmnSZvxgc9glxxUYd0GOllmWU0PZgq
nD5gL4AxeD9b4rmU6WwAx7XKJ9phcnZ00IvzC1jC4Ek2m0FH2mH85IimESRn
1N8PcE7aIXwbPP3haKjBv/ETbV3BSpe0hYCe4KpMlDPVbq/yWaaxV1jTFGaS
DaorWP4UXxgKXggXCDQUVgRsxQxQCNJ0nHk6AaBbIlDBG7cAN8ANLG5gWTnu
DXIO8wy5BexNU0cfinOb59PpLMNvX2mIF8piup7g6/jT9+vZAvbiHLZ0hQcI
fJhEHTAfOOfFZaUdnhZvjrQpACDS9av0JtOu8surGfwPLy6ewyKDP/DMU63M
Zjncg4y2r0LimclD19ZLhFttDoACx1XN+1pWMUic3dH7sDyEsxxxFh8RCEqB
RwjQtap7yufpZQawgqM3zl9jaFe7TSvsIZsVgBu0Dx+60fqnT0ONwJm/xUEF
z+p8vYCdw32APU4R/vqwQZPZeiqgb8n4V21WsCsEkItc0ISWz2fPoDllO4G8
0i2cDwA3HdCHD5wSfPqkFesVsnUV3094tUrLO02SEQARFY63rXsIJ6il02lO
b6zkzuGc00ukTiu8Z3BhOYK5yVNtCjzMCuEJiEUKmBNmAWcxxylcZoQeEeT4
CxO4pXzj+aZN4Maks6qAvbrI6AwvcmR54VhhxbRSBdDhDiAE40LzEi56WiLs
qXubrlbp5BoQAKCLspjjLYCptHZ9qAWiGYy7Au6izH5Z5yXu/AoYA7xii+IW
/r2kQ4QDRb4FcG21nlxpKR5xE5r6uF2zdL2Ax9AGx7xYz/hsAAzHsCe4fynw
t30YrUFiNIXEaIdAEI8A5uAfOFk+r4qvA0fBdYjpIHzUsgyc5zU0vQVYwZ6y
98tZkcNm4dHQoS1WcFXmBa4TcdZkPYMzD7O7grqpAMj4PrWOgSMYPqwGfWaz
i74KHjteqop1Ocno6LXDbHg5xONiL6QVbS/csoVoJrD9ESzmjkHGuQrTBJUE
BBr+U0IP2eISgD+jyeOGlNlSYioxCXFaBFA/EHbFn/NFjrOFPQFeqybOqwaR
QmwgT7vebQbGa7aExnVCRFfh9sNsEMkVsHiYqlbAC6VWTTLYxbyo+OHitBFr
X9IVxwW0N1LsM47JAZDYxIHcLQDsyTUhNfy1i/7RA+r4cl0qP+OA+GgLQR0y
mr3mlxbw+1x7xG/RI6QysP6pdpkBKQD4QkwMqwWJFNYJf8AP+Bpu0flfYAWi
uxr9QQ+ZlOnXdE9ThTTBhFd4BAqMA7XqI32EbUDcAcCRCeaJCArI5JdX2g3u
8LqqqUXFcbU81Wl2wVDmbSGHQUo4RdY1P1+zC5UBdzdlLAmeNJFRwTw0D52f
SCJ5hLOaR9A6WAS5891sgtgoADzEujQPoo+IXwFlKnvUYAZvJWwD1cB7TdxD
d2sa5OW6hL1AFKGl+bxi5we3h3WyIN4fIfxeeySOtXVLyuwcqRGwsWklwL2E
W8/Zhzs4xdVtBkgA0RK0Rh64QZ8A0VcwjRz4GeLMGNcpN+mygDtMNx1OmPOU
nOLklULIxPwq7RzuojZlCA/48sGqGMA/GrAPi2pZlCvtkKgHbkFjsdVdtcrm
Ag0zOs24vRQREkz19gqR2apAPq1YKM2GWrTJoHDyk8HCCmAw/wSUHngcIMOv
ZikcweGfTl8hpAgAgDVm77ENzpsw6hSowwTROs33YpZWV9AYcPydBtcc8c0K
LoCGq6adX+HmF9rr4PkQBTaBpSvJdAAVm1wDAiunpCk7Bxw97cNKBtBqcAED
TTN5FxnXBbPg6wW8rs5A3FPE5DWBlYw9MXnwIv7d4s2wJxgSUNKS93ieXSDd
4qsvFqi/uUUCAIPgz0s83vvNeoUkBXjjjJFCFM0QUNhZXayRhwHecgHbNmHb
3MTG/KCHjC+OJE9d0YLeAIbMF8WsuLwT0Ik3BlWDlfbo+duzN4/67F/txUv6
+3Xy3dvT10mMf589CZ49k3+IFmdPXr59Bs8PevzP+tXo5fPnyYuYvQ2/aq2f
ngc/PmJswqOXr96cvnwRPHvElpozRSlDhrjztC3sai5R3pxqxAWD8Jmfs7MN
o1f/x+K8Wv6TYWvEfqKeBJgU+ht1IJ8+HfQQ/tmIxWJ2p7GvsLN3yOACccGO
kC5M0iXyjcjkwp29Km4XGiKK4aaQmFbVGsXhi3QO2CJlnPB2RLyDX4cdlLyv
yhwTrdMUjpotQLZNS4BERCAokLBmOq68xtLFbFbcElCTAjBPOUSUGaOQfMvl
ooha/EHB+4Dz+5wmUWsaBXVPsL+HDfITkNBJ7w4U1hi7OnyaPD1SX8V2EUPc
G20j2Rb1RqztvamX2AXxYlDz+TB/ZSg25aoqQFDDRzHK4kDlgpgWkbxnGC9v
YDyxrchuAHAAZgY8xli7Sb5EppmJkqvG1s+zFDkXvrVn9BaaDFYIMIAFV9QT
XlOF5xASAb7yWvTefAsGzfKbbOuLB72Ay0zIABE+yrmwnClcUwcdeaQdwsnK
B0UJK2/wTzhgPRGUSZiMJ/cBCYikaiC/keQPZBJIGHD71NsCSB97fxs1QxEW
LiZhQ6IWKN3MkIMoAcGS8HLQ44xum//t6i/LifDU01X1HJwhr0+SoJuUInAD
iPnONIBj9nubHWLqNkFYcuShgV4vqhzFZiJHwGOsWuIeXKwCjg824qCHk2pt
IXKGoucKiVWfqaDep8hu9BErplIdUIJsn8+mpAxsC4GtWUoc0rVH+BIQCWSa
tbKYoariFIWgeQZoOUNuYM4FXaTN1ILeqTLghegm5Sq7BNxcRX0RvORor8HR
kYziWVQcAxO5G5DOIZtyChY0kNtXiOs+1QoGwnNNBUMDG16oAIz7LlksHL+W
iJgwvhBbA3ApVTSSkANzIg6KS0yb/CQtm4T0NkOfvV/R9SZQb8wRBqvWS2Lr
VPAFupPPZmtkyVYC6eJ7A5CRBG4vxBuogBPQlNMtA4GUMQXY/yZYMZmfwS+7
KqTo7ULYc5gDQhl2wmmnvBN9zssTCkRVWVsVIAd8rOoT+ebUP1CvqAxIa1yM
kASMZcagHmdwUawXU8EKqT3/aejovjbJyhVjrTkZRCsDqsFwqS1VDwM/Idaq
IqyCvMTKSTuFKmqhqkyZ9RV6mSC4EFONc5JEnqlmsU+m0+pQRMGNQtXN8yCS
gipuay1UKHNKW/pQMTGucBXySRNzifvNToepFnDybRzJYR7EVYTsCqWYO4ao
uKaThK+GNq6JvtINrI83mYkO6wWBDSGxkpjkxqC0kAnQyPS8QDivOacOrMQw
4TRDBbiUp+qXuTwFL07WVUXbAqS3lulLwIIgdyzX5bJoU4uWICbUiekUdTjA
0yF6mxUSb6+uGnveiUEFduXSFa2fFN+oNEq1Mq+uOTJQBkFAB0yB5gj+tiDo
TVyu1fIf9c+VXkyIA1kmQ11aX20gQSa9yC7XIIkgB82XKdEzVwjii6SnIHXO
BG4d8gggHZP+lLjxuyVXqJwz/RwB2gQoEO4rcb0NQZcJwy8KtOwwLoCxzdOa
9KOgs16I+6lu7z3oFQrWpJBnl10SRxXUUKmvrZeEsRuXlTBac3uFBN0xlFQD
MQPAkzdvXp2BXAMSU/DqlJb5H//xH1qaVjdokPt6ID/ot/BR02J2Hvjnrs/m
i5pm0JOP/ww/bX8RWjJTKPwpXpRPdo3aGlH9uvtF1rn0ImiMt/MV4Sajff05
LwuD7sPfvXnA8pR2Ww4R/ifXUVuZ6UGswo88DZNNEo9xsOVD7c4YwGkPO8iO
CbfX2rFj4qfhcNj+qdmqo6/2fojJLup1tua/cTHgygBLd6J9JTgcZpv+5lHQ
5uY2riXgm02/q+GjT0yV3kQhIEdnl0BmKhX1l4gYqo0rj3w8al+ZppmwHtAN
YuVJhjOGIJEtQSoU7Hz08iz5ORH8GOCU19mAbBv8+fNaFfumORDaBFC8rDb7
gTZrtvh8sYm1VqTNgzGq1jNE7ArrCiiLC3vbOq+I8qLyQ+N+FahRRWUgbgMx
a4D7GXHXJleA+rPFJSDzUm5Bc/mzFWfrkfHBKXHBSkxRVbzepLN8WotFCocU
VGR2rdazVb99OpKikU0SmWjkU5iJ8VaxmZ9yRiGvpFVnsy8ihAqkkFBbcJvt
erKqGSEpM/S1DMSbCXrBzNAUxMV86GMuZ0PaR3z1Mr+RDy/WqF8qUAafaSRH
tDjzuJ5YpVBakO5QJ6Q1HARRjYWGERgRZoaka4aOElwzTvK30JxmaFPLOWfA
JFRpsER3j0vmTyfPAP8mLTgj4IxlR9MRcoiCrss7WTacSComr5wxBlazh9bQ
GOFkpA4LlgmycU7CP8qQOfADzPgKozCNF1rKOMzRya1LEibJXzFF+yqySYh2
cA6nxZu2MZ4xHSbM/LYYPEvvYKclema4teMqMsYX4U4FI8am4GGVZEPfuEpr
acQF8RgZ7sXkTnAMDb3ZDucqabHn6nSppqmk2TtlEHOVkaAnzcogmTD9iLw7
GrSS3FefGhBfqVxAwU9JDwfeQNqkhIGgFikqWDyCGjSYzhpLBc6ZW7KHmjBg
5jRvZNGRGXtP3oj5ijHATIGdVdJ7QPDpAAoK1mVm91qRsLrC48HRUAVUbVKE
ouQ3vnmqMJUZ8zjE6W8g/z7J/tzoDnej0M5hnMlVVm30hFY9Uh1zc3oqO2bv
kydO7R6UcpcEFEfIPK1gZUVgugVRHxUHGef7eV/T2ubN+FKOTGFm8JRkWLhz
U5SXZ3fM4rwShGxSlGh7UXQ/jPFWVPAMqqcqukmnxZJNAU5hMKNLU5OVJWw8
bAvpR8Rb2RYzKKMoxRo1lA06WEPgtMYACClEdASoSPDkhjl4WFv7usFcmKxr
01YTcrlGSVFyJKiUqejVD1/V+oZPUsvfstYpF5LQQybeF5uO+vifX9WKC0lh
pRhKLeop/Hy6uCgUQnxI2tWSwSmaHhBLyJmpnuFoIUBfTMAp9XPSDR0J2l0J
x4du06hiYyD5FFV7qLqqBLHeM1diiYTjDk2E6ZO4TeCgx9WjdJQfPpDCSNgL
mEaVmXiRN0m1KHlKcuENzABJOlctrbJlJRR8fBS+INwM6A4dk4hYo9H0oLfX
ENywGTGTLKNS9z0iVDqkQAe4Mgh64RrlFW4hHRgzewJnMBAkY6Bos2D5rVZV
tlIbcJsMMwc9ikUz7QdAlNkjZi+rf42K5d2jBqUOFi1bNG0LHjbdwaLLEk3c
lNBDriQermfFUEjbNM5vHNMGcze33ft/A0gQ6C5jSVOhniAEWPM6YiKEaZF4
cYjEKQmvzKnoktvNuoR1ppIUGlBu7+XUtRKjZNMh80cnhE171TKE02VELvpy
tuM+8Y6Jvl1ls2V10OO+CswKnf+aCf0A8+xUMcXx8Tfa4b7bjsLTN/+iocOq
Npycw3Z3wSoZqHZ3pX2DDs6Gr0heDSQixK8ojp81sIEyY4k8ubAFrJ2WAJtS
lI8rDVU92iGNcXRCejvg8te1CLdvpfIRU+0QVTN8qWsEtINKvCnrVSB2UrGj
FU/cjQofHPSeAPPwv//n/0MmMrgYgLLwTYzwYPLjXbEuKdjkZAvir5X3qkVP
3l/h79S6qfw862uOrm8ZbMfbiuF3rt1rYGkJ3Qe987v2NolGjNvcvYfD9pwQ
T2xMaQI/7pmRcN9F2gxXUZ2jtjlF5ig3qBvfe64JU9pVtc8H3vZ6k5v0hpS7
aAqbsAE4xZdmj4NeitNE+1nA2YpVJhSDGjfe1RZuqXceZyvk6gDF0n5NFVDi
Dl3SCvHhA+9uwAgdbSZa55mXE5pH+XDSkMN5oIMeAxDZO0E5eRl09Utww20+
8LC5dwgUpEod4BpEW8V2xMC2BZuc4G8YjJtnuwF5/VooYx4YV4+TwBgOh1ES
PyZuhA5BqF9RHS812LWItIfAEguEoVbsDmyFGuh/mA37MIfYc2EOxlh/zGwE
TGVA9j7pc84XCJOsuN5EegXVwPqVXmPoY203GT/WTL2vfUCsfLy5U/Cb4Z00
9qffbtpGyscMKZ80VnTQQ8cQdTJ0xNR/XzMcBYXfAzIEYueXjYBOHEsm8GcX
2vocJP9F8fs+wGeXbwfc430eIgvD2B9xN2nlG9eA/ObXzHEOW7x9fQqQMmUe
JASWzQWCoMbAUXvEI1R4/xjFdSz7H4IQ+Gjr3SMmCDDMFBAB/oBXjHuhbQCq
MSRmldvwVHchfgnvc8lKXAuyzntvWQMk+3Kma0Y3UHLYJBytCUuJruN2IkA0
90AumtRw++4nMtCy1QDDUt/jBTHhgvQ/+ybDmeIj4+QeZ9rfvKYXREmwA7ym
/ftOWP/8Cd8Ln2xgoQ2KDb2bJ5qxuSK8YvT0QXiH3voMtIPv/T5Yyze1tZv7
IdZ3l7smoOQ8uWIXlkcQUPgIKpvJIQPjOLnfSB3msuEUIDyM0CugFb8gNdoH
vcM3NAnS+C1RxyFU2rT0pqfDgEflNJ0nsgXzF2LyMqkK0i2aehWfADalJpGw
DQyPNLFB5JiL0Sj3c7QQw9QIl05mhWEfaYkadcQjk6xcMPcK+JovUcoWWqXO
TrEXxEnCPYazi585KcnQyNMVs6XYkLR7T2pe8iqtrqRLWQ0yMPoxeqO3WRON
/G7JyxUVu0JDkWE8obBmnGUbAE4KvgE/PAW4FQX8Qc8b2kNv6JJ1flu42D2V
MQ0FyoY2BvVCMlRsKFS67M2GqmavpqB2YaZmyKqr9tRN59ZqfT7gupx6lveK
oDghXdVmnAMByobXadvhlOuymN6bDuuOB9MInQe5xknGmgPVDLiqkt16ovJC
GYHIAW0LfaFAY7OguMxbdCKZXAF+EqFAWY4Ah5rUMkspnqK2FJbXhN2m6R07
iDv2fpXNmGNS3cMc50EKeqZrp+0UcX1L0viwUDaKCoENLDriJOjAwvscrfS3
JztK8rTiaLWE7ov57O6gRzE75AZIGP5yDUtkPn44adZOKIR5W877MHdv3xqh
66+4UQxIOF4gqzB6RTE3/w7uD61pyKIgqaq19H0Rt6P6QGrFsnamlveFzboG
TcD90kFJ8kwYAZeyw0J/JNbPieRvNG2AnqY/vQb+4ewdY9gqpolCB9SW71et
6n5tsFNCZdGq9s47G7Iuo+4uo80uWUeNF/9A78EJPJVfpBM5R9NcS4b9UdQs
+86m85ShFT4Oc6UDdo/bXH/NpqpNhNzmLoETWPAlsD7OyEWfnP1S4jAJh/I5
Ji+iQ4lX+9r1kbJGBQlzVF9jYJwKj5gnoL0e8kMADLQdBUmP9xpzfPiK68DZ
q19tBCYjXGzBNbPLggLo+xuhDYrPfJ8EWA5DivunuDqavDmagpkVuwxzrT/o
cUfGZtz2Rlv0AGXAjChJidEWUWfkaizwVBvN1RZgb+gMTWEAJr98ToSVNu7Q
HBrQhvg9TGDBDKIq6eR0qaV/F9bYf/9ZMfgISeegJ/2xGVndFYdcO3XXi+7s
tY/+1UBwaoEK1sZac5mr37TCwMxVkY8zgLC9tScvutdR/LkSUo13iilOVKAR
Tr7SlV660R30+B2D6VBXGcLfUpjT0lU7Sk36PPLpHPTItRC9KGdFxbwwSACD
X3OEOux/UqxnUwxrQkdKvMGUw6BeHcFWvkJYlTZqMn+SI6WIIW2EekpGu7GJ
isBKoHdXbYi7qOJvXgaFg2vMQFi3RJQ0mR3FpaNpnX4/1JIb8hki/0eVQQVG
H+R+MQ8Rf8T5QqkeayGZhlyO5kCUbjOgWmjtlOyl6kkwZGwuYaWm9RCxSVzT
nZeMXvBt4+Y4tI+TXb5NndoxOjX+UQIjJYDCK1yljT7Ks5mKlg9rK40IoQaO
U+NBzSwM6u6I4fj6MUANuzKcOmy7V81L07j47EZyasYi7VAr29TJE6Op0lD4
GEOu1ZVEiz8wh9q3HFuy+0m/WkMiI/BDH9844j/b7Gfp9cywKCcSzNe/ve3s
yJFXmhEfBNemBF59ShY66W6AvkfEiQjHebYmvGdCGSJcnCS6pwQUi2kdzsDD
mZVzEleMq3jw8EnvJVAOna3SnkKWak8LaMaiqhc1K7T11CrKQFbLLUAememu
wQ5wugX7iD4EOxB2G3G2MQvfnoo5JCxL9H/gOToYv1A7UzGccg6nfJGvpNO4
dGTIK4k5u4O+uQFyknEWgTFKMoyZmYMXBYE7mSEuxOzgPMuiqhqRPE8ySrBQ
8ztoIZQnwLADOyhkylHfCNLrOp1Rfy3zDM6DkHpBdEg4fYO8eb7iXGXN4PC7
Q1LYKr2GLeIESESvlVnz0sCd6bgbcGFon/NvDBx3UbuIfuANUnIfra/b67y+
b+Y5PVQvF39+VHf0if0Jl3DHdRvQcliWjfqqcSivYZgkixbsENwgj9HJdHIH
LBU+VBgjcrwoBDwhI7IgonDJrMVEOlXvHxG0Pc9XzfAjCVfo5IjKMgZN7B4t
mq5BDOIBINaUgogtQZUN+ui2y/dzwZhyFAB4c9yFBu6URnGORLW9KNTYd+7G
rnM32Lmr4NR8PlHhgj/qAA9jKtupYNFshCD6SWHegXuP42eSuUB7tlAUcq5V
pA1pWOAm0+lskGbV9S0pRrL5cnX3c1H+XIFsjKkrsunPcyCeeMDojJeV7Csy
wBIpbgTMMsa31mB/0/xg3HRyoj3+98ca+XSS5o6gBg4NVaDeyDe11kvf9Hpd
mv6fYXGwtm+0r9yh7x7+BHtTByRp2gm61MCk67n/LB/3oe16UbfuaKs8xtYK
ywKtyTvhWFvkM3ymQDI8+0n7mnE78mc+0Xe9d0e93vZJwUq2nMHmS+rkv1GO
p9frHPobbXN3mIcFemxoOqxFcbhgs4DeNrep7piPiY9pRgRIW3aKf/6pi9DB
Fei96/XkmDDXD596vT0Dad/0PrALg84iObKlbISa2WUZA0BMK6Hhv2q28Crp
s4b1Y5WgKaKiJMP/vhEk8JCPXAj08gdtlp5nM5wJad4rmkntYbcsYCW9T4rZ
ob6jDXeVWoZjiRa2iu/MtvCiEYAsJNmWLK7cYyGtmiCtWiSvaqpwLkNEiZ/i
EY6K6YZGQh8oypOCV3uQL24KEfaUVrnkExgfWEMYO2xNFRq6OOicUnzdrQgV
kXgOU/w1KwsNffZXV8N7aTX2aT0/fMX8+bbpOe6pNWWzVQJBFeGpokSDuAsp
OpciE9wI3KgdCrZHmQrBqELfWPQKQRUel3xlShYa55+0Zl4l8oRlLKhwFVJ1
G2iQVpUbTkO5IaXZptsgmtgQInHkW8zIdQc9c0mLOajrJ8KQULX9auvgU3Fy
XTkTOMcr3uXmKek2IwK0ZzyPHh/WIBegSlyBXdqptqTdobNlPDKb69awYgDl
nPyw8pQpt7lZvLYON2NeWUgtikhKIiUApCdP4zG/6KRuxm650+PFeqF6duaV
4tSsSpzzc9IscxU7l5CF4h3772uKWy56FmlJFD8ZwEZ9LdVFQe3u0+EoVE2v
EFVdTuYD3ooDSbBgpgKCS+ltxeeioCGUuDF3hRyXzatOHcDSRzaPT3E2J+AW
gJwrUewd6T/2qhtUFpnbLThLSy5bG+oHFs1e50phNxreVuQfFht7m97BHf9l
nS+XNbwzJ8yB8MnjV/x4SSfNMtgs07zkEP0D10MzZlew31UdIr9Vvd+UoGlu
mFqj1mJsWAr6Iq1H3UaRdJWrwnA5v5U8SBV3Tw5HQd78cu5Qj/Ce+5jJhpKM
3UNUlv3UO/iU1CkFv4RS4dBnk9oxvFChpu1G//5zvligjr5uzE3gJWn9amET
cLRMVSpj/9Ezs2Y6OIeuQEcTsdfY9W8k0Nav1lIJpz90UxsC7udJuB0CLkXR
LVLhINit4hSXpJb2WDBP83b1Fa+bXFHpyHC2DskXAA2zRJLQKwVXDnBoAmte
ykY0gXCyqqPtVMuLcFXnia7gpikb8XPekOpweMys1bgs2utcyXujLF1I05xp
UETktoRM7Nk5mrlqsqXEsgmZRTljTlk5gJG/PKnHmOTMrXh/hfB8PxjjwvRe
afre4vQeeZpD7H3kaU6bvt6Qq5tBIsS2I0EkCviSqIbquatyy6pWUeiwpHi9
RSBkuWVaUvk+UbxThk7OgAb/FxChaZ7/KRI036FtAjRJzBvSKo6A5/8QCVq0
/zwBeusUtojKrL8t4vI9BdVdYroydFv4ZkNvCuA17qvpIM58QDOnY3mKuUfZ
ZCR9VSQr6R9HCOzzJW6afFvgJgx1L3kbPZjaXkNMd89M3iKsWbtCpNpJ8iR/
GjHjv3aqmNnOajuCIgph0nGlUc2kMLOrYgYQcglsGaVtAxxbUjwBILJH58jS
PxLeBJL2iSFElBLynOlEBNa1w0mQLK+FtFXPpFPL0LCaWxRcgHCt5rmuyL6D
5g1iMXmUNGrCkfp2JAHMZjxeCxEjraiOGV3IMJg/CG/IVTEpZjwHqOB00VWg
lrS4W08fX1J3OT1HRz1sz4WTVtZ5VcvCfYMRUKWaop5CQwEC12I2lVl2t4U6
KgyHHKdmHLuS9rFLR+niKf9ZdrFiKLNjD2kOlULQ+NaRj2mdGZsFgSxn6SJV
jKrCzP0ziHA/cxgeBmKSpzHrnbkD8vUxs3cHh9y9ocDZ4CyZua0joEmCn1wR
akYQB5xogWF6QL4PmVftwDrqw0++qfxks1R4gem4yq/O0Y7VnYGU+Gp9jhd1
CKeDeRaf0TGra2VzvBOAcNBjkED+tOc5SmgU1Iwp9aYyklG14fN92thKOEBK
d8ZWtpIuw7Av8BNLqMfX2Hzom3XCM7ZcJiuxFvDD8J5rZkI+W+skXa44zlEu
GCIgcl6tFAXAVke6GqQxn5Jwc2PezFLWrMg1hGkBtUfkrCoy1dSszqP7LqG+
h1vAs+Yq6jDcNvXaIMDdl/kwnaOHIe3aQU8grKP2LeC973E3lEmZGOfaXiTn
X7QG2JwQM0A/v0rL1d1bCp9A7ou+4jeWwlN7p7T6frOVzNopGipbii0lk928
FSfaWk4APyqXRLyCfEJ7dKI93nK8j6khH/tf2eiAt/nw2BUySO1FfaMd0gsc
Jd5BU86MatqCzOHKDwy26YfekdJXvfTP767NfKhodoMJ2ThZyQs8+iRQ+FZ1
oSa0hdrz4EcJ16lWgRTO7nufNH8tx7yaUBsNQs3RLlOAASNGPVDtJPh3IXL9
4BQU91Wu4JT51zbjtBUDg+pDy9OfstmCWHcqPHNmLBch4wLJKtxyLhe1MJiU
/gjfeKRgVE5ypUhWu9QK2sJHoUwfLIMI0wgvlCyQsOeKo6bMyiSmJ03kXB28
YyZK+EZfYBZUA5QSBwJ2JXcZ9O+USUlI+bhgOAu7qCqZa1wcQwckMD0dq0gh
MiMsaNaIqGnTZDJclnDSc33u2cjKHvFqTAgn/E8udL4SGUy688IjCDJ+kHEQ
PEKmjllW9IlbWVuYO/bDs7enimMEf08p5aW+2HK8V7T3H75S+fY6WJrfgWo9
n6foUiFYW9TOoXVrdiPi19qZQvBO1ZVlHhQa8IPqGxnEXDSs6iooqIf4NnqO
+xBdpfD/pn78qpjdGZbu9Bn3RE6tza2va5oQCYXRcSbCnpalZADh6TGpj7SR
XJo8Ieut5MyXqr9tZnVFOxITqxYT4XBAALRFHLA27UxM0wTH9HM9DtA00t8I
CDnRHvFzfEQBYA2CskUvwBoi8JWAwX5OU0F84Pd3G1KhmP6maNiYGGXY3sDL
sC3NZjL1arFcz1IebMyY1Urhots8Ccdpzb7IK6djl5lrOElPKhchYoC6u+5O
oKbwUIw1pFIIysY1OTSALTTIDhh/qxprcc83Qqwfs2zK6eWiqNCUKqMJeIGd
Yspa6u9tFh95huUDOu9D9Oa1qP41iMKoLyOkWnUEmH/41jirwyoTqeZtB1De
EUOVTAcqBmY4qnkWbRcb9Tx4BlpOW9BmxHqo85e3ErnzbO1BfKRuIXk/L9Ag
2cQsKpLYyEcLnTRvKdnUkFBkUjoOXp0KuUtZpRRdOwz1dUL/HZG4AjS2wgSz
E24eHlNsynS3+aI2IDVCoShVAiP+Hz7AZg8mK54piGfmod/OJ/w37oC4rWoA
v32vcsAxr2QAxfmsmFxX+CDCB1GtpqufJPBAISaCyuKja3h0ppp78cf//X/+
X/Dzn16+ri0G3HWBY/ZtvgcC8eeU8UM5d1Z/TxRC2yidsSUqsJmdopU1qGO7
av013yspWGypQnMiFjQAaZQFslxj0K7hjEeeEzqRbxm2YduGEdrhyLBGVuBH
+nj0mLU9/R4bjw07CEI/9ozYMcajIPZta5x4o2Bsj0d6hOkZBvWBAT14w7Mi
YoZFuFqtZPGPWN851r14f6I5tgu8zcgydf5fw9RHpuu4hhvBNxd+Nd14NHIN
/BVbuTE8G8HfiTgmbhf4WhJmvqeSBAj7+aZ2Ytee5kw8pzomZboUCgxshF5L
QjWqHQIRLTNSSx6d8F1e3Z3UcCd3/nHa+vCNvs6n8BD+OzAeq+EKm/SgzzeO
15GjTBiH3FBHvn2YX+4aa67hLZke1Raj2HN1z7atwNDh/+C/jh1tO9qx6xme
ZeuBqRumqds923FD2HnbjC3DgWcjx9WtMSBpx/DikW8D7EReFHiBYTjBaBxa
puM6gRs7vmP17Ng1FYd2NU5/e0rSVKVLvGie4knJMc71bbfzAw3GbSvHNQI9
gS///M8a08wfowyAsfEnmgH/4OEi7BzDw0/av/xLn15VzAj4snjz9Hv4j7Pr
dqB4/KnPI+LpXuL7C0zReayEd9To7Jg1rm0y2J5J8UKWb60E6HdfPumcaGuZ
A4uvEy7LcV9pAZAH/7UlDPJHn+ru6zXI164ePwQKEAgeK0N221R49+96Gpmd
1Py9HYctOUIVipItmXhqSX0zLLNxgy4wbSVlDTzCGnj1DRo5XgRoMgyDxIzs
yIht17RNK9HHehxZhmuPx8EoBLwa+nZshzGgrSQ23QD2YdxLQt21LM+J7diy
Xcc3R0nkmVHoJIbvBY7fsIS2DJ5fGrHtSqd2onogbcF3r7lo/LjSXnFXmTbu
SyKTfZuUNyfaqwFAAvv+Hi+N43luBGg8jgGTeK6ZOEEQeKaejALDMUd25Lte
4Ifwj257cRwFUQJ76OiR5TpGGFgcbd5hX36SwOUzncS3TOhTj3Qgy9BOj/XA
9pxojPTDGnmxEeqGm8S26Xuh6btGYjre2Ah5X1Psy9XHiRvDwcE5OSPAfwC3
fuiOfcN0R0kSRE4YeEbowbFZSWLafmKHdhIaOsDDyA2tDXRuEnFELUUkJGNs
UB/FaUzX8pBt9RF7rGjymK180FTinWicnOMT5dp/aFx204c/JCTxWy+cRAZ7
1Xu/IzpkY1vLM6IeLANOFV4EqgSkCWgRcAuWbtpjG1BO4AD0+IHrRlEyjj1v
bI1dMxhBB745HgMRG7sAGqNxbHqel4ysJBgbfhyYJnZj67oT2l7gjmPdN4IA
7u04saJxCPCVeD0vtOxR4phw64EwOuM4jEexGY3HehJGphECcwJzDXQ39BLX
cfSxpXsjwwyNeKz3bDuEJqPYMGI/NM0RTMeIE933R78FXdzuE/h3QRblStrU
T70QErtJgiYWt5ecNn3MjrUB9F0/J3K6umNDmjSgqRJbfA44kb+HO0zIsd0E
k/YMTNzJfeC9xU9eQP02oH/cHI8WYuF4u++BF24Zb9/tqGn/p+3chbLLV4+7
79L2q/TXcBcdV2Yvc0GGtP86XIXQ0uySbVEPQILbolgMVPGWnBi2yrcYlYlZ
eqptUu7bxSy/zmrdkBiLlXhfIN7AUCRk16RErhRIZCWqVP3CEHNvUsgjSw6x
4GmsO+rq8rFQAtZ4AAd+hTvHFDQwNlPeV6u0ZAkbWFDDoX4kVfs8eQ7LR8ui
7DF5rPCH1Ax3QHqVZVNvwZRdMjXSCq0q1axgftBv6/LcqATBsr0C9DjgYFPK
7opaP9fWnuahqIs1wZTh9MjWfZeUOhXTxAhP+9ZUZD8Ga12ro0+/52XKdNRH
mY4ja4JSDV42FvN9g3f/gMZp9o50apzzQGPWtBLvy5WeLjRMhCqzN95m3GFb
NpOzS2vfF1YAldczmKFRlg4a8/EzF1HynLnHthxSkyPhDnyPzREqRlxmmS5E
WaRdG8TUdY0NSku5y9Par2L/dqllfsTn9HtDxban35tqFZVWzZaPf+2zr5VC
LOpX8fxj8/2P7fd3Pr+mKjSJeKB+vW//++a3Y22vDGiICkD+eWWy719iO6PG
GWmR2ZRfBfqSJWg4FnwpUF4dN8bSzzWLqm7DhdwNlRuPeeb2hhvc30jPyLGs
omc0QcRLXAOEsZE+Dj3fMZLIiUehbwJxd8ZJQ88YB9DUCs0E6J7jjG3LNMPE
8sI4DPw4cr3fmZ4RT+4fesat8h3pDi1/PAY2Eli4fYfLJL1erXJsaxyjBBhL
y4kSJzITE84rsd0Y2CXLwEK+RhwbPV8PXOCMonFg+L7+m2oc8fLdW7Tierqt
UlMtoQCza9lc6EL44kKBKljtvSV/B3rH/bDQBIUvondUjvxvrHc0w9CLQ8c0
g8QfeaYN8t9o5ERWCIKhEYJMoFuWBfcsNuNwpEejJBkFtg+7YoWj/WrFL4fH
/qFW/Ida8T9brfiZZEdqGLsUjEmijwxoCgftR6YfRa5hREiR4sQ0DaBZLhwu
fItMENnDZOyNrCg0TTsaGU5kGCObKRjNkT82A89L7CD0EzOJLT3q6eMIyJxj
OKFlhA4A2Mh0wnEc+kGim7oFrezYCeDyR6GHZDAxvdB2dDOxx07PcAzPswPf
d2xY7MjXdTfxbRdQA/yTWInu6d5vqWDcQgW/UPaRvw9i+t9MW7n7rtj6Fu3h
vhu0VVvZdanUO7VlvH1X7V7aSoLG7jwl6jW9zy39ErrLhzAoX0h3+YU4E6EY
3KmaDKPPVU3i/6RzMxX+QyG5U1F5uqiVlDLFHOALJe6+ETcmZU50hVpc8tgR
+SZXDZF7t5p1DflD5r5EwvvkimX5WhWXGZJPltVA8eZUpH7hTcWTWrBMxTgu
la+rNUpCe7hFqSmK3wlNJktChxkd7oQajZLGMcXlVGZkxD5zzD1HqI+5acP+
cAdKpliQcyKS0CibPcswgOw/TfuHZwt4lIBJ6J7xt4YS8KCHquLzfKUdCnXg
kcywxwfRea4zHOfYcL9BnKh2XhdN41po2CP0oOTu862i4MVksl6KXAaKmpiy
sVKqRhE1ABPiZ9wKWSJnU6GupDgyqbA0nC1axVdNdZX2StEpdqq5Tr+vdWey
zHJDd/ax+fLHfU9qRd7Hxlf2tFYDfmx83fu0oWL82KFi3N3z7lntXufXqmKy
Ywe0Bz3Zq1Fk6KChUQTw+0yNovTU/N1oFMOopVF0zdE4GoMs5pkgxo1iB6Q0
3zMS9DUaW7rV0Cj61ghEKM9wfH3s2U7sJ5GH1tMgGrmjMDZ+bxpFOLl/aBTv
IdoFKNrtO9y9GkU0kY7HJvxkukkEvL/vx5bleO44GoWma7thz4AfTRNYWFcH
Ie631SjC5fuNNIrCjQPhq0MI2ntL/g40ivthoQkKX0ajWB/531ij6Ee6bzhu
NLaDKNFR3eG5se/BehM91P1xgL7h45E3NsMoCsdu5Bt2HIe2GY71XmIayT3U
il8Mmf1DrfgPteLvR634INqzU63o2ZExAsgxgnHgm2EwNkeRZXp+YI2D8ajn
JCPHMEL40XVs3x6FYWz5RgLtzST0TN8JmVpxbJmhHiRRYI+90I0cIzKcnqNb
o9AYhwBNUZBYMcjeIx8Gc+0EIMyJQzO09CCMEndMfou67Zte7ABIWnYvQCdu
wHKjCIAVOJjIiXU3MI3QwYgPPwoC47dVK3aTwt+RWvH3T1H/m6kVd98VJ9mi
5tt3g7aqFbsulXqntoy376r9tWpF9Zre55Z+EbXiA7iUL6RW/ILsCeoSuaIv
usqwkOBCkA1WME+LZR1hTlYq7rKW8uhQVgghx7KaC/YLr4wHKGxyJSJW65S9
9tBnuZWgly0V8Y6oBFsQ11kIuH5R5XWUPENSvZnypK63WDMG5nWTzvIpDxhX
nC9hcFl1sxq2gunrzurqZxR6TtXpsdQKVQnKSG/K8kFM14tpulixbHbac1HA
kdwf22dciTTQ37O5IUoWBFseRh3hX8eTarxsGbKGWGyGMrZuXSMln24NCadN
+rTndDDpBVYr5MerFMnacZZFq7qFWrqDzof1OZV9DjHPbp2et5jPWQWVXygV
Ryv1P6uaog44oP4GdX8qvftdlaG9RxXav0Ed2kZFymMNUDXSuYOaRrPLNMgJ
iw4MoCja2ZOAkRbRjL1O/roVQ7ZWiJW0fTN4LB83q7gJMDjGPohGds+MNMiw
SpA/LUzvL/TaHT09pGa35fowP0cff7Eau/Ss+w7AtmILpNCEMOs66/IySDyD
q5AE4x7gLQkI9axe1qB1WX8X5XnbGOWc4vofhlIwZXc6q6gKJaUNoNo/HWgT
y71csIww9Xal14CnAXqonMv9EA1y0h1HwTrfRDVKMiFtDtO/pALn5+lqhaag
7P1Vuq5YSggqK1U18wJ8+ADIm8oy/00x12+EB7zQhnsGvFUTD2yyMZ+LBzp6
2ujhC2PlL3XN/7tVGd+DuTauy3bUFbaxwu8Gd9FcKQamWaX6TXrJK42JSaMB
cYMl3Ux4hDinI+MRHLHIrqjyoCyGooZ5KrstiwBsMoWSYxSIlfGHgj0ky33V
rth7U3OZGzywzC3OonDqpCl1zXM6iylWOqczRr6T0Bp/dSD7G4hGA2yEJYBr
A708BKqzR1xxtUrPZ3l1pdTmqufWtsdKW+p9P18f9Fo2w++ModzQGLaHDPmN
z0cc50Ejfc0snq2Rdn8+sjdgD0WWr60fkmQq8cYDPjebb+xdV8dK+LfvzKH2
nBM+LeR0T11Lxzsg9Eq6GHC6uPWdPbu+ZZd37kjnnn0ELNPZ+sdsyy7f3G+M
zel/veeNj9p31rCRH6d7OeoYX7d3Zc8b245m9xs/ZvykYK92vsH3prlF2zYM
IXLIF/A1S36vDfk68NP4ibdiV/jFyzdy8vSfYPwmed34KUzGL18L54WP2msR
UcYb1HRH6/wJpvZYjPqYzeNxPY/OnxTSuAcPCqoYCwz6Bn48UUV/xIwcMUnF
UKOmrGRPKqGEAPxecisQorUnxS1z32rkexX5GbVVl6LpX6WrzSbLhWkr0SkK
/Y0WHCmnjdIrWNSlJiRUPqbM0umdVEXIMstEt9MGdR2QIhqduIDpXxRSjZTO
lD4Zz4W+UqJaNE/0htgoFovlyaRvgY5QaRmBpbZz52zdVdHfsnaR/U5ZSFvo
EBOBC3xaNeqBtMtFNTJgsZHvMuAa9i5aBEVK/qU+VWIlclF+l4/8WD2O6bpk
NZflhDEp6aLoK21uJCPBCmmigxUQ5Zx0Z3zFmBm+pc35J0wNz6oaKWxF3S17
EyuU1HWYK+11Er18/jx5EScxT3A5Fn4jb5dTYg8K5rgWk+Mar7w5Jge359m8
gJP88BX5u9EFSXgVZ+7nRtW9iCsBpoWS7c+V3HDztLzOyJJC+S1naXmZscTS
ZXrJgpVRR8VcWtBKg2CJ3bWKdbPEkKK8UkXlvahQWe0Es6bFAC+KfM60zm3P
sn8yh7PVVaZm21cqdOCtH2ovqTRdUeVUemYBXHG/gyvDisUg4RZs87CAFQZH
K9WfKuAj8VdKaJsurkU+2IPeIz724vKRzAPHPEGJfWQ3lwqsMhG6qoVgmWxU
ZO3EStQAyCUWEKlazkB0pvN8AnshXRT5LhYIvag3BSTAUlgXLBVvPoG9v1hh
J/2OQuWU+nyeTq5QHzvL0pKChGEXslnFS8SIRKsTyiSfVzwuGWtjzSmpMM59
JUzob1nuXhXQTvi3OQO7vGMN5P60ulvSu+hse1PMYJJoxudvsSJbZYq7QllJ
oRsCPCokS8VrqaQY83Dtwy2+RLSAvpnCd5Ei1cvsFq6V6IRXSaDY9Blcwpl2
CJuVLTSb+2BiB+owQ228LvFGYx5dAKOLxsrwPPkFYOl46yS1ZXbJaodVMBlB
o86LYoW4hl1+griDHk+LS8l02+d/iKkzsyq/XBAeRX/N6qi/rQi9FgAaEuqb
WXqHCTDJ4bW1/9zvFcZJN1O6glzCZFTWAVe5DIB9bfYR07Sw4N8064TTutJ6
nRqT1+yFcyGYSsvzHAaGrZzxGpLk59fYZJHJU8H2AsAReWWzYoknwHIHsL3S
sosLLOo2RPlA1pbui+Y4OXbqKM+jhCq3vSpkKY2DXn1apGAT9YYxYSm7Eoon
sZh/e/p9wgEsoadShU/QpEfLEjYb3aExLv8R7vRLVLU1CWvLk1fknK57YxgR
ETl585IhYY1bjwknCl4kD0uUTHnuUTr66wUq88RM4NoAk9ScS7yWoLugPAYF
+gs3IRltyYgPeKvb9mzxWM7hMmClj6nUBOA0uZvz+Z3MblDdcvN6vqoLwLFu
aIPrvN9832B9OFmWp5ilVyYXddEPnxMWsIe10oSnvEPZv0iMgbtFFJl81WXm
CsR7dO+owh6vn0EVXxDQz1PkNi42F3+BCbfJfCY3rczOsbAH0JKJLP1ZnMPV
o2TjRctrm1FCIfDXtT9gaeTLXfKahYy/YNoRWcqPEAZl0d4opX6K8HHQA9oM
VwQrLGBVr0YV2dqQsAl46Q2si3LSdh2EOqOVmCwvHTrLsFgUYNUZrvbRdD2f
3wm26JEa+4CN1yte1u8KrxKq99o2M0CeZV0FXCxcYZqmNeziNFjcBSvrxvyO
AB+oc2DZs0n7U9eqFz20N2LBMETzzmwANNd/sQVRKlqCGfyruS7p2wKMj1zi
IWn0230eSYQIeAz5NHWRdUgA0IIZS8MPXbKGKSIWVMLP819TXthS6N5gGTes
YhBOjGu9KOkMH1+k2+fMEyCzdMUDYxCzsOUIYYhiC5pb1idhDJiyKj+fsazF
VWs2vHo87CNLV6+U9mzkOGfp0/kmXKXlFEdhRRGA/oPIeJUNLmbqufYVPNIE
WxFrAmOrgD1BzogOAbEXsqkYiUEJ3vGwBjVq5nw+an053hJMYgufilTq2RIo
5eUVUUMplwkM0oKnKyzYIDgKmOKEVH9wnPO84iwD6WoV3AgM6ACYu2WLCLEC
JZiHv+KrmJOQcbOeYfkGnmN6eXVXIckWgt5frULkSsSwJhb3+3z8/LFe8YM9
ww2851j3Vgwe8ttgHOFbwwd/HjLWXzdD83c/Q+t3P0P76K+AwzN5le8Jif+A
w/+cGf53h0NkCwJk93+DGTbe+twZRg1Blqoi/EZjSYWzKuAK7bJwMWS6C9qx
Z9SgdjVMz3PS8gCpRI5tngndblmum4IaZ95zIWjK8rAg+BaoWkDl6kLRv/V5
oVhkIkDIAA5j2ufOcixst45JxfIPBepJ0EJ7VWs657wOd4tXFdpYigsWegqp
I+EhuQqnV/M2dSwxcFMswjRtBETLeGcR6Mt4duGI0OBsVU/jw3yYDfvI06Y3
RT4VHKz0hUSrLrKVTYPyKr3kogVNV+HBUAV0xJIAkrq93v30vChJl0yMeEtw
xZrxTTafiYpc6Y8xiVKCbUiUcvdaHaKWoMxYNDQpCFj153yFtQAvKCyc84Eg
MV+xss9MHoR9VERBqvNQM+0ywplOe7ku0QzfFyU8pDzQWeoE4YCVUCL+FY66
K7CchR4y0VCblOsJFjKmI+7sVKYZ3JQPhSq2Vh63vA5Ur5q+UiYIPYpU91Zv
6CIMbXNu7cuMmaI4J+2SUtRFCA3czIGxTVGxxsuqHfKUREek+BRB27zshxay
pJrRFc+geMgjjY7qoimkBofZMbZ6SgK0rEWzJer/jVp3hc4Fl0SsN+6n3ErF
IzdfNK/9E244YEiENPXMU1eqqnm9Kkr8KJRkS2DlmXK0qTJUqmdBjxggCxMj
Rfavqr4YN48XaFNr0HQZJd40oq1qr4qK6cWbBpu6dFchCjDOpBMGhgPnlF6B
z+WGJx04PP2+OqINwzmRDkfWkxG1ZTC/7KIuioQRRqpqtd5gcnfjqVnJSErS
Hekhbusqb3NWYS2v5EVSdAm8SE8tZYqcnOTTTKXkyMWZlQIH8S8FfEX1+wqh
QwD28Jjj3kkxx7rjXYpE7kTC/OLoZlN6g7r070GvmWUUIRolzvxyQaIzqkC1
ap6S8pbE9lY+AxhBaGzbim6R8gFXMQdEv+YqRUqLwKTYfJV2aWHwKOdIAZC0
KhkpuJ4HlUKbr1DVOJ6hgEaWNd34GzIofBPqBIpQ1dqiGPOU+ayw7ttWyxRz
a7BcumS7adzDGlipG3YfuQs/xy4Ylch173DVnjwPIoo2gX+bheD7HGNJ1VJd
w7ZigdIAbXWYgrYZFd0ZJX3oGvh/wJjyMDSGgXElvCYTAINlHsmoBVaiVcyY
ISSAFZnSuBk6mUTxWYCnsYRFlUZzjsRfhcm3py+0V69Pvw/eJNrT5Ef69aD3
/PTbJ8FlEjwPn38b3v3y7dlz24fv30YR//s2eRJ+q9+mt6dh8N13l8Hyzz/+
5c/R22+fPXf07zFfS/SXH89Wf/pa9//y7Xxx98dX5TJ+9ubX46v8Ty+vXgcv
oiA4S2ZFkpaX619+8f949f37PBu9KOY3v/zyzHu9ujnovfr6PF/98MPkanoT
lG+qi6fXqyr6MXl/+/TFqnzx5E+5/zK0Xnx9uwjerqpf569N67m9epr/wJcG
GK5jYUpsWrOwr1K1HDkCXhGMogykD1uVya3v3se34bPTSN3G8fVtcvvjk6fF
n09//YseBd/9eMr/joPvJjFsXHL1xzT89hf72S+/3Jz9+P3kx8X61/SPpftL
fpycA3r49Xhul9/PFqd/Or99qo+e3C2fnQfz8Pkk+st5+utrw755czn99aL6
4+342flz53q6+vXls7NidvnNN+pGtGcm4ImYMjX49uxJQFeAWxi4r6ssT1mn
5alLQAsmnG7hD2i402LhWql9+Ip3P2DXbUCWvU+bOKBp5815xAmaHIEPqVjF
S7XuYUu1yeCf4o+epxOdTQYvNFZMRiaJFLPM5VM4L4huaUrc0E34o+2fqPjp
FVSkUXiU1reOWJ3ao5R1Kb9LStteZWeNPRYLVYefViwWisUAzVJkU46IEc6r
JchDpNGEXaxh8gsFRB5rmnGMDtKsmhyzw/38Jr28zDCW3tBHhx+wkQn/Q+/q
Tm8X9KslL+yfsKl1TNKg+Gofc/FQOl3vcdHGl5yNlxRPbd0aBU5kmU6UGLY+
8gI9COKxro9s00uCyMUO3OMuCZV/HN9yDaxKoWOBENM29DAOHNscB5iUy4we
Yw8j1sM7CoqEvz25rOMaBpWdGh3Scv165psxmbih9cSazuosXhJ9sjlIa8fY
3hDtP/GJGGY9QjtG8xM1sJQpNCNM6bFyICC6cef32Dcd39cNI7IdI7AjZxy6
/gjD7dwI/h/fczq2FENc3dj1zTAOQ6xIYSeRb4w9c+zDFz3AnTT4Wbw7ghXg
d9pZsa+GxyBLXhjp0Y8P+W7WjweiWC2rUYI9mPpGIxEaMWDZqBh8ssaGaMzs
v43hTGVr6xA69jYermnVW/DTY2kRGggW9vE7bCT3l77xXROnZ7pifER/KQX9
mrq8POaongHz5u+wNiNcmJ56Q+7hb4/v+Crs1aKfiDnEwziBdpaunjRW+npI
kQrswGiCSrNuxb6yFY9xnyyze66bYQIYIwC7R5Hd8J6lDt19By27Ob2tRW+g
aQPoxSFabnOQjVBpaDJqj3Gf8jjwntcYkEbzW0u6b9T4sWbrzVfbMeTQonVU
9JvZvuld8fLQztps17EVtr2JOLZnc4H2HYimI7cLfNlA8rRf9qhj+nXeF2jg
tRtsC7l+eI076N3vmv7WAGyACb35AqINp3Es9ItyKAKTOvIAaOEObDT+oxJP
xuxswyKO24VFGGOD2ABjZbDZSL2MqP3kEu6WKrTpOSAiNoBXU1H8SnvziX1x
Yd2farnntJmkY9MvMK8amTnCwNRNx3MsDzNh2J5pjjEjxj7mwPF7u4k/dBLE
hixS5gQ6ZskwdUYie9tp5D5aqFs9xwMMhyHthm7C/yxnBGOYnuFhKhndjUBS
9N1kBFhx5MGEYzWPWA8TiRm2441Gng0YxDRw3cn9kHOvu4TQPlRsWI5nJf/J
1UMNUx9LKNkjmoyJZn6tRRjtJSWUalNEQceAz5RQGF0m5TP6cDEdz4YgMdTO
UM8mfdxUX+pawc3TEMBscm4CQA07Ux7eQwShoLZaAmE6bGDJywLoAeXIRGf3
fLIGiWJ2h+53XGTjqQakFWOqOidzhzogsAOKPj3oHf7p9NVRU+31paSdg94/
xJ3d4o7nGXYY2XAF/QDwTOC5FtzowLN8a+yP7NF+ccfzAdslY8A8rm1YlpOM
PddwHMf3xoB0rL8/cSd0PWdkjt2xbvv2OAnGlq9HiW2HgDzHQBa2iTthPB5Z
ydiJx4k/Dr0EUbADvMvYG8POBvHfm7jTb8g72EriwZZQJHfznSIESaFotFso
UmSd3UKRr96jewSht4Sd4y0LYLe0lmruL3JtE2M2IsVtt9+SXjrDwjekFwoT
r7bFics1PGrIMp+aQsyOEHIuyTQEk71cpfXAY9BbksrxFmjj4sFnHIP9mdKk
fQ9psi3e7JAm7U5p0t4vTbZFmvtKk/amNGl/vjTp7JUmnQ5p0rmnNOncT5p0
HihNOveVJp1uadLZJ006v6k06TxUmnQ7pEl3Q5p029IkLtXdgn22JVnAV+wm
SGzDn9i0iX7cTvTTyNKArT5b8nSbkqerSp6jpuTJsgBcpOvZilh68i3hMTjC
EYKHfNZ7wOoMXOTotlBlWdtNwhkau9wkjoaasFSL9PjMINE5AOPWxYOvdJxY
N4pk0TbMh2SGAgdAxqPjzZbk2E8GkPdLul4yUIZ5cV+xt0speIipc9+a7Cq9
QUd/WGJTAOBhEehjX6xnyMazKKWfnpmDZ8boXcO+UzW65oG5C2hreINnrveO
vwhvms477TJbsaiPrj2q/mkb0WhvHrO/bgHUVmPA4Gg/ZMCJcSg0H/8dZuGo
tMm6pJAyZT5E1fC1Q1wZyEtke5/WgugKY9hWW4Y/YgNY1uCZZfNB2OXTkAOo
84Dcl+rz/tx3jG/KKplfjtyglL7J7NU9K97J/lXr+1fddUJ81TYcs2vyQQio
Wpb+ev3sBRe2yW1tU3tS9ZZ9hUlh6DXYDc7AVK2zPuzu5agW9kXEMjrPsT1T
e4AN2LI7R5uqhnTFEhmz0r1wQBQYVNWhtM2L1Qi1IK8ANF6TgPwR01CwvrQX
6Baz6wONz8+H7C+Zy+91djEkB9OHOG5+7PiLf8c5dWKybXOKTsVfgESHEoMy
p9fDaYYQRSs/2jjiVk9TkIewN6UnQ4eudvZEUR0vX705ffkieMaAhvd01ujJ
G3piTgxUjujyNN8kcGvMqSong7evT5s9GTrraQvkdvXJemqtDnqi1bWz8YIg
tcp2IWg1P2HTqYS83wRoKUUjcFxZMWHjCGtucfenA862wt0DAJI2U8CRmNQW
mvBxG/7vnq0EKtGtvg2Oje4Hu7o9q99+cRx0d7vlwZZuBbjt7fa+ZKTuVt2E
LWt92GzvofdnQMo4u/vZAPZpzByvt1sjts0GwPRGve2Ko30KIrIBhGbDBuCZ
IVkBzP1WgB4rJ4INXcdNXGtkjvyRjk3dlrlAWgtAxNAj3TDsHmxWYnhmYkC/
putC3/B/+siyApj7GEeDkWOagWNC5+7YjfF3HKi3ZyRHH8MoOtklyGig2gx6
DzUaqDaD3kONBmQzcHUs1jBu8PgioFh6Q0k/ee6rLLl/iiuu/Xp57LaIkiR/
bZlDg3HxzXQTyEYKlTr5gVbrJYb1so43XUhPF8IdiZzOp3KGpAXva7cZC4HN
RAw664fZBX66eqzrgLuIrYW/jcfvRI9qUO1W6UK8L/MZVG3K+JX+xROx/1dU
xGNV4ciwAj1OxrEzCsjy50Smbepu4AfeXkU8XDfTNRI3CXRj5FhmaMVBqNuG
H9km3MG/Q7+jOLQcPcDiGVaoh2Fgeb4Teo5u+K7vW4B2tijirbEFqMTHQkuW
jdVTx1iZw3fHsTfSbcv+b6yIZ7d1Q/POLv7vV9WOyiE2R65N17s62KNNN1Qg
3q9N36L1bWjTG1rHh2jT5eYzbbrTtZwObbrLtOmKn9c+bXqnp9cObTqp4Qij
Hzfdhx6gL9e7d26vvryhaNyiL2/pg3fpyxuHI/XlLZ1jl77caY9xT315A313
eBM9zPvKa77a4X3V0u7+tKFl79hHoS83Ntt16cs31O979OUbavht+vINRfyn
bn17W1++QSK/qL58Q12/z/uqpb5/t6F0f9fSqtf68i3oaJu+XEWBDR38p6b2
fadC3FbHfJBC3GkqxF1FIY5qdkUhjmW9KAqlw+1/l28NvfQ38P4/Az7VYJNK
zn5T5/+bPP3yrv9M1JWQqLrFqO7/zH+nzCqWx+wfDjGCDzdiEA4TwOOjUQJy
PMrNY9Mfj7xE931nFO7lw003tIMYhHFfR2c9KzaSeAy8uKmPnLHj39MhhqBQ
2SrvizDigxH8S1D9N+DDZT4qtrFRaCdBHLhhEhmjJAlNLJVkuePQDMe+Ybnb
uHH2CdxkPLKsyDBi4Ogd2EnbCsM4CgJrZAFTr7DkHR/fMo0QqycB4w+D29FI
RyWLY45cfTS2I8nAd34sc+SYsWMlumHZbuK74Xhse54e2tYoHrtMHhAWQSEP
+Ko8wLj5LfJAzb3vkgfMh8gD1i55QDmiTnlAOYSfHktXwpbLjdzrdwrfL+UA
b7cc8BkuHG1Pmu0uHF/Sk2YjeKHBv3xO8EKLr/mc4AWne657gxdaniCdwQsb
riDbgxea3h8ieKHlANLFPuvtMe7JPjdYUsY+m60lPYB9bjnfdLDPraP6qYP1
3yqGdKCi+5TK64ovkJLJhitI9/Z2+nR0F9XrkgdY+64Se11SAWu9peBet3yA
L9Tl90aWbtpjG3juwDEc0w+wmmEyjj1vjF7uwRahofkZWbbtm4CUnbEbxNZo
HJue5yUjKwnGhh8H3RLAAz+PRRRE14Lq+n62rjuh7QXuONZ9IwjgZo8TKxqH
SRInnhd2SjHtj2WPEscEdGLZujOOw3gUm9F4rCdhBITMdLtdirY6FW0KWUyc
2YAo9v4GBLWErLYX0HYhK9Dd0Etcx9HHlu6NDDM0YiC8dgirGMVAy31gA4B3
HBsxsld0z90OINvtlNQCsne9prcR/0U5OUGk7+U1tBGw8jdxG7pHwArZBros
VqOWxWofS2u6vd0sq+PBY1MYXIBYkcXK1hlL19vO0+3j2nyrt5sx28169Vwb
TVzJ1rAXFy1KW+xYPdWQFY08V5qY7hH60mvT9ocQ8h6LffGizwh9sXuy8K+5
Wfh3LzbdhylZ4d9uHNarkdg+/NQwsploY+s9FBU0AnO6dQZxtsR0WovJ3Yaa
YCof7dUVYCItSh2iqgpAMC5mNyJLiehrWDv0sZ9WjfvIM2nwEgYszmZbyowk
6sqa8WQSBd8lyenpd6k7yhx37kU/PnN+/T794zh/NrP0v+i/vD/3yvTOjLO3
z3958vUvPxZBIbNqHPQwr0bx9jtKDBEvo6e/vArn5nvv9M3lrfm2+tF5W5p/
9n75wa/yr7PgzZ/d8ruX5bJYWebVzY9l4j0/6K3+GLmn3/359Maal+Nr44/l
m+9fG+/192d30z+Orp+dzZuJITrX0XB9lGekblUmKhGkVbNUhnJyzN1QzZ/N
/SQffVU3km6Pj7S3r0+/YOAQluXgqd+Oam8WTO31DzUJmit1wP5u5DmAZyIj
GdsjI3T0kEIdozjeb670QnjDikZJYAa2FSeGBZgisgPf1x13nPh/r2oSG/Ch
pY+TkRsHns2cJswxUFDDSQLX0HerSRxn5EWh78RjPwKqDNTDMoCsRH7sOE40
9narSaLY8iJvHLteECWA220n9gCxB4lrARnw/d1qEgdJp+2NYkDiXhzEI88H
NsExjCACQjvy/uuqSSS6wbxyNNiHlqJEUaXUqgverCV3K7hrCcgt502bCRr4
53EHohuiuvixomVhn3cNxQqWAVeVJp/ampEuzY+qBdmq+alVIO8UfYaU/52N
/Vc2Zsrk/KY2Qq5xtblEoY8gi7S1W6ukmiIZIsZqhp0c+XFDDfGAOKKGTaZ7
i7h6wezqfY9ddEuERFsJ1VRMfIYSqq3F+AwllKrgeJANt23w7FKetMTSXTbc
hqgqgLAdStRluDTaY9xPCdVUaHzatGk+LOapZWzuiHlqHdVPnYJ/9z526wHu
o4TqUAyIre3QDXRs76aGYJcSqkvi366Eaov7ovVWJZTbqT96oBLK7VT8qJ+/
nRLK7aT/D1RCuTu5M/zcRwnldsAY06VsgNAWJZS7AVH0/qjLUUFVQo02gOZL
KqFGnY4NO5RQoxaQIXEcNWCGflFOTrBAI3kQbOEsInakOOYwaoY5OrUOfoAN
/xnByV7LpCLpcJvX4DTN+wzDirczRLlVZhuRm9fCpi3mfFNM8Vo4VBVVGEMd
goTi6+MQ/YkDz9STEVxKC0FAj30d74K3TyFrOW7oRCPH98wE2OEo8dyRhSqm
kR/GY4OugqdcKMHQeqNdy1d8ykx7RO297vZK5e5O2Rdf9Rtg5HeyN5suY36D
JxTlvJUxlFrd2ki+1cne8OgP5W1cncHVpr7VUH76tlB+Uod0At2LQ9jAJjK5
2R452Vfc3+4hK/vKnouf/E6Y2iszG7q+HRhP7gmNht5JDh8IjoZuboCjoVuN
pe6SoQ29da86OAwQLDs4tZ2ytKE3neDExFpsYZdMbegtj7dNudrQWwfXkq0B
84d+ZCe2DYSN4ja88Qj13AHquE0LejA6DWLyE5pekIA8HHhOFMQBsNt2YgG3
GASx40ZhhD3sPr7ECewRsgZjDw7RjnXDc11nlPgjMxnZSJoNo5PDkR/bi2Ig
YbYJUBREwLU5cRT5I8/yTGBWInT0NgzlpDmhMWqlg4AHQ1HxdMnchtFg87fL
3YYx6my4VfY2jAam25S/DaN1lB0Cq2G2Dmub0GqYzRh1nIDZsh1XV9B4KmfM
2BSGDwzTasN5F43dFBgNc4Nr3Ck2GubGhbonoTXMLqFgL7k1NjQO2n2IrmF2
cndN0ovNOmzRyKdZrm8aNlyBxHU9HTgyuIV2Yhhjx4u9UZLAq9aWexi6boyc
GzpqApdt24BRdM+w48BwY+DwEPjbGSJrgLe60kVsp8oWnqHVOvxP+FuTs2P3
S3XMEIjN6r5AnToRo+l9sUv3Y6jeFwTOquPFsSzCjDRbnnU7X2NN7tnC5ylj
DixGsA1V2yE2sJnrpEsPY7Q9K+6pXDE2U53suilNHcYue63Rdsa4j82WKrAK
Gw8bcPTA3dvQYrAi1VSUTvJUvGBKnbBNOIvi9VG1GxzGatXGJ/4DP6RPR/iF
Tof9bn0Jc7LVZU7ep/oHGrZbtb/NnMxU373tuu992u0o7u1WYO9WUfdGnm45
vm64UeCoMZTWCGMHA2ajRcMy8FpoWh7pFL+IhuWk51ogQ8ZuDLNOXN9Fom6N
bCDq1shx/ZG9yybda4c86hiGOWqPQfGaGwP0xAhwKWDy+thL7m/K7m1qCO+v
DuyJNI6fY8ru2fbnm7J7mF7zc03ZPVUV8lBTds/wHqpQYBGycJkwPre+R/tE
gTaX32uz+RhwOx4BnMBhtkGlDY09Bi0USos+FqE+vs9r7C2Y9ni03b9k90J6
mytpL2QbQjDD3m6GfTc73gujfdz2dl66x5hpvP6jMHBVdGD7uA+7PEx6rdts
w2TH6DDDriXFZcvta3NDvTY7tI/nQTgwEkIZCJ73O1MFMY1sC6ehj3tAhIUj
DOwI/lS7YGgvRZnZdEYltoEXLUURV14qTfCNlVasVzNe5InFME+LyZoimlkJ
G6XwcFquqE42ltJgIdAYqCAIYW1R4LXniVFHb43r7E6xN5BO+fBp8vSoLvIs
9elUK6VRP0hUh5KZXqsJKqePsJg8joLh2Fi/jfEIdU+PK7XSR7NPcj1hJclC
rBVVF2iqq+Ug8acaRyTzrBeyzhmGl1Q80QpFkFRUgQgWCpLRJWcbsMwTMQnl
KqeScLizVIsuZdmhWOmRg95FOkHXBSoQixXXeMA40ntgVugcUMIuJsWsjz4Y
06yawNiyKBcW1NINH0tuUdGpO1Z9WsvScoZh3TyrB+91BjzE5G6CJX6xtvBB
D3tklZhhwDVMZsW+sQRIvJAt/ECJqmQFOFFE95oVJQZOJSthp/qsElOdjYmC
bSSsNQr1YN07GB6jdc4zVpwLh8qmohRvI9FNXcpujtXVoF8CRFlYr5JVqiia
iEprM4atOSNRFGiSlasUtgZOei2KLQPwl9MBATnJsMBwUVKedHYHcgYWfipz
VnoZFk612asMdhqZQ1GnF08yV0uBbQYXVdoV8tMlj8tf3S0zVlIJhqlyeBUv
bCNfcJV1Tw0rNwE/mOXkvgSbeFmmFCLECxHzwvN1xWpawh2viSxzFVNNJ3of
VXBwUr9mU8W+VZeNbi+Eldniw0/SSha3l9UUWQFwrMCVY3WrCUdFbFG0AaW8
IgJQZV00zJWAL2GdN1bvi89fbBUFRnEYmPISVGfiRJpoT/vwFZwV2merT4gA
cZKsgJVEdhfwByKRoj5WBiys6B7vjgKwqlV98ku6zxOqz4zoRdaDZiiBgKX+
jRcHhFMeU9FuEMoWE1ZueyuSPOiJEnq4RYA1eOpqVqZMmJyxuURLdL8yOEzu
IaV0W13xfGzUOl9MVnWmKaywNYCbPNequzm8XzLcCe+LCoWIRFtlH3FOLQyp
bA5DXMzZq9Au1iUByxww6xyFdyorScWs4bhLwD4MhhCLITxObwCgAQtisg5M
ttHc4Hq6YqslCQKcdIP4fM0uWEV1ziTc0uaLfHtoF/rZgBXwbWHl5ZhjoKgb
xjeZ8F3nLiOc88KN7QKffV7cEocxD3osHZ5o3Kz4hwX9aKsCtSychhlDeOG1
Fn2eTktG+RQoQHCrJ9jnRfEondNtwedbnTQp6iFbJyU4O+glwvg7OEP3u4kW
w5bn2eBJNpsBkdAOOfWkinesQiIFJR70gF2Yp4hAREY/AA6AAeBG6IaX2YzI
HENMOeZGwbnhWniWqRdM+Vhc/PN5efwvz/CA38AB07eneMjtJhFbOP1dawbq
9odR8rQ60jY+H7W3AEsRXKHNZx2fj9rrDGGcasL+a/3zvVKlPSib2pfrZ0tz
yuF0xqsm0kbRpZ7N6G+RrQaaAMjMMrbJyVN0jKS/+SWiv5kilv5kF0bpBPpg
G/csu0wnbKC3FSbV2b3PL4q+ds77l7iV5vxyUU8ZLUOco1Ff/lJzTgDeJ7mA
q1fK67F6+cWwP/IXm0sRc366e87YBCYrm6iTzZoQvQL6XjH2sd3jR+1VAVR+
sCoGbM74Tds68+1zZuIBLyi6v+gpsrRlMV2zDEdA08u8uiZ+Bk5xBcj5DhDt
VQp8CqUrJFQv6hMwvI/8QZGv+OtX+SXmGsnKS2QXqhXNQi11WQjRhsosixoF
hBiBm6Qu+7xaMdo+kF8QFZZTlrOJagXXnj6CKvCUqUDzrlWGmULBubmU0jXi
DlA9wclK1ng46PGdrusQYy6oLGVCUrEAPiYnNqqkKryLokkxqbRkk2TChFe3
WdZg3kVOVxXBw6t31SqbIwuXX2w81vhT2OBsdqFdAbt/jr0iEwlkP6845/SD
LMAsZyIzUYqawcKpW2oiUYSBfYSd4MwsP1Kqj1wC/7tYqdMnPgPLMeP+cAqL
hWT5bmL5U2T58vpQ+pzzRHAg8zYwYVi1AgHioFeDAvQ2m8HiblCwRXdwLgQh
X6gFKIGyfIh9wXkqr9IicuRIKiZroohUAYdda3x5BfB5ek1lQDlgD5bA45fN
0t/NOhvVGuRKuDUC7pjARXvEmRDBECl1Y4vm/WLpDtQr0EdoybQPH+jHT5+4
SCOqkyulHLdx7oLVrpMqgPR7PuNUm58WFVLFs911lRVZgs6Iqesp62tdMJbS
mqp3mJJZYFVbuCyNs1il1ySv8JraX2naafAi6FBh0M8IcNU14yeAFWolr7xJ
Z+tMyECkQX8lrXEoOl7iLYElVcjBwNkz+K6zNxvG0NmVurnWvz9Lgf1hCLQz
7eprkbKNB2Pc5wNoOIwNn3VQMzYamTzoI+ZpS70Pxi0kIKAX5eMK6ChgxUPq
5OiEODW2Ibw2eLtP5I5FflEUvrF2faEZfl9UB0U2rkDWmLqh44FpAmRgLW48
qjF6UEZx/AxkrQv4ezCZTmcdIT3URKLkJVlupo1zkulosSnjMul3elPJxY36
j4A6yN9rAZ7Vhw/bTosfFvVx0Os0JH2jfeUOffeQPC34w6Ne73/8D2r9SjHl
Hn+jHbbKpre9ab/5F3JwOwcY04aTc9j0rjGh+339wBkoir1ggoqHWTZlmiEA
5A8nGrPYZ9NvHi2KR7TSHzKednuWX/M7kC6utScZ/CfMy+urYvYrQQKlLMyy
KR6j0KDQNjMtk6T4DbkDDj+QlcJRR3HbPdzzHGR3uBmv8d9yWqE08r/+77ub
HPDB6//1/y5QrQS3D7B8jJj7zVU6Q43Js3TNb8uz9WJ6PkunIENFVyWKqyiS
zav/9f9VgI5fr9dTLc7K2/yyDzADeHcBfRTziqOcKC2B9C20EFVOi4WAfBA7
MP9jdisXDqg4X/Cy2luWEiNXEJZFwXOzMFIAyFlLiT/imBbWOcNqzlmzPDWp
rFCzALSjqcKge/SapqNkfD5Nzr4V9ahhheeAAItZdkerel2gCBani7tZfguv
//9zp72QUFoBAA==

-->

</rfc>

