<?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.5 (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-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.4 -->
  <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-04"/>
    <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="February" day="19"/>
    <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>Integrated Encryption mode, where HPKE is used with a single recipient. This setup is conceptually similar to Direct Key Agreement.</t>
          </li>
          <li>
            <t>Key Encryption mode, where HPKE may be used with 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 'HPKE-IntEnc' value (as defined in <xref target="IANA"/>), HPKE is used in Integrated 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">Integrated 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 Integrated 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 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 Integrated 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="integrated-encryption">
          <name>Integrated 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 Integrated 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 "HPKE-IntEnc", "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 Integrated Encryption with Compact Serialization:</t>
          <figure anchor="integrated-encryption-compact">
            <name>Integrated 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": "HPKE-IntEnc",
  "enc": "HPKE-Base-P256-SHA256-AES128GCM",
  "epk": {
    "kty": "EK",
    "ek": "BGNkjzt076bsRGj78aX5AzT_HEOJBbY9q2Zo_5e7tbK0aPqu4eT1WI16jvRlZqpMyqZfP-RwR4Jwtaz_8U9thXA"
  }
}
]]></artwork>
          <figure anchor="integrated-encryption-json">
            <name>Integrated 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": ""HPKE-IntEnc",
  "enc": "HPKE-Base-P256-SHA256-AES128GCM",
  "epk": {
    "kty": "EK",
    "ek": "BGNkjzt076bsRGj78aX5AzT_HEOJBbY9q2Zo_5e7tbK0aPqu4eT1WI16jvRlZqpMyqZfP-RwR4Jwtaz_8U9thXA"
  }
}
]]></artwork>
        </section>
        <section anchor="key-encryption">
          <name>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 ciphertext. 
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 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 Integrated 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 Integrated 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 Integrated 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: IESG</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-IntEnc</t>
          </li>
          <li>
            <t>Algorithm Description: Integrated Encryption mode for HPKE.</t>
          </li>
          <li>
            <t>Algorithm Usage Location(s): "alg"</t>
          </li>
          <li>
            <t>JOSE Implementation Requirements: Optional</t>
          </li>
          <li>
            <t>Change Controller: IESG</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-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: IESG</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: IESG</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: IESG</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: IESG</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: IESG</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: IESG</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: IESG</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 Signature and Encryption Header 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>Change Controller: IESG</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>Change Controller: IESG</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 588?>

