<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.21 (Ruby 3.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="pre5378Trust200902" docName="draft-ietf-cose-hpke-18" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="COSE HPKE">Use of Hybrid Public-Key Encryption (HPKE) with CBOR Object Signing and Encryption (COSE)</title>

    <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>

<t><list style="symbols">
  <t>Content-encryption key (CEK), a term defined in CMS <xref target="RFC5652"/>.</t>
  <t>Hybrid Public Key Encryption (HPKE) is defined in <xref target="RFC9180"/>.</t>
  <t>pkR is the public key of the recipient, as defined in <xref target="RFC9180"/>.</t>
  <t>skR is the private key of the recipient, as defined in <xref target="RFC9180"/>.</t>
  <t>Key Encapsulation Mechanism (KEM), see <xref target="RFC9180"/>.</t>
  <t>Key Derivation Function (KDF), see <xref target="RFC9180"/>.</t>
  <t>Authenticated Encryption with Associated Data (AEAD), see <xref target="RFC9180"/>.</t>
  <t>Additional Authenticated Data (AAD), see <xref target="RFC9180"/>.</t>
</list></t>

</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>

<t><list style="symbols">
  <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>
  <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>
</list></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>

<t><list style="symbols">
  <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>pkR: The recipient public key, converted into an HPKE public key.</t>
  <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>info: Defaults to the empty string; externally provided information MAY be used instead.</t>
  <t>aad: Defaults to the empty string; externally provided information MAY be used instead.</t>
  <t>pt: The raw message plaintext.</t>
</list></t>

<t>The outputs are used as follows:</t>

<t><list style="symbols">
  <t>enc: MUST be placed raw into the 'ek' (encapsulated key) parameter in the unprotected bucket.</t>
  <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>
</list></t>

<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>

<t><list style="symbols">
  <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>skR: The recipient private key, converted into an HPKE private key.</t>
  <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>info: Defaults to the empty string; externally provided information MAY be used instead.</t>
  <t>aad: Defaults to the empty string; externally provided information MAY be used instead.</t>
  <t>enc: The contents of the layer 'ek' parameter.</t>
  <t>ct: The contents of the layer ciphertext.</t>
</list></t>

<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>

<t><list style="symbols">
  <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>
  <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>
</list></t>

<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>

<figure><artwork><![CDATA[
Recipient_structure = [
    context: "HPKE Recipient",
    next_layer_alg: int/tstr,
    recipient_protected_header: empty_or_serialize_map,
    recipient_extra_info: bstr
]
]]></artwork></figure>

<t><list style="symbols">
  <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>
  <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>
  <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>
</list></t>

</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>

<t><list style="symbols">
  <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>pkR: The recipient public key, converted into HPKE public key.</t>
  <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>info: Deterministic encoding of the Recipient_structure.</t>
  <t>aad: Defaults to the empty string; externally provided information MAY be used instead.</t>
  <t>pt: The raw key for the next layer down.</t>
</list></t>

<t>The outputs are used as follows:</t>

<t><list style="symbols">
  <t>enc: MUST be placed raw into the 'ek' (encapsulated key) parameter in the unprotected bucket.</t>
  <t>ct: MUST be placed raw in the ciphertext field in the COSE_recipient.</t>
</list></t>

<t>When decrypting, the inputs to the HPKE Open operation are set as follows:</t>

<t><list style="symbols">
  <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>skR: The recipient private key, converted into HPKE private key.</t>
  <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>info: Deterministic encoding of the Recipient_structure.</t>
  <t>aad: Defaults to the empty string; externally provided information MAY be used instead.</t>
  <t>ct: The contents of the layer ciphertext field.</t>
</list></t>

<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>

<t><list style="symbols">
  <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>
  <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>
  <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>
</list></t>

<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>

<t><list style="symbols">
  <t>HPKE Mode</t>
  <t>KEM Algorithm</t>
  <t>KDF Algorithm</t>
  <t>AEAD Algorithm</t>
</list></t>

<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>

<figure><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></figure>

<t>The following list maps the ciphersuite labels to their textual
description.</t>

<t><list style="symbols">
  <t>HPKE-0: DHKEM(P-256, HKDF-SHA256) KEM, HKDF-SHA256 KDF and AES-128-GCM AEAD.</t>
  <t>HPKE-1: DHKEM(P-384, HKDF-SHA384) KEM, HKDF-SHA384 KDF, and AES-256-GCM AEAD.</t>
  <t>HPKE-2: DHKEM(P-521, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
  <t>HPKE-3: DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-128-GCM AEAD.</t>
  <t>HPKE-4: DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and ChaCha20Poly1305 AEAD.</t>
  <t>HPKE-5: DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
  <t>HPKE-6: DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and ChaCha20Poly1305 AEAD.</t>
</list></t>

<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 title="COSE_Key Types and Curves for COSE-HPKE Ciphersuites" anchor="ciphersuite-kty-crv"><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>

<t><list style="symbols">
  <t>plaintext: Original data of the encrypted payload.</t>
  <t>external_aad: Externally supplied AAD.</t>
  <t>skR: A recipient private key.</t>
  <t>skE: An ephemeral sender private key paired with the encapsulated key.</t>
</list></t>

<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>

<t><list style="symbols">
  <t>alg: HPKE-0</t>
  <t>plaintext: "This is the content."</t>
  <t>external_aad: "COSE-HPKE app"</t>
  <t>skR: h'57c92077664146e876760c9520d054aa93c3afb04e306705db6090308507b4d3'</t>
  <t>skE: h'42dd125eefc409c3b57366e721a40043fb5a58e346d51c133128a77237160218'</t>
</list></t>

<figure title="COSE_Encrypt0 Example for HPKE" anchor="hpke-example-one"><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>

<t><list style="symbols">
  <t>Content encryption algorithm: AES-128-GCM</t>
  <t>plaintext: "This is the payload."</t>
  <t>kid:"alice"</t>
  <t>alg: HPKE-0 - DHKEM(P-256, HKDF-SHA256), KDF: HKDF-SHA256, AEAD: AES-128-GCM</t>
  <t>external_aad: "some externally provided aad"</t>
</list></t>

<t>Alice uses the following NIST P-256 ECC keys.</t>

<t>Private Key:</t>

<figure><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></figure>

<t>Public Key:</t>

<figure><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></figure>

<t>As a result, the following COSE_Encrypt payload is
created:</t>

<figure><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></figure>

<t>Decoded, this hex-sequence has the following
content:</t>

<figure title="COSE_Encrypt Example for HPKE" anchor="hpke-example-cose-encrypt"><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>

<figure><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></figure>

<t>The output of the message is as follows:</t>

<figure title="COSE_Sign1 Example" anchor="hpke-example-sign"><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="kem-public-key-for-hpke-0"><name>KEM Public Key for HPKE-0</name>

<figure title="Key Representation Example for HPKE-0" anchor="hpke-example-key-1"><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 title="Key Representation Example for HPKE-0" anchor="hpke-example-key-2"><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 title="Key Representation Example for HPKE-4" anchor="hpke-example-key-3"><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>

<t><list style="symbols">
  <t>Name: HPKE-0</t>
  <t>Value: TBD1 (Assumed: 35)</t>
  <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>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
<section anchor="hpke-1"><name>HPKE-1</name>

<t><list style="symbols">
  <t>Name: HPKE-1</t>
  <t>Value: TBD3 (Assumed: 37)</t>
  <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>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
<section anchor="hpke-2"><name>HPKE-2</name>

<t><list style="symbols">
  <t>Name: HPKE-2</t>
  <t>Value: TBD5 (Assumed: 39)</t>
  <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>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
<section anchor="hpke-3"><name>HPKE-3</name>

<t><list style="symbols">
  <t>Name: HPKE-3</t>
  <t>Value: TBD7 (Assumed: 41)</t>
  <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>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
<section anchor="hpke-4"><name>HPKE-4</name>

<t><list style="symbols">
  <t>Name: HPKE-4</t>
  <t>Value: TBD8 (Assumed: 42)</t>
  <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>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
<section anchor="hpke-5"><name>HPKE-5</name>

<t><list style="symbols">
  <t>Name: HPKE-5</t>
  <t>Value: TBD9 (Assumed: 43)</t>
  <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>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
<section anchor="hpke-6"><name>HPKE-6</name>

<t><list style="symbols">
  <t>Name: HPKE-6</t>
  <t>Value: TBD10 (Assumed: 44)</t>
  <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>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
</section>
<section anchor="cose-header-parameters"><name>COSE Header Parameters</name>

<section anchor="ek-header-parameter"><name>ek Header Parameter</name>

<t><list style="symbols">
  <t>Name: ek</t>
  <t>Label: TBD11 (Assumed: -4)</t>
  <t>Value type: bstr</t>
  <t>Value Registry: N/A</t>
  <t>Description: HPKE encapsulated key</t>
  <t>Reference: [[TBD: This RFC]]</t>
</list></t>

</section>
<section anchor="pskid-header-parameter"><name>psk_id Header Parameter</name>

<t><list style="symbols">
  <t>Name: psk_id</t>
  <t>Label: TBD12 (Assumed: -5)</t>
  <t>Value type: bstr</t>
  <t>Value Registry: N/A</t>
  <t>Description: A key identifier (kid) for the pre-shared key
as defined in <xref section="5.1.2" sectionFormat="of" target="RFC9180"/></t>
  <t>Reference: [[TBD: This RFC]]</t>
</list></t>

</section>
</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<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 title='Informative References' anchor="sec-informative-references">



<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 &quot;compact
   representation&quot; 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 797?>

<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>

<t><list style="symbols">
  <t>Richard Barnes</t>
  <t>Ilari Liusvaara</t>
</list></t>

<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:
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

-->

</rfc>

