<?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.21 (Ruby 3.3.6) -->
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-jose-hpke-encrypt-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="Use of HPKE in JOSE">Use of Hybrid Public Key Encryption (HPKE) with JSON Object Signing and Encryption (JOSE)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-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>Self-Issued Consulting</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>michael_b_jones@hotmail.com</email>
        <uri>https://self-issued.info/</uri>
      </address>
    </author>
    <date year="2024" month="December" day="18"/>
    <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
JSON 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-ietf-jose-hpke-encrypt/"/>.
      </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>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="overview">
      <name>Overview</name>
      <t>This specification describes two modes of use for HPKE in JWE:</t>
      <ul spacing="normal">
        <li>
          <t>HPKE JWE Integrated Encryption, where HPKE is used to encrypt the plaintext.</t>
        </li>
        <li>
          <t>HPKE JWE Key Encryption, where HPKE is used to encrypt a content encryption key (CEK) and the CEK is subsequently used to encrypt the plaintext.</t>
        </li>
      </ul>
      <t>When "alg" and "enc" are both present in a protected header and when "iv" and "tag" are empty, the mode is HPKE JWE Integrated Encryption.</t>
      <t>When "enc" is present in a protected header and "alg" is absent, the mode is HPKE JWE Key Encryption when a valid HPKE "alg" value is present in the unprotected headers.</t>
      <t>HPKE supports several modes, which are described in Table 1 of <xref target="RFC9180"/>.</t>
      <t>In JWE, the use of specific HPKE modes such as "mode_base" or "mode_auth_psk" is determined by the presence of the header parameters "psk_id" and "auth_kid".</t>
      <t>JWE supports different serializations, including Compact JWE Serialization as described in Section 3.1 of <xref target="RFC7516"/>, General JWE JSON Serialization as described in Section 3.2 of <xref target="RFC7516"/>.</t>
      <t>Certain JWE features are only supported in specific serializations.</t>
      <t>For example Compact JWE Serialization does not support the following:</t>
      <ul spacing="normal">
        <li>
          <t>additional authenticated data</t>
        </li>
        <li>
          <t>multiple recipients</t>
        </li>
        <li>
          <t>unprotected headers</t>
        </li>
      </ul>
      <t>HPKE JWE Key Encryption can be used with "aad" but only when not expressed with Compact JWE Serialization.</t>
      <t>Single recipient HPKE JWE Key Encryption with no "aad" can be expressed in Compact JWE Serialization, so long as the recipient and sender use the same HPKE Setup process as described in { Section 5 of RFC9180 }.</t>
      <section anchor="auxiliary-authenticated-application-information">
        <name>Auxiliary Authenticated Application Information</name>
        <t>HPKE has two places at which applications can specify auxiliary authenticated information as described in { Section 8.1 of RFC9180 }.</t>
        <t>HPKE algorithms are not required to process "apu" and "apv" as described in Section 4.6.1 of <xref target="RFC7518"/>, despite appearing to be similar to key agreement algorithms (such as "ECDH-ES").</t>
        <t>The "aad parameter" for Open() and Seal() <bcp14>MUST</bcp14> be used with both HPKE JWE Integrated Encryption and HPKE JWE Key Encryption.</t>
        <t>To avoid confusion between JWE AAD and HPKE AAD, this document uses the term "HPKE AEAD AAD" to refer the "aad parameter" for Open() and Seal().</t>
        <t>The HPKE AEAD AAD <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"/> which is repeated here for clarity:</t>
        <t>Let the Additional Authenticated Data encryption parameter be ASCII(Encoded Protected Header).