<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:
H4sIAAAAAAAAA+082XYix5LvfEUNfnD3HYFZhLa5i5EAsQgQO8LHRyepSqCo
VZVVbHbfb5lvmS+biMxaEeqW7tie5U4fW0BWLpGxR2RkZTKZlKu6Or2R0iNG
JWsh1fdzR1WkR2+uq3KmRfdS1ZSdve2qlil9qj+2qp+lrequpCbZECY7qu1K
3fmayq40UJemai4lYiqJQc3uoPo5nSLzuUM3sZVgLkk1JXycTsnEpUvL2d9I
zFVSKcWSTWIAXIpDFm7GWZHM2mI0s7I1mqFi8hTz5obKGCzi7m3o26gOaynT
M+bUuUkpMOFNSrZMRk3msRvJdTyagvWLKeJQAnAMqOw5qrtPp7aWoy0dy7Oh
VYCj0T00KjcpKcMBxU98gp+PvTvezDGVklIbanqwlCQFUyCkafgtoEpPYHbE
yz0+xnaDqLrf7UeVuous5SyxnTjyCtpXrmuzmx9+wG7YpG5oNuj2Azb8MHes
LaM/4AQ/4MBUirmA9WeiWyasuKcsZas30k+uJZ9JzHJchy4YfNsb/hfXUWX3
TJItw6CmCy2Ab4PYNoD5cypFPHdlObh3mFuSFp6uC2IMVccziE7ZljhSnyrK
nncAuIipHgiS+0bqWJpKeLsMyL2Rbom5BMAcytscuuS9WsQxiUs0v6flmS4S
v2Eq/mDqY0mzTMVVnR+X+DsLEKdTrwGrE9OkTBoyeWUtqKkuT8AVAym5ZtlD
fCRXXfEJs244Iay/y5rUPbV6GbjIIbhR6qwpfQdO2p6pyqskGPfUMYi5T4BB
+MzZuT/zjybOk0SCagJvd7PSwKVUF2sLqLqOSuOtSYiGDjGZ4bk0vp4FQ350
gydZ1VQ4aoCdEpCOTNWlCswNIsYScLSzUhNYkMXAaMNGCdWl2/ijJCywDrUp
/DHdODSGGPk8f17jwB9XlhvwwNfgSZkWINIFqUGZ7NfuCvn8tf/1Kn957n+9
zl/l/K+XpfxF9PUq+noZDLsslPAraoBMo9wp33AApFBQ/H+wLWBheC5afNXa
HHQ70oTOuYIkrufQYxVZ1kH1gVI1mD+QOEvq3kiBJthut1mVmERoANB4S5PL
rdAA+Ce7W7mGjqpANRdH+7+6LsJG4Dsqso+Dn7AI0mmLgINAISxVYJf9B/eA
Kp3/CfcA/7j2lrqya4Eylwq5QjGVEk9SmUxGInNYiMguNA5XKpOYTWV1ocqc
oSSFLlRUBz7ktrBloNIl+gpyQJbkgUHiNi31QaOWFUbMWiyowyQibUBeielC
Q+r0omD2iDNHmXb2GaYegGttnaimS3cu47AQ0JCyaquAGh9wCebIplJ8JTRU
fj9zj+p7rpoknNmUCKh4g6J2l/yVic08XXQxKMiTqTJD+tSqtj+foZEDXDnq
RjxfeKYsNteq1D6f8S0jiwAoiFmANbYTji+iKCr+IjoSjEipT+VqufI5nCkL
ujUcz5cAyON2XwLa2Y61URWYfb4HAqCEmZx7Jebb5whwBiyK3UAd4IZh6iMA
fQKwwL/I+vwB5s1DbgtZA4d6LJxFIJe7NQAAjEImM1RFAd2Z+g6skutYisf3
BJR4B1v98ouvYr58wT0SCQwJNSgsRlwp5W+ZxSj8fi5ZAm6A0lIqZJTv4xNl
pZMyQU0yB8MdKaMEM08AZNeSdLqhDlkKfJxJKdinuUTuZ55tgxvB6Qe8wzhv
IOJsCyR5rupIJgD70WKu1POABJ6BtPJRxYfA/LBOFvF5Z5kbJBo4Z3ymClKF
cxJD4ClHCPpfTEq3R4Nh+kx8Sp0u/96v9kaNfrWC3wf18sND+CXl9xjUu6OH
SvQtGnnXbbernYoYDK1SoimVbpef0oL3093HYaPbKT+kkV3dBB+BC4kbmlMJ
yeLYDkX2IywFVAX9MYcfMOb27vE//j1/DtzwL74dAnYQP9ASwY8tMK9YzTL1
vf8TELtPgTdGwcuCWYiuSyDHqkt08NQIUHZlbU1pRR0K2PzTT4iZn2+kP89l
O3/+V78BN5xoDHCWaOQ4e93yarBA4ommE8uE2Ey0H2E6CW/5KfE7wHus8c9/
00FupUz+6m9/TZ1ioSF4T6pp6dZyf5L/QdiF1C8sXbe2XKXzgEQl0SRASYOB
qcxwMzcE9136pLl70IWMUiHT6BV8+ZKFLgCBi6wQEyQc9emu2oIByCxc13BG
OBr6HpN6YgKhT3ACW+tjBy6BkQrxlVmoFzizvD0Ji03CjQD9R2bxoY/ZmfaR
nYmQlxxViUxP7cj0nBhRTij66pElKjNmySp/VEFLJAzR6Ykio5Wc0x94ehyw
HDcSqAF5IJj67jupC+pyo9JtKvW2Wg1IfwHSHlgfxvWsDp9grnTfDxZ2ne5A
l4BOBf70LQJAJvusJiwULAUhTOpPwIGGDU4QqlVpEJ9Kgof31ORr4EMOXaIH
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
hI6hckku0cDjlCgfOAZgQJsI5zLE0JzxlE5i4NGB3ZAsj/snukfxUCumCY57
8v1wm3hCb8bieQ7AV9Oz8XgmnCkW7g9cakt5rgxj7kdopP0UG0HSggbGvXOV
HkXAb2ot/7TwtCxxox+kYxPx2o3QX3TfXM3vZbWrNjUybagPd019brTxd2NU
dWsPo+ZKLozcUaWR76j54aBa3XeGT25vNB62h43zfq7TaahbdTa9dRpr+7Jh
uDk6aFw0tPEDb58wnOuunyuBG2rn2hW58GR2Bv2CVeze1546o9rFuHbd6I+u
Wz2jOetOq/uJcb3oTEZF5b750L6v9eTpKDcb93bjnLbrGHZhZOyIPL3t0GmN
zPSyOzKVQadqQ//axfSwGnenfWtSraqLaS6bzVbuiy/75U5u17dFtXy3LxnT
5+F557z6MpFzxUnO1Ib1dbvJ7s7N+UVzcLEZry+2w3tFd0rD7sDJ7TVi7Q82
fZxWN9V9fbWxR9u7fa/nXGjze/3emzGnqYzms8vC1cYoZ4VVgKBaDQmSiZgj
I/u0OBVZf5SEGGc3/BTh3NrQyDN/S9zDzCHm6QPzxZXZzZHSwnZUW0E7Os+Z
x0LpIjOol/EDnH/w/cH19/vaaPK4NXxlDkN7eN/R1gc3d3kxZ/379eUVmZbK
h+Fzvdpt3s6frl8KM+u5RC/deStHHl+8czrMTxr5i/Wmr89e7Pb+ZbZ4zPS3
/fPm1iWH56vRtbualrHQ7EtgE0ObDK5tsHlc+4/i8+GhX5vfz6ZKbtfqV2YT
udo/kKJcepjsJm3jutuuNAujfK01nJRKs7pWpOZqMxjrrVle2yvatUuq5+e9
/O3LoK702/lOt6OthrLZqXeqOpHHdn086heV6q41W99atF4bTu4Z8nmA6Eg3
46bz5SHb5tZs9fLobK7uarJx3afG9WSh5p+Wm2KOWQe9P3Q7nYNMyOwKyPny
mCtP3Zdevs02V0/TxvV09rK6yrdbxZ6pzy7t7u1d/vbxcp3LNfOOU/fWyrx4
2Jhd22guA7/kbeZfMx5NfojzX+cXf2O2/7/B9+gLJsOnuBMY+n+GJfJJJi9V
OeUERrmnyO/Df18/Vf4vu4PDRIojjBJDKx7lozGSI+jF8+5x61r6unWNHamg
cwX/nzi+OfMP1jDgEJ4ALCPT2FFJLOcv9gLxUSbKTnhmqHeCUwIXc0AK9xbi
FpvXAUkNv4IDU1tn/jJ4aPDplOf3+W2fk4SB8anMzW/gY746AnoVr51wL7mX
JZSB6u4zEWrEJiNcRpVHoguHfgkEZi6vH3NdImv8zMGSDGKqNnfr2ZupqgCq
o3X8bIyYjp9+qEz2/FQa7PdvjUwlK0q7sbI5o4NmYRnZgP+plllpyiLDVgT0
AGen0/m6G+kdnuhv4ld/zEM8ApVr1/Aw/pWWvYlpymNLGljO29AymsICHdmf
Qe7lxWkXd9PHEdnMjYfrh562HLX6t97V7eyy0ptYw4yhdBqz8Sij2s/jzGLe
tjT1fmsXyGO7dFmZFuXpXas4bNVflNXsyhl0FG+0JmItdYNrlA9kalvWw7I4
21XLg554hi49PLxqZgbLu9vV08Rvd8lSAGYZk22xNMjVL919tc6M+4fKVnSJ
dAH0/Inr8V/8StR0qI+eNcpV/b4ynj2w7mWGyvvn+7tlVfe25vXoslAc3tU7
5QN96vd7j92FXW/7NgFmEWohNBvCdKgcYM8xb5DxbjjHshsLywhv1lst4648
Y247IEs3wIEZYMEboqy3k4vFfj+7Pp/dru/Xu+euXam26g/3CyVffdC85fOT
0S+v77Rw8SN37xvmLdh2zMgF8B6ZuqDn75v4CNb5kop/fjn7BpXUwWVxWHtp
XuSXmrE6r9TL03Jld77dL9zypW0+/fakqRRqLX19DfLRM0hpvlW646lWmq2K
z8pFTjMPIEGVzGDf7pQbJ0hTvavUM9XBv5aBFK3JOylxl6SE7HDxeERwkk92
2G5OL56KlcldztLHtFS/zHS0u8O4slyxpwF5frhWSHF90OpP2vgqOZovtq2w
VU+RyVOumbva7gqlcXHP3N6gQ59f1uyOkBql/UnzRa7m3iQa/P055jECqeKu
YmCaI8uaWQpd9bYXeVxE89q8f/6KwvuN3MrQfSz7cnQcmbwVl5TVQe32oT/I
3z1NO/rDuMzjj1FuddtejwoPo1ptdKjuu1WlMhw0WMMYe097jD+qu/Z6Ve/l
cjymkSEe6JpMJcV+qbG21P6I8XbC+zZ7I73/MF+v3NFom4NYY/c01Tck3zif
FdztuK7lB7Uam1X63XYVlGa1UXrKr3JEHzdHwzbEKp1Wv7otjutjc2y4br9S
W/V1fUTvctsnLbdV7mfn1Bi/DO87uVGu/0C0fF/eN68XvdCvTsrloZ8rOwtn
PO73rjPT5xWtjAqOut0VL3q7h9vFou+0ypNRxn24O4+rfKu4yefr24vlaDfq
ZOynU6ans88UGpX7ertRbB/GbFQet+87Vqs8W1h0O5zlFa3cuFW1x/05nY0W
9cnzw+Nq1bIrF+3F+eHpXluV6cP2ftlsrfcVq9ZY56pehVXdZsKM5NjiUG9u
dmNr4uYK1cdde7i62qbf5mqRfI3x9CKodXs/Vx8ncD/HC+Z+H64+ThJ8MyhK
SsAZr696X6j02B+2zCuj93C+6uTJ3tL6V0vNHu5L9Z6unHdy9en09lqeuutR
o1e8PLBm5eFy6C3HmlHJk9rTcJfJzds5d7E70PWD7A4qrXVbWI5EiuAPFrtW
p9jUhkbTUUwlPzc7h9m9ne+MlSrJ1VZU2616+vIwmPTXw1rzhQ5rg36tc9ud
dmyyLm+J0S89GbWGMq71xvVeYVRp73qGtp1roz3J69PpQWlPi/1Vb1q77Wus
2Bn1YV0Uu+yOlEnOrO06zR3r9UrNi2pNOYye+l2lQMal/KVV0GbmYrvqXrJs
eXn7VJ0M15lqe63mLxvZ6nrrFdTq4/mOFWuL++7zYTh78oqlpd4zRhvl+cWu
25vb/Krzsrx4OpSoVuywWf++fVAymfrTZFO+7TB9d6v1t442q0zNzfPtcNkd
rrNejshXF6ptlbejmfe01Uhr29m+W2a+lkL7trD4mbTfI3f2UbF4t1A0Lx2l
M9c2W89kTFl7pUlFK5PDA7mdFhuK/NBf7/P9yqB8zdR1LrdW9nNS93qPQ/fi
sZi/VXNmtaA9TZ4vH55dUn4p11qXpQpMHRcKrFznCpR5KoSp/pUpEkskJEtd
ggJDPFISN1sxxJCjKVjyBpO49FKO9xDFCfxuarJ68Qx+gj6TwJniR3pIcMvk
txui8JR58grzACvCVuHxNIbv/HqXKKwIL+rg/REImMpmPNLiQJyJGk1YAGNA
/+AziqnklaXKVJTe86FY4ISFv9V2FCvj70ot8RurvGMN4ngWBuFpEPQNLnJg
N7+eUVTNwXoMj9sxWg+PWPklNse/xAZBanhdDoJQ4EWsycAKP+Jfd/FLRv04
OEESncypLlaae6oOCJVly+GVAP5JR7R1cTEoYHa+5p9x93/N/Bk2gn8rNfiL
W/ir4CG+SeySDvIdAJlfM2tbtn8QF1YWRUv5CMBdp4a88Oy4LIMTII0Cloa9
8lttAHAaw+3nOW9NHD9/rcLjLCWqhfjxWFCNHUsh+IhYWbriF6j6N5uQ5rH7
CFiyn34ctF4DZDOIt94G6Lg0IwAofmMsKMAkmGXBlIMjjp/5onj89HpVHP61
ZYsfWfb4xl647vMjbO7k2t/a9vkH1p9bvMobsBsUiR2Dw7meSDpWhiUVTyAp
QWEvKHWCpe/84oQvNajuglv2mNlkquIXObCT2g4L7AhXEMHhrZ/vDDWMnJgE
L1rGi/f5rayw6onYtg4ziwJLZgmOO14zSMkSxjzDT+T4aUlR9Ys33Ch/yUCg
tr5y4wYBFvPx8k2DaMGUWDfL1+Dcz7JBBRuzDF4MZuBcsZmxsg7o63HLEN3c
5MWbCKlIHvOKvTmWknguC8p5mWzZ9FRVeHAtAOVbJKwVizJe+cGvsMZ5hGf5
GGb0wjqVsA4lkUwVdzY5YXiBJWg/VUPTPuDUC3OhQ0ujJr8/MmSfg1qUIAtO
FOVocdC4/vE9UM6/YCvuOfAyzVPwBjt0qK5i+SJekmSW54gqPFGdZ2IFrCgn
JBt8vwJyh6jTB5HagBHKBuWBUTVv6lU5r18wiDlyMIz+hGIF0HYigubFSIlU
bkoUmipRpenSA6LpvJg1uAWCt7WBldGq+wWFvt33Zw0rv4Vex2pIXjz1GGb1
0fVyBMuC8xUU8XAfAqVC2ag+1vH2G92G2qMorvIIKC4LJcxFC93B77OgQxab
GrvyS7/RRUBeEYoHHnMhgJG2P4MmmaCXwv0J2Z8GwOBTCD8EwKFA7kTRLjiN
3lFRjF+8eJSgZx/caj73xl6Dd2Jw/hEaJF4+jcSHgac8VwaeT1i8oO/PpFHs
jMLvwhk/qJ0JrqnEN+wr61gqXubFnOHVXBfv+3j8KrOJRckADF40UFGZwDRL
Cr6LhXOug/Q+n4gFJXa81PkuuoElbkUxqY7XjgbeAhSjKg6gXMey9x9Ea+kN
rIbnDnH0UrFEUNEq2pHxQQEGF3xQQggW0vIyP8AC8euB0XT5+hKlLOYxRDc8
eKejWAU7nzwHzUpJ6rnHy8fsCQBw4hgosfbp2yJAgjEEVPh6gyMiNLAg5aNc
fP4RdKMUbcTivvzKCQh4Scwfj/ezyCDj3a0F2CshZQLiqGw/aX6PF+eXYLZU
1/FTHElp/tkOPx5j1N+gCABgUpSe4xrLqAzTFxh8WVE5Vrcde1XHx0hVeIe+
Ec6H7o9Bnzi2chSUZYXv9C0qvZvxxXmtwHpy0FlAAl7CHlDgqyegbMX1FToV
WNyFr89A0ppY5KioaLZxaBh5ibnDqY9hjgJR5C3uUIo4LelNSr98x13O49c9
gF/BuJpRxRXMxEmrIHCiYBGvfLNXB374lhmuABSFhpc/0q8HpsPoUcRRvJQ4
OkIeIy+KvEP8hnmFijeO4GFgeJknKqiMbqIPKNKZeVT6Ln/1OSVeSCU1ElW6
Uj+mS2+kri30GV5X5xdReX2BA1ujDr4va3APTwYJH7zi4+4T+3wj/fTT8LZy
IzQCcO7PP79GWdwCfxxv0egj5EVo6/DXCGGOJtGcQNsxxhI9GzHzeqeD+3zj
XweGXqPwjqmgFqcR37pPpg8hR5KkBH7e88KfE0hTaaBOTuLtHbMeITN84CMz
VoqTeJrA6VeK/oM7xtnE6BG/cfZgCVwJJGLe7r+JU+OglWHmPYNHwRjGBw27
le6b+Hk7zfg2zkRuTxIBcvCqgEwi7sLEjQgAwldSVOpgeT7xI8Qzqd6q1PwV
P6NFEio41sqTYEFgHL8bhCmid1HkDDX3/26yFK/OER34ASgArPyOZIFFIrLA
jxNkgVYky1mCLsgz/2x0KRXyiI9SvvD70wXWiugCK56gC7T+P12ALtNCqZS/
/oMUmVjsnZrs7J9dlSVJA5DBf4Xco6Xv88Vc6X8UhY6B+6ci0/n51R+k2XCp
/1dsHyfLHyQ7/wh1/q9LzruCnhMp298u9nk1+bfiSZtpz6rylZiyLG4X41tp
AWHw9JOmKp/DjFHywPD4zTyvj0b9Uyrpy7tj03+UiK/OuDBsP4EBfpqo/Vdw
cPS60a/h4Py/Hwfi1bFzImuYRirLmmltdaosOTNjSYw4aKHKX9ILojOa/nLy
kDLIxINSwNMWnsnyK9p5LbscvKccywYm1H8ZAz8U4+xMTE1qE9fle1PImdTA
9+tID6rHNgSQciaViQPrAIKorKmc0WuqrtrSQLM0YgbYVx1pQamC+8mmUqn/
BHmGHrnMXQAA

-->

</rfc>
