<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.8 (Ruby 3.0.2) -->
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-rha-jose-hpke-encrypt-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.1 -->
  <front>
    <title abbrev="Use of HPKE in JOSE">Use of Hybrid Public-Key Encryption (HPKE) with Javascript Object Signing and Encryption (JOSE)</title>
    <seriesInfo name="Internet-Draft" value="draft-rha-jose-hpke-encrypt-06"/>
    <author fullname="Tirumaleswar Reddy">
      <organization>Nokia</organization>
      <address>
        <postal>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <country>India</country>
        </postal>
        <email>kondtir@gmail.com</email>
      </address>
    </author>
    <author fullname="Hannes Tschofenig">
      <organization/>
      <address>
        <postal>
          <country>Austria</country>
        </postal>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author fullname="Aritra Banerjee">
      <organization>Nokia</organization>
      <address>
        <postal>
          <city>Munich</city>
          <country>Germany</country>
        </postal>
        <email>aritra.banerjee@nokia.com</email>
      </address>
    </author>
    <author initials="O." surname="Steele" fullname="Orie Steele">
      <organization>Transmute</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>orie@transmute.industries</email>
      </address>
    </author>
    <author initials="M." surname="Jones" fullname="Michael B. Jones">
      <organization>independent</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>michael_b_jones@hotmail.com</email>
      </address>
    </author>
    <date year="2024" month="March" day="17"/>
    <area>Security</area>
    <workgroup>JOSE</workgroup>
    <keyword>HPKE</keyword>
    <keyword>JOSE</keyword>
    <keyword>PQC</keyword>
    <keyword>Hybrid</keyword>
    <abstract>
      <?line 92?>

<t>This specification defines Hybrid public-key encryption (HPKE) for use with 
Javascript Object Signing and Encryption (JOSE). HPKE offers a variant of
public-key encryption of arbitrary-sized plaintexts for a recipient public key.</t>
      <t>HPKE works for any combination of an asymmetric key encapsulation mechanism (KEM),