However, if a JWE AAD value is present (which can only be the case when using the JWE JSON Serialization), instead let the Additional Authenticated Data encryption parameter be ASCII(Encoded Protected Header || '.' || BASE64URL(JWE AAD)).</t>
      </section>
      <section anchor="encapsulated-keys">
        <name>Encapsulated Keys</name>
        <t>Encapsulated keys <bcp14>MUST</bcp14> be the base64url encoded encapsulated key as defined in Section 5.1.1 of <xref target="RFC9180"/>.</t>
        <t>In HPKE JWE Integrated Encryption, JWE Encrypted Key is the encapsulated key.</t>
        <t>In HPKE JWE Key Encryption, each recipient JWE Encrypted Key is the encrypted content encryption key, and the encapsulated key (ek) is found in the recipient header.</t>
      </section>
    </section>
    <section anchor="integrated-encryption">
      <name>Integrated Encryption</name>
      <t>In HPKE JWE Integrated Encryption:</t>
      <ul spacing="normal">
        <li>
          <t>The protected header <bcp14>MUST</bcp14> contain an "alg" that starts with "HPKE".</t>
        </li>
        <li>
          <t>The protected header <bcp14>MUST</bcp14> contain an "enc" and it <bcp14>MUST</bcp14> be set to the value "dir". It updates Section 4.1.2 of <xref target="RFC7516"/> to clarify that in case where HPKE JWE Integrated Encryption is used, setting "enc" set to "dir" is appropriate, as both the derivation of the CEK and the encryption of the plaintext are fully handled within the HPKE encryption.</t>
        </li>
        <li>
          <t>The protected header parameters "psk_id" and "auth_kid" <bcp14>MAY</bcp14> be present.</t>
        </li>
        <li>
          <t>The protected header parameter "ek" <bcp14>MUST NOT</bcp14> be present.</t>
        </li>
        <li>
          <t>The "encrypted_key" <bcp14>MUST</bcp14> be the base64url encoded encapsulated key as defined in Section 5.1.1 of <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>The "iv", "tag" and "aad" members <bcp14>MUST NOT</bcp14> be present.</t>
        </li>
        <li>
          <t>The "ciphertext" <bcp14>MUST</bcp14> be the base64url encoded ciphertext as defined in Section 5.2 of <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>The HPKE Setup info parameter <bcp14>MAY</bcp14> be used, and its values are not constrained by this specification. By default, it is empty unless apu or apv are present, in which case it will carry the JOSE context-specific data as defined in Section 4.6.2 of <xref target="RFC7518"/>, i.e., the concatenation of AlgorithmID, PartyUInfo, and PartyVInfo. It does not include Z, keydatalen, SuppPubInfo, or SuppPrivInfo. AlgorithmID is structured as defined in Section 4.6.2 of <xref target="RFC7518"/> and the Data field in AlgorithmID will be set to the octets of the ASCII representation of the "enc" Header Parameter value.</t>
        </li>
      </ul>
      <section anchor="compact-example">
        <name>Compact Example</name>
        <t>A Compact JWE or JSON Web Token:</t>
        <artwork><![CDATA[
eyJhbGciOiJIUEtFLVAyNTYtU0hBMjU2LUExMjhHQ00iLCJlbmMiOiJkaXIiLCJraWQiOiJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6andrLXRodW1icHJpbnQ6c2hhLTI1Njp2b2RIQ3FjVVdFbV83NUpWcXlhTjhaS1FVMjF3VEFSYzhkRzhuVU1jZlBVIn0.BCsvYxTHM4CO_OwQxL3lkJDdlw3UDjx2xN9MIXnbVzfTgFJmo_Es2xdH-fYs9EXfH_V53JgMWfUm7rBD_oE5efU..7_va6cnwClMsw7h7lqpm2tCrH9NkciM-g9UabdPWcOeIRmAf01NLYG7Wn8fFoohHlcGgd0nh7Jmo9nvHFi7sH6kOX7pplBnvLUoPrqeyW4TdXo_X8YThNKf9BFyWGyF6fjelbic5jSYClFaenMkTnjpHxFW1sWuiuZVmO1EOzrlNttWy.
]]></artwork>
        <t>After verification:</t>
        <artwork><![CDATA[
{
  "protectedHeader": {
    "alg": "HPKE-0",
    "enc": "dir",
    "kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:vodHCqcUWEm_75JVqyaN8ZKQU21wTARc8dG8nUMcfPU"
  },
  "payload": {
    "urn:example:claim": true,
    "iss": "urn:example:issuer",
    "aud": "urn:example:audience",
    "iat": 1729785491,
    "exp": 1729792691
  }
}
]]></artwork>
      </section>
      <section anchor="json-example">
        <name>JSON Example</name>
        <t>A JSON Encoded JWE:</t>
        <artwork><![CDATA[
{
  "protected": "eyJhbGciOiJIUEtFLVAyNTYtU0hBMjU2LUExMjhHQ00iLCJlbmMiOiJkaXIiLCJraWQiOiJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6andrLXRodW1icHJpbnQ6c2hhLTI1NjpTNkFYZmRVXzZZZnp2dTBLRERKYjBzRnV3bklXUGs2TE1URXJZaFBiMzJzIiwicHNrX2lkIjoib3VyLXByZS1zaGFyZWQta2V5LWlkIiwiYXV0aF9raWQiOiJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6andrLXRodW1icHJpbnQ6c2hhLTI1NjpTNkFYZmRVXzZZZnp2dTBLRERKYjBzRnV3bklXUGs2TE1URXJZaFBiMzJzIn0",
  "encrypted_key": "BD7QVodtG-FwYASgb36zuTzUCc80aiYwS6JOOE-6_heUGyAZt-cU0818e4oYqP7ebBuW3KTM9EQA0vM5fWp6hj0",
  "ciphertext": "ZxqtYoomgVQGctnv1I_EBVI1NIeJ7qJw2iVtqwUw3fXa8FK-",
  "aad": "8J-PtOKAjeKYoO-4jyBiZXdhcmUgdGhlIGFhZCE"
}
]]></artwork>
        <t>After verification:</t>
        <artwork><![CDATA[
{
  "protectedHeader": {
    "alg": "HPKE-0",
    "enc": "dir",
    "kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s",
    "psk_id": "our-pre-shared-key-id",
    "auth_kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s"
  },
  "plaintext": "🖤 this plaintext!",
  "additionalAuthenticatedData": "🏴‍☠️ beware the aad!"
}
]]></artwork>
      </section>
    </section>
    <section anchor="key-encryption">
      <name>Key Encryption</name>
      <t>HPKE based recipients can be added alongside existing <tt>ECDH-ES+A128KW</tt> or <tt>RSA-OAEP-384</tt> recipients because HPKE is only used to encrypt the content encryption key, and because the protected header used in content encryption is passed to HPKE as Additional Authenticated Data.</t>
      <t>In HPKE JWE Key Encryption:</t>
      <ul spacing="normal">
        <li>
          <t>The protected header <bcp14>MUST NOT</bcp14> contain an "alg".</t>
        </li>
        <li>
          <t>The protected header <bcp14>MUST</bcp14> contain an "enc" that is registered in both the IANA HPKE AEAD Identifiers Registry, and the IANA JSON Web Signature and Encryption Algorithms Registry.</t>
        </li>
        <li>
          <t>The recipient unprotected header parameters "psk_id" and "auth_kid" <bcp14>MAY</bcp14> be present.</t>
        </li>
        <li>
          <t>The recipient unprotected header parameter "ek" <bcp14>MUST</bcp14> be present.</t>
        </li>
        <li>
          <t>The recipient unprotected header <bcp14>MUST</bcp14> contain a registered HPKE "alg" value.</t>
        </li>
        <li>
          <t>The "encrypted_key" <bcp14>MUST</bcp14> be the base64url encoded content encryption key as described in Step 15 in Section 5.1 of <xref target="RFC7516"/>.</t>
        </li>
        <li>
          <t>The recipient "encrypted_key" is as described in Section 7.2.1 of <xref target="RFC7516"/>.</t>
        </li>
        <li>
          <t>The "iv", "tag" JWE members <bcp14>MUST</bcp14> be present.</t>
        </li>
        <li>
          <t>The "aad" JWE member <bcp14>MAY</bcp14> be present.</t>
        </li>
        <li>
          <t>The "ciphertext" <bcp14>MUST</bcp14> be the base64url encoded ciphertext as described in Step 19 in Section 5.1 of <xref target="RFC7516"/>.</t>
        </li>
        <li>
          <t>The HPKE Setup info parameter <bcp14>MAY</bcp14> be used, and its values are not constrained by this specification. By default, it is empty unless apu or apv are present, in which case it will carry the JOSE context-specific data as defined in Section 4.6.2 of <xref target="RFC7518"/>, i.e., the concatenation of AlgorithmID, PartyUInfo, and PartyVInfo. It does not include Z, keydatalen, SuppPubInfo, or SuppPrivInfo. AlgorithmID is structured as defined in Section 4.6.2 of <xref target="RFC7518"/> and the Data field in AlgorithmID will be set to the octets of the ASCII representation of the "alg" (algorithm) Header Parameter value.</t>
        </li>
      </ul>
      <section anchor="multiple-recipients">
        <name>Multiple Recipients</name>
        <t>For example:</t>
        <artwork><![CDATA[
{
  "protected": "eyJlbmMiOiJBMTI4R0NNIn0",
  "iv": "ZL0HDvZJizA6vyTV",
  "ciphertext": "Oq26x9vppULrGNzCn2jaB_Sl-Swjv7e0AcgnhUR5AtrjEf2v6jee09WN-Ne-HIGXBgQpgJPchg0eWNmgv4Ozi5I",
  "tag": "ULnlOiJRYfCzM_r5j9sLEQ",
  "aad": "cGF1bCBhdHJlaWRlcw",
  "recipients": [
    {
      "encrypted_key": "G3HmlpOgA4H1i_RQhT44Nw7svDwUqvNR",
      "header": {
        "kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:cxQC_lWt22BIjH5AWSLHCZk_f-mU3-W4Ztcu5-ZbwTk",
        "alg": "ECDH-ES+A128KW",
        "epk": {
          "kty": "EC",
          "crv": "P-256",
          "x": "JnGWSQ90hlt0H7bfcgfaw2DZE-qqv_cwA4_Dn_CkLzE",
          "y": "6jw1AC5q9-qewwBh9DK5YzUHLOogToGDSpoYAJdNo-E"
        }
      }
    },
    {
      "encrypted_key": "pn6ED0ijngCiWF8Hd_PzTyayd2OmRF7QarTVfuWj6dw",
      "header": {
        "alg": "HPKE-0",
        "kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s",
        "psk_id": "our-pre-shared-key-id",
        "auth_kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s",
        "ek": "BI41YDnhTTI6jSd7T62rLwzCCt_tBqN5LFooiZ7eXJsh01O0-h-BQ6JToKX9UXDw_3ylbXTiYWmPXl2fNmr4BeQ"
      }
    }
  ]
}
]]></artwork>
        <t>After verification:</t>
        <artwork><![CDATA[
{
  "plaintext": "🎵 My lungs taste the air of Time Blown past falling sands 🎵",
  "protectedHeader": {
    "enc": "A128GCM"
  },
  "unprotectedHeader": {
    "alg": "HPKE-0",
    "enc": "dir",
    "kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s",
    "psk_id": "our-pre-shared-key-id",
    "auth_kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s",
    "ek": "BI41YDnhTTI6jSd7T62rLwzCCt_tBqN5LFooiZ7eXJsh01O0-h-BQ6JToKX9UXDw_3ylbXTiYWmPXl2fNmr4BeQ"
  },
  "additionalAuthenticatedData": "paul atreides"
}
]]></artwork>
      </section>
    </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="key-management">
        <name>Key Management</name>
        <t>Reusing a single KEM key across multiple algorithm combinations <bcp14>MUST</bcp14> be avoided to maintain cryptographic security. Each key and its associated algorithm suite, comprising the KEM, KDF, and AEAD, should be managed independently. This separation prevents unintended interactions or vulnerabilities between suites, ensuring the integrity and security guarantees of each algorithm suite are preserved.
