<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="pre5378Trust200902" docName="draft-ietf-cose-hpke-19" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="COSE HPKE">Use of Hybrid Public-Key Encryption (HPKE) with CBOR Object Signing and Encryption (COSE)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cose-hpke-19"/>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization abbrev="H-BRS">University of Applied Sciences Bonn-Rhein-Sieg</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="O." surname="Steele" fullname="Orie Steele" role="editor">
      <organization>Tradeverifyd</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>orie@or13.io</email>
      </address>
    </author>
    <author initials="D." surname="Ajitomi" fullname="Daisuke Ajitomi">
      <organization>bibital</organization>
      <address>
        <postal>
          <country>Japan</country>
        </postal>
        <email>dajiaji@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Lundblade" fullname="Laurence Lundblade">
      <organization>Security Theory LLC</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>lgl@securitytheory.com</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="2025" month="December" day="15"/>
    <area>Security</area>
    <workgroup>COSE</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 71?>

<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.</t>
      <t>HPKE is a general encryption framework utilizing an asymmetric key encapsulation
mechanism (KEM), a key derivation function (KDF), and an Authenticated Encryption
with Associated Data (AEAD) algorithm.</t>
      <t>This document defines the use of HPKE with COSE. Authentication for HPKE in COSE is
provided by COSE-native security mechanisms or by the pre-shared key authenticated
variant of HPKE.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    CBOR Object Signing and Encryption Working Group mailing list (cose@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cose/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/cose-wg/draft-ietf-cose-hpke"/>.</t>
    </note>
  </front>
  <middle>
    <?line 85?>

<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 document defines the use of HPKE with COSE (<xref target="RFC9052"/>, <xref target="RFC9053"/>)
with the single-shot APIs defined in <xref section="6" sectionFormat="of" target="RFC9180"/>. Multiple
invocations of Open() / Seal() on the same context, as discussed in
<xref section="9.7.1" sectionFormat="of" target="RFC9180"/> are not supported.</t>
    </section>
    <section anchor="conventions-and-terminology">
      <name>Conventions and Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>
      <t>This specification uses the following abbreviations and terms:</t>
      <ul spacing="normal">
        <li>
          <t>Content-encryption key (CEK), a term defined in CMS <xref target="RFC5652"/>.</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-cose">
      <name>HPKE for COSE</name>
      <section anchor="overview">
        <name>Overview</name>
        <t>This specification supports two modes of using HPKE in COSE, namely:</t>
        <ul spacing="normal">
          <li>
            <t>HPKE Integrated Encryption mode, where HPKE is used to encrypt
the plaintext. This mode can only be used with a single recipient.
<xref target="one-layer"/> provides the details.</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.
<xref target="two-layer"/> provides the details.</t>
          </li>
        </ul>
        <t>Distinct algorithm identifiers are defined and registered
that are specific to each COSE HPKE mode
so that they are fully specified, as required by <xref target="RFC9864"/>.</t>
        <t>In both cases, a new COSE header parameter called 'ek' is used
to convey the content of the enc structure defined in the HPKE
specification. The enc value represents the serialized encapsulated
public key.</t>
        <t>When used with HPKE, the 'ek' header parameter MUST be present in
the unprotected header and MUST contain the encapsulated key,
which is the output of the HPKE KEM. The value of 'ek' MUST be a
bstr.</t>
        <t>HPKE defines several authentication modes, as described in Table 1 of <xref target="RFC9180"/>.
In COSE HPKE, only 'mode_base' and 'mode_psk' are supported.
The mode is 'mode_psk' if the 'psk_id' header parameter is present; otherwise, the mode defaults to 'mode_base'.
'mode_base' is described in <xref section="5.1.1" sectionFormat="of" target="RFC9180"/>, which only enables encryption
to the holder of a given KEM private key. 'mode_psk' is described in <xref section="5.1.2" sectionFormat="of" target="RFC9180"/>,
which authenticates using a pre-shared key.</t>
        <section anchor="one-layer">
          <name>HPKE Integrated Encryption Mode</name>
          <t>This mode applies if the COSE_Encrypt0 structure uses a COSE-HPKE algorithm
and has no recipient structure(s).</t>
          <t>Because COSE-HPKE supports header protection, if the 'alg' parameter is present, it MUST be included
in the protected header and MUST be a COSE-HPKE algorithm.</t>
          <t>Although the use of the 'kid' parameter in COSE_Encrypt0 is
discouraged by RFC 9052, this document RECOMMENDS the use of the 'kid' parameter
(or other parameters) to explicitly identify the static recipient public key
used by the sender. If the COSE_Encrypt0 structure includes a 'kid' parameter, the
recipient MAY use it to select the corresponding private key.</t>
          <t>When encrypting, the inputs to the HPKE Seal operation are set as follows:</t>
          <ul spacing="normal">
            <li>
              <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
            </li>
            <li>
              <t>pkR: The recipient public key, converted into an HPKE public key.</t>
            </li>
            <li>
              <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
            </li>
            <li>
              <t>info: Defaults to the empty string; externally provided information MAY be used instead.</t>
            </li>
            <li>
              <t>aad: MUST contain the byte string for the authenticated data structure according to the steps defined in Section 5.3 of RFC 9052.
For the Integrated Encryption mode the context string will be "Encrypt0".</t>
            </li>
            <li>
              <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
            </li>
            <li>
              <t>pt: The raw message plaintext.</t>
            </li>
          </ul>
          <t>The outputs are used as follows:</t>
          <ul spacing="normal">
            <li>
              <t>enc: MUST be placed raw into the 'ek' (encapsulated key) parameter in the unprotected bucket.</t>
            </li>
            <li>
              <t>ct: MUST be used as layer ciphertext. If not using detached content, this is directly placed as
ciphertext in COSE_Encrypt0 structure. Otherwise, it is transported separately and the ciphertext field is nil.
See <xref section="5" sectionFormat="of" target="RFC9052"/> for a description of detached payloads.</t>
            </li>
          </ul>
          <t>If 'mode_psk' has been selected, then the 'psk_id' parameter MUST be present.
If 'mode_base' has been chosen, then the 'psk_id' parameter MUST NOT be present.</t>
          <t>When decrypting, the inputs to the HPKE Open operation are set as follows:</t>
          <ul spacing="normal">
            <li>
              <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
            </li>
            <li>
              <t>skR: The recipient private key, converted into an HPKE private key.</t>
            </li>
            <li>
              <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
            </li>
            <li>
              <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
            </li>
            <li>
              <t>info: Defaults to the empty string; externally provided information MAY be used instead.</t>
            </li>
            <li>
              <t>aad: Defaults to the empty string; externally provided information MAY be used instead.</t>
            </li>
            <li>
              <t>enc: The contents of the layer 'ek' parameter.</t>
            </li>
            <li>
              <t>ct: The contents of the layer ciphertext.</t>
            </li>
          </ul>
          <t>The plaintext output is the raw message plaintext.</t>
          <t>The COSE_Encrypt0 MAY be tagged or untagged.</t>
          <t>An example is shown in <xref target="one-layer-example"/>.</t>
        </section>
        <section anchor="two-layer">
          <name>HPKE Key Encryption Mode</name>
          <t>This mode is selected if the COSE_recipient structure uses a COSE-HPKE algorithm.</t>
          <t>In this approach the following layers are involved:</t>
          <ul spacing="normal">
            <li>
              <t>Layer 0 (corresponding to the COSE_Encrypt structure) contains the content (plaintext)
encrypted with the CEK. This ciphertext may be detached, and if not detached, then
it is included in the COSE_Encrypt structure.</t>
            </li>
            <li>
              <t>Layer 1 (corresponding to a recipient structure) contains parameters needed for
HPKE to generate a shared secret used to encrypt the CEK. This layer conveys the
encrypted CEK in the COSE_recipient structure using a COSE-HPKE algorithm.
The unprotected header MAY contain the kid parameter to identify the static recipient
public key that the sender has been using with HPKE.</t>
            </li>
          </ul>
          <t>This two-layer structure is used to encrypt content that can also be shared with
multiple parties at the expense of a single additional encryption operation.
As stated above, the specification uses a CEK to encrypt the content at layer 0.</t>
          <section anchor="recipient-encryption">
            <name>Recipient Encryption</name>
            <t>This section defines the Recipient_structure, which is used in place of COSE_KDF_Context
for COSE-HPKE recipients. It MUST be used for COSE-HPKE recipients, as it provides
integrity protection for recipient-protected header parameters.</t>
            <t>The Recipient_structure is modeled after the Enc_structure defined in <xref target="RFC9052"/>,
but is specific to COSE_recipient structures and MUST NOT be used with COSE_Encrypt.</t>
            <t>Furthermore, the use of COSE_KDF_Context is prohibited in COSE-HPKE; it MUST NOT be
used.</t>
            <artwork><![CDATA[
Recipient_structure = [
    context: "HPKE Recipient",
    next_layer_alg: int/tstr,
    recipient_protected_header: empty_or_serialize_map,
    recipient_extra_info: bstr
]
]]></artwork>
            <ul spacing="normal">
              <li>
                <t>"next_layer_alg" is the algorithm ID of the COSE layer for which the COSE_recipient is encrypting a key.
It is the algorithm that the key MUST be used with.
This value MUST match the alg parameter in the next lower COSE layer.
(This serves the same purpose as the alg ID in the COSE_KDF_Context.
It also mitigates attacks where the attacker manipulates the content-encryption
algorithm identifier. This attack has been demonstrated against CMS and the mitigation
can be found in <xref target="I-D.ietf-lamps-cms-cek-hkdf-sha256"/>.</t>
              </li>
              <li>
                <t>"recipient_protected_header" contains the protected header parameters from the COSE_recipient
CBOR-encoded deterministically with the "Core Deterministic Encoding Requirements",
specified in <xref section="4.2.1" sectionFormat="of" target="RFC8949"/>.</t>
              </li>
              <li>
                <t>"recipient_extra_info" contains any additional context the application wishes to include in
the key derivation via the HPKE info parameter. If none, it is a zero-length string.</t>
              </li>
            </ul>
          </section>
          <section anchor="cose-hpke-recipient-construction">
            <name>COSE-HPKE Recipient Construction</name>
            <t>Because COSE-HPKE supports header protection, if the 'alg' parameter is present, it
MUST be in the protected header parameters and MUST be a COSE-HPKE algorithm.</t>
            <t>The protected header MAY contain the kid parameter to identify the static recipient
public key that the sender used. Use of the 'kid' parameter is RECOMMENDED
to explicitly identify the static recipient public key used by the sender.
Including it in the protected header parameters ensures that it is input into the
key derivation function of HPKE.</t>
            <t>When encrypting, the inputs to the HPKE Seal operation are set as follows:</t>
            <ul spacing="normal">
              <li>
                <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
              </li>
              <li>
                <t>pkR: The recipient public key, converted into HPKE public key.</t>
              </li>
              <li>
                <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
              </li>
              <li>
                <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
              </li>
              <li>
                <t>info: Deterministic encoding of the Recipient_structure.</t>
              </li>
              <li>
                <t>aad: Defaults to the empty string; externally provided information MAY be used instead.</t>
              </li>
              <li>
                <t>pt: The raw key for the next layer down.</t>
              </li>
            </ul>
            <t>The outputs are used as follows:</t>
            <ul spacing="normal">
              <li>
                <t>enc: MUST be placed raw into the 'ek' (encapsulated key) parameter in the unprotected bucket.</t>
              </li>
              <li>
                <t>ct: MUST be placed raw in the ciphertext field in the COSE_recipient.</t>
              </li>
            </ul>
            <t>When decrypting, the inputs to the HPKE Open operation are set as follows:</t>
            <ul spacing="normal">
              <li>
                <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
              </li>
              <li>
                <t>skR: The recipient private key, converted into HPKE private key.</t>
              </li>
              <li>
                <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
              </li>
              <li>
                <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
              </li>
              <li>
                <t>info: Deterministic encoding of the Recipient_structure.</t>
              </li>
              <li>
                <t>aad: Defaults to the empty string; externally provided information MAY be used instead.</t>
              </li>
              <li>
                <t>ct: The contents of the layer ciphertext field.</t>
              </li>
            </ul>
            <t>The plaintext output is the raw key for the next layer down.</t>
            <t>It is not necessary to populate recipient_aad, as HPKE inherently mitigates the classes of
attacks that COSE_KDF_Context, and SP800-56A are designed to address. COSE-HPKE use cases
may still utilize recipient_aad for other purposes as needed; however, it is generally
intended for small values such as identifiers, contextual information, or secrets. It is
not designed for protecting large or bulk external data.</t>
            <t>Any bulk external data that requires protection should be handled at layer 0 using external_aad.</t>
            <t>The COSE_recipient structure is computed for each recipient.</t>
            <t>When encrypting the content at layer 0, the instructions in <xref section="5.3" sectionFormat="of" target="RFC9052"/> MUST be followed, including the calculation of the
authenticated data structure.</t>
            <t>An example is shown in <xref target="two-layer-example"/>.</t>
          </section>
        </section>
      </section>
      <section anchor="key-representation">
        <name>Key Representation</name>
        <t>The COSE_Key with the existing key types can be used to represent KEM private
or public keys. When using a COSE_Key for COSE-HPKE, the following checks are made:</t>
        <ul spacing="normal">
          <li>
            <t>If the "kty" field is "AKP", then the public and private keys SHALL be the raw HPKE public and private
keys (respectively) for the KEM used by the algorithm.</t>
          </li>
          <li>
            <t>Otherwise, the key MUST be suitable for the KEM used by the algorithm. In case the "kty" parameter
is "EC2" or "OKP", this means the value of "crv" parameter is suitable. The valid combinations of
KEM, "kty" and "crv" for the algorithms defined in this document are shown in <xref target="ciphersuite-kty-crv"/>.</t>
          </li>
          <li>
            <t>If the "key_ops" field is present, it MUST include only "derive bits" for the private key
and MUST be empty for the public key.</t>
          </li>
        </ul>
        <t>Examples of the COSE_Key for COSE-HPKE are shown in <xref target="key-representation-example"/>.</t>
      </section>
    </section>
    <section anchor="ciphersuite-registration">
      <name>Ciphersuite Registration</name>
      <t>A ciphersuite is a group of algorithms, often sharing component algorithms
such as hash functions, targeting a security level.
A COSE-HPKE algorithm is composed of the following choices:</t>
      <ul spacing="normal">
        <li>
          <t>COSE 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>The HPKE mode is determined by the presence or absence of the
'psk_id' parameter and is therefore not explicitly indicated in the
ciphersuite.</t>
      <t>For a list of ciphersuite registrations, please see <xref target="IANA"/>. The following
table summarizes the relationship between the ciphersuites registered in this
document and the values registered in the HPKE IANA registry <xref target="HPKE-IANA"/>.</t>
      <artwork><![CDATA[
+-------------------+-----------------------+-------------------+
| COSE-HPKE         | COSE HPKE Mode        |        HPKE       |
| Ciphersuite Label |                       | KEM  | KDF | AEAD |
+-------------------+-----------------------+------+-----+------+
| HPKE-0            | Integrated Encryption | 0x10 | 0x1 | 0x1  |
| HPKE-1            | Integrated Encryption | 0x11 | 0x2 | 0x2  |
| HPKE-2            | Integrated Encryption | 0x12 | 0x3 | 0x2  |
| HPKE-3            | Integrated Encryption | 0x20 | 0x1 | 0x1  |
| HPKE-4            | Integrated Encryption | 0x20 | 0x1 | 0x3  |
| HPKE-5            | Integrated Encryption | 0x21 | 0x3 | 0x2  |
| HPKE-6            | Integrated Encryption | 0x21 | 0x3 | 0x3  |
| HPKE-7            | Integrated Encryption | 0x10 | 0x1 | 0x2  |
| HPKE-0-KE         | Key Encryption        | 0x10 | 0x1 | 0x1  |
| HPKE-1-KE         | Key Encryption        | 0x11 | 0x2 | 0x2  |
| HPKE-2-KE         | Key Encryption        | 0x12 | 0x3 | 0x2  |
| HPKE-3-KE         | Key Encryption        | 0x20 | 0x1 | 0x1  |
| HPKE-4-KE         | Key Encryption        | 0x20 | 0x1 | 0x3  |
| HPKE-5-KE         | Key Encryption        | 0x21 | 0x3 | 0x2  |
| HPKE-6-KE         | Key Encryption        | 0x21 | 0x3 | 0x3  |
| HPKE-7-KE         | Key Encryption        | 0x10 | 0x1 | 0x2  |
+-------------------+-----------------------+------+-----+------+
]]></artwork>
      <t>The following list maps the ciphersuite labels to their textual
description.</t>
      <ul spacing="normal">
        <li>
          <t>HPKE-0: Integrated Encryption with DHKEM(P-256, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-128-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-1: Integrated Encryption with DHKEM(P-384, HKDF-SHA384) KEM, HKDF-SHA384 KDF, and AES-256-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-2: Integrated Encryption with DHKEM(P-521, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-3: Integrated Encryption with DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-128-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-4: Integrated Encryption with DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and ChaCha20Poly1305 AEAD.</t>
        </li>
        <li>
          <t>HPKE-5: Integrated Encryption with DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-6: Integrated Encryption with DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and ChaCha20Poly1305 AEAD.</t>
        </li>
        <li>
          <t>HPKE-7: Integrated Encryption with DHKEM(P-256, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-256-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-0: Key Encryption with DHKEM(P-256, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-128-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-1: Key Encryption with DHKEM(P-384, HKDF-SHA384) KEM, HKDF-SHA384 KDF, and AES-256-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-2: Key Encryption with DHKEM(P-521, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-3: Key Encryption with DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-128-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-4: Key Encryption with DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and ChaCha20Poly1305 AEAD.</t>
        </li>
        <li>
          <t>HPKE-5: Key Encryption with DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-6: Key Encryption with DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and ChaCha20Poly1305 AEAD.</t>
        </li>
        <li>
          <t>HPKE-7: Key Encryption with DHKEM(P-256, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-256-GCM AEAD.</t>
        </li>
      </ul>
      <t>As the list indicates, the ciphersuite labels have been abbreviated at least
to some extent to strike a balance between readability and length.</t>
      <t>The ciphersuite list above is a minimal starting point. Additional
ciphersuites can be registered into the already existing registry.
For example, once post-quantum cryptographic algorithms have been standardized
it might be beneficial to register ciphersuites for use with COSE-HPKE.
Additionally, ciphersuites utilizing the compact encoding of the public keys,
as defined in <xref target="I-D.irtf-cfrg-dnhpke"/>, may be standardized for use in
constrained environments.</t>
      <t>As a guideline for ciphersuite submissions to the IANA COSE algorithm
registry, the designated experts must only register combinations of
(KEM, KDF, AEAD) triple that constitute valid combinations for use with
HPKE, the KDF used should (if possible) match one internally used by the
KEM, and components should not be mixed between global and national standards.</t>
      <section anchor="cosekeys-for-cose-hpke-ciphersuites">
        <name>COSE_Keys for COSE-HPKE Ciphersuites</name>
        <t>The COSE-HPKE algorithm uniquely determines the KEM for which a COSE_Key is used.
The following mapping table shows the valid combinations
of the KEM used, COSE_Key type, and its curve/key subtype.
This holds for COSE algorithms using either of the COSE HPKE modes
(Integrated Encryption and Key Encryption).</t>
        <figure anchor="ciphersuite-kty-crv">
          <name>COSE_Key Types and Curves for COSE-HPKE Ciphersuites</name>
          <artwork><![CDATA[
+---------------------+--------------+
| HPKE KEM id         | COSE_Key     |
|                     | kty | crv    |
+---------------------+-----+--------+
| 0x0010, 0x0013      | EC2 | P-256  |
| 0x0011, 0x0014      | EC2 | P-384  |
| 0x0012, 0x0015      | EC2 | P-521  |
| 0x0020              | OKP | X25519 |
| 0x0021              | OKP | X448   |
+---------------------+-----+--------+
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This section provides a set of examples that show all COSE message types
(COSE_Encrypt0 and COSE_Encrypt) to which the COSE-HPKE can be
applied, and also provides some examples of key representation for HPKE KEM.</t>
      <t>Each example of the COSE message includes the following information
that can be used to check the interoperability of COSE-HPKE implementations:</t>
      <ul spacing="normal">
        <li>
          <t>plaintext: Original data of the encrypted payload.</t>
        </li>
        <li>
          <t>external_aad: Externally supplied AAD.</t>
        </li>
        <li>
          <t>skR: A recipient private key.</t>
        </li>
        <li>
          <t>skE: An ephemeral sender private key paired with the encapsulated key.</t>
        </li>
      </ul>
      <section anchor="one-layer-example">
        <name>COSE HPKE Integrated Encryption Mode</name>
        <t>This example assumes that a sender wants to communicate an
encrypted payload to a single recipient in the most efficient way.</t>
        <t>An example of the HPKE Integrated Encryption Mode is
shown in <xref target="hpke-example-one"/>. Line breaks and comments have been inserted
for better readability.</t>
        <t>This example uses the following:</t>
        <ul spacing="normal">
          <li>
            <t>alg: HPKE-0</t>
          </li>
          <li>
            <t>plaintext: "This is the content."</t>
          </li>
          <li>
            <t>external_aad: "COSE-HPKE app"</t>
          </li>
          <li>
            <t>skR: h'57c92077664146e876760c9520d054aa93c3afb04e306705db6090308507b4d3'</t>
          </li>
          <li>
            <t>skE: h'42dd125eefc409c3b57366e721a40043fb5a58e346d51c133128a77237160218'</t>
          </li>
        </ul>
        <figure anchor="hpke-example-one">
          <name>COSE_Encrypt0 Example for HPKE</name>
          <artwork><![CDATA[
16([
    / alg = HPKE-0 (Assumed: 35) /
    h'a1011823',
    {
        / kid /
        4: h'3031',
        / ek /
        -4: h'045df24272faf43849530db6be01f42708b3c3a9
              df8e268513f0a996ed09ba7840894a3fb946cb28
              23f609c59463093d8815a7400233b75ca8ecb177
              54d241973e',
    },
    / encrypted plaintext /
    h'35aa3d98739289b83751125abe44e3b977e4b9abbf2c8cfaade
      b15f7681eef76df88f096',
])
]]></artwork>
        </figure>
      </section>
      <section anchor="two-layer-example">
        <name>COSE HPKE Key Encryption Mode</name>
        <t>In this example we assume that a sender wants to transmit a
payload to two recipients using the HPKE Key Encryption mode.
Note that it is possible to send two single-layer payloads,
although it will be less efficient.</t>
        <section anchor="coseencrypt">
          <name>COSE_Encrypt</name>
          <t>An example of key encryption using the COSE_Encrypt structure using HPKE is
shown in <xref target="hpke-example-cose-encrypt"/>. Line breaks and comments have been
inserted for better readability.</t>
          <t>This example uses the following input parameters:</t>
          <ul spacing="normal">
            <li>
              <t>Content encryption algorithm: AES-128-GCM</t>
            </li>
            <li>
              <t>plaintext: "This is the payload."</t>
            </li>
            <li>
              <t>kid:"alice"</t>
            </li>
            <li>
              <t>alg: HPKE-0-KE (assumed 46) - Key Encryption, DHKEM(P-256, HKDF-SHA256), KDF: HKDF-SHA256, AEAD: AES-128-GCM</t>
            </li>
            <li>
              <t>external_aad: "some externally provided aad"</t>
            </li>
          </ul>
          <t>Alice uses the following NIST P-256 ECC keys.</t>
          <t>Private Key:</t>
          <artwork><![CDATA[
0xaf, 0xf9, 0x07, 0xc9, 0x9f, 0x9a, 0xd3, 0xaa,
0xe6, 0xc4, 0xcd, 0xf2, 0x11, 0x22, 0xbc, 0xe2,
0xbd, 0x68, 0xb5, 0x28, 0x3e, 0x69, 0x07, 0x15,
0x4a, 0xd9, 0x11, 0x84, 0x0f, 0xa2, 0x08, 0xcf
]]></artwork>
          <t>Public Key:</t>
          <artwork><![CDATA[
/* SEC Serialization of X and Y */
0x04,

/* X & Y */
0x65, 0xed, 0xa5, 0xa1, 0x25, 0x77, 0xc2, 0xba,
0xe8, 0x29, 0x43, 0x7f, 0xe3, 0x38, 0x70, 0x1a,
0x10, 0xaa, 0xa3, 0x75, 0xe1, 0xbb, 0x5b, 0x5d,
0xe1, 0x08, 0xde, 0x43, 0x9c, 0x08, 0x55, 0x1d,

0x1e, 0x52, 0xed, 0x75, 0x70, 0x11, 0x63, 0xf7,
0xf9, 0xe4, 0x0d, 0xdf, 0x9f, 0x34, 0x1b, 0x3d,
0xc9, 0xba, 0x86, 0x0a, 0xf7, 0xe0, 0xca, 0x7c,
0xa7, 0xe9, 0xee, 0xcd, 0x00, 0x84, 0xd1, 0x9c
]]></artwork>
          <t>As a result, the following COSE_Encrypt payload is
created:</t>
          <artwork><![CDATA[
d8 60 84 43 a1 01 01 a1 05 50 7f 55 a2 6b 98 c0
49 b4 28 a7 cf 25 9d c3 0e 54 58 23 3f ae 53 ee
83 55 ee 40 4e 86 7c 00 74 f8 c3 8c 6d 13 6b 65
bb 61 93 92 79 b4 38 48 c5 8c b6 a4 76 03 55 81
83 4b a2 01 18 23 04 45 61 6c 69 63 65 a1 23 58
41 04 fe 73 6d 1d 93 11 4d f6 11 3b c2 87 cd 8e
63 67 e1 0a b4 78 d7 fe df ac a1 6e 12 6f f0 16
d6 95 d5 f7 22 34 03 e3 99 60 75 55 bc cf b9 65
17 5f 49 14 e0 47 73 f7 04 07 5b 46 58 bf 7a dd
84 a3 58 20 55 12 c2 35 7d 4c b6 bd 23 8a 5f bc
10 84 b6 c9 74 0a c2 41 1d 93 63 7a 51 e6 9d 51
0b 4f ae f8
]]></artwork>
          <t>Decoded, this hex-sequence has the following
content:</t>
          <figure anchor="hpke-example-cose-encrypt">
            <name>COSE_Encrypt Example for HPKE</name>
            <artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

  96([
       / alg = AES-128-GCM (1) /
       h'A10101',
       {
           / iv /
           5: h'33739C468ACB8EEC693C563EAEA12DD0'
       },
       / ciphertext /
       h'\
1F3EE9966D5CEE016E49365CF366FD608F271FC3B5ABDD5253844EE38EE6ABB7F555\
                                                                 9A',
       [
           [
               / alg = HPKE-0 (35), kid = 'alice' /
               h'A20118230445616C696365',
               {
                   / ek /
                   -4: h'\
040506BE8D9C2AFE42D3330676A3F616BAE02F6779D962449F26759B8D1E8F4DF10C\
      9F344627DEB063EE1DDB4858A5E7605BD09ECEB409B037E6E61F44D1E946C1'
               },
               / ciphertext containing encrypted CEK /
               h'\
    B11361397A19E9C155C3E0E8117B5E88155600E550DDE03DC834A46A182DE6F1'
           ]
       ]
   ])
]]></artwork>
          </figure>
          <t>To offer authentication of the sender the payload in <xref target="hpke-example-cose-encrypt"/>
is signed with a COSE_Sign1 wrapper, which is outlined in <xref target="hpke-example-sign"/>.
The payload in <xref target="hpke-example-sign"/> is meant to contain the content of
<xref target="hpke-example-cose-encrypt"/>.</t>
          <t>Bob uses the following signature key to sign the COSE_Encrypt payload
without any additional data.</t>
          <t>Private Key:</t>
          <artwork><![CDATA[
0xd9, 0xb5, 0xe7, 0x1f, 0x77, 0x28, 0xbf, 0xe5,
0x63, 0xa9, 0xdc, 0x93, 0x75, 0x62, 0x27, 0x7e,
0x32, 0x7d, 0x98, 0xd9, 0x94, 0x80, 0xf3, 0xdc,
0x92, 0x41, 0xe5, 0x74, 0x2a, 0xc4, 0x58, 0x89
]]></artwork>
          <t>The output of the message is as follows:</t>
          <figure anchor="hpke-example-sign">
            <name>COSE_Sign1 Example</name>
            <artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

18([
       / alg = ES256 (-7) /
       h'A10126',
       {
          / kid = 'bob' /
          4: h'626F62'
       },
       / payload / h'\
D8608443A10101A1055033739C468ACB8EEC693C563EAEA12DD058231F3EE9966D5C\
EE016E49365CF366FD608F271FC3B5ABDD5253844EE38EE6ABB7F5559A81834BA201\
18230445616C696365A1235841040506BE8D9C2AFE42D3330676A3F616BAE02F6779\
D962449F26759B8D1E8F4DF10C9F344627DEB063EE1DDB4858A5E7605BD09ECEB409\
B037E6E61F44D1E946C15820B11361397A19E9C155C3E0E8117B5E88155600E550DD\
                                            E03DC834A46A182DE6F1',   
       / Signature /
       h'\
7F9A83D1753E6FA8475A1250A786DA3E680265949A0AEE1984895A406E41AE8A2966\
        38CA64AE270C5317829BD3968EF76C42DF1566DADC9A68B06BA6ED376B8A'
  ])
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="key-representation-example">
        <name>Key Representation</name>
        <t>Examples of private and public KEM key representation are shown below.</t>
        <section anchor="public-key-for-hpke-0">
          <name>Public Key for HPKE-0</name>
          <figure anchor="hpke-example-key-1">
            <name>Public Key Representation Example for HPKE-0</name>
            <artwork><![CDATA[
{
    / kty = 'EC2' /
    1: 2,
    / kid = '01' /
    2: h'3031',
    / alg = HPKE-0 (Assumed: 35) /
    3: 35,
    / crv = 'P-256' /
    -1: 1,
    / x /
    -2: h'65eda5a12577c2bae829437fe338701a10aaa375
          e1bb5b5de108de439c08551d',
    / y /
    -3: h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af
          7e0ca7ca7e9eecd0084d19c'
}
]]></artwork>
          </figure>
        </section>
        <section anchor="private-key-for-hpke-0">
          <name>Private Key for HPKE-0</name>
          <figure anchor="hpke-example-key-2">
            <name>Private Key Representation Example for HPKE-0</name>
            <artwork><![CDATA[
{
    / kty = 'EC2' /
    1: 2,
    / kid = '01' /
    2: h'3031',
    / alg = HPKE-0 (Assumed: 35) /
    3: 35,
    / key_ops = ['derive_bits'] /
    4: [8],
    / crv = 'P-256' /
    -1: 1,
    / x /
    -2: h'bac5b11cad8f99f9c72b05cf4b9e26d244dc189f7
          45228255a219a86d6a09eff',
    / y /
    -3: h'20138bf82dc1b6d562be0fa54ab7804a3a64b6d72
          ccfed6b6fb6ed28bbfc117e',
    / d /
    -4: h'57c92077664146e876760c9520d054aa93c3afb04
          e306705db6090308507b4d3',
}
]]></artwork>
          </figure>
        </section>
        <section anchor="kem-public-key-for-hpke-4">
          <name>KEM Public Key for HPKE-4</name>
          <figure anchor="hpke-example-key-3">
            <name>Public Key Representation Example for HPKE-4</name>
            <artwork><![CDATA[
{
    / kty = 'OKP' /
    1: 1,
    / kid = '11' /
    2: h'3131',
    / alg = HPKE-4 (Assumed: 42) /
    3: 42,
    / crv = 'X25519' /
    -1: 4,
    / x /
    -2: h'cb7c09ab7b973c77a808ee05b9bbd373b55c06eaa
          9bd4ad2bd4e9931b1c34c22',
}
]]></artwork>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="sec-cons">
      <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>Both HPKE and HPKE COSE assume that the sender possesses the recipient's
public key. Therefore, some form of public key distribution mechanism is
assumed to exist, but this is outside the scope of this document.</t>
      <t>HPKE relies on a source of randomness to be available on the device. Additionally,
with the two layer structure the CEK is randomly generated and it MUST be
ensured that the guidelines in <xref target="RFC8937"/> for random number generation are followed.</t>
      <t>HPKE in Base mode does not offer authentication as part of the HPKE KEM. In this
case COSE constructs like COSE_Sign, COSE_Sign1, COSE_Mac, or COSE_Mac0 can be
used to add authentication.</t>
      <t>If COSE_Encrypt or COSE_Encrypt0 is used with a detached ciphertext then the
subsequently applied integrity protection via COSE_Sign, COSE_Sign1, COSE_Mac,
or COSE_Mac0 does not cover this detached ciphertext. Implementers MUST ensure
that the detached ciphertext also experiences integrity protection. This is, for
example, the case when an AEAD cipher is used to produce the detached ciphertext
but may not be guaranteed by non-AEAD ciphers.</t>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>This document requests IANA to add new values to the 'COSE Algorithms' and to
the 'COSE Header Parameters' registries.</t>
      <section anchor="cose-algorithms-registry">
        <name>COSE Algorithms Registry</name>
        <section anchor="hpke-0">
          <name>HPKE-0</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-0</t>
            </li>
            <li>
              <t>Value: TBD1 (Assumed: 35)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Integrated Encryption using DHKEM(P-256, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-128-GCM AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-1">
          <name>HPKE-1</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-1</t>
            </li>
            <li>
              <t>Value: TBD3 (Assumed: 37)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Integrated Encryption using DHKEM(P-384, HKDF-SHA384) KEM, HKDF-SHA384 KDF, and AES-256-GCM AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-2">
          <name>HPKE-2</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-2</t>
            </li>
            <li>
              <t>Value: TBD5 (Assumed: 39)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Integrated Encryption using DHKEM(P-521, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-3">
          <name>HPKE-3</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-3</t>
            </li>
            <li>
              <t>Value: TBD7 (Assumed: 41)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Integrated Encryption using DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-128-GCM AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-4">
          <name>HPKE-4</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-4</t>
            </li>
            <li>
              <t>Value: TBD8 (Assumed: 42)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Integrated Encryption using DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and ChaCha20Poly1305 AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-5">
          <name>HPKE-5</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-5</t>
            </li>
            <li>
              <t>Value: TBD9 (Assumed: 43)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Integrated Encryption using DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-6">
          <name>HPKE-6</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-6</t>
            </li>
            <li>
              <t>Value: TBD10 (Assumed: 44)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Integrated Encryption using DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and ChaCha20Poly1305 AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-7">
          <name>HPKE-7</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-7</t>
            </li>
            <li>
              <t>Value: TBD13 (Assumed: 45)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Integrated Encryption using DHKEM(P-256, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-256-GCM AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-0-ke">
          <name>HPKE-0-KE</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-0-KE</t>
            </li>
            <li>
              <t>Value: TBD14 (Assumed: 46)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Key Encryption using DHKEM(P-256, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-128-GCM AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-1-ke">
          <name>HPKE-1-KE</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-1-KE</t>
            </li>
            <li>
              <t>Value: TBD15 (Assumed: 47)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Key Encryption using DHKEM(P-384, HKDF-SHA384) KEM, HKDF-SHA384 KDF, and AES-256-GCM AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-2-ke">
          <name>HPKE-2-KE</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-2-KE</t>
            </li>
            <li>
              <t>Value: TBD16 (Assumed: 48)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Key Encryption using DHKEM(P-521, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-3-ke">
          <name>HPKE-3-KE</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-3-KE</t>
            </li>
            <li>
              <t>Value: TBD17 (Assumed: 49)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Key Encryption using DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-128-GCM AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-4-ke">
          <name>HPKE-4-KE</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-4-KE</t>
            </li>
            <li>
              <t>Value: TBD18 (Assumed: 50)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Key Encryption using DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and ChaCha20Poly1305 AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-5-ke">
          <name>HPKE-5-KE</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-5-KE</t>
            </li>
            <li>
              <t>Value: TBD19 (Assumed: 51)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Key Encryption using DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-6-ke">
          <name>HPKE-6-KE</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-6-KE</t>
            </li>
            <li>
              <t>Value: TBD20 (Assumed: 52)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Key Encryption using DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and ChaCha20Poly1305 AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-7-ke">
          <name>HPKE-7-KE</name>
          <ul spacing="normal">
            <li>
              <t>Name: HPKE-7-KE</t>
            </li>
            <li>
              <t>Value: TBD21 (Assumed: 53)</t>
            </li>
            <li>
              <t>Description: COSE HPKE Key Encryption using DHKEM(P-256, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-256-GCM AEAD.</t>
            </li>
            <li>
              <t>Capabilities: [kty]</t>
            </li>
            <li>
              <t>Change Controller: IESG</t>
            </li>
            <li>
              <t>Reference:  [[TBD: This RFC]]</t>
            </li>
            <li>
              <t>Recommended: Yes</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="cose-header-parameters">
        <name>COSE Header Parameters</name>
        <section anchor="ek-header-parameter">
          <name>ek Header Parameter</name>
          <ul spacing="normal">
            <li>
              <t>Name: ek</t>
            </li>
            <li>
              <t>Label: TBD11 (Assumed: -4)</t>
            </li>
            <li>
              <t>Value type: bstr</t>
            </li>
            <li>
              <t>Value Registry: N/A</t>
            </li>
            <li>
              <t>Description: HPKE encapsulated key</t>
            </li>
            <li>
              <t>Reference: [[TBD: This RFC]]</t>
            </li>
          </ul>
        </section>
        <section anchor="pskid-header-parameter">
          <name>psk_id Header Parameter</name>
          <ul spacing="normal">
            <li>
              <t>Name: psk_id</t>
            </li>
            <li>
              <t>Label: TBD12 (Assumed: -5)</t>
            </li>
            <li>
              <t>Value type: bstr</t>
            </li>
            <li>
              <t>Value Registry: N/A</t>
            </li>
            <li>
              <t>Description: A key identifier (kid) for the pre-shared key
as defined in <xref section="5.1.2" sectionFormat="of" target="RFC9180"/></t>
            </li>
            <li>
              <t>Reference: [[TBD: This RFC]]</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="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </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="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
              <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9053"/>
          <seriesInfo name="DOI" value="10.17487/RFC9053"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC5652">
          <front>
            <title>Cryptographic Message Syntax (CMS)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="September" year="2009"/>
            <abstract>
              <t>This document describes the Cryptographic Message Syntax (CMS). This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="70"/>
          <seriesInfo name="RFC" value="5652"/>
          <seriesInfo name="DOI" value="10.17487/RFC5652"/>
        </reference>
        <reference anchor="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="RFC9864">
          <front>
            <title>Fully-Specified Algorithms for JSON Object Signing and Encryption (JOSE) and CBOR Object Signing and Encryption (COSE)</title>
            <author fullname="M.B. Jones" initials="M.B." surname="Jones"/>
            <author fullname="O. Steele" initials="O." surname="Steele"/>
            <date month="October" year="2025"/>
            <abstract>
              <t>This specification refers to cryptographic algorithm identifiers that fully specify the cryptographic operations to be performed, including any curve, key derivation function (KDF), and hash functions, as being "fully specified". It refers to cryptographic algorithm identifiers that require additional information beyond the algorithm identifier to determine the cryptographic operations to be performed as being "polymorphic". This specification creates fully-specified algorithm identifiers for registered JSON Object Signing and Encryption (JOSE) and CBOR Object Signing and Encryption (COSE) polymorphic algorithm identifiers, enabling applications to use only fully-specified algorithm identifiers. It deprecates those polymorphic algorithm identifiers.</t>
              <t>This specification updates RFCs 7518, 8037, and 9053. It deprecates polymorphic algorithms defined by RFCs 8037 and 9053 and provides fully-specified replacements for them. It adds to the instructions to designated experts in RFCs 7518 and 9053.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9864"/>
          <seriesInfo name="DOI" value="10.17487/RFC9864"/>
        </reference>
        <reference anchor="I-D.irtf-cfrg-dnhpke">
          <front>
            <title>Deterministic Nonce-less Hybrid Public Key Encryption</title>
            <author fullname="Dan Harkins" initials="D." surname="Harkins">
              <organization>Hewlett-Packard Enterprise</organization>
            </author>
            <date day="16" month="October" year="2025"/>
            <abstract>
              <t>   This document describes enhancements to the Hybrid Public Key
   Encryption standard published by CFRG.  These include use of "compact
   representation" of relevant public keys, support for key-wrapping,
   and two ways to address the use of HPKE on lossy networks: a
   determinstic, nonce-less AEAD scheme, and use of a rolling sequence
   number with existing AEAD schemes.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-dnhpke-07"/>
        </reference>
        <reference anchor="I-D.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="19" month="September" 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) using HMAC-based Extract-and-Expand Key
   Derivation Function (HKDF) with SHA-256.  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-05"/>
        </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>
      </references>
    </references>
    <?line 920?>

<section anchor="contributors">
      <name>Contributors</name>
      <t>We would like to thank the following individuals for their contributions
to the design of embedding the HPKE output into the COSE structure
following a long and lively mailing list discussion:</t>
      <ul spacing="normal">
        <li>
          <t>Richard Barnes</t>
        </li>
        <li>
          <t>Ilari Liusvaara</t>
        </li>
      </ul>
      <t>Finally, we would like to thank Russ Housley and Brendan Moran for their
contributions to the draft as co-authors of initial versions.</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>We would like to thank
John Mattsson,
Mike Prorock,
Michael Richardson,
Thomas Fossati,
and
Göran Selander
for their contributions to the specification.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9V97XLbRrLofzzFlFJ1JGdFGt8f2krVUiK19saOfS3tPbuV
pFwDYChiRQJcAJSsON7HOi9wX+x29wyAAQjJiu3kJKqEBoFBT3dPT39Nz3Ay
mRh1Vq/FCft7JVixZM/u4jJL2etdvM6Sybfiji3ypLzb1lmRs6Nnr79dPGG3
Wb1iZ6ev3rBX8b9EUrOL7CrP8ivG87TX/OzVxeKJweO4FDcnDL8xhGCkRZLz
DXSalnxZTzJRLydJUYnJanstJlZkJLwWV0V5d8KqOjWMbFuesG0pPCcIL8td
VdumGZm2wUvBT9iFSHZlVt8Zt0V5fVUWu63sy7gWd3ArPWHP81qUuagnc+zP
MKoaMH3L10UOONyJythmJ+z7ukiOWVWUdSmWFVzdbfDiR8Pgu3pVlCfGxGAs
y6sT9mzKLqtkVSxFnl3BTUnMM57nouo/ERuerU/Yih5N6/bRX64276aAETRp
2PNscvrmAr4X5RXPs584shCGJc9uRFkBeTg6s+12nYmUXSSZyBPo7LTI88mb
lcjyyUUmsMek2OU1cu6votzw/K7D+tWUXdRCrEWL8asyE929skA5EGlWF+Ue
HpclTwVgki3v0o6uAgD8pSgtZ5oVet+AdY1o1jCOVYfBfMpm/wLwm6xFYc6z
ancttPv9fuMszmq+7rpM+b8y+A8YCF+nSbHR+/0b3/K86+/FlL3Y5Wm8Btzb
Hl/wXYnM6z3qd9pIFLtcCZBC9uLFWYfA+mr9l0o1qOn5EIt7qH85ZX8Diata
TF5myYqLNTvtHgzxWC8nz6tqB9DOirzarWuYZh0qGwngbfz2X/j+X1ZFrXEF
MATJq+ttdfL0aYWgMgI1zfJl8fR+hI28AMmpQe5OoNGb8zPbsiJ1GVqB21xG
bnM3skKzuTQ9u7t0TmDyQm99eJ7ftgkjJ2iahz6Bfj6ZT7MSNcKyvJqkOeqE
9j5qijXfbKtJsoH/xfVkdZ0uJ9WK256PrVC/TJ7PvpvhF/hr5i5Tf8Bg0Afw
XN5Ryq+n9di41sOX2BtxlVXAM/U2L69E3TH59vZ2mvGcT6GXp7yqQC1uRF5X
T5EG+pi+W9WbtXw7BW7DHEzqIhYls03bMYzJZAIKAXrgCeipy1VWsWorkmyZ
JSQTLBXLDLXMSmK8lXoaNB0TexgD39kO1Drqa+PR+npKPARtswS9wzi74SXQ
VMMNY7w30Eu8hFla8vJuUmU/gSRt1zwDnfuurggJzkqgYQs6q1YYM4AxNQzq
KcNerkQuSr7W4S5LmCWo09muztbZTxJjxkExb0RdSiD4At/CzCD2GBsBMyLP
qg07+nbx8skxQMZGKSiuG8nA5S5PJLXfzs+xAfAAoM5ATgA9ZLPQmWKQsZtV
VZFk9GjOa86OZovZ/AnjazBS8HwzVWMFhm2HI94OEwClIUDLirRK0wlsnuo9
El7AJ8mOXFrKDMxSWdxkKXQa39G9SU7TiDXqh7XkViDY2Ar7A0OJE6KE95B2
rlNmdKNJvU2lyG2yNAUbYHzF0FaWRbojHsEAPULM3r9XKuDDBzmWYOXERgAu
vG5IqLRxf7zsXAGxMOBGKz2HVV9+fiHT2ZHEFXTUhw/HrPnifPjwRI4zvlmB
nK2Rg0XNZq+fVwpsigPz/j2YBkLcR+gt3VP2EnXzFniY5TeFHNIKm7zaivzo
CXsKupyv4QJepU5AtEH/Ep0gg9BJViW7qqJujK6baBpMrV5XwC/BcsCt2m23
4KyAPsdxA/Nwg6OM3aJIX4L1z/JiXVzdIZsEMR69oYodvPz7xeXBsfyXffeK
rt8s/s/fn79ZzPH64tnsxYv2omlx8ezV31/Ac0NddW+evXr5cvHdXL4Md9ng
1svZPw/kRDt49fry+avvZi8OkJs1jJ7Rjh7SVRcsFgyHvwQpxumGrBFVUmax
HIHTs9f/lcfV9s+WK8cPjRNwha7ROn34YNyCvMv+inwNVNNX4DrMhe1W8BLh
8PWageJA36KiAYDxvs3ZSpRiOqp4QaCkZC2L9bq4JWVEnlvGO64D3psKbN4E
x6MGqiaarOMIHJ0tviWthC11yTp7eSFpQOMIAgUgHmOUsoF4dhIJALbXb7AB
6YRu9oEw4Z12TknxuxdIpQEhJSo+BYrCvtPU7OVQU1dCjL0171T3+UB1j7xx
nxpnD6jxcUAp+MHwIpikPkz14vh7MBFJ46AypxDE+Oor9grc5ptM3I6KlZrF
wODbgm0K1JTA2h0qoZ45OCafcX0HwsW+lm4OhTVX5ZBSBHKMQg/zqbGvO1Qs
MLmUNBo0mo2ehWAG8cL3YErkctLEQr5EfONKKXbDPQUdBS4n+GJ3ooTp16p5
hJyKGrzQaqqhOpDeR+AIaj+Rc4iNzSE53aAz+IJvV7u4Ev/eQXNAXoEyGlD3
kttyf6PUd0dhhSTCoHyMxDn4gxnIZecMMGgF4rLMyH8qRTstEOWSHEigOzXQ
PtLzRiKIep6sukiZsDSqgmypUmHwwnK3BirVayKluVcC9VkpfQUpk+BPk0w+
z1lcwCgmHFQY6p5c3MouVgKin5JtOXpagBQ0Wa8BxKG4PmyGxACkEjQu0rlo
xkTNf+AwhOgluAs7jdBMGjmK9XvijryXL93w9Q65DWq+Qm5Lqwhzna/JC+jc
OkChZ/P/GyajJpvYCWl3ifUeSWTkYvKKsCM0r+Qf5DCeNVhZgKPeweGh1kgj
VzToeCACx2BdIOpqVGKxq7e7lhtS1BcvJZmSRHhEiDV4cAPd+8b3bVyWCmNr
0DW87xSSQjjeM4KXPAZRJb+gp36e553oHMt5fIgg3sYw9IdEoPy+rQAjEr3O
iUCUaVIAaVqrTJJ2CF/eZukIg6G54u2fGYiZKG+zSsgRIXBAIofZVaF0a9hM
DR21bEBh5wF5U2vgAaHiwCEg+kSOvKg0HYECi52vijUiih6mciRhZHQbNu2R
+SACdh8BJQO6Z10pnc0H7jfahK++ekhfv0Qmvf+q06bKThDzOCV8qmYUcHTf
qndNbeKRc8JljEBdtcrIwEFfgQDlhRaEtW8eVU8Aw1ORcHSYu/dbxdgMt5ws
gO9xKxHQx+GoHECTupV30I3rHcQwhppQ9087nBxjJACCszVE8burle7aEw7X
KJIaDvmARehggmdd7Ep+JXUjjCLDAOCY3M8ueGh91ouPdGIcgXEnQe/uVU9I
d7+DwUoytEDKBEidWdUwm5PRGNggRaYCN+AdMGTKnj882IqjOOAD1GjWddES
A8ebCIHhAPQqscbgX2rxEoZqW+Qpyqw+J5R+baZTfiVncpaDmqMp3Oo5DGhY
sQW1RWJM2kTUqKukhyz94GuxAbVxAm4cBEIQfKj4Z2SYSacrt/WEFOgYw46l
MUKVhXFCgbE7wdFtBHSbLn9pt5inwhc6bUX6f7OFOBuYD6z4M4wwJpI5Wt82
Nm/zWziXgeGN55TlYOc5geYcUNkzLfFdLRRkchjxXi9YxwwR1waeJzBuNGIK
Oehg2/O6O53lKI1Fsj41zhX8+13Gzrq/qxusbjOIkoCeg0YKD4gaoOoXj2mt
hpTfso2oKpiNmkcmI1RpS6XLRBwciBLI5Elnztc8gSYIj8SgdQCOhhb7SV8/
DI1/vEuuRY04JnUHvumfNDIDMVyhyKHzCJMTo2+p7dENTFbQVLlFSqmgXgFf
LEFNoBDlldFB2ddT7SBP2avOhsK8RT+j5HklrTTMMCSmhkCgdYA1sOAMrlN8
Jc/WU+OCopNWJBoTRskPlZaTJq9NxbTkbPnduuAp+rdAr2Ym0ZLEAhSEVCbo
e6LA9l2Ee52vaQdNmv0WXLIqKhWlPwwM0ws6QKmuUvFRdYWJmF9FXVUj6qpT
qPfrK13pfpLC+pR5+GsruV8FMk38yy74qBrLLGcnTftWTJqZfH97bTZLxdMq
osadV879Q8qqP30V4jW/Qi8D0+65vEbfBazpO77B4DJr0kzkYLYe30Q9lxmE
xlschMzKTewiUt1NRMBqQvZcxRGP7wFfUcaKpMHA7ywLDEX7GS/qWWpozHOu
b0RK0+YFMdZkR33HQgmBzqsOkSeNMax6geVRy+knTfzehHoq3FcBvKb3NpwS
Fo36krm/TCrq7ibqFkOq1MYpbQzCOIbTjjRrhDQ+5lBrVHXeIUTcAnsDSZdh
H7wtFzxq9HlVtFCBEhP1Xh6kT7USYQrIiXEakygVkn9s9GWUMjr8l+OBMUq3
7rhc44pAq5YB1Qe9XS16b9MYytXt9L9Eqw3omxRsK+26+7ufKmpkh8BjCouv
K8okK87SAlib4gHUa4ypFCrgtYtcevttnot32T99saKxHlNjVhGdaNjj4kaF
uyMJY06DMhjNBl1AQBJnynn/FXvTjpi2AqXShsqO64scbfO3LXua4LjhEgwZ
eSBIHgnFt/Pzt2fSzTOaNKUUBC31xZ7XfVfovpaUm8jqNjlmZORg4tpUFzLS
2+07kz356iaKUq4jdDGl6jA9xZckd9AQuPR2NP2kr/MYsVTpeprtvvlRdeGo
8jS6TJOuJADR812JntqmKNXwq5BxyGUZGBcrLGRQuf6GkX9uA2XZmSHNtPGf
//zHGOPBN+x7WjpWbvoJO6DhaJseHNPjHJ69Jcl6C5P7BP2OpzVAkU9bqt+2
A/FWDsSJNNdvi/Jtm4l7u+Hb4XsAvuRvpSuBySzjR8IYlOVBv+uDxpJ2jsjz
eWOMKVMl5R/lQ4rtiO7KKi0aleu54EfW+6Bb5YKapie9OHxTOY1kUo6egtOh
egQY+0ECksLA7olSQ3VqHKnZWN6oSUhLedtduQUPFmdDAxAo1ZWxJhGEPqmo
DWiZK8oe8RrM1HWlcuIEg+5A7xueZ1uKZ3qWUltaMsZyz8pgSDCdpk3Fpsix
wICU1xVaqppWn5p4QuGEYFGVxmj/d7maVR8vwiAnBiThfjE76Bv+B9QBW5bF
ZkQmqJgB6S/QqqbYdpPlmIhPyLlsvYWDM5id4JRqDVBnFGTC38iMOVVowMxp
0+n99J87tdv8I5a87NPXTQeNMp7f6VakCaxpYDGnp4wExHkrQd6yckma/PSg
auEm410og11pDq8MSfM2XuTsJ1GC3RT5FbBB+t6As7QwnRLvbM0ZCUSz5P8r
JAONLhn40SF/TDrwcgzGr+elkFZuCiRH046VvuRtfFoqkI2kAsEfR6lAac3q
x3APPBmyYkRC4+tSSKOSJMZ95TBdQcgfLAH4ZbJ/nxNM69pFNNpFicqIGf91
g2U904Zj3WQWpTkjc5tCCPo7zLn1wN+T2hqLbv6ASaDfQQbodyW0j03YSDF4
RNrmYcmX3iNmB3KRYIKnvENytoV0szRXF0imEEfZXXTOqMKgc9xITte8qqhy
w2j8OFLAQ8dPJiYuXoemOfH8mSoOwDJRGc+CwwDKG8KvbgDREtPCvYFJDhit
9VqVQw7QJHLVspR0RitEXGYe/sxW4Mje4AqRNAqq3HJ9RwFbrpITrNpgXRT5
yFhSgWuclV7OcNw4MjtQ/dq4HmPOS+YvZPCYVYZMvijiEHjjNlAeqbwSVLK4
W1+3QkPrHZQxuxt5IFmqyhwqPbysVsUOlAPI1Qr4SxFiG1mrzEIDCTmlZ/DG
UiSYWyo2IFAKbyrJ2NM2WkwyHtM3Sqh1rarhurJj9FLyjR6UqggzVllr/akL
vk6a6ik5P4yHloseSj22eZVB6pGSjm+aogzZ1fuvYDJNyt7NDxoL8ZXW4Rbv
qBzmSvpRd1sYKBVENDmbFpC+HG+geLQmHERIFXl0uSrqppeFOB7kJpOVwImH
c2oDbhFo8q+bldSD6/ruoFsdOZh9+/pAW2tQPePc1HRyxWT5YyxaraK7Glpr
g1ofYXYQx/ZGrO+etNoHqdQ9O82P/Vpf6xkGrtUuq6nM4+OA2POcdIRGa7da
jfQuzuwDnG0HrxThmEwRXAVgbZ3KQVLeHPTd2gaLtqIlw7WuTZzlbYmrAYgd
q26pxpOgtAuaDZZVvzpIX3onM9wJp1T32LOYANQJwEPx1EZT3L0ttpU2onuF
B000RTUiB+TvChZnddVhpg21oQcd0qC1rfTSo4WcLJWewtgXzCE9+9OnP+vY
WUdws8FAxt/GjGnMUIXyuMGJkpUtZ0H7Lmtck1txWrZF7QXxYK7VpFVGo81X
vFq1Xj+8KvcwyInW1pWvwVasp9D9mCeh9GOBsqgYoc/CIgOTKmtg2zI2XLzA
ek4Q4VlbmQLf5+e971iOqd0gHXMAL2ERMbRtioix2UFjpZDZcvWwyxbIahvc
5FGq/RowDO3OEOL6ZdOsWT9psgjdBJMjlpCd4rG6lHp3ZHWSlhxoQpViWaga
bT0MzFOlpqUTa2gji9lEWo9dA7LYhz7qpSYRMF4gNjjVZempIocmZzsGhtQb
1W6zAXn4SfkopZCmo1plWxDz+lYI3cmmviqtPHGkQFsliBTjh001trN72Y55
wj9N9v/G7t13/0/Gz5pcNn8/D8Stu6/+tNY/IwSNxS94LNZdy8HfzyS3+A+I
689SSH/+FCr+1PsCOBBvzH5f4xUaPzPznWXKf9QnUUEQrEdDkO/a6rODYD8a
gnzX2YPgPBaCfR8V7idBcDQI3qMhWPdQ4X8SBB2H4JNGU8fBnPSkerAM3N5/
SB4eDeFeeXg0hHvl4bEQ7peHT4LQk4dHQ7hXHj4JQk8ePmk0CYfP1zC0KtOz
DdLCbPi2Gup+CFtACTZhfQbejwzzDK1GiDLfUkhP7hFtigTmz0BjHr2e2J5/
zJ6B2pyAKw1fnjDyFbU7qFOlVZ8tLiaWHU7+evaSVOy06cp6VFdO6HaA4cug
K7jT7wr63u/KflRXnm11gD3LHnQFdx7RlfOIrv5he54VfT4H3S/f19mKw3+2
+bpY31mO6fU79B7ToeuGn89G/0v39DBhwa8i9qOUwQwbKItfZWo91MeXmlMP
9fGlJtP9fXzBWfTFOvno9Hmgpy81b75QFx+dMF9Sivu0YBUOZYnRpjXxVXV8
n2VbccwBYNjTbtxUqUKIqGpctauKjaBUYS4L5usyu8ZVyJivOUZ/TdhUCp7y
OFtjqIyoyaVWFVX2ekbMqEJIBu+Ycd/wNS4DlhRzb4ssr6fabkOjF46p3Fkv
1FJ5d75GLO66jFsTc8lib5VhwF1AgDgE6/Xk3zue17sNo6EoQIdtV5jH6hI0
HYPogBReprgVC0vmNtnVqkZMYpGLJUS0QAPl8iRe/RhSP3agC9SmRkfkGldE
9Fe6Df4yl7rZ8qTeW5bQMoTHxnC76dixEbhXSNUG6hS1GGY57jHE4JrgiPwm
Kwt5ZIOULs6udlkq1vCYXtLHttrFm6yqKAumxoRiXwpDu/03zbBIsZQJcRI8
rDuTWw8x5sc8VcfOQYbtiGYFzQR58AAIJiZ1Zb0bUpDVu3o0P9c7A6JLm2Io
S8lElTs/ypYoJFUWr8UTVRlT5GortlzP0XKPMuWHkt+mmqoGEqY9YqwieYfN
1YS5Whcx7m6DNyRicg7QiFQy89zk0qpBMk2L06su67y3upVn/95hVXybxqna
pGlXXaSlklV93HTgHoNnvCUxlCmUVXHb5kgHnDWUUDZp2eMONua9VQ0q8CXZ
lTfiKaZ2QWLwkapEwv1pHbH6PFRLFhkt5ujVUm3CqjKOxv0Q7LSvcJ88kHXZ
iyeapARRBQR3AUpLHH01xnMlP7Nr0Ig/g4a5kc0e6vRPeqfmO9O0zGP5r9NA
W5xheElmQnZKjy3VzB02Q4eka2arZt6wGbgcXTPbHJLw6tvX8CkNetfMuqcZ
mMpfQimOxPsT9tVIjlueRfPNQcvpS1o+IRu7o2qz+yfGwQfMIzfp6UHFaLtx
mdNiNwiUaPLYpEBQyuk8BJKxpuCdFm+Mo36dOyGj3aFtb/3KPYmcNFyG3L6o
CrKp4q1FRtnaLqGOM6SfJu/ORME9tYaxwIW4ZkFLnxcNzu3OuH5OWluoNNoS
YW1JilaO1GodaA+qD1DWXdVzSqIy7HjTYCdz3O0iNJ2mdZW1q5XdBmlVna32
1NCGBm018gSGrdWxWGlFB3zNpA9FZQWz8aIC+XwBz3MmtnjiCm4gViVL+lEN
W541RdANSr1ijU7//pJtqu0ahpK2Zlx4Ve02jWjxBp9bnsuSAVChG1DWCVW+
58Yee2Rh/fC4gSbDvAE/hokleiB495bf9Vc59X3YD5CRVYa2PkOHzikIE6AP
E+ov0OKDk8ivq8bOkVug+UhZXlFFB1VRg6FDw605htMBX/bPDyH5oQJdGfD1
pengUu0k01aXpwd7wnOgWcPt9qCRmdWhFySRbQaB77uW64sw8APfTCLPNlPT
czmPnMThy9h0hWP6gemlsW9GpmOGnhnEbuocNuK1OnTtNLVsT4hl4ppR4sRe
4Pi+CGyLu6bpOsvY414oHNdPPSuxHAfiJx4EthNYPmjO8FBaIMs/kuXLT6k+
9psm/X00I5EBYhzvCXtKTVaH3AJNH9rOoaw+ft+e4PWUKvuett9dRNExHUu1
lG3EtdZkQm1M10uXtmsH9pIvXTAWkeeYQHYsTGsJt80wRp5E7WvyL12GwvZD
z3KWJo8iX6RmFPMgdM0wcjkQH7l+Etvh4DXbWQJDEw+eOmbkpGFoeTwAftmO
EwdewkORxFYQDF7z3NR2rShwhCLnw7HimTZV2sKXhlmOx7mTRmHgRHYYxaET
eBaMGMQ9LoxvHAWBcOMIwp6lnYTJkstD7/Avtrxl4IcWDG7gA6nh0ox86PrH
J62tGs6PnqFqTYMyPq3OJpOkq5WP7GfS9EmzCamZOreNVrlPqdAOyU2GZ4Zo
agRPVOl2KiivqlUPIyeSTI3vilrotZONSyy3T+P6F8BUB0TJMo9mpyQEJM0e
dXi12TgLpq3q9JXa3aXzbai9BsdjdTiP71DqHRRzv1KjszUV2MdpN6PRbuxT
tZuqO+1qU/VjkXQaW8f3RM+9PKAMG0OKyg5UwckB+OaJOOgrU0y7H0mpSZnr
P2GTwYgf35+EoFDrRL8l464hggNN3GYPhgVw8PgAzzAALMcY9d3zi0vl5C7O
zmQBjGG8VhYcsD6R+tN8x5fo0y4j8mwD/EzoOqL7EcfP1MFPzo+hvfCpjUuf
Kb1LXrF0oW26jhP8FDa2j6mNH9J9j9rQtSPovtav5WF7V/YYdTBD6sskfLj0
wAlCspSLEd1hVoqop1+zi8UZu1D7Tdrqpn+QYP6Tff0U+jHdYwNb/oP9V3PL
J/QEIczpmkui6DqQzJEESlYQGjah6hKLAkJS0LVDTwMKQCxqL4MRTgRy2V72
SL3EMX568jMl+FZHbCq6XqKku+8RBAvaYwfUyLM7MmQHCgkC5xOIZYAdyFEX
kr/UPl12Y+/QfYsQcgghKRkxERCSHJhcQUM41EtCd4IE23N5X/YiOokxzW5c
U0uSJMeS8iPgru/W9bAWq6etGpUMCioBFVLTnlGEkIbMNxkEba7DuMVM+g8v
POaZLFgyz2PcZn7MopAlpuFGLHaZHTIesGTJbI9FoLscZgowm8wLweYyZ8k4
fHWYEEboIAQhmGsyV7DQZ0HCTIDssmWIL4YJ81MG8SZ04XtGDJ8WixwW2Syg
vpyQQXyXeNgy9hl3WeAzk8CGFsJ3Y8QQ0LaodxNo8RCID5Aj5gNkDymCR15o
uBY2WAoWONRvin1ZFnNBy/p44cQssVkI1KUsFAa+HjABb3FEJghZGuDrKdCY
IFhfMAv4s2RLk1m+kfos8ljqsWXAbJs5LqIqgJwI+Rx4iHacIOviCOm1AuYt
GXAVQmkBLAoQMXgXkDThUQx6E7kaL1nAWZoaMFLcIT6bCAq6BmwdjwWgYYk/
cYqUhhzBxolh0eDC/SRCngMV0B6YIAkH6gCsZzHh4zh6lmFCjzR8y1BK2FzQ
Dh9VsbYS7ybyjK9E0H6mnsw1p4Up2fqm/4cb7MCXPfzhkFEy77ZUiR6I9eiY
jDCAQR+89I0BTlLUeK2a46qvERxZTzpPc3U4A7fV1FzR97p/95RlN5pbiu4e
Oa8O+G1nrh/Ozk7DxeLMj5wzz3cWYHMsez43D5s3Phx3mGhF0Vr3PxjWubNY
gJvqz72zxcK0/IUbOb53dg4u+/ncN8NzO7DOz5xTb3Y6n3u2B46wu1g40LE/
Oz0Nzj3P+2HglH7CXzTrePC9Du77IexhNABBwDG5+N/griKwmYd9lklCZ7YM
D0zX9XzLB575QKUWAqi/92OkDMID7U9GCj8Ypmt6pn+6COfRmT07X7j23HEw
UPJnzjn0dzpbmPa5HwTRPPJt143ObT/wotNwbi3Cc3d+bplnDRejc8d1fTuY
L05NGNWFNZ+fuqEXzrwFhGTe6dyMFmeLUwitTk0nWPgL3zp3XQAEocOZdThE
88MejT1hUFugKIPY2xk+wkSJ4allOb7lRMHMihbRmeV5Z87CXISWFZx6C4xb
PN80F55nzucL05mfhY47c/0ZsH++8M/7GP5o6Bf3RRG6QzoWToxGE5eFPJR4
eEiaCvpVUKB5iB/1hLE4VhWoq3MOCQk8HtmSKgIr5tsN1cWuXncLDj24CAUL
3C4f7F22Yqr6tpb5kG7HWne2nvGwA28Yp0U85krKxQUMDKj+uqAb+/GDwpDO
vAWihpsVVRn+mAcqfT3pGwrpCS47h0t6i7F0rMhDlB4Mp7dScoUizZnyyfux
6d1AYHuH7gTkeURh511G5H+E5IssHQUN2kfU3rVUj/gutbR55/l6BCeMunKY
/ql9bfaw6m8E+oJmxAr3jcjiAj3+o0mwZz9sf9x+PG3UYlzEfaVIWsu3/XPf
HjUWjUg+pUk/D8EMuK4jbRV8wtT+mA3yQNfqpuUH41ONSzQLLdAgp6jBwVzt
6XDoz/FC13q8CgaK7lXCj1e+Pxhj6hfoNn+JgvxlpnNUnR7Dg27oLtop3TPz
wTnw0ZlbgefAS7PQDZBxnjkLQn8+g3uhafte5EYzcwZUR6EbRt7MNWHErNki
nNkwjB2uTng2893Zwg7MM8+xgtCOTudO5IeL88A/A86fWx4M+2x+Fs38EDh5
OvMXcyfwT8MZCtx9el6qH02/S9WqtLtKET1yz4mWINLr8JtMN+3HUNHl4uXY
akJXlh8LmOIqG6Mdr9wYm4kpJ/97lXnDRS2YdYszu5l11gmzm7ycmpPg9KmH
9iAh+Yh0p4Nfmta4FgQAKSPQwMRSHatp8K65ST35nki5x2HwgyCxYy5g8Fwn
WArHCQPT4pbJOXcCTxNMYcWxF3upsMwwFa4TJWboeVbaInzX9OBgD5bwbJEG
HkCzfGcZLCPhmmm6jJaOa8VOmkQxB5XCl1oXgTATHsB/IhIiSU1QOKkVJYfG
h3FJwfG2GlHRxmQgGEO/YGKiEMmB7MzV72Uk1UYVPLfjUO5BeYt7UA5/VI1B
bX8f/viJ4x7zxIstK+FpuIyiZZQEdmx6ydKNI2H7KejDNLHCaKlnmF3PtkPb
87htRTBkqc/NSCyX94w7KGgnjJehDYBiP/V8Oxbmknsuj4PQdLnDfRfuB7bW
Q5IsRerH/jL2RWqHcbxMQE2Ktocmcy8d7UcvUujCe896xfFDomW3oqVJyeNl
CzXKmKJwR8Xr1bevNfGyBuJlDcTLGhcvVxMv19bEy7UHAiOXqnWJccclJomD
xIxg8OIocJIg4KEZCmF6cRTHKdj/2PMS0xeca9yO4tTlqQ2fIoocK7YSx01s
+2FuO58wkV25ht3+9A4eSpGlaqd2BRahEskEa10+jJ6jDjfwSEE88l+mw5vd
Ku2epqQPkJzs/q8qdHt31BEdmPmnVWuq7xn2SW64OrCKupPL8lTMoS1XaLEJ
LieIqmp35LS/aqGfcI2beSQax3KRHBevydJ1R0WkWFKUxTu5dNGepJ9VRpPy
pjMooNUxw9OPmlMpwfFFHkickmKrVky1zXjNwdSloHOH0WwCFrtS7n0qgcxi
k+OqhvypBn7DszXxSW09T8UNhOx6Rdsaz8xu1p5x/WR4oBeFJ/IUdwl/fdee
jpaqMppmd54hD7hIO9a2BVpVe+4T/qiQOuJSAmT5boO/saOgNs5As9G2/SGa
nJ3i3ip5bHUh5Bbx0ZiT0/FuIwd/q7Urg/ZjkiwkzekqFcQM16ILMY+1aFNd
v+QJbaVuvphNIUVTqgBR2gAVeURnL7xrAGinIPcO8+9OLe3SBs1mWKN3kL6q
32Cjp3rhmTQfI8boEdPyNCluKFSX++6GyAAXm0oLPNOEhl6Ou9EO+xgNNFWp
rE79OtoY2upYpKw6puP42jpJucMaK+WQE/iLQLjPS0LXz5zb0q/jiPuQoMPG
sOZQ1cFd7TjIYC1k7VwObqwGl0rfmCobHOo72jM3/Ikb3P4uKhAlekcJBJ7n
rzblNadykOS1OykrefZ7XRjdw2fy7JjX7frcYVNBCvNeKwnpgHQ/ftUeUon+
1YSx7+Tv3zVVDOz/IjIn7PJ0bvWdJHw47/aTnHy06kSub36pond2xrdyARNo
BN8L7PWPdBv055WgxckSdAKehPZ8cfFXfPRGLAX9XNwJY99/DxSdSPkBNfPj
j7KBXD1NkcR/YvFVyxxryByrzxxHZ07wucz53Gr935g59pA5dp85ns6c6HOZ
87nbDH5j5jhD5jh95gS6c2h9HnO+wP6I35g77pA7bp87Yd91/i25c+9uiN+Y
Rd6QRV6fRZHOIuczWfS5O1J+Y974Q974A5ulR/au+xsy5/ciPcGQQ8GAQ7rl
cn9zs/6/LD9YW7Tn9uC9Po96Abz/EI8GpWh/bJ9nhDnWPnN06+4+6Po8yJw/
ms8zwhx7nzm+zpzwk5nzR/N5Rpjj7DOn5/o86Bc+wJw/oM8zwh13nzu66+OZ
vw13fi9WyxthkbfPIt318R70nR9i0R/N5xnhjb/HG1v3fLwHPecvxZvfi/AE
IwwK9hmk5zO8B/3mL2rU/7ekh42niiTfxPXeE42D4hqv6WQlOe901k2kV02M
pZ1m6iD59l6Tajph3z2d7XGZGDzcxjQgcp9GQloe3PUQ4rLFAHlbR977LORn
lMHvDtVkR9dZ2p0X2P/5wL1tzvf/KuHH6Z9MJizmybX6vWi5glDgcP63YLe0
e5cy1JRE5Pn1XkF/mt1k6Y6vqwbbjH6KpF2KqJrfXpTbnGmr4SYWadrbedGc
1trsZCcZa5cDDO33ldm6UL9Sv6ZTFdmGg8w3p9ion8xGpuLwvckSYFvKTnmZ
g/RO2PM1LzP2IttVNxzG2TDOM7X3/Hac3DcAjT0rdtVayH39p8DLlONelZLn
Hc1Gj+Ym55qWfElHCSfFBFP0wFhkQJbDJOVrdgPzBptTyneWXOfF7VqkV/L4
+ftGwPhbsYLueV1XVZEfGy/x4euyKIvkGr8BxWLdUE4tLlfFBnA4L6qK19kx
nmxo/PX//Q/ifyHWHJehjHsGr/1Vuf4i1/8Ha+a7yiSGAAA=

-->

</rfc>