key derivation function (KDF), and authenticated encryption with additional data 
(AEAD) function. Authentication for HPKE in JOSE is provided by 
JOSE-native security mechanisms or by one of the authenticated variants of HPKE.</t>
      <t>This document defines the use of the HPKE with JOSE.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-rha-jose-hpke/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        jose Working Group mailing list (<eref target="mailto:jose@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/jose/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/jose/"/>.
      </t>
    </note>
  </front>
  <middle>
    <?line 106?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Hybrid public-key encryption (HPKE) <xref target="RFC9180"/> is a scheme that 
provides public key encryption of arbitrary-sized plaintexts given a 
recipient's public key.</t>
      <t>This specification enables JSON Web Encryption (JWE) to leverage HPKE, 
bringing support for KEMs and the possibility of Post Quantum or Hybrid KEMs to JWE.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

</section>
    <section anchor="conventions-and-terminology">
      <name>Conventions and Terminology</name>
      <t>This specification uses the following abbreviations and terms:</t>
      <ul spacing="normal">
        <li>
          <t>Key Type (kty), see <xref target="RFC7517"/>.</t>
        </li>
        <li>
          <t>Content Encryption Key (CEK), is defined in <xref target="RFC7517"/>.</t>
        </li>
        <li>
          <t>Hybrid Public Key Encryption (HPKE) is defined in <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>pkR is the public key of the recipient, as defined in <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>skR is the private key of the recipient, as defined in <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>Key Encapsulation Mechanism (KEM), see <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>Key Derivation Function (KDF), see <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>Authenticated Encryption with Associated Data (AEAD), see <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>Additional Authenticated Data (AAD), see <xref target="RFC9180"/>.</t>
        </li>
      </ul>
    </section>
    <section anchor="hpke-for-jose">
      <name>HPKE for JOSE</name>
      <section anchor="overview">
        <name>Overview</name>
        <t>JSON Web Encryption (JWE) <xref target="RFC7516"/> defines several serializations for expressing encrypted content with JSON:</t>
        <ul spacing="normal">
          <li>
            <t>Compact JWE Serialization</t>
          </li>
          <li>
            <t>General JWE JSON Serialization</t>
          </li>
          <li>
            <t>Flattened JWE JSON Serialization</t>
          </li>
        </ul>
        <t>JSON Web Algorithms (JWA) <xref section="4.6" sectionFormat="of" target="RFC7518"/> defines two ways to use public key cryptography with JWE:</t>
        <ul spacing="normal">
          <li>
            <t>Direct Key Agreement</t>
          </li>
          <li>
            <t>Key Agreement with Key Wrapping</t>
          </li>
        </ul>
        <t>The specification enables Hybrid Public Key Encryption (HPKE) <xref target="RFC9180"/> to be used with the serializations defined in JWE.</t>
        <t>Unless otherwise stated, no changes to the processes described in <xref target="RFC7516"/> have been made.</t>
        <t>This specification describes two modes of use for HPKE in JWE:</t>
        <ul spacing="normal">
          <li>
            <t>HPKE Direct Encryption mode, where HPKE is used to encrypt the plaintext. This mode can only be used with a single recipient. This setup is conceptually similar to Direct Key Agreement.</t>
          </li>
          <li>
            <t>HPKE Key Encryption mode, where HPKE is used to encrypt a content encryption key (CEK) and the CEK is subsequently used to encrypt the plaintext. This mode supports multiple recipients. This setup is conceptually similar to Key Agreement with Key Wrapping.</t>
          </li>
        </ul>
        <t>When the alg value or enc value is set to any of algorithms registered by this specification then the 'epk' header parameter <bcp14>MUST</bcp14> be present, and it <bcp14>MUST</bcp14> be a JSON Web Key as defined in <xref target="EK"/> of this document.</t>
        <t>The "ek" member of an 'epk' will contain the base64url encoded "enc" value produced by the encapsulate operation of the HPKE KEM.</t>
        <t>In all serializations, "ct" will be base64url encoded.</t>
        <t>If the 'alg' header parameter is set to the "dir" value (as defined in <xref target="IANA"/>), HPKE is used in Direct Encryption mode; otherwise, it is in Key Encryption mode.</t>
        <t>Interested readers will observe this is due to all recipients using the same JWE Protected Header when JSON Serializations are used, as described in <xref section="7.2.1" sectionFormat="of" target="RFC7516"/>.</t>
        <t>We provide the following table for additional clarity:</t>
        <table align="left" anchor="serialization-mode-table">
          <name>JOSE HPKE Serializations and Modes</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Recipients</th>
              <th align="left">Serializations</th>
              <th align="left">Content Encryption Key</th>
              <th align="left">Similar to</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Direct Encryption</td>
              <td align="left">1</td>
              <td align="left">Compact, JSON</td>
              <td align="left">Derived from HPKE</td>
              <td align="left">Direct Key Agreement</td>
            </tr>
            <tr>
              <td align="left">Key Encryption</td>
              <td align="left">1 or More</td>
              <td align="left">Compact, JSON</td>
              <td align="left">Encrypted by HPKE</td>
              <td align="left">Key Agreement with Key Wrapping</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="hpke-encryption">
        <name>HPKE Encryption</name>
        <t>The message encryption process is as follows.</t>
        <ol spacing="normal" type="1"><li>
            <t>The sending HPKE context is created by invoking invoking SetupBaseS() (Section 5.1.1 of <xref target="RFC9180"/>) with the recipient's public key "pkR" and "info". The HPKE specification defines the "info" parameter as a context information structure that is used to ensure that the derived keying material is bound to the context of the transaction. The SetupBaseS function will be called with the default value of an empty string for the 'info' parameter. This yields the context "sctxt" and an encapsulation key "enc".</t>
          </li>
        </ol>
        <t>There exist two cases of HPKE plaintext which need to be distinguished:</t>
        <ul spacing="normal">
          <li>
            <t>In HPKE Direct Encryption mode, the plaintext "pt" passed into Seal
  is the content to be encrypted.  Hence, there is no intermediate
  layer utilizing a CEK.</t>
          </li>
          <li>
            <t>In HPKE Key Encryption mode, the plaintext "pt" passed into
  Seal is the CEK. The CEK is a random byte sequence of length
  appropriate for the encryption algorithm. For example, AES-128-GCM 
  requires a 16 byte key and the CEK would therefore be 16 bytes long.</t>
          </li>
        </ul>
      </section>
      <section anchor="hpke-decryption">
        <name>HPKE Decryption</name>
        <t>The recipient will create the receiving HPKE context by invoking SetupBaseR() (Section 5.1.1 of <xref target="RFC9180"/>) with "skR", "enc" (output of base64url decoded 'ek'), and "info" (empty string). This yields the context "rctxt". The receiver then decrypts "ct" by invoking the Open() method on "rctxt" (Section 5.2 of <xref target="RFC9180"/>) with "aad", yielding "pt" or an error on failure.</t>
        <t>The Open function will, if successful, decrypts "ct".  When decrypted, the result will be either the CEK (when Key Encryption mode is used), or the content (if Direct Encryption mode is used).  The CEK is the symmetric key used to decrypt the ciphertext.</t>
      </section>
      <section anchor="EK">
        <name>Encapsulated JSON Web Keys</name>
        <t>An encapsulated key is represented as JSON Web Key as described in { Section 4 of RFC7515 }.</t>
        <t>The "kty" parameter <bcp14>MUST</bcp14> be "EK".</t>
        <t>The "ek" parameter <bcp14>MUST</bcp14> be present, and <bcp14>MUST</bcp14> be the base64url encoded output of the encap operation defined for the HPKE KEM.</t>
        <t>As described in { Section 4 of RFC7515 }, additional members can be present in the JWK; if not understood by implementations encountering them, they <bcp14>MUST</bcp14> be ignored.</t>
        <t>This example demonstrates the representaton of an encapsulated key as a JWK.</t>
        <artwork><![CDATA[
{
   "kty": "EK",
   "ek": "BHpP-u5JKziyUpqxNQqb0apHx1ecH2UzcRlhHR4ngJVS__gNu21DqqgPweuPpjglnXDnOuQ4kt9tHCs3PUzPxQs"
}
]]></artwork>
        <section anchor="hpke-direct-encryption">
          <name>HPKE Direct Encryption</name>
          <t>This mode only supports a single recipient.</t>
          <t>HPKE is employed to directly encrypt the plaintext, and the resulting ciphertext is included in the JWE ciphertext.</t>
          <t>In HPKE Direct Encryption mode:</t>
          <ul spacing="normal">
            <li>
              <t>The "epk" Header Parameter <bcp14>MUST</bcp14> be present, it <bcp14>MUST</bcp14> contain an Encapsulated JSON Web Key and it <bcp14>MUST</bcp14> occur only within the JWE Protected Header.</t>
            </li>
            <li>
              <t>The "alg" Header Parameter <bcp14>MUST</bcp14> be "dir", "enc" <bcp14>MUST</bcp14> be an HPKE algorithm from JSON Web Signature and Encryption Algorithms in <xref target="JOSE-IANA"/> and they <bcp14>MUST</bcp14> occur only within the JWE Protected Header.</t>
            </li>
            <li>
              <t>The JWE Ciphertext <bcp14>MUST</bcp14> be the resulting HPKE ciphertext ('ct' value) encoded using base64url.</t>
            </li>
            <li>
              <t>The JWE Initialization Vector value <bcp14>MUST</bcp14> be absent.</t>
            </li>
            <li>
              <t>The JWE Authentication Tag <bcp14>MUST</bcp14> be absent.</t>
            </li>
            <li>
              <t>The JWE Encrypted Key <bcp14>MUST</bcp14> be absent.</t>
            </li>
            <li>
              <t>The HPKE "aad" parameter <bcp14>MUST</bcp14> be set to the JWE Additional Authenticated Data encryption parameter defined in Step 14 of Section 5.1 of <xref target="RFC7516"/> as input.</t>
            </li>
          </ul>
          <t>The following example demonstrates the use of Direct Encryption with Compact Serialization:</t>
          <figure anchor="direct-encryption-compact">
            <name>Direct Encryption with Compact Serialization</name>
            <artwork align="left"><![CDATA[
eyJhbGciOiJkaXIiLCJlbmMiOiJIUEtFLUJhc2UtUDI1Ni1TSEEyNTYtQUVTMTI4R0NNIiwiZXBrIjp7Imt0eSI6IkVLIiwiZWsiOiJCR05ranp0MDc2YnNSR2o3OGFYNUF6VF9IRU9KQmJZOXEyWm9fNWU3dGJLMGFQcXU0ZVQxV0kxNmp2UmxacXBNeXFaZlAtUndSNEp3dGF6XzhVOXRoWEEifX0...DG3qygxcMHw3iACy5mX_T4N4EqWc03W0nkTHjMJsC4nb6JS6vVj6wTGdlr5TOSr0ykaoyzpePXEvEyHhvpUwCyQQr6kbGlGuZsrJdUbZ728vmA.
]]></artwork>
          </figure>
          <t>In the above example, the JWE Protected Header value is:</t>
          <artwork><![CDATA[
{
  "alg": "dir",
  "enc": "HPKE-Base-P256-SHA256-AES128GCM",
  "epk": {
    "kty": "EK",
    "ek": "BGNkjzt076bsRGj78aX5AzT_HEOJBbY9q2Zo_5e7tbK0aPqu4eT1WI16jvRlZqpMyqZfP-RwR4Jwtaz_8U9thXA"
  }
}
]]></artwork>
          <figure anchor="direct-encryption-json">
            <name>Direct Encryption with JSON Serialization</name>
            <artwork align="left"><![CDATA[
{
    "protected": "eyJhbGciOiJkaXIiLCJlbmMiOiJIUEtFLUJhc2UtUDI1Ni1TSEEyNTYtQUVTMTI4R0NNIiwiZXBrIjp7Imt0eSI6IkVLIiwiZWsiOiJCTzRFbGZXd0xKRDZWcERza3c5LWxWMm9OMDJ2U1FKTW55ZHk3enhvSVlKZ1kydk9taE44Q1BqSHdRM1NONkhTcnNHNElacVpHVUR3dExKZjBoeHFTWGsifX0",
    "ciphertext": "1ATsw0jshqPrv8CFcm9Rem9Wfi1Ygv30sozlRTtNNzcaaZ828GqP0AXtqQ1Msv8YXI9XZqh81MK3QnlZ7pOBC1BP7j00J1rrHujdb3zvnOpmJg"
}
]]></artwork>
          </figure>
          <t>In the above example, the JWE Protected Header value is:</t>
          <artwork><![CDATA[
{
  "alg": "dir",
  "enc": "HPKE-Base-P256-SHA256-AES128GCM",
  "epk": {
    "kty": "EK",
    "ek": "BGNkjzt076bsRGj78aX5AzT_HEOJBbY9q2Zo_5e7tbK0aPqu4eT1WI16jvRlZqpMyqZfP-RwR4Jwtaz_8U9thXA"
  }
}
]]></artwork>
        </section>
        <section anchor="hpke-key-encryption">
          <name>HPKE Key Encryption</name>
          <t>This mode supports more than one recipient.</t>
          <t>HPKE is used to encrypt the     Content Encryption Key (CEK), and the resulting ciphertext is included in the JWE Encrypted Key. The plaintext will be encrypted using the CEK as explained in Step 15 of Section 5.1 of <xref target="RFC7516"/>.</t>
          <t>When there are multiple recipients, the sender <bcp14>MUST</bcp14> place the 'epk' parameter in the per-recipient unprotected header to indicate the use of HPKE. In this case, the 'enc' (Encryption Algorithm) Header Parameter <bcp14>MUST</bcp14> be a content encryption algorithm from JSON Web Signature and Encryption Algorithms in <xref target="JOSE-IANA"/>, and it <bcp14>MUST</bcp14> be present in the JWE Protected Header. The integrity-protected 'enc' parameter provides protection against an attacker who manipulates the encryption algorithm in the 'enc' parameter. This attack is discussed in <xref target="I-D.draft-ietf-lamps-cms-cek-hkdf-sha256"/>.</t>
          <t>In HPKE Key Encryption mode:</t>
          <ul spacing="normal">
            <li>
              <t>The JWE Encrypted Key <bcp14>MUST</bcp14> be the resulting HPKE ciphertext ('ct' value) encoded using base64url.</t>
            </li>
          </ul>
          <t>The following example demonstrates the use of Key Encryption with General JSON Serialization:</t>
          <figure anchor="key-encryption-multiple-recipient-general-json">
            <name>Key Encryption (multiple recipient) General JSON Serialization</name>
            <artwork align="left"><![CDATA[
{
  "protected": "eyJlbmMiOiJBMTI4R0NNIn0",
  "ciphertext": "S0qqrM3xXPUavbmL9LQkgUKRBu8BZ7DQWoT-mdNIZVU-ip_V-fbMokiGwp2aPM57DX3cXCK3TKHqdhZ8rSNduUja",
  "iv": "AzaXpooLg3ZxEASQ",
  "aad": "8J-SgCBhYWQ",
  "tag": "S0omWw35S0H7tyEHsmGLDw",
  "recipients": [
    {
      "encrypted_key": "yDVZLsO7-ecy_GCgEluwn9U723TCHNAzeYRRQPOfpHM",
      "header": {
        "kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:adjwW6fyyZ94ZBjGjx_OpDEKHLGfd1ELkug_YmRAjCk",
        "alg": "HPKE-Base-P256-SHA256-AES128GCM",
        "epk": {
          "kty": "EK",
          "ek": "BHpP-u5JKziyUpqxNQqb0apHx1ecH2UzcRlhHR4ngJVS__gNu21DqqgPweuPpjglnXDnOuQ4kt9tHCs3PUzPxQs"
        }
      }
    },
    {
      "encrypted_key": "iS73TFqJ61gkmh4DHAXADx4wyftA7pnY",
      "header": {
        "kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:D2FKlj9MTIQma5bwdOVXk5Zh3_d60knzlbmD-SyMNAI",
        "alg": "ECDH-ES+A128KW",
        "epk": {
          "kty": "EC",
          "crv": "P-256",
          "x": "nX6Y3DWC0olVe5H7-NkCzVDghsYSa_L9da3jzkHYkV8",
          "y": "wDshQdcaY0J08wx25V3ystQSNe_qjsCaaFeeRWJqcE0"
        }
      }
    }
  ]
}
]]></artwork>
          </figure>
          <t>In the above example, the JWE Protected Header value is:</t>
          <artwork><![CDATA[
{
   "enc": "A128GCM"
}
]]></artwork>
          <figure anchor="key-encryption-single-recipient-flattened-json">
            <name>Key Encryption (single recipient) Flattened JSON Serialization</name>
            <artwork align="left"><![CDATA[
{
  "protected": "eyJhbGciOiAiSFBLRS1CYXNlLVAyNTYtU0hBMjU2LUFFUzEyOEdDTSIsImVuYyI6IkExMjhHQ00iLCJlcGsiOnsia3R5IjoiRUsiLCJlayI6IkJQUlRLbjhtUUw0aE4xYXlva1I4Z2twVHk1SFFsZDROMEhYWEI5Y1h0alVJUTM3enNKREw3VHVnVmttRDFhRllUeC0wYk0wdGZ4emVqTGN0U0RLak1RcyJ9fQ",
  "encrypted_key": "zR0ArfrVVRQ9-X_heDU2riwx36QxLBffRrKAWU-tLC4",
  "iv": "o3v11Hw6gUxUN-pY",
  "ciphertext": "Ny-2IDGHMI3MzVsUAVMGNoKAZfoewTZ1dkAIBikPy4eZUfHW_LPhhKpD6Mf4zYGkhAeLwGgJKjyDoFIj0EuDsEtJ",
  "tag": "0sfzHJvxVoWt02EPxMTh8w"
}
]]></artwork>
          </figure>
          <t>In the above example, the JWE Protected Header value is:</t>
          <artwork><![CDATA[
{

  "alg": "HPKE-Base-P256-SHA256-AES128GCM",
  "enc": "A128GCM",  
  "epk": {
    "kty": "EK",
    "ek": "BPRTKn8mQL4hN1ayokR8gkpTy5HQld4N0HXXB9cXtjUIQ37zsJDL7TugVkmD1aFYTx-0bM0tfxzejLctSDKjMQs"
  }
}
]]></artwork>
          <figure anchor="key-encryption-single-recipient-compact">
            <name>Key Encryption (single recipient) Compact</name>
            <artwork align="left"><![CDATA[
eyJhbGciOiAiSFBLRS1CYXNlLVAyNTYtU0hBMjU2LUFFUzEyOEdDTSIsImVuYyI6IkExMjhHQ00iLCJlcGsiOnsia3R5IjoiRUsiLCJlayI6IkJKN3JkTmJrdnd1bnNzZGp1NVdEa0FhekxhQlgzSWRjTFJqeTFSRFNBOXNpajAwamR5YmFIdVFQVHQ2UDMxQmkwbkUya1lXXzdMX3RhQXFBRks3NURlayJ9fQ.xaAa0nFxNJxsQQ5J6EFdzUYROd2aV517o2kZnfwhO7s.AgBYEWTj-EMji17I.Ejwu2iEP4xs3FfGO_zTZYu35glQmUvd_qpHpvB1hNqg6Yz5ek3NsZRGMzd--HYWvABNslxBkRwrkZDXnv_BTgOTj.u0ac86ipoAwUZuYwkaKwNw
]]></artwork>
          </figure>
          <t>In the above example, the JWE Protected Header value is:</t>
          <artwork><![CDATA[
{
  "alg": "HPKE-Base-P256-SHA256-AES128GCM",
  "enc": "A128GCM",
  "epk": {
    "kty": "EK",
    "ek": "BJ7rdNbkvwunssdju5WDkAazLaBX3IdcLRjy1RDSA9sij00jdybaHuQPTt6P31Bi0nE2kYW_7L_taAqAFK75Dek"
  }
}
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="ciphersuite-registration">
      <name>Ciphersuite Registration</name>
      <t>This specification registers a number of ciphersuites for use with HPKE.
A ciphersuite is a group of algorithms, often sharing component algorithms such as hash functions, targeting a security level.
An HPKE ciphersuite, is composed of the following choices:</t>
      <ul spacing="normal">
        <li>
          <t>HPKE Mode</t>
        </li>
        <li>
          <t>KEM Algorithm</t>
        </li>
        <li>
          <t>KDF Algorithm</t>
        </li>
        <li>
          <t>AEAD Algorithm</t>
        </li>
      </ul>
      <t>The "KEM", "KDF", and "AEAD" values are chosen from the HPKE IANA registry <xref target="HPKE-IANA"/>.</t>
      <t>For readability the algorithm ciphersuites labels are built according to the following scheme:</t>
      <artwork><![CDATA[
HPKE-<Mode>-<KEM>-<KDF>-<AEAD>
]]></artwork>
      <t>The "Mode" indicator may be populated with the following values from
Table 1 of <xref target="RFC9180"/>:</t>
      <ul spacing="normal">
        <li>
          <t>"Base" refers to "mode_base" described in Section 5.1.1 of <xref target="RFC9180"/>,
which only enables encryption to the holder of a given KEM private key.</t>
        </li>
        <li>
          <t>"PSK" refers to "mode_psk", described in Section 5.1.2 of <xref target="RFC9180"/>,
which authenticates using a pre-shared key.</t>
        </li>
        <li>
          <t>"Auth" refers to "mode_auth", described in Section 5.1.3 of <xref target="RFC9180"/>,
which authenticates using an asymmetric key.</t>
        </li>
        <li>
          <t>"Auth_Psk" refers to "mode_auth_psk", described in Section 5.1.4 of <xref target="RFC9180"/>,
which authenticates using both a PSK and an asymmetric key.</t>
        </li>
      </ul>
      <t>For a list of ciphersuite registrations, please see <xref target="IANA"/>.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This specification is based on HPKE and the security considerations of
<xref target="RFC9180"/> are therefore applicable also to this specification.</t>
      <t>HPKE assumes the sender is in possession of the public key of the recipient and
HPKE JOSE makes the same assumptions. Hence, some form of public key distribution
mechanism is assumed to exist but outside the scope of this document.</t>
      <t>HPKE in Base mode does not offer authentication as part of the HPKE KEM. In this case 
JOSE constructs like JWS and JSON Web Tokens (JWTs) can be used to add authentication. 
HPKE also offers modes that offer authentication.</t>
      <t>HPKE relies on a source of randomness to be available on the device. In Key Agreement 
with Key Wrapping mode, CEK has to be randomly generated and it <bcp14>MUST</bcp14> be
ensured that the guidelines in <xref target="RFC8937"/> for random number generations are followed.</t>
      <section anchor="plaintext-compression">
        <name>Plaintext Compression</name>
        <t>Implementers are advised to review Section 3.6 of <xref target="RFC8725"/>, which states: 
Compression of data <bcp14>SHOULD NOT</bcp14> be done before encryption, because such compressed data often reveals information about the plaintext.</t>
      </section>
      <section anchor="header-parameters">
        <name>Header Parameters</name>
        <t>Implementers are advised to review Section 3.10 of <xref target="RFC8725"/>, which comments on application processing of JWE Protected Headers.
Additionally, Unprotected Headers can contain similar information which an attacker could leverage to mount denial of service, forgery or injection attacks.</t>
      </section>
      <section anchor="ensure-cryptographic-keys-have-sufficient-entropy">
        <name>Ensure Cryptographic Keys Have Sufficient Entropy</name>
        <t>Implementers are advised to review Section 3.5 of <xref target="RFC8725"/>, which provides comments on entropy requirements for keys. This guidance is relevant to both public and private keys used in both Key Encryption and Direct Encryption. Additionally, this guidance is applicable to content encryption keys used in Key Encryption mode.</t>
      </section>
      <section anchor="validate-cryptographic-inputs">
        <name>Validate Cryptographic Inputs</name>
        <t>Implementers are advised to review Section 3.4 of <xref target="RFC8725"/>, which provides comments on the validation of cryptographic inputs. This guidance is relevant to both public and private keys used in both Key Encryption and Direct Encryption, specifically focusing on the structure of the public and private keys, as well as the 'ek' value. These inputs are crucial for the HPKE KEM operations.</t>
      </section>
      <section anchor="use-appropriate-algorithms">
        <name>Use Appropriate Algorithms</name>
        <t>Implementers are advised to review Section 3.2 of <xref target="RFC8725"/>, which comments on the selection of appropriate algorithms.
This is guidance is relevant to both Key Encryption and Direct Encryption.
When using Key Encryption, the strength of the content encryption algorithm should not be significantly different from the strengh of the Key Encryption algorithms used.</t>
      </section>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>This document adds entries to <xref target="JOSE-IANA"/>.</t>
      <section anchor="json-web-key-types">
        <name>JSON Web Key Types</name>
        <t>The following entry is added to the "JSON Web Key Types" registry:</t>
        <ul spacing="normal">
          <li>
            <t>"kty" Parameter Value: "EK"</t>
          </li>
          <li>
            <t>Key Type Description: HPKE Encapsulated Key Type (See issue #18)</t>
          </li>
          <li>
            <t>JOSE Implementation Requirements: Optional</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): [[TBD: This RFC]]</t>
          </li>
        </ul>
      </section>
      <section anchor="json-web-key-parameters">
        <name>JSON Web Key Parameters</name>
        <t>The following entry is added to the "JSON Web Key Parameters" registry:</t>
        <ul spacing="normal">
          <li>
            <t>Parameter Name: "ek"</t>
          </li>
          <li>
            <t>Parameter Description: Encapsulated Key</t>
          </li>
          <li>
            <t>Parameter Information Class: Public</t>
          </li>
          <li>
            <t>Used with "kty" Value(s): "EK"</t>
          </li>
          <li>
            <t>Specification Document(s): [[TBD: This RFC]]</t>
          </li>
        </ul>
      </section>
      <section anchor="json-web-signature-and-encryption-algorithms">
        <name>JSON Web Signature and Encryption Algorithms</name>
        <t>The following entries are added to the "JSON Web Signature and Encryption Algorithms" registry:</t>
        <ul spacing="normal">
          <li>
            <t>Algorithm Name: HPKE-Base-P256-SHA256-AES128GCM</t>
          </li>
          <li>
            <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(P-256, HKDF-SHA256) KEM, the HKDF-SHA256 KDF and the AES-128-GCM AEAD.</t>
          </li>
          <li>
            <t>Algorithm Usage Location(s): "alg, enc"</t>
          </li>
          <li>
            <t>JOSE Implementation Requirements: Optional</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): [[TBD: This RFC]]</t>
          </li>
          <li>
            <t>Algorithm Analysis Documents(s): TODO</t>
          </li>
          <li>
            <t>Algorithm Name: HPKE-Base-P384-SHA384-AES256GCM</t>
          </li>
          <li>
            <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(P-384, HKDF-SHA384) KEM, the HKDF-SHA384 KDF, and the AES-256-GCM AEAD.</t>
          </li>
          <li>
            <t>Algorithm Usage Location(s): "alg, enc"</t>
          </li>
          <li>
            <t>JOSE Implementation Requirements: Optional</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): [[TBD: This RFC]]</t>
          </li>
          <li>
            <t>Algorithm Analysis Documents(s): TODO</t>
          </li>
          <li>
            <t>Algorithm Name: HPKE-Base-P521-SHA512-AES256GCM</t>
          </li>
          <li>
            <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(P-521, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the AES-256-GCM AEAD.</t>
          </li>
          <li>
            <t>Algorithm Usage Location(s): "alg, enc"</t>
          </li>
          <li>
            <t>JOSE Implementation Requirements: Optional</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): [[TBD: This RFC]]</t>
          </li>
          <li>
            <t>Algorithm Analysis Documents(s): TODO</t>
          </li>
          <li>
            <t>Algorithm Name: HPKE-Base-X25519-SHA256-AES128GCM</t>
          </li>
          <li>
            <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(X25519, HKDF-SHA256) KEM, the HKDF-SHA256 KDF, and the AES-128-GCM AEAD.</t>
          </li>
          <li>
            <t>Algorithm Usage Location(s): "alg, enc"</t>
          </li>
          <li>
            <t>JOSE Implementation Requirements: Optional</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): [[TBD: This RFC]]</t>
          </li>
          <li>
            <t>Algorithm Analysis Documents(s): TODO</t>
          </li>
          <li>
            <t>Algorithm Name: HPKE-Base-X25519-SHA256-ChaCha20Poly1305</t>
          </li>
          <li>
            <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(X25519, HKDF-SHA256) KEM, the HKDF-SHA256 KDF, and the ChaCha20Poly1305 AEAD.</t>
          </li>
          <li>
            <t>Algorithm Usage Location(s): "alg, enc"</t>
          </li>
          <li>
            <t>JOSE Implementation Requirements: Optional</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): [[TBD: This RFC]]</t>
          </li>
          <li>
            <t>Algorithm Analysis Documents(s): TODO</t>
          </li>
          <li>
            <t>Algorithm Name: HPKE-Base-X448-SHA512-AES256GCM</t>
          </li>
          <li>
            <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(X448, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the AES-256-GCM AEAD.</t>
          </li>
          <li>
            <t>Algorithm Usage Location(s): "alg, enc"</t>
          </li>
          <li>
            <t>JOSE Implementation Requirements: Optional</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): [[TBD: This RFC]]</t>
          </li>
          <li>
            <t>Algorithm Analysis Documents(s): TODO</t>
          </li>
          <li>
            <t>Algorithm Name: HPKE-Base-X448-SHA512-ChaCha20Poly1305</t>
          </li>
          <li>
            <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(X448, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the ChaCha20Poly1305 AEAD.</t>
          </li>
          <li>
            <t>Algorithm Usage Location(s): "alg, enc"</t>
          </li>
          <li>
            <t>JOSE Implementation Requirements: Optional</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): [[TBD: This RFC]]</t>
          </li>
          <li>
            <t>Algorithm Analysis Documents(s): TODO</t>
          </li>
        </ul>
      </section>
      <section anchor="json-web-signature-and-encryption-header-parameters">
        <name>JSON Web Signature and Encryption Header Parameters</name>
        <t>The following entries are added to the "JSON Web Key Parameters" registry:</t>
        <ul spacing="normal">
          <li>
            <t>Parameter Name: "psk_id"</t>
          </li>
          <li>
            <t>Parameter Description: A key identifier (kid) for the pre-shared key as defined in { Section 5.1.1 of RFC9180 }</t>
          </li>
          <li>
            <t>Parameter Information Class: Public</t>
          </li>
          <li>
            <t>Used with "kty" Value(s): *</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): [[This specification]]</t>
          </li>
          <li>
            <t>Parameter Name: "auth_kid"</t>
          </li>
          <li>
            <t>Parameter Description: A key identifier (kid) for the asymmetric key as defined in { Section 5.1.4 of RFC9180 }</t>
          </li>
          <li>
            <t>Parameter Information Class: Public</t>
          </li>
          <li>
            <t>Used with "kty" Value(s): *</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): [[This specification]]</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9180">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="RFC7516">
          <front>
            <title>JSON Web Encryption (JWE)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Hildebrand" initials="J." surname="Hildebrand"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Encryption (JWE) represents encrypted content using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries defined by that specification. Related digital signature and Message Authentication Code (MAC) capabilities are described in the separate JSON Web Signature (JWS) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7516"/>
          <seriesInfo name="DOI" value="10.17487/RFC7516"/>
        </reference>
        <reference anchor="RFC7518">
          <front>
            <title>JSON Web Algorithms (JWA)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications. It defines several IANA registries for these identifiers.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7518"/>
          <seriesInfo name="DOI" value="10.17487/RFC7518"/>
        </reference>
        <reference anchor="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="RFC8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>JSON Web Tokens, also known as JWTs, are URL-safe JSON-based security tokens that contain a set of claims that can be signed and/or encrypted. JWTs are being widely used and deployed as a simple security token format in numerous protocols and applications, both in the area of digital identity and in other application areas. This Best Current Practices document updates RFC 7519 to provide actionable guidance leading to secure implementation and deployment of JWTs.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </reference>
        <reference anchor="JOSE-IANA" target="https://www.iana.org/assignments/jose/jose.xhtml">
          <front>
            <title>JSON Web Signature and Encryption Algorithms</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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="HPKE-IANA" target="https://www.iana.org/assignments/hpke/hpke.xhtml">
          <front>
            <title>Hybrid Public Key Encryption (HPKE) IANA Registry</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date year="2023" month="October"/>
          </front>
        </reference>
        <reference anchor="I-D.draft-ietf-lamps-cms-cek-hkdf-sha256">
          <front>
            <title>Encryption Key Derivation in the Cryptographic Message Syntax (CMS) using HKDF with SHA-256</title>
            <author fullname="Russ Housley" initials="R." surname="Housley">
              <organization>Vigil Security, LLC</organization>
            </author>
            <date day="29" month="January" year="2024"/>
            <abstract>
              <t>   This document specifies the derivation of the content-encryption key
   or the content-authenticated-encryption key in the Cryptographic
   Message Syntax (CMS).  The use of this mechanism provides protection
   against where the attacker manipulates the content-encryption
   algorithm identifier or the content-authenticated-encryption
   algorithm identifier.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-cms-cek-hkdf-sha256-00"/>
        </reference>
        <reference anchor="I-D.ietf-cose-hpke">
          <front>
            <title>Use of Hybrid Public-Key Encryption (HPKE) with CBOR Object Signing and Encryption (COSE)</title>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Transmute</organization>
            </author>
            <author fullname="Ajitomi, Daisuke" initials="A." surname="Daisuke">
         </author>
            <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
              <organization>Security Theory LLC</organization>
            </author>
            <date day="22" month="October" year="2023"/>
            <abstract>
              <t>   This specification defines hybrid public-key encryption (HPKE) for
   use with CBOR Object Signing and Encryption (COSE).  HPKE offers a
   variant of public-key encryption of arbitrary-sized plaintexts for a
   recipient public key.

   HPKE works for any combination of an asymmetric key encapsulation
   mechanism (KEM), key derivation function (KDF), and authenticated
   encryption with additional data (AEAD) function.  Authentication for
   HPKE in COSE is provided by COSE-native security mechanisms or by one
   of the authenticated variants of HPKE.

   This document defines the use of the HPKE with COSE.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-hpke-07"/>
        </reference>
      </references>
    </references>
    <?line 581?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This specification leverages text from <xref target="I-D.ietf-cose-hpke"/>. We would like to thank Matt Chanda, Ilari Liusvaara, Aaron Parecki and Filip Skokan for their feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