Additionally, the same key <bcp14>MUST NOT</bcp14> be used for both key wrapping and content encryption, as it may introduce security risks.  It
creates algorithm confusion, increases the potential for key leakage, cross-suite attacks, and improper handling of the key.</t>
      </section>
      <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.
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="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-<KEM>-<KDF>-<AEAD>
]]></artwork>
        <t>The "HPKE Mode" is described in 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>Implementations detect the use of modes by inspecting header parameters.</t>
      </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>
        <section anchor="hpke-0">
          <name>HPKE-0</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-0</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"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-1">
          <name>HPKE-1</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-1</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"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-2">
          <name>HPKE-2</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-2</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"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-3">
          <name>HPKE-3</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-3</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"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-4">
          <name>HPKE-4</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-4</t>
            </li>
            <li>
              <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(X25519, HKDF-SHA256) KEM, the HKDF-SHA256 KDF, and the ChaCha20Poly1305 AEAD.</t>
            </li>
            <li>
              <t>Algorithm Usage Location(s): "alg, enc"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-5">
          <name>HPKE-5</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-5</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"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-6">
          <name>HPKE-6</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-6</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"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="json-web-signature-and-encryption-header-parameters">
        <name>JSON Web Signature and Encryption Header Parameters</name>
        <t>The following entries are added to the "JSON Web Key Parameters" registry:</t>
        <section anchor="ek">
          <name>ek</name>
          <ul spacing="normal">
            <li>
              <t>Header Parameter Name: "ek"</t>
            </li>
            <li>
              <t>Header Parameter Description: An encapsulated key as defined in { Section 5.1.1 of RFC9180 }</t>
            </li>
            <li>
              <t>Header Parameter Usage Location(s): JWE</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="pskid">
          <name>psk_id</name>
          <ul spacing="normal">
            <li>
              <t>Header Parameter Name: "psk_id"</t>
            </li>
            <li>
              <t>Header Parameter Description: A key identifier (kid) for the pre-shared key as defined in { Section 5.1.2 of RFC9180 }</t>
            </li>
            <li>
              <t>Header Parameter Usage Location(s): JWE</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="authkid">
          <name>auth_kid</name>
          <ul spacing="normal">
            <li>
              <t>Header Parameter Name: "auth_kid"</t>
            </li>
            <li>
              <t>Header Parameter Description: A key identifier (kid) for the asymmetric key as defined in { Section 5.1.3 of RFC9180 }</t>
            </li>
            <li>
              <t>Header Parameter Usage Location(s): JWE</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-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.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">
              <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
            </author>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Transmute</organization>
            </author>
            <author fullname="Ajitomi, Daisuke" initials="A." surname="Daisuke">
              <organization>bibital</organization>
            </author>
            <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
              <organization>Security Theory LLC</organization>
            </author>
            <date day="12" month="July" year="2024"/>
            <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-09"/>
        </reference>
      </references>
    </references>
    <?line 538?>

