<?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.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="pre5378Trust200902" docName="draft-ietf-cose-hpke-17" 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-17"/>
    <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>Transmute</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>orie@transmute.industries</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>
    <date year="2025" month="October" day="19"/>
    <area>Security</area>
    <workgroup>COSE</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 63?>

<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>
  </front>
  <middle>
    <?line 77?>

<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 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>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>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>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>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                                        |      HPKE        |
| Ciphersuite Label                                | KEM | KDF | AEAD |
+--------------------------------------------------+-----+-----+------+
| HPKE-0                                           |0x10 | 0x1 | 0x1  |
| HPKE-1                                           |0x11 | 0x2 | 0x2  |
| HPKE-2                                           |0x12 | 0x3 | 0x2  |
| HPKE-3                                           |0x20 | 0x1 | 0x1  |
| HPKE-4                                           |0x20 | 0x1 | 0x3  |
| HPKE-5                                           |0x21 | 0x3 | 0x2  |
| HPKE-6                                           |0x21 | 0x3 | 0x3  |
+--------------------------------------------------+-----+-----+------+
]]></artwork>
      <t>The following list maps the ciphersuite labels to their textual
description.</t>
      <ul spacing="normal">
        <li>
          <t>HPKE-0: DHKEM(P-256, HKDF-SHA256) KEM, HKDF-SHA256 KDF and AES-128-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-1: DHKEM(P-384, HKDF-SHA384) KEM, HKDF-SHA384 KDF, and AES-256-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-2: DHKEM(P-521, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-3: DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-128-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-4: DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and ChaCha20Poly1305 AEAD.</t>
        </li>
        <li>
          <t>HPKE-5: DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
        </li>
        <li>
          <t>HPKE-6: DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and ChaCha20Poly1305 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.</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>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>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 - 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[
{::include-fold example/cose_encrypt_ex1.txt}
]]></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[
{::include-fold example/cose_sign1_ex1.txt}
]]></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="kem-public-key-for-hpke-0">
          <name>KEM Public Key for HPKE-0</name>
          <figure anchor="hpke-example-key-1">
            <name>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="kem-private-key-for-hpke-0">
          <name>KEM Private Key for HPKE-0</name>
          <figure anchor="hpke-example-key-2">
            <name>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>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: Cipher suite for COSE-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>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: Cipher suite for COSE-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>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: Cipher suite for COSE-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>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: Cipher suite for COSE-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>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: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(X25519, HKDF-SHA256) KEM, the HKDF-SHA256 KDF, and the 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: Cipher suite for COSE-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>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: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(X448, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the 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>
      <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="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>
        <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>
      </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="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="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 749?>

<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
Michael B. Jones,
John Mattsson,
Mike Prorock,
Michael Richardson,
Thomas Fossati,
and
Göran Selander
for their review feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+097XLbyJH/8RRTclUkb0ganwTJrVRFlrWxY3vts7SXpLa2
VANgICICAQYAJWu9zmPdC9yLXXfPDDCAQFnej8SpOtcuTQKDnu6e/p4eeDqd
Wk3W5GLFvqsFK1P2/DaqsoS93UV5Fk9filt2WsTV7bbJyoIdPX/78vQxu8ma
NTt5+uYdexP9XcQNO8sui6y4ZLxIesNP3pydPrZ4FFXiesXwF0MIVlLGBd/A
pEnF02aaiSadxmUtpuvtlZjmvBF1Y8Xw12VZ3a5Y3SSWlW2rFdtWIvDCxXm1
qxvXtpe2a/FK8BU7E/Guyppb66asri6rcreV81lX4hYuJSv2omhEVYhm+gzn
tKy6AWwveF4WgMetqK1ttmLfN2U8YXVZNZVIa/h2u8EvP1gW3zXrslpZU4ux
rKhX7PmMndfxukxFkV3CRUnQc14Uou7fERue5Su2pluzpr31x8vN+xlgBEM0
i55Pn747g99ldcmL7EeObISlKbJrUdVAHq7Q8XabZyJhZ3Emihgme1oWxfTd
WmTF9CwTOGNc7ooGOfcnUW14cdth/WbGzhohctFi/KbKRHetKlEWRJI1ZXUH
j/OKF/Vm14iOqBKe/mOjr8+yIoGVgWu1iQXg3yDCDS5sh8uzGTv+O0y0yVpk
nvGs3l0J43ofgyiLsobn3fwJ/3sG/wEr4ecsLjfmvH/mW150872asVe7Ioly
nnTkv+K7CtnYu9WfVMsWO18LkEf26tVJh0B+mf+xVgMauj/Eok+9VZSwJA0s
6AoGvfvmxHWcpfq6cEJffV06C1t/tQO3++rpsUsfHrOyIh3AWyy9UH0N5vLJ
F9Nns6xCHUury2lSoJa111H3cr7Z1tN4A/+Lq+n6Kkmn9Zq7wRxHocZOXxx/
e4w/4I/WBKb+ALNAu+C+vKLMSc+OsHE7gg+xd+IyA5G5VU/z6lI0oCxNs61X
T57c3NzMMl7wGczyhNc1GJqNKJr6CdJAH7P362aTy6cTYDFIdNyUkaiYa7ue
ZU2nU1AvmIHHoPXn66xm9VbEWZrFtL4sEWmGOruWGG+l5QO7wcQdjIHZbAeG
Ei2g9WALOCMegu6moMWMs2teAU0NXLDGZwMt5xVIesWr22md/Qjis815Bhbs
fVMTEpxVQMMWLECjMGYAY2ZZNFOGs1yKQlQ8N+GmFcg8Wki2a7I8+1FizDiY
uY0AtSUg+ADf1ruc2GNtRAyWK6s37Ojl6evHE4CMgxJRZdeSgemuiCW1L599
gwOABwD1GOQE0EM2C5MpFrmP47ou44xuPeMNZ0fHp8fPHjOeg8mH+5uZWitw
FTtc8XaZACgtAfoqpFU6I2DzzJyR8AI+SXYU0vdkYOSr8jpLYNLolq5NC9Id
plWYteTWINg4CucDt4MKUcFzSDs3KbO61aTZZlLkNlmSgEW1HjH0PFWZ7IhH
sEAPELMPH5QJ+PhRriX4DLERgAtvNAm1se4Pl51LIBYW3Gql57Duy89nMp0d
SVzBRn38OGH6h/fx42O5zvhkDXKWIwfLhh2/fVErsAkuzIcPYF4J8TlCb+me
sde7vMm2wMOsuC7lktY45M1WFEeP2ROwyzyHL/AoTQKiDUaX6AQZhEmyOt7V
NU1jddMsZ+HM6U0F/BKsANzq3XYLrl8kM1y3k7K4xlXGaVGkz8GXZkWZl5e3
yCZBjMfYomYHr787Oz+YyL/Zt2/o+7vT//ruxbvTZ/j97Pnxq1ftFz3i7Pmb
717BfUt96548efP69em3z+TDcJUNLr0+/tuBVLSDN2/PX7z59vjVAXKzgdWz
2tVDupqSRYLh8lcgxahuyBpRx1UWyRV4evL2d0VUb792fLl+6JGAK/QdXdLH
j9YNyLucryxyoJp+AtdBF7ZbwSuEw/OcgeFA/1zTAsB63xRsLSoxGzW8IFBS
stIyz8sbMkYUB2W84zrgvanB0U1xPRqgamrIOq7A0cnpS7JKONKUrJPXZ5IG
dIMgUADiIU4pG4hnJ5EAYHv1DgeQTei0D4QJr7Q6JcVvL5DaAEJGVPwcKAr7
zlKz10NLXQsx9tSzznR/MzDdI0/sM+PsHjM+DiiBqBIeBJfUh6keHH8OFJEs
DhpzCuitR4/YGwiHrzNxMypWSouBwTcl25RoKbXZUo5gQrFfDmrMvpLxDWUH
l9WQRHx6gtIOiqQd6w4tCmiVEkOLllEbWMgJECF8DnShkNoSCfkQMYwra9it
8wyMEyQhEITdigr0rrXvCDkRDYSZ9cxAdSC2D8AR7H0slYeNKY/UM5gMfuDT
9S6qxT92MByQV6AsDWovuS3bN8pudxTWSCKsxqdIfFGwqAQexRwsA6p0IW6k
l1kLCMwrtuUYwICiw5A8B8QOxdWhJtgCgmO02dJna4qVWgH+kEdW4IUh3jfV
Cm9SUtqTIqRMPnTN8x3SAtazRlqkswEV4jk51y5aAhR6rvQvIOPGyuMkZDQl
1ndIIt8RUbCBE6HXIrdbALcacF4ARz2D60WjkUauaDDxQAQmYLSzeK0tTblr
truWG1KQTl9LMiWJcIsQ03hwC6NmHVLqSKAW1xRV8n6sRXo2ueNbznkEgkDu
tqfVL4quGjCRWnKIIC4iWPpDIlD+3taAEfqxzjcTyiRyQJoxKkuJX4fw4yJL
RhgMwxVvv2YgZqK6yWohV4TAAYkcZLdGzTGwmVkmatmAwi6wCGbOILBAtcQl
IPpEgbyoDQ1EgcXJ12WOiGLgpuIzWBnTNcx6ZN6LgNtHQMmAGbCispCrHUS1
aGofPbrPGr5GJn141NkqZX6JeZyqEjWsgjQlsLoX6lnbUDzy+VyG3jRVG/Bb
uOhrEKCiNHKb9smj+jFg+FTEHOPQ7vnW7OjllsoC+E40Locwx+GoHMCQppX3
rIjzHaQGllKo/WqHyjFGAiB4nENyvLtcmxEz4XCFImngUAxYhHEbBKzlruKX
Mj2BVWQYV08oquti8jYUPPvEJNYR+EwS9O5a/Zj8wntYrDhD+w5mGAQjlTaz
bkCb49HU0iJDpvIh4B0wZMZe3L/YiqO44APUSOu6JIRBPEuEwHIAerXIMaeW
VryCpdqWRYIya+qEsq9anYpLqclZAWaOVLi1c5gnsHILZovEmKyJaNBWycBT
hpdXYgNmYwXREeQXENOrtGJkmcmmq2hwRdZojGET6YzQZGH4XWJKTHBMHwHT
JunnTstBHD/3GawT4QOdhSOfsdlCyosFu+Lya5AKrJCCY71lbZrc1pdQ/2GR
dCyTFXUDaBA6PPmNIG8bxV5+A3l5XYNmGLGHTMKkX6tpVen5wbKCfKw615rz
GIYgPFqS1hkfDb3n476uDh1xtIuvRIM4xk0HXs9P1pGBSKxx+TFMAkXBBFNa
Xgx4IJ9PdIiiFBx1PANJQq1UiPLa6qDctRmtps3Ym86fgQ6hz8earPSYIO1I
TAMRbxvqGWDTTOQJPlJk+cw6owC8dSnanVB+rypP0v201YaWnC2/zUueUCSX
mi4LrXokQFmlYouEVFVytXXXewOhWQdNuuAWXLwua5WI3g8MM2gToDQdifik
6cBaw29iOuoR09EZt/22wzSA/2887oNMin/eJQK19pJSO0ntWzHRmrx/vKHN
0vC0hkiH1irQvs9Y9dVXId7wS/T4WFku5HeMI8CzvecbTKMyXUmhYK+Nvqbq
vkySdeQ2SA5VyNblXmbIhoCVQvbCtpHo6564TeZtZMEgBqxKsAWDog7NLC00
lvLya5GQ2rwixtrsqO/klRCYvOoQeaxznrqX5B21nH6sM1WddqnEVqWqht3b
cErNtfmS5a1MGuruItoWS5pUHSBqhzCO4awjzRkhjY8FtwZVXaQG2a/A2UDS
ZQoGT8uafoPxp4rcazBiormT8fepViJMyTExzmASJf3Fp1ZfZgyjy38+nqSi
dJv56RUWvVuzDKjeG3kamTRVvY2ws7P/Eq02udZVxlbazVD0blFEyw6Bx2IN
z2sqlirO0h5PW8wA1BvMbxQqEEGLQkbebUWHdwUusx6vvcfMOq6JTnTsUXmt
Us+RmiinRRmspkYXEJDE2VLvH7F37YoZmyyqMqb8uFnHb4dftOzRiarmEiwZ
RSBIHgnFy2ffXJzI2rqlK3FSEIwiD3vR9EOhfSOpTpA1bRnIyijfxO2XLn2j
p9tnpnfkq1MUZVxH6GLK1GGpiKckdzAQuHQxWgoytzKsSJp0vTy4HPv0o+5S
QxVpdFUf00gAot/sKozUNmWlll+lb0MuyyS1XON+typna0Z+3SatcjJLumnr
n//8pzXGgz+w72l3VO2NrNgBLUc79GBCtwu4d0GSdQHKvcK440kDUOTdluqL
diEu5EKspLu+KKuLtip2seHb4XMAvuIXMpTAwpL1A2EMxvKgP/WB9qRdIPLi
mXbGVDWS8o/yIcV2xHZltZEZyi1LiCObu6Bb44KWpie9uHwzqUayQEZ3IehQ
MwKMu0kCksLA74nKQHVmHSltrK6VEtJu1XZXbSGCRW3QAIFS0xgbEkHok4na
gJW5pEoOb8BNXdWq+ksw6ArMvuFFtqV8pucpjd0Tq2OCMsUZ5vSEqQTTWdpE
bMoC99DJeF2ip2pog0XnEwonBIumNEL/vyuUVn26z4CCGJCE/WJ20Hf895gD
llblZkQmaL8e6S/RqyY4dpMVWY1lMQwu22jh4AS0E4JSYwDajJJc+Dvxjx1k
adSEAJqjzMOwFOfP3LYWiJ0ad+nr1MGgjBe3phdRGisXFutryklAnrcWFC2r
kETXigcb89cZ71IZnMoIeGVKWrT5Imc/igr8pigugQ0y9gacpYfpjHjna05I
IPSu9m9QmLO6wtwnl/whpbnzMRi/XZRCVll31Y2WAGtzV9f6eWU5NlKWg3gc
pQKlNWsewj2IZMiLEQk61qWURhVJrH0dH13Pw39YMe7fX4kzrYvQ1kWJyogb
/9dV2nCt0bd27ozcbQIp6BdYc+uB31PaGstu/gOLQF9ABeiLEtqHFmykGDyg
bHO/5MvoEasDhYixwFPdIjnbUoZZRqgLJFOKo/wuBme0l94FbiSnOa9rak6w
dBxHBngY+MnCxNnbhW1Pg/kxyR8kTdllIfNZCBjAeEP61S0gemLaRLewyAGr
leeq42+AJpGrtohkMFoj4rLy8DVbQyB7jbs10imojsL8lhK2QhUnWL3B1h+K
kbF5APcbayOkrCc6kNmB6TfWdYI1L1m/kMljVluy+KKIQ+A6bKA6UnUpqCtv
l1+1QoNNn5wqZrcjNyRLKxm01WZ6Wa/LHRgHkKs18JcyxDazVpUFDQk5ZVbw
xkokWFsqNyBQCm+BdbA71sbIScZzem2E2tCqHu7xelavJK/toDRFWLHKWu9P
U/A81g1CUj+sXvui5JJZvdpbemzrKoPSIxUd3+kGCTnVh0egTNOqd/GjwUJ8
pA24xXu0KIAwxVG3W1golUTomk0LyNwat1A8WhcOIqQaLrpaFU3Tq0JMBrXJ
eC1Q8VCnNhAWgSX/Su9qHlw1twfd7sjB8cu3B8Zeg5oZddOwyTWTHX6RaK2K
GWoYoy0afYTVQVzba5HfPm6tD1JpRnZGHPuVudczTFzrXdZQy8WnAbEXBdkI
g9Zu5xjpPT1xD1DbDt4owrGYIrhKwNqekYO4uj7oh7Uai7a7JMO9rk2UFW0X
pwWITdS01MZIUDTWLZZ1v1PH3AYnN9wJpzT3OLOYAtQpwEPxNFZT3F6U29pY
0TtNADqbon6NA4p3BYuypu4wM5baMpMO6dDaUWYb0KlUltosYdwVzCE9d9Wn
r3XspCNY99DL/Ns6ZgYzVC84noihYmXLWbC+aYN7cmtekSaA9YJ8EDnbjrG0
NV/zet1G/fCobNOXita2TufgK/IZTD8WSSj7WKIsKkaYWlhm4FIpjqLncN8C
uxVBeo/bBhH4/eyb3m9sNjQukHk5gIewRRbG6hZZHHagHRTyWW4cdoUC2fSC
RxgqdRoBVqA990AMP9fD9NaJLiB0uiUXKyYXxSP1VZrckY1J2m0gXapEWqoO
ZDMDLBJloWX8ahmLioVE2orNAVmcw1zwyhAGWCqQGNRy2VipyCG9bNlvSZNR
7zYbEIUfVXhSCek16nW2BQlvboQw42uaq1aTiarTUKP9WNWGFOOHQw22s71s
xxLh76ef/Wfkkd9bPxmC+cA/P8m/zEd+QjgGu1/xSOSfhoOi/BMJ8E9SbH/6
+XSZn0QX8cx+KFGIj/3esQET+Et9El0Ex/lMOBKCqz47OO5nwpEQvDtwvM+D
4+6jy/8FcDwDTvCZcJw9dM1/ARzC59eSHyrD9yyCtCsbyM6HGg9xKoi7zuMy
cHcyrreMppCZNuNTGzK/5yD5R2+nbjCfsOcg/1MIkODHY0YRgHGFlANtxvHp
2dRxF9M/nbwmVZlpcE4Hzlv43cPwYwAOriC4SQsP4N+F53bwAtfpng4cdwAP
rjwAnqfh/dUNAmf5AHon9xPs/0yAJ2sO/7n22zK/dTw76EMNWqi+v/jlVM9/
Frg9KOIeKeXwKIDaBdaTfWK45hihoWdqT46oRA6cXoM11brcCErkCtla2FTZ
FdaII55zdNDas1WCJzyCFLmRTVKyEK4cf29mxIz2b2VohfUQSICxSFtRRLQt
ITueGccdrJ7HVJlNzxuqqgjPEYvbLh/SbnFG7l7Ff9gvDYhDKNVM/7HjRbPb
MMoqy8uKb9eYZXThc8cgOu/MqwSb1rGhYZNdrhvEJIKsPoWgA2igTEvi1Xfz
5rnHzotCrNcSmWO9ynykO2EoM93NlsfNnaKRkb9NrOF5l7Fzq9hVrTo3TIpa
DLMCzzpg/ENwRHGdVaU8MyqlC4LhXZaIHG7TQ+ba1rtok9U15ShqTSg8oa28
rlNZL4sUS1muIMHDrgB5BALDMswiOnYO8p8jUg1SB3nyEQQTU27ZjYAUZM2u
Gc2eeodQu6QWzSeleqqycZSlKCR1BsHdY7VvCQG+PAsmq21GZigTMpT8NhGo
NSSMTCPc43uPw5XCXOZlhOcA4AmJmNQBWpFa1gV0plMPUh0jfKq7msCd2mOR
/WOHPYttpF23KW2392sk+qp7YTbwZeDGtiSGMsqFFKvNYAectZRQ6qR50sHG
qoTqEAK+QMJzLZ5g4g0Sg7fujVQHV3XARtMABq2P72ajn9ZP46EAg/QWPiHB
lcPum/T35qT2e9t27In829PQIM2HT3LQclK67ahh/nAYetZumKuGBcNh4E+7
Ya49JOHNy7fwKb1aN8zZMwz8yudQiivxYcUejZQE5On0Pxy0nD6nahM5pB1t
zu+X1IOPmHbrbH7QYNOeaOK0NwCCJHTaTxqNYkcnJMmU6P5AqnVZR/22QELG
uEId+/1GB4mc9CSWPHmh+teoQaBFRjm/rv6AItuvKnSnpPE4kGWdYt1S1//M
pguNc9vU30/hjbqu1XZUGRU8KrSp4iaoM22nKHer2l8kURlOvNHYyZJAW7On
t1VcZm1xtzvbpZrZVAsy9X8axdsVLFtr9HBjml6gcSyDGNqFOR7fg5H3T+F+
wcQWz2Dj2Se1w2se3tzyTPeMaZR6e1vSIH7G4Zq22qMETS8JryFP11LFNSo3
vJCbK2DONmA4Y+oRLKw7nJEtiMMjiDoh30BMwUSK0QBeveG3/XqweXrsHjKy
2jIqWfROFwVhCvRh/eEVel8I2PhVrX0OuWgjXsmKmva+qN8MnA46USNImw34
cvcwMYkOtTLJXKQvSAfnqufeqMPPDu7IzYHhmbbbAy0u68MgjJeuHYbzue/4
c7EI5+HcjpeBayd24HO+9GKPp5HtC8+eh3aQRHN7aXv2IrDDyE+8Qy1Z60Pf
TRLHDYRIY99exl4UhN58LkLX4b5t+14aBTxYCM+fJ4ETO54HuQIPQ9cLnTkY
zcWhdD7O/Eg2ej2hTqI/6KrA0TGJDBDjBY/ZExqyPuQOGPmF6x3KPq0P7es8
nlAPxJP2t48oerbnqJFyjLgyhkxpjO0HSer6buimPPXBTywDzwayI2E7KVy2
FxHyZNk+Jv8k6UK480XgeKnNl8u5SOxlxMOFby+WPgfil/48jtzF4DHXS4Gh
cQB3PXvpJYuFE/AQ+OV6XhQGMV+IOHLCcPBY4Ceu7yxDTyhyPk4UzwxVabcI
NbO8gHMvWS5Cb+kultHCCwMHVgxyEB/WN1qGofCjJaQgqRsv4pTLt8jgn8gJ
0nC+cGBxwzmQukjt5Rym/uFx66aG+tHzUa1XUH6nNdfkjR7W9G2YEt2prbXm
RhuUffZEvtonwyPEhgXBk9VdO6facmktw8gB5Zn1bdkIs8FER6byvBdWCgGm
elGE3AvTx0kgL9CH6uDRG9zLBL8CDq3uTJVqgTdZNjRcg9dkdDiPt3GrAepE
9V57Rm+tUmAfZtgsbdjYzzVsqjmna+AxX49g0tjG0iuzxHCPHdTuE+0cWIHV
AYTIsTjo21E23V/UoYxmZV6S6c0QgYGRbZP0YRcA3D7AQ5WAxRgjvn1xdq5C
19OTE7kLaFlvlV8GOVxJ02i/5ylGqumS4tUQP2P6vqTrS46fiYefnE9gvJjT
GJ8+E3qWYl0ZGLv0PYrxU7g4PqIx8wVdD2gMffcEXTfmdQIc78sZlx3MBc1l
Ez5cxtUEIU5lga57aYUi6slX7Oz0hJ2pptt2i/evJHh/Y189gXlsf2LhyL+y
3+lLc0JPEMKcvnNJFH0PJXMkgZIVhIZLqPrEopCQFPTdo7shpRUOjZcpBicC
uRwvZ6RZogg/A/mZEHynIzYR3SzLuLseEAQHxuMENChwOzLkBAoJAjcnEGmI
E8hVF5K/ND5Ju7X36LpDCHmEkJSMiAhYkBzYXEFDODRLTFfCGMdzeV3OIjqJ
se1uXRNHkiTXksoQEITv8ma4Id2zRtrkggGKwUQ0dHAGISQLNrcZpGK+x7jD
bPoPvwQssFmYsiBg3GXziC0XLLYtf8kin7kLxkMWp8wN2BJsk8dsAR6RBQtw
p8xLGYefHhPCWngIQQjm28wXbDFnYcxsgOyzdIEPLmI2TxhkkTDFPLAi+HTY
0mNLl4U0l7dgkLXFAY6M5oz7LJwzm8AuHITvR4ghoO3Q7DbQEiCQOUBesjlA
DpAiuBUsLN/BAalgoUfzJjiX4zAfrOgcv3gRi122AOoSthAWPh4yAU9xRCZc
sCTExxOgMUawc8Ec4E/KUps5cyuZs2XAkoClIXNd5vmIqgBylsjnMEC0oxhZ
Fy2RXidkQcqAq5AgC2BRiIjBs4CkDbci5s+Rq1HKQs6SxIKV4h7x2UZQMDVg
6wUsTJhP/IkSpHTBEWwUWw4tLlyPl8hzoALGAxMk4UAdgA0cJua4joFj2TAj
LV+6kBL2TFCbs9q2X4v3U/lKj1hQU3dP5vTLQZRsfVitVI43hSGJdkRP0NVd
KO9yId47s+Z983E8ijG94lg4MxrNnJfyDWnDV0uopENFJoab+qQ7xjYG1Uqk
3r1CSOC72hx2U+Griyrj6Eu5a/Ku+NiDi1BwP/L83tnlKKb6JBqZj3W9xd0b
Saz7owjLelpGY/5OFhoxOqFOmZIu3A1iFIb0Ai4gathWrhqmxtykdEjSgQnp
rtLOK0iXFknrT25MmllOTyVkr5eGxZ+TiXbp2VDgeI+uhGQel4vOBS7JSC7I
YKaeggbjlzTed9SM+CyNdHnnngOCs1h2+1j9d520hYu637L5SVlH5jqfkHS5
AIaES+FS8q2C9Af2RxlxutkzossM1DukgoDT12OlnK6FJBJApAqKcbDxxiut
cpAQS5JU/oNVxT+ww9MT91DlPc6KuTo7wpwQ7tqOvukO0sIHJJ0e/tCjsRgH
ACl40zBxg8/RA97rizTTPBAJDzgkXWEYuxEXC3fpe2EqPG8R2g5ksxxStDAY
pHvCiaIgChLh2ItE+N4yhgQ8cJIW6Vs9i4ezOCJwRRIGANGZe2mYLoVvJ0m6
TD3fibwkhsx0Mbd5OpgmFHbMQ/hPLIWIE9te+ImzjA+tPVKDa+9osRmRjqF5
nNooSd1qdpr7pSyn6q7Cw2aHsnHqAhunDn9Qg/0V+37xw89c/IjHQeQ4MU8W
6XKZLuPQjewgTiHnFu4cEno/iZ3FMh0m+37gugs3CLjrLGHdkjm3l5Ay7ll8
13a8RZQuXAAWzZNg7kbCTnng8yhc2D73+NyH66E7mCWOU5HMo3kazUXiLqIo
jR0nFO0supgiqyQPrhsNJXlPGWlyn4y5v0DGRiyGPypib16+NUTMGYiYMxAx
Z1zEfEPEfNcQMd8dCI3cNDClxh+XmjgKY3sJixctQy8OQ76wF0LYQbSMosQL
vSgIYnsuOB9wehklPk9c+BTLpedETuz5sevez2nvczjty62E9r3CeJQK0l3V
sgW+oRbxFPcAP46+4A4u4Isw8F2Msj6hG63aTry4D5ACjv7rLru2M3WwDEsx
tHlA+57DOSkkUcesaTq5O0Lbokb9yIjTsL4j6rptJmtfN2q+Iw370CQaE7lX
gXsI5PO6A04JbrVm0U7WktpXHEJKJGeWZ7pxx3zC8MyufpcKBAHIA4lTXG5V
9dpoIdWvNqsEvbkKHShgsatk214FZJabAstM8h2a/JpnOfFJHZhIxHUWC3On
P8e3ruktACxoDY+hU6gm37In4ee37Zn+RG0v6p5SSx7LSjrWthvXdXtaGd/2
rF7MIgGyYrfBlx8rqDos0O3h7RuCC/YU2wLli89KIQ82jMbfnF5KMPLqOFVM
tKiLmGQh1mcCa5Zjm0UbEU2MyFt9f81jOgCgf9h6P0vvGEHEOkBFvlimF+pq
AMZ7tHovW+zetdMdB9Et3FbvRYdqG42NnkXHk5SfIsbqEdPyNC6vKW2RLaND
ZICLesMLT+LR0st1t9plH6OBVJXaDdRL4MfQVod5s3pCL5Fo+0fkuQDsIEBO
4KuasSFRQjfflLCl1xaLfUjQEXnsxVD9AZc7DjLYCNlTUEBAa8CllgCm2imG
9o7aPYfvHsZDG6IGUaJnlEDgGyFVP6k+S0aS1zYB1/LtgU1pdTefyxOPb9uC
6aHurAG971oVDCDdW8nbV6tggDVl7Fv5mn+9o8T+G5FZsfOnz5x+lIQ3n3VN
cSu1l8xkp0l/m1lrI1Xuad3b5O8T/XOkkSM9dHh9rK2MnfCtLDQD6RCTgQ//
gS6DWYUcCYvIFZgKPNb/4vTsT3jrnUgFvSJ/xdj33wOhKylWYH1++EEOkFXu
BCn/G26Ntzxzhjxz+jzzTJ6FvzbP9jQJmjzrNQpqpg3b3P7FTHOHTHP7TAtM
pi1/babt6YQ0mdZr5PtCmOYNmeb1mRaaAabz6zJtf3fmiHpOviT99Idc8/tc
W/TD8i+Ba3t7W//FrAuGrAv6rFuarPN+Zdbt6bT90pV0PuTZfOBCzUqD738B
TPu3Sxsbj2AkU8XVnTsGh8UVfqfzKZK7ZoQyldwl3lMfmnorT3tNR0Ar9u2T
4zsLQSwfNjkNiLxLIyEtj0Ldh7gcMUDeNZEPfhHyx5RYdieU2dFVlnSHL/vv
Rb7Tlbz/dcufpn86nULuHl+pf19CJrYlLudfIBqnZltKnCi25cXVnY3/JLvO
kh1E/xrbjN7r1mbItX6ptOxKpkZEyAeTpNehoY++68ZzkrE2S7WMf4+B5aX6
V21yOqLK8F89ak+IqH9iA5mKy/cug+y8SkAPqwL/oSf2IudVxl5lu/qawzpb
1jeZahW/GSf3HUBjz8tdnQvZhv8UeJlw7GmB1KKj2erRrFMB+tfEMF+Ny6n8
V4qogJ4VoKQ8Z/RvaMFwykSO46uivMlFcinf5bNvBazXSJTI2dMZ+3MJZE2s
P5drQIg3TV2XxQQGwPC3VVmV8dWkHa54QSPO1+UGsPqmrGtIeSZ4cNT60//+
D1J0JnKO9RKrW048xgBZTgp5FIrKzPo/ixHnOqVtAAA=

-->

</rfc>