t3ch76IWImSucKvhqM+fZOeTCAu/BOZDpI2BWYlvUcODnrBSOQJgwI6IwDKg
0IzxslFs4tFR4oAsjsfHhoe5UCNiA45Hcny4JzxhMSP5OwfgzcJxNJcJVoqk
+X2HWlKWm8FI0BG4Zq/4R5C1YHsRd27Mw+z3VXvlnWO+1B/u5v0icSxPuxFW
i+7ry9m9rLbVukYmNfXhrq7P1k18rg3LTuVhWF/KuaEzLNWyLTU76JfL+9bg
0ekOR4PmoHbey7RaNXWrTie3dm1lXdbWTob2axc1bfTA348ZrnXXyxQg8LQy
zZKcezRa/V7OzLfvK4+tYeViVLmu9YbXje66Pm1Pyvvx+nreGg/zyn39oXlf
6cqTYWY66u5GGW3XWlu54XpH5Mlti04qZKoXnaGh9FtlC8ZXLiaH5ag96Znj
clmdTzLpdLp0n3/eL3Zys7rNq8W7fWE9eRqct87Lz2M5kx9nDG1QXTXr7O7c
mF3U+xeb0epiO7hXdLswaPftzF4j5v5g0c6kvCnvq8uNNdze7btd+0Kb3ev3
7pTZdWU4m17mrjbrYlr4AkimhdlMhUKRkj0+nMqmP8I6zKtrXhlwZm5oGIO/
puJBdRBPDXxnxQ3XjWeg8BlNFDzzHhEMj1OdXOEi1a8W8Q+E9xDdQ3DvjbXQ
sXGf98LpBV7vvqWtDk7m8mLGeveryysyKRQPg6dquV2/nT1eP+em5lOBXjqz
RoZ0nt1zOsiOa9mL1aanT5+t5v55Ou+ketveeX3rkMPT1fDaWU6K2O721fd8
geeF4NVHGvf+o+R6cOhVZvfTiZLZNXql6Vgu9w4kLxcexrtxc33dbpbquWG2
0hiMC4VpVctTY7npj/TGNKvtFe3aIeXz82729rlfVXrNbKvd0pYD2WhVW2Wd
yCOrOhr28kp515iubk1arQzG9wzl2id0aIcR6WxxwLaZFVs+d+zN1V1FXl/3
6Pp6PFezj4tNPsPMg94bOK3WQSZkegXsfO5kihPnuZttss3V46R2PZk+L6+y
zUa+a+jTS6t9e5e97VyuMpl61rar7kqZ5Q8bo22t6ws/+jgt7CvGc8V3S/rL
+uG/xTwU8yDAiydF0eguPIAwRa3I4E0yp6K7U4ca+N/b59m/Jc6LuWCR20aq
NX72FwwKq82YpRGM0PnwqP8svO0/I4ckGD7B/08cyJx5h3qYTAhfD9vINHL4
EaniC2wg90mFVQfXCKyNX/d3sMCj8Hgg6pN5D5JU87pHsHB15m1jyJ+kz6di
uy+vR5MnT7J+zyjyxaHOi1zsRADJ+YpMXWAdPhWSRiAZ0jLsehJDOPQLYDBz
eO+a4xBZ4ycKprQmhmrxgJ29WoLyoTrax6uyiOX42YbKZNcrkQG+f6ulSmnR
Vo5d1Skd7ApLyWv4P9VSS02Zp9iSgDng4vRGMe5GekfA+buEzx8LBI9A5QY2
6AZ4YWhvIsby2In6TvM2cIqGcD5HrqefeX62m/ndpDMkm9n64fqhqy2Gjd6t
e3U7vSx1x+YgtVZatelomFKtp1FqPmuamnq/tXKk0yxcliZ5eXLXyA8a1Wdl
Ob2y+y3FHa6I2Evd4B7FA5lYpvmwyE935WK/K77DyB2+vKqn+ou72+Xj2Hvv
kIUAzFyPt/lCP1O9dPblKlvfP5S2YkhoEGDkT9ym/+K1wiYDo/QEuT4utC+N
pg+sfZmi8v7p/m5R1t2tcT28zOUHd9VW8UAfe71upz23qk3PP8AqwjYELkS4
EZUD7NrGDUrfDRdbdmNiH+PNaqulnKW7nlk2KNQNiGEK5PCGKKvt+GK+30+v
z6e3q/vV7qltlcqN6sP9XMmWHzR38fS47hVXd1qweej63uPqfLQjDs+H98jt
+SP/uZUNf5+viejfr2ff4JLav8wPKs/1i+xCWy/PS9XipFjanW/3c6d4aRmP
vz9rSrlKQ19dg35016Qw2yrt0UQrTJf5J+UioxkH0KBSqr9vtoq1E6wp35Wq
qXL/P4vAisb4nZy4i3NCtrl6dBCc+Dc7fG9MLh7zpfFdxtRHtFC9TLW0u8Oo
tFiyxz55erhWSH510KqP2ugqPptvti2xZVeRyWOmnrna7nKFUX7PnG6/RZ+e
V+yOkAqlvXH9WS5nXmUa/PtzJFgEVkUjRd8/h+41tRC26vUg8riL56WP//KG
wfudIssglCx6enSclLyWkhTVfuX2odfP3j1OWvrDqMhTj2FmedtcDXMPw0pl
eCjv22WlNOjXWG09ch/3mHqUd83VstrNZHg6I0Mq0DaYSvK9Qm1lqr0h4+8J
H1vvDvXew2y1dIbDbQbSjN3jRN+QbO18mnO2o6qW7VcqbFrqtZtlMJrlWuEx
u8wQfVQfDpqQprQavfI2P6qOjNHacXqlyrKn60N6l9k+apmtcj89p+vR8+C+
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
nUgk/gd/ZD43QV0AAA==

-->

</rfc>