<section anchor="keys-used-in-examples">
      <name>Keys Used in Examples</name>
      <t>This private key and its implied public key are used the examples:</t>
      <sourcecode type="text"><![CDATA[
{
  "kid": "S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s",
  "alg": "HPKE-0",
  "kty": "EC",
  "crv": "P-256",
  "x": "wt36K06T4T4APWfGtioqDBXCvRN9evqkZjNydib9MaM",
  "y": "eupgedeE_HAmVJ62kpSt2_EOoXb6e0y2YF1JPlfr1-I",
  "d": "O3KznUTAxw-ov-9ZokwNaJ289RgP9VxQc7GJthaXzWY"
}
]]></sourcecode>
      <t>This pre-shared key is used in the examples:</t>
      <sourcecode type="text"><![CDATA[
{
  "kty": "oct",
  "kid": "our-pre-shared-key-id",
  "k": "anVnZW11anVnZW11Z29rb3Vub3N1cmlraXJla2FpamE"
}
]]></sourcecode>
    </section>
    <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 contributions to the specification.</t>
    </section>
    <section numbered="false" anchor="document-history">
      <name>Document History</name>
      <t>-04</t>
      <ul spacing="normal">
        <li>
          <t>Fixed #8: Use short algorithm identifiers, per the JOSE naming conventions.</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Apply feedback from call for adoption.</t>
        </li>
        <li>
          <t>Provide examples of auth and psk modes for JSON and Compact Serializations</t>
        </li>
        <li>
          <t>Simplify description of HPKE modes</t>
        </li>
        <li>
          <t>Adjust IANA registration requests</t>
        </li>
        <li>
          <t>Remove HPKE Mode from named algorithms</t>
        </li>
        <li>
          <t>Fix AEAD named algorithms</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Created initial working group version from draft-rha-jose-hpke-encrypt-07</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
