<?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.6 (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-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <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-05"/>
    <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="02"/>
    <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 'HPKE-DirEnc' 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 "HPKE-DirEnc", "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": "HPKE-DirEnc",
  "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": "HPKE-DirEnc",
  "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: 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-DirEnc</t>
          </li>
          <li>
            <t>Algorithm Description: HPKE Direct Encryption mode</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 587?>

<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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
MnhoZYaZ3iPRsj15X7+Zd4MYO66Xh16maM/t0ajXvUlNnpe0NMzZ6naXv+zu
Hu/m857dKI6HKefx/iJq8s38Jputbi8Xw92wlbKeTrme1j6Vq5Ueqs1avnkY
sWFx1HxomY3idG7S7WCaVbRi7U7VOvsLOh3Oq+Pnx85y2bBKl835xeHpQVsW
6eP2YVFvrPYls1JbZcpuiZWdesyNZNj8UK1vdiNz7GRy5c6uOVheb5NvS7Uo
ukZkeu43431cqo8Lt2fRjr7fR6qPE6evJkhxDTjnrVwfS5s6vUHDuF53Hy+W
rSzZm1rveqFZg32h2tWVi1amOpnc3cgTZzWsdfNXB1YvPV4N3MVIW5eypPI0
2KUys2bGme8OdPUoO/1SY9UUniNWJfiD1a7Ryte1wbpuK4aSnRmtw/TByrZG
SplkKkuq7ZZdfXHoj3urQaX+QgeVfq/SumtPWhZZFbdk3Ss8rSs1ZVTpjqrd
3LDU3HXX2namDfckq08mB6U5yfeW3UnlrqexfGvYg31R7dI7UiQZo7Jr1Xes
2y3UL8sV5TB86rWVHBkVsldmTpsa8+2yfcXSxcXdU3k8WKXKzZWavaqly6ut
m1PLnYsdy1fmD+3nw2D65OYLC727Hm6U5xeram3ussvWy+Ly6VCgWr7Fpr2H
5kFJpapP403xrsX03Z3W29ratDQxNs93g0V7sEq7GSJfX6qWWdwOp+7TViON
bWv7YZ15r4L2dWXximm/Rz3hW9Xiw0pRv7KV1kzbbF2DMWXlFsYlrUgOj+Ru
kq8p8mNvtc/2Sv3iDVNXmcxK2c9I1e12Bs5lJ5+9UzNGOac9jZ+vHp8dUnwp
VhpXhRIsHVUKbK3nBpS5KuSq3p0uEqknxLtc/L5CPEoSV28xxZDDJVj8ipW4
lVOMjhAdCfzybLxp8Ry+gj2TIJjiZ3nIcNPg1y/CHJW58hKLAUvClsGZNObw
/P6ZaKkIbhLhBRdImIpGNNPiQJyL1kzYABNB78QzzKnkpanKVNwN4FOxtwk7
k8vNMGHG76VK7Du2oUceiHNZmISHQDDWv2mCw7w2RtEwB/sxPGPHlD04W+W3
7Gzvlh1kqsF9PshEQRaxEQOb+4h3H8frFPWS4RhLdDKjuthp5qo6EFSWTZsf
/3sHHCHq4uaSL+x8z78g9n9L/QUQwX9LFfgXUfibkCGOJA5J+kUPgGxNeJ+w
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

-->

</rfc>