eKqUl+v+9bbwrftQLD8eLh1ncO6edJ6qVnHGju97Zra3mi33eb6iTazp4Gqv
4ruz+ri4LM84zx8OO9kOzzZbJzfHk0tncnqhTSd5PuwsJstS98nYa4mpUOnx
esG5ZQKaV7fj6lP73t2bHXrn9ctUIKidNAqj6vFUb56abHhlaivxOvbf0Os3
FBh9ktWwz6Pek93mwnS6k0qpWTDury6n/VKps9r3lrXV4GHZuZKRFQydpgPE
Hx39aY+X1Xtz6BeLx61Zc68y7J03q3fz+3F2MdjNDkt3vhbsZe9Gq/48mjyO
R9PhS7IDd+Yp5BA9fy3GJPohN11i9QWik37ziO2n1smwd3mYn5p+vrk/GmuT
MVsVa3f17MPD8l5bVUr3Neu+Oj9/qqdH02Tl2apQqe49HGYf+Gp1PD2sne3d
Pg2a51170rdPaj3Hvq2c6h07W89Egz8ryb+fd77ANMcq12t5Y2ZNqsawcdDU
7y+e+mu21ovdxVVj/5K5/etxMJyV9dXr/NsW5P8Fw/p3hPZ/ufA+KVJzSgxb
pcJtzZr2+63yrKfv98tF93z1VK369/7xQ2fvvGHbxt0+vzn1pvlCN5+dZo8v
y6d9++zmcHBTW93vrs3RTd+4HS4ubsziuLNwS8f8MpPmOfz72zembOm045/+
Q22vVTOASF/1GQRLInkwXDSufWPB1WMTCy0hlvbVMTNNqoQFg+6pOFjYjBfT
QJnxobqdVNtx7pMI3X7OHN+J0lcXq89vyTsdiJpU5rsc67cTeWZ4mYwuuMA7
l0UVzc8qCqFBZKC2TLvCOCEqeNdSQPAyQbKeXKa6Lh/bLg8LR7BGjJmeLcKI
ZzFfWPbhecFCViHIohjoCkEJ1nJzuksXnZi9XH6KCMsSIgz5FmwegsTCGprD
EdVPEJFYGsfqnAWVASwQVgKyjsmXMQooOY9vJ1AGgJiKlBnTcFGDFPiUmNNc
mu3IurREkUW4UCzAxiiVyvqiUJCuaSTraGTxDIisn7oKcFZv5zArJtgU7obB
rYgEPdU05lgZ0CPmpY8HPKyp73sfU9VUsA4QrY25c2ExDvBNXiERNXuUFG/D
Nlyfy00DC1Ex3fNAR0WJngvI2AsLg3hRacOWeIsQZcO25Lnp0tA4rQ0T/UpU
ekPHytg0dMVdQMJkh45VqWaJ4IkJzLU6oSo7qntPnyrjbUsqIsIV4IyTADhm
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
5k3wxafB3Snb9mXwfeX/AKT7O7rXXAAA

-->

</rfc>
