<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-hpke-hpke-06" category="std" consensus="true" obsoletes="9180" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="HPKE">Hybrid Public Key Encryption</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-hpke-hpke-06"/>
    <author initials="R." surname="Barnes" fullname="Richard L. Barnes">
      <organization/>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <author initials="K." surname="Bhargavan" fullname="Karthik Bhargavan">
      <organization>Inria</organization>
      <address>
        <email>karthikeyan.bhargavan@inria.fr</email>
      </address>
    </author>
    <author initials="B." surname="Lipp" fullname="Benjamin Lipp">
      <organization>Rosenpass</organization>
      <address>
        <email>ietf@benjaminlipp.de</email>
      </address>
    </author>
    <author initials="C." surname="Wood" fullname="Christopher A. Wood">
      <organization/>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2026" month="October" day="29"/>
    <workgroup>HPKE</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 249?>

<t>This document specifies 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 a variant that authenticates
possession of a pre-shared key. HPKE works for any combination of an
asymmetric Key Encapsulation Mechanism (KEM), key derivation function (KDF), and authenticated encryption
with additional data (AEAD) encryption function. This document provides
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 SHA-2.</t>
      <t>This document obsoletes RFC 9180.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/hpkewg/hpke"/>.</t>
    </note>
  </front>
  <middle>
    <?line 263?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Encryption schemes that combine asymmetric and symmetric algorithms have been
specified and practiced since the early days of public key cryptography, e.g.,
<xref target="RFC1421"/>. Combining the two yields the key management advantages of asymmetric
cryptography and the performance benefits of symmetric cryptography. The traditional
combination has been "encrypt the symmetric key with the public key." "Hybrid"
public key encryption (HPKE) schemes, specified here, take a different approach:
"generate the symmetric key and its encapsulation with the public key."
Specifically, encrypted messages convey a shared secret encapsulated with a
public key scheme, along with one or more arbitrary-sized ciphertexts encrypted
using that key. This type of public key encryption has many applications in
practice, including Messaging Layer Security <xref target="RFC9420"/>, TLS Encrypted
ClientHello <xref target="RFC9849"/>, and Oblivious HTTP <xref target="RFC9458"/>.</t>
      <t>Currently, there are numerous competing and non-interoperable standards and
variants for hybrid encryption, mostly variants on the Elliptic Curve Integrated Encryption Scheme (ECIES), including ANSI X9.63
(ECIES) <xref target="ANSI"/>, IEEE 1363a <xref target="IEEE1363"/>, ISO/IEC 18033-2 <xref target="ISO"/>, and SECG SEC 1
<xref target="SECG"/>.  See <xref target="MAEA10"/> for a thorough comparison.  All these existing
schemes have problems, e.g., because they rely on outdated primitives, lack
proofs of indistinguishability under adaptive chosen-ciphertext attack (IND-CCA2) security, or fail to provide test vectors.</t>
      <t>This document defines an HPKE scheme that provides a subset
of the functions provided by the collection of schemes above but
specified with sufficient clarity that they can be interoperably
implemented. The HPKE construction defined herein is secure against (adaptive)
chosen ciphertext attacks (IND-CCA2-secure) under classical assumptions about
the underlying primitives <xref target="HPKEAnalysis"/> <xref target="AJKL23"/> <xref target="ABHKLR20"/>, and post-quantum
secure when used with a post-quantum secure KEM <xref target="AJKL23"/> <xref target="ABHKLR20"/>. These
analyses cover HPKE instantiated with a two-stage KDF.  The security of HPKE
with a one-stage KDF relies on the KDF meeting the requirements in
<xref target="kdf-choice"/>, and has not yet been analyzed in the same detail. A summary of
these analyses is in <xref target="sec-properties"/>.</t>
    </section>
    <section anchor="requirements-notation">
      <name>Requirements Notation</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.
<?line -6?>
      </t>
    </section>
    <section anchor="notation">
      <name>Notation</name>
      <t>The following terms are used throughout this document to describe the
operations, roles, and behaviors of HPKE:</t>
      <ul spacing="normal">
        <li>
          <t><tt>(skX, pkX)</tt>: A key encapsulation mechanism (KEM) key pair used in role X,
where X is one of R or E as recipient and ephemeral, respectively;
<tt>skX</tt> is the private key and <tt>pkX</tt> is the public key.</t>
        </li>
        <li>
          <t><tt>pk(skX)</tt>: The KEM public key corresponding to the KEM private key <tt>skX</tt>.</t>
        </li>
        <li>
          <t>Sender (S): Role of entity that sends an encrypted message.</t>
        </li>
        <li>
          <t>Recipient (R): Role of entity that receives an encrypted message.</t>
        </li>
        <li>
          <t>Ephemeral (E): Role of a fresh random value meant for one-time use.</t>
        </li>
        <li>
          <t><tt>I2OSP(n, w)</tt>: Convert non-negative integer <tt>n</tt> to a <tt>w</tt>-length,
big-endian byte string, as described in <xref target="RFC8017"/>.</t>
        </li>
        <li>
          <t><tt>OS2IP(x)</tt>: Convert byte string <tt>x</tt> to a non-negative integer, as
described in <xref target="RFC8017"/>, assuming big-endian byte order.</t>
        </li>
        <li>
          <t><tt>concat(x0, ..., xN)</tt>: Concatenation of byte strings.
<tt>concat(0x01, 0x0203, 0x040506) = 0x010203040506</tt>.</t>
        </li>
        <li>
          <t><tt>lengthPrefixed(x)</tt>: The two-byte, big-endian length of the byte string <tt>x</tt>, concatenated
with <tt>x</tt> itself.  (<tt>lengthPrefixed(x) = concat(I2OSP(len(x), 2), x)</tt>)  It is
an error to call this function with an <tt>x</tt> value that is more than 65535 bytes
long.</t>
        </li>
        <li>
          <t><tt>random(n)</tt>: A pseudorandom byte string of length <tt>n</tt> bytes</t>
        </li>
        <li>
          <t><tt>xor(a,b)</tt>: XOR of byte strings; <tt>xor(0xF0F0, 0x1234) = 0xE2C4</tt>.
It is an error to call this function with two arguments of unequal
length.</t>
        </li>
      </ul>
      <t>Values that are indicated in double quotes (e.g., "key")
represent sequences of bytes, not text strings.
The value of bytes is the ASCII encoding <xref target="RFC20"/> of the quoted string.
An empty string ("") indicates a zero-length byte sequence.
These byte sequences values do not include any zero byte marker at the end,
such as can be used in some methods of representing strings.</t>
      <t>Algorithms in this document are specified using Python-like pseudocode.  In
this pseudocode, <tt>raise</tt> indicates that the function fails with the named
error, which is propagated to the caller and causes the calling function to
fail as well (see <xref target="api-errors"/>).  Names in angle brackets, such as <tt>&lt;ROLE&gt;</tt>
or <tt>&lt;MODE&gt;</tt>, are template parameters that are replaced with a concrete value,
as described where they are used.  Within the methods of an encryption context
(e.g., <tt>Context.Export</tt>), <tt>self</tt> refers to the context on which the method is
invoked.</t>
    </section>
    <section anchor="base-crypto">
      <name>Cryptographic Dependencies</name>
      <t>HPKE variants rely on the following primitives:</t>
      <ul spacing="normal">
        <li>
          <t>A Key Encapsulation Mechanism (KEM); see <xref target="crypto-kem"/></t>
        </li>
        <li>
          <t>A Key Derivation Function (KDF); see <xref target="crypto-kdf"/></t>
        </li>
        <li>
          <t>An Authenticated Encryption with Associated Data (AEAD) algorithm; see <xref target="crypto-aead"/></t>
        </li>
      </ul>
      <t>A <em>ciphersuite</em> is a triple (KEM, KDF, AEAD) containing a choice of algorithm
for each primitive.</t>
      <t>A set of algorithm identifiers for concrete instantiations of these
primitives is provided in <xref target="ciphersuites"/>.  Algorithm identifier
values are two bytes long.</t>
      <section anchor="crypto-kem">
        <name>Key Encapsulation Mechanisms</name>
        <t>Each KEM is parameterized by the following constants (all measured in bytes):</t>
        <dl spacing="compact">
          <dt><tt>Nsecret</tt>:</dt>
          <dd>
            <t>The length of a KEM shared secret produced by this KEM.</t>
          </dd>
          <dt><tt>Nenc</tt>:</dt>
          <dd>
            <t>The length of an encapsulated secret produced by this KEM.</t>
          </dd>
          <dt><tt>Npk</tt>:</dt>
          <dd>
            <t>The length of an encoded public key for this KEM.</t>
          </dd>
          <dt><tt>Nsk</tt>:</dt>
          <dd>
            <t>The length of an encoded private key for this KEM.</t>
          </dd>
        </dl>
        <t>A key encapsulation mechanism (KEM) provides the following functions:</t>
        <dl>
          <dt><tt>GenerateKeyPair()</tt>:</dt>
          <dd>
            <t>Randomized algorithm to generate a key pair <tt>(skX, pkX)</tt>.</t>
          </dd>
          <dt><tt>DeriveKeyPair(ikm)</tt>:</dt>
          <dd>
            <t>Deterministic algorithm to derive a key pair <tt>(skX,
pkX)</tt> from the byte string <tt>ikm</tt>, where <tt>ikm</tt> is an arbitrary-length byte
string (within the bounds in <xref target="input-limits"/>).  The <tt>ikm</tt> input SHOULD have
at least <tt>Nsk</tt> bytes of entropy.</t>
          </dd>
          <dt><tt>SerializePublicKey(pkX)</tt>:</dt>
          <dd>
            <t>Produce a byte string of length <tt>Npk</tt> encoding the
public key <tt>pkX</tt>.</t>
          </dd>
          <dt><tt>DeserializePublicKey(pkXm)</tt>:</dt>
          <dd>
            <t>Parse a byte string of length <tt>Npk</tt> to recover a
public key. This function can raise a <tt>DeserializeError</tt> error upon <tt>pkXm</tt>
deserialization failure.</t>
          </dd>
          <dt><tt>Encap(pkR)</tt>:</dt>
          <dd>
            <t>Randomized algorithm to generate an ephemeral, fixed-length
shared secret and a fixed-length encapsulation of that secret (also known as
the KEM ciphertext) that can be decapsulated by the holder of the private
key corresponding to <tt>pkR</tt>. This function can raise an <tt>EncapError</tt> on
encapsulation failure.</t>
          </dd>
          <dt><tt>Decap(enc, skR)</tt>:</dt>
          <dd>
            <t>Deterministic algorithm using the private key <tt>skR</tt> to
recover the shared secret from the encapsulated secret <tt>enc</tt>. This function
can raise a <tt>DecapError</tt> on decapsulation failure.</t>
          </dd>
        </dl>
        <t>The notation <tt>pk(skX)</tt>, depending on its use and the KEM and its
implementation, is either the
computation of the public key using the private key, or just syntax
expressing the retrieval of the public key, assuming it is stored along
with the private key object.</t>
        <t>Beyond the above, a KEM MAY also expose the following functions, whose behavior
is detailed in <xref target="serializeprivatekey"/>:</t>
        <dl>
          <dt><tt>SerializePrivateKey(skX)</tt>:</dt>
          <dd>
            <t>Produce a byte string of length <tt>Nsk</tt> encoding the private
key <tt>skX</tt>.</t>
          </dd>
          <dt><tt>DeserializePrivateKey(skXm)</tt>:</dt>
          <dd>
            <t>Parse a byte string of length <tt>Nsk</tt> to recover a
private key. This function can raise a <tt>DeserializeError</tt> error upon <tt>skXm</tt>
deserialization failure.</t>
          </dd>
        </dl>
        <t>Senders and recipients MUST validate KEM inputs and outputs as described
in <xref target="kem-ids"/>.</t>
      </section>
      <section anchor="crypto-kdf">
        <name>Key Derivation Functions</name>
        <t>A key derivation function (KDF) is either
a one-stage KDF, with a single <tt>Derive</tt> function,
or a two-stage KDF, with <tt>Extract</tt> and <tt>Expand</tt> functions.</t>
        <t>A one-stage KDF provides the function:</t>
        <dl>
          <dt><tt>Derive(ikm, L)</tt>:</dt>
          <dd>
            <t>Derive an <tt>L</tt>-byte value from the input keying material
<tt>ikm</tt>.</t>
          </dd>
        </dl>
        <t>A two-stage KDF provides the functions:</t>
        <dl>
          <dt><tt>Extract(salt, ikm)</tt>:</dt>
          <dd>
            <t>Extract a pseudorandom key of fixed length <tt>Nh</tt> bytes
from input keying material <tt>ikm</tt> and an optional byte string
<tt>salt</tt>.</t>
          </dd>
          <dt><tt>Expand(prk, info, L)</tt>:</dt>
          <dd>
            <t>Expand a pseudorandom key <tt>prk</tt> using
optional string <tt>info</tt> into <tt>L</tt> bytes of output keying material.</t>
          </dd>
        </dl>
        <t>The <tt>Nh</tt> parameter indicates security strength of KDF, in bytes.
For a two-stage KDF, <tt>Nh</tt> is the output size of the <tt>Extract()</tt> function.
For a one-stage KDF, <tt>Nh</tt> is specified as part of the definition of the KDF.</t>
        <t>Certain functions have a different structure depending on whether a one-stage or
two-stage KDF is being used.  For clarity, such functions will be described
twice in this document, once with the suffix <tt>_OneStage</tt> and once with the
suffix <tt>_TwoStage</tt>, representing the versions of the function to be used with a
one-stage or two-stage KDF, respectively.  A reference to or call of the
function without a suffix denotes the variant that matches the KDF in use.  For
example, a call to <tt>Foo</tt> invokes <tt>Foo_OneStage</tt> when using a one-stage KDF, and
<tt>Foo_TwoStage</tt> when using a two-stage KDF.  This convention applies to the
following functions:</t>
        <ul spacing="normal">
          <li>
            <t><tt>ExtractAndExpand</tt> (<xref target="dhkem"/>)</t>
          </li>
          <li>
            <t><tt>CombineSecrets</tt> (<xref target="encryption-context"/>)</t>
          </li>
          <li>
            <t><tt>Context.Export</tt> (<xref target="hpke-export"/>)</t>
          </li>
          <li>
            <t><tt>DeriveCandidate</tt> and <tt>DeriveKeyPair</tt> (<xref target="derive-key-pair"/>)</t>
          </li>
        </ul>
      </section>
      <section anchor="crypto-aead">
        <name>AEAD Encryption Algorithm</name>
        <t>An AEAD encryption algorithm <xref target="RFC5116"/> provides the functions:</t>
        <dl>
          <dt><tt>Seal(key, nonce, aad, pt)</tt>:</dt>
          <dd>
            <t>Encrypt and authenticate plaintext
<tt>pt</tt> with associated data <tt>aad</tt> using symmetric key <tt>key</tt> and nonce
<tt>nonce</tt>, yielding ciphertext and tag <tt>ct</tt>. This function
 can raise a <tt>MessageLimitReachedError</tt> upon failure.</t>
          </dd>
          <dt><tt>Open(key, nonce, aad, ct)</tt>:</dt>
          <dd>
            <t>Decrypt ciphertext and tag <tt>ct</tt> using
associated data <tt>aad</tt> with symmetric key <tt>key</tt> and nonce <tt>nonce</tt>,
returning plaintext message <tt>pt</tt>. This function can raise an
<tt>OpenError</tt> or <tt>MessageLimitReachedError</tt> upon failure.</t>
          </dd>
        </dl>
        <t>AEAD functions have the following parameters (all measured in bytes):</t>
        <dl spacing="compact">
          <dt><tt>Nk</tt>:</dt>
          <dd>
            <t>The length of a key for this algorithm.</t>
          </dd>
          <dt><tt>Nn</tt>:</dt>
          <dd>
            <t>The length of a nonce for this algorithm.</t>
          </dd>
          <dt><tt>Nt</tt>:</dt>
          <dd>
            <t>The length of the authentication tag for this algorithm.</t>
          </dd>
        </dl>
      </section>
      <section anchor="crypto-domain">
        <name>Labeled Derivation Functions</name>
        <t>The following functions are defined to facilitate domain separation of
KDF calls as well as context binding:</t>
        <artwork><![CDATA[
# For use with one-stage KDFs
def LabeledDerive(ikm, label, context, L):
  labeled_ikm = concat(
    ikm,
    "HPKE-v1",
    suite_id,
    lengthPrefixed(label),
    I2OSP(L, 2),
    context,
  )
  return Derive(labeled_ikm, L)
]]></artwork>
        <artwork><![CDATA[
# For use with two-stage KDFs
def LabeledExtract(salt, label, ikm):
  labeled_ikm = concat("HPKE-v1", suite_id, label, ikm)
  return Extract(salt, labeled_ikm)

def LabeledExpand(prk, label, info, L):
  labeled_info = concat(I2OSP(L, 2), "HPKE-v1", suite_id,
                        label, info)
  return Expand(prk, labeled_info, L)
]]></artwork>
        <t>The value of <tt>suite_id</tt> depends on where the KDF is used; it is assumed
implicit from the implementation and not passed as a parameter. If used
inside a KEM algorithm, <tt>suite_id</tt> MUST start with "KEM" and identify
this KEM algorithm; if used in the remainder of HPKE, it MUST start with
"HPKE" and identify the entire ciphersuite in use. See <xref target="dhkem"/>
and <xref target="encryption-context"/> for details.</t>
      </section>
      <section anchor="dhkem">
        <name>DH-Based KEM (DHKEM)</name>
        <t>Suppose we are given a KDF, and a Diffie-Hellman (DH) group providing the
following operations:</t>
        <dl>
          <dt><tt>DH(skX, pkY)</tt>:</dt>
          <dd>
            <t>Perform a non-interactive Diffie-Hellman exchange using
the private key <tt>skX</tt> and public key <tt>pkY</tt> to produce a Diffie-Hellman shared
secret of length <tt>Ndh</tt>. This function can raise a <tt>ValidationError</tt> as described
in <xref target="validation"/>.</t>
          </dd>
        </dl>
        <t>A DH-based KEM is parameterized by the constants (in bytes):</t>
        <dl spacing="compact">
          <dt><tt>Ndh</tt>:</dt>
          <dd>
            <t>The length of the shared secret produced by <tt>DH()</tt>.</t>
          </dd>
          <dt><tt>Nsk</tt>:</dt>
          <dd>
            <t>The length of a Diffie-Hellman private key.</t>
          </dd>
          <dt><tt>Npk</tt>:</dt>
          <dd>
            <t>The length of a serialized public key for the DH group.</t>
          </dd>
          <dt><tt>Nenc</tt>:</dt>
          <dd>
            <t>Equal to <tt>Npk</tt>. Encapsulated shared secrets are serialized
DH public keys in this KEM algorithm.</t>
          </dd>
        </dl>
        <t>Then we can construct a KEM that implements the interface defined in <xref target="crypto-kem"/>
called <tt>DHKEM(Group, KDF)</tt> in the following way, where <tt>Group</tt> denotes the
Diffie-Hellman group and <tt>KDF</tt> denotes the KDF. The function parameter <tt>pkR</tt>
is a deserialized public key, and <tt>enc</tt> is a serialized public key. Since
encapsulated shared secrets are Diffie-Hellman public keys in this KEM algorithm,
we use <tt>SerializePublicKey()</tt> and <tt>DeserializePublicKey()</tt> to encode and decode
them, respectively. <tt>GenerateKeyPair()</tt> produces a key pair
for the Diffie-Hellman group in use. <xref target="derive-key-pair"/> contains the
<tt>DeriveKeyPair()</tt> function specification for DHKEMs defined in this document.</t>
        <artwork><![CDATA[
# For use with one-stage KDFs
def ExtractAndExpand_OneStage(dh, kem_context):
  return LabeledDerive(dh, "shared_secret", kem_context, Nsecret)

# For use with two-stage KDFs
def ExtractAndExpand_TwoStage(dh, kem_context):
  eae_prk = LabeledExtract("", "eae_prk", dh)
  shared_secret = LabeledExpand(eae_prk, "shared_secret",
                                kem_context, Nsecret)
  return shared_secret

def Encap(pkR):
  skE, pkE = GenerateKeyPair()
  dh = DH(skE, pkR)
  enc = SerializePublicKey(pkE)

  pkRm = SerializePublicKey(pkR)
  kem_context = concat(enc, pkRm)

  shared_secret = ExtractAndExpand(dh, kem_context)
  return shared_secret, enc

def Decap(enc, skR):
  pkE = DeserializePublicKey(enc)
  dh = DH(skR, pkE)

  pkRm = SerializePublicKey(pk(skR))
  kem_context = concat(enc, pkRm)

  shared_secret = ExtractAndExpand(dh, kem_context)
  return shared_secret
]]></artwork>
        <t>The implicit <tt>suite_id</tt> value used within <tt>LabeledExtract</tt>, <tt>LabeledExpand</tt>, and
<tt>LabeledDerive</tt> is defined as follows, where <tt>kem_id</tt> is defined in <xref target="kem-ids"/>:</t>
        <artwork><![CDATA[
suite_id = concat("KEM", I2OSP(kem_id, 2))
]]></artwork>
        <t>The KDF used in DHKEM can be equal to or different from the KDF used
in the remainder of HPKE, depending on the chosen variant.
Implementations MUST make sure to use the constants (<tt>Nh</tt>) and function
calls (<tt>LabeledExtract</tt>, <tt>LabeledExpand</tt>, and <tt>LabeledDerive</tt>) of the appropriate KDF when
implementing DHKEM. See <xref target="kdf-choice"/> for a comment on the choice of
a KDF for the remainder of HPKE, and <xref target="domain-separation"/> for the
rationale of the labels.</t>
        <t>For the variants of DHKEM defined in this document, the size <tt>Nsecret</tt> of the
KEM shared secret is equal to the output length of the hash function
underlying the KDF. For P-256, P-384, and P-521, the size <tt>Ndh</tt> of the
Diffie-Hellman shared secret is equal to 32, 48, and 66, respectively,
corresponding to the x-coordinate of the resulting elliptic curve point <xref target="IEEE1363"/>.
For X25519 and X448, the size <tt>Ndh</tt> is equal to 32 and 56, respectively
(see <xref section="5" sectionFormat="of" target="RFC7748"/>).</t>
      </section>
    </section>
    <section anchor="hpke">
      <name>Hybrid Public Key Encryption</name>
      <t>In this section, we define a few HPKE variants.  All variants take a
recipient public key <tt>pkR</tt> and a sequence of plaintexts <tt>pt</tt> and produce an
encapsulated secret <tt>enc</tt> and a sequence of ciphertexts <tt>ct</tt>.  These outputs are
constructed so that only the holder of <tt>skR</tt> can decapsulate the key from
<tt>enc</tt> and decrypt the ciphertexts.  All the algorithms also take an
<tt>info</tt> parameter that can be used to influence the generation of keys
(e.g., to fold in identity information) and an <tt>aad</tt> parameter that
provides additional authenticated data to the AEAD algorithm in use.</t>
      <t>In addition to the base case of encrypting to a public key, we include a variant
that authenticates possession of a pre-shared key. The authenticated variant
contributes additional keying material to the encryption operation. The
following one-byte values will be used to distinguish between modes:</t>
      <table anchor="hpke-modes">
        <name>HPKE Modes</name>
        <thead>
          <tr>
            <th align="left">Mode</th>
            <th align="left">Value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">mode_base</td>
            <td align="left">0x00</td>
          </tr>
          <tr>
            <td align="left">mode_psk</td>
            <td align="left">0x01</td>
          </tr>
          <tr>
            <td align="left">RESERVED</td>
            <td align="left">0x02</td>
          </tr>
          <tr>
            <td align="left">RESERVED</td>
            <td align="left">0x03</td>
          </tr>
        </tbody>
      </table>
      <t>The values 0x02 and 0x03 are reserved for the <tt>mode_auth</tt> and <tt>mode_auth_psk</tt>
modes defined in <xref target="RFC9180"/>, which are not specified in this document, and
are not to be used with any other meaning.  This document does not deprecate
those modes: existing deployments can continue to use them as specified in
<xref target="RFC9180"/>, and future specifications may specify them in terms of the
interfaces defined in this document.</t>
      <t>Both variants follow the same basic two-step pattern:</t>
      <ol spacing="normal" type="1"><li>
          <t>Set up an encryption context that is shared between the sender
and the recipient.</t>
        </li>
        <li>
          <t>Use that context to encrypt or decrypt content.</t>
        </li>
      </ol>
      <t>A <em>context</em> is an implementation-specific structure that encodes
the AEAD algorithm and key in use, and manages the nonces used so
that the same nonce is not used with multiple plaintexts. It also
has an interface for exporting secret values, as described in
<xref target="hpke-export"/>. See <xref target="hpke-dem"/> for a description of this structure
and its interfaces. HPKE decryption fails when the underlying AEAD
decryption fails.</t>
      <t>The constructions described here presume that the relevant non-private
parameters (<tt>enc</tt>, <tt>psk_id</tt>, etc.) are transported between the sender and the
recipient by some application making use of HPKE. Moreover, a recipient with more
than one public key needs some way of determining which of its public keys was
used for the encapsulation operation. As an example, applications may send this
information alongside a ciphertext from the sender to the recipient. Specification of
such a mechanism is left to the application. See <xref target="metadata"/> for more
details.</t>
      <t>The procedures described in this section are laid out in a
Python-like pseudocode. The algorithms in use are left implicit.</t>
      <section anchor="encryption-context">
        <name>Creating the Encryption Context</name>
        <t>The variants of HPKE defined in this document share a common
key schedule that translates the protocol inputs into an encryption
context. The key schedule inputs are as follows:</t>
        <ul spacing="normal">
          <li>
            <t><tt>mode</tt> - A one-byte value indicating the HPKE mode, defined in <xref target="hpke-modes"/>.</t>
          </li>
          <li>
            <t><tt>shared_secret</tt> - A KEM shared secret generated for this transaction.</t>
          </li>
          <li>
            <t><tt>info</tt> - Application-supplied information (optional; default value "").</t>
          </li>
          <li>
            <t><tt>psk</tt> - A pre-shared key (PSK) held by both the sender
and the recipient (optional; default value "").</t>
          </li>
          <li>
            <t><tt>psk_id</tt> - An identifier for the PSK (optional; default value "").</t>
          </li>
        </ul>
        <t>Senders and recipients MUST validate KEM inputs and outputs as described
in <xref target="kem-ids"/>.</t>
        <t>The <tt>info</tt> parameter used by HPKE is not related to the optional string <tt>info</tt>
used by the <tt>LabeledExpand()</tt> or <tt>Expand()</tt> functions detailed in <xref target="base-crypto"/>.</t>
        <t>The <tt>psk</tt> and <tt>psk_id</tt> parameters MUST appear together or not at all.
That is, if a non-default value is provided for one of them, then
the other MUST be set to a non-default value. This requirement is
encoded in <tt>VerifyPSKInputs()</tt> below.</t>
        <t>The <tt>psk</tt>, <tt>psk_id</tt>, and <tt>info</tt> parameters have maximum lengths that depend
on the KDF itself, on the definition of <tt>LabeledExtract()</tt>, and on the
constant labels used together with them. See <xref target="kdf-input-length"/> for
precise limits on these lengths.</t>
        <t>The <tt>key</tt>, <tt>base_nonce</tt>, and <tt>exporter_secret</tt> computed by the key schedule
have the property that they are only known to the holder of the recipient
private key, and the entity that used the KEM to generate <tt>shared_secret</tt> and
<tt>enc</tt>.</t>
        <t>The HPKE algorithm identifiers, i.e., the KEM <tt>kem_id</tt>, KDF <tt>kdf_id</tt>, and
AEAD <tt>aead_id</tt> 2-byte code points, as defined in <xref target="kemid-values"/>, <xref target="kdfid-values"/>,
and <xref target="aeadid-values"/>, respectively, are assumed implicit from the implementation
and not passed as parameters. The implicit <tt>suite_id</tt> value used within
<tt>LabeledExtract</tt>, <tt>LabeledExpand</tt>, and <tt>LabeledDerive</tt> is defined based on them as follows:</t>
        <artwork><![CDATA[
suite_id = concat(
  "HPKE",
  I2OSP(kem_id, 2),
  I2OSP(kdf_id, 2),
  I2OSP(aead_id, 2)
)
]]></artwork>
        <artwork><![CDATA[
default_psk = ""
default_psk_id = ""

def VerifyPSKInputs(mode, psk, psk_id):
  got_psk = (psk != default_psk)
  got_psk_id = (psk_id != default_psk_id)
  if got_psk != got_psk_id:
    raise Exception("Inconsistent PSK inputs")

  if got_psk and mode == mode_base:
    raise Exception("PSK input provided when not needed")
  if (not got_psk) and mode == mode_psk:
    raise Exception("Missing required PSK input")

# For use with a one-stage KDF
def CombineSecrets_OneStage(mode, shared_secret, info, psk, psk_id):
  secrets = concat(
    lengthPrefixed(psk),
    lengthPrefixed(shared_secret)
  )
  context = concat(
    mode,
    lengthPrefixed(psk_id),
    lengthPrefixed(info)
  )

  secret = LabeledDerive(secrets, "secret", context, Nk + Nn + Nh)

  key = secret[:Nk]
  base_nonce = secret[Nk:(Nk + Nn)]
  exporter_secret = secret[(Nk + Nn):]

  return (key, base_nonce, exporter_secret)

# For use with a two-stage KDF
def CombineSecrets_TwoStage(mode, shared_secret, info, psk, psk_id):
  psk_id_hash = LabeledExtract("", "psk_id_hash", psk_id)
  info_hash = LabeledExtract("", "info_hash", info)
  key_schedule_context = concat(mode, psk_id_hash, info_hash)

  secret = LabeledExtract(shared_secret, "secret", psk)

  key = LabeledExpand(secret, "key", key_schedule_context, Nk)
  base_nonce = LabeledExpand(secret, "base_nonce",
                             key_schedule_context, Nn)
  exporter_secret = LabeledExpand(secret, "exp",
                                  key_schedule_context, Nh)

  return (key, base_nonce, exporter_secret)

def KeySchedule<ROLE>(mode, shared_secret, info, psk, psk_id):
  VerifyPSKInputs(mode, psk, psk_id)

  key, base_nonce, exporter_secret =
    CombineSecrets(mode, shared_secret, info, psk, psk_id)

  return Context<ROLE>(key, base_nonce, 0, exporter_secret)
]]></artwork>
        <t>The <tt>ROLE</tt> template parameter is either S or R, depending on the role
of sender or recipient, respectively. The third parameter in the
<tt>Context&lt;ROLE&gt;</tt> refers to the sequence number, which is initialized with
a 0 value. See <xref target="hpke-dem"/> for a discussion of the key schedule output,
including the role-specific Context structure and its Application Programming Interface (API), and the
usage of the sequence number.</t>
        <t>Note that when a two-stage KDF is used, the <tt>key_schedule_context</tt>
construction in <tt>CombineSecrets_TwoStage()</tt> is equivalent to serializing a
structure of the following form in the TLS presentation syntax:</t>
        <artwork><![CDATA[
struct {
    uint8 mode;
    opaque psk_id_hash[Nh];
    opaque info_hash[Nh];
} KeyScheduleContext;
]]></artwork>
        <section anchor="hpke-kem">
          <name>Encryption to a Public Key</name>
          <t>The most basic function of an HPKE scheme is to enable encryption
to the holder of a given KEM private key.  The <tt>SetupBaseS()</tt> and
<tt>SetupBaseR()</tt> procedures establish contexts that can be used to
encrypt and decrypt, respectively, for a given private key.</t>
          <t>The KEM shared secret is combined via the KDF
with information describing the key exchange, as well as the
explicit <tt>info</tt> parameter provided by the caller.</t>
          <t>The parameter <tt>pkR</tt> is a public key, and <tt>enc</tt> is an encapsulated
KEM shared secret.</t>
          <artwork><![CDATA[
def SetupBaseS(pkR, info):
  shared_secret, enc = Encap(pkR)
  return enc, KeyScheduleS(mode_base, shared_secret, info,
                           default_psk, default_psk_id)

def SetupBaseR(enc, skR, info):
  shared_secret = Decap(enc, skR)
  return KeyScheduleR(mode_base, shared_secret, info,
                      default_psk, default_psk_id)
]]></artwork>
        </section>
        <section anchor="mode-psk">
          <name>Authentication Using a Pre-Shared Key</name>
          <t>This variant extends the base mechanism by allowing the recipient to
authenticate that the sender possessed a given PSK. The PSK also
improves confidentiality guarantees in certain adversary models, as
described in more detail in <xref target="sec-properties"/>. We assume that both
parties have been provisioned with both the PSK value <tt>psk</tt> and another
byte string <tt>psk_id</tt> that is used to identify which PSK should be used.</t>
          <t>The primary difference from the base case is that the <tt>psk</tt> and <tt>psk_id</tt> values
are used as <tt>ikm</tt> inputs to the KDF (instead of using the empty string).</t>
          <t>The PSK MUST have at least 32 bytes of entropy and SHOULD be of length <tt>Nh</tt>
bytes or longer. See <xref target="security-psk"/> for a more detailed discussion.</t>
          <artwork><![CDATA[
def SetupPSKS(pkR, info, psk, psk_id):
  shared_secret, enc = Encap(pkR)
  return enc, KeyScheduleS(mode_psk, shared_secret, info, psk, psk_id)

def SetupPSKR(enc, skR, info, psk, psk_id):
  shared_secret = Decap(enc, skR)
  return KeyScheduleR(mode_psk, shared_secret, info, psk, psk_id)
]]></artwork>
        </section>
      </section>
      <section anchor="hpke-dem">
        <name>Encryption and Decryption</name>
        <t>HPKE allows multiple encryption operations to be done based on a
given setup transaction.  Since the public key operations involved
in setup are typically more expensive than symmetric encryption or
decryption, this allows applications to amortize the cost of the
public key operations, reducing the overall overhead.</t>
        <t>In order to avoid nonce reuse, however, this encryption must be
stateful. Each of the setup procedures above produces a role-specific
context object that stores the AEAD and secret export parameters.
The AEAD parameters consist of:</t>
        <ul spacing="normal">
          <li>
            <t>The AEAD algorithm in use</t>
          </li>
          <li>
            <t>A secret <tt>key</tt></t>
          </li>
          <li>
            <t>A base nonce <tt>base_nonce</tt></t>
          </li>
          <li>
            <t>A sequence number (initially 0)</t>
          </li>
        </ul>
        <t>The secret export parameters consist of:</t>
        <ul spacing="normal">
          <li>
            <t>The HPKE ciphersuite in use and</t>
          </li>
          <li>
            <t>An <tt>exporter_secret</tt> used for the secret export interface (see
<xref target="hpke-export"/>)</t>
          </li>
        </ul>
        <t>All these parameters except the AEAD sequence number are constant.
The sequence number provides nonce uniqueness: The nonce used for
each encryption or decryption operation is the result of XORing
<tt>base_nonce</tt> with the current sequence number, encoded as a big-endian
integer of the same length as <tt>base_nonce</tt>. Implementations MAY use a
sequence number that is shorter than the nonce length (padding on the left
with zero), but MUST raise an error if the sequence number overflows. The AEAD
algorithm produces ciphertext that is Nt bytes longer than the plaintext.
Nt = 16 for AEAD algorithms defined in this document.</t>
        <t>Additionally, each AEAD algorithm has a maximum plaintext length (P_MAX)
as specified in <xref target="RFC5116"/>. For AES-128-GCM and AES-256-GCM, P_MAX is
2^36 - 31 bytes. For ChaCha20Poly1305, P_MAX is 2^38 - 64 bytes.
Implementations MUST NOT encrypt plaintexts larger than P_MAX. Exceeding
either the sequence number limit or P_MAX for the AEAD in use results in
loss of confidentiality and integrity guarantees.</t>
        <t>Encryption is unidirectional from sender to recipient. The sender's
context can encrypt a plaintext <tt>pt</tt> with associated data <tt>aad</tt> as
follows:</t>
        <artwork><![CDATA[
def ContextS.Seal(aad, pt):
  ct = Seal(self.key, self.ComputeNonce(self.seq), aad, pt)
  self.IncrementSeq()
  return ct
]]></artwork>
        <t>The recipient's context can decrypt a ciphertext <tt>ct</tt> with associated
data <tt>aad</tt> as follows:</t>
        <artwork><![CDATA[
def ContextR.Open(aad, ct):
  pt = Open(self.key, self.ComputeNonce(self.seq), aad, ct)
  if pt == OpenError:
    raise OpenError
  self.IncrementSeq()
  return pt
]]></artwork>
        <t>Each encryption or decryption operation increments the sequence number for
the context in use. The per-message nonce and sequence number increment
details are as follows:</t>
        <artwork><![CDATA[
def Context<ROLE>.ComputeNonce(seq):
  seq_bytes = I2OSP(seq, Nn)
  return xor(self.base_nonce, seq_bytes)

def Context<ROLE>.IncrementSeq():
  if self.seq >= (1 << (8*Nn)) - 1:
    raise MessageLimitReachedError
  self.seq += 1
]]></artwork>
        <t>The sender's context MUST NOT be used for decryption. Similarly, the recipient's
context MUST NOT be used for encryption. Higher-level protocols reusing the HPKE
key exchange for more general purposes can derive separate keying material as
needed using the secret export interface; see <xref target="hpke-export"/> and <xref target="bidirectional"/>
for more details.</t>
        <t>It is up to the application to ensure that encryptions and decryptions are
done in the proper sequence, so that encryption and decryption nonces align.
If <tt>ContextS.Seal()</tt> or <tt>ContextR.Open()</tt> would cause the <tt>seq</tt> parameter to
overflow, then the implementation MUST fail with an error. (In the pseudocode
above, <tt>Context&lt;ROLE&gt;.IncrementSeq()</tt> fails with an error when <tt>seq</tt> overflows,
which causes <tt>ContextS.Seal()</tt> and <tt>ContextR.Open()</tt> to fail accordingly.)
Note that the internal <tt>Seal()</tt> and <tt>Open()</tt> calls inside correspond to the
context's AEAD algorithm.</t>
        <t>In parallel or concurrent environments, the <tt>ComputeNonce()</tt>, <tt>Seal()</tt>, and
<tt>IncrementSeq()</tt> operations MUST be done as an atomic unit, e.g., by holding
a lock on <tt>ContextS</tt> for the duration of <tt>ContextS.Seal()</tt>. If other calls to
<tt>Seal()</tt> are interleaved before <tt>IncrementSeq()</tt> completes, this will result
in multiple encryptions with the same sequence number, and thus the same nonce.</t>
      </section>
      <section anchor="hpke-export">
        <name>Secret Export</name>
        <t>HPKE provides an interface for exporting secrets from the encryption context
using a variable-length pseudorandom function (PRF). This interface takes as input a context
string <tt>exporter_context</tt> and a desired length <tt>L</tt> in bytes, and produces
a secret derived from the internal exporter secret using <tt>LabeledExpand()</tt> (for
a two-stage KDF) or <tt>LabeledDerive()</tt> (for a one-stage KDF). For the KDFs
defined in this specification, <tt>L</tt> has a maximum value of <tt>255*Nh</tt>. Future specifications that define new KDFs
MUST specify a bound for <tt>L</tt>.
For one-stage KDFs, <tt>LabeledDerive()</tt> encodes <tt>L</tt> in two bytes, so <tt>L</tt> cannot
exceed 65,535 regardless of any bound given by the KDF's own specification. A
specification for a one-stage KDF MUST NOT specify a bound for <tt>L</tt> larger than
65,535.</t>
        <t>The <tt>exporter_context</tt> parameter has a maximum length that depends on the KDF
itself, on the definition of <tt>LabeledExpand()</tt> or <tt>LabeledDerive()</tt>, and on the constant labels
used together with them. See <xref target="kdf-input-length"/> for precise limits on this
length.</t>
        <artwork><![CDATA[
# For use with a one-stage KDF
def Context.Export_OneStage(exporter_context, L):
  return LabeledDerive(self.exporter_secret, "sec",
                       exporter_context, L)

# For use with a two-stage KDF
def Context.Export_TwoStage(exporter_context, L):
  return LabeledExpand(self.exporter_secret, "sec",
                       exporter_context, L)
]]></artwork>
        <t>Applications that do not use the encryption API in <xref target="hpke-dem"/> can use
the export-only AEAD ID <tt>0xFFFF</tt> when computing the key schedule. Such
applications can avoid computing the <tt>key</tt> and <tt>base_nonce</tt> values in the
key schedule, as they are not used by the Export interface described above.</t>
        <t>Unlike the similar TLS 1.3 exporter interface (see <xref section="7.5" sectionFormat="of" target="RFC9846"/>),
the HPKE export interface does not provide replay protection. While the resulting
secret will only be known to the sender and recipient, a replayed encapsulated
secret <tt>enc</tt> will produce an identical context, and thus the same exported
secrets. In particular, applications MUST NOT use exported secrets unless it is
safe for the same exported values to be used multiple times.  For example,
applications MUST NOT derive a (key, nonce) pair for AEAD encryption from an
exported secret unless the derivation also incorporates a value that is fresh
for each derivation, such as a recipient-provided nonce (see
<xref section="4.4" sectionFormat="of" target="RFC9458"/> and <xref target="bidirectional"/>), since reuse of a (key,
nonce) pair harms security in most AEAD algorithms.  In particular, the example
in <xref section="9.8" sectionFormat="of" target="RFC9180"/>, which derives an AEAD key and nonce from an
exported secret with no fresh input, does not meet this requirement.</t>
      </section>
    </section>
    <section anchor="single-shot-apis">
      <name>Single-Shot APIs</name>
      <section anchor="single-shot-encryption">
        <name>Encryption and Decryption</name>
        <t>In many cases, applications encrypt only a single message to a recipient's
public key.  This section provides templates for HPKE APIs that implement
stateless "single-shot" encryption and decryption using APIs specified in
<xref target="encryption-context"/> and <xref target="hpke-dem"/>:</t>
        <artwork><![CDATA[
def Seal<MODE>(pkR, info, aad, pt, ...):
  enc, ctx = Setup<MODE>S(pkR, info, ...)
  ct = ctx.Seal(aad, pt)
  return enc, ct

def Open<MODE>(enc, skR, info, aad, ct, ...):
  ctx = Setup<MODE>R(enc, skR, info, ...)
  return ctx.Open(aad, ct)
]]></artwork>
        <t>The <tt>MODE</tt> template parameter is either Base or PSK. The optional parameters
indicated by "..." depend on <tt>MODE</tt> and may be empty. For example, <tt>SetupBase()</tt> has no
additional parameters. <tt>SealPSK()</tt> and <tt>OpenPSK()</tt> would be implemented as follows:</t>
        <artwork><![CDATA[
def SealPSK(pkR, info, aad, pt, psk, psk_id):
  enc, ctx = SetupPSKS(pkR, info, psk, psk_id)
  ct = ctx.Seal(aad, pt)
  return enc, ct

def OpenPSK(enc, skR, info, aad, ct, psk, psk_id):
  ctx = SetupPSKR(enc, skR, info, psk, psk_id)
  return ctx.Open(aad, ct)
]]></artwork>
      </section>
      <section anchor="secret-export">
        <name>Secret Export</name>
        <t>Applications may also want to derive a secret known only to a given recipient.
This section provides templates for HPKE APIs that implement stateless
"single-shot" secret export using APIs specified in <xref target="hpke-export"/>:</t>
        <artwork><![CDATA[
def SendExport<MODE>(pkR, info, exporter_context, L, ...):
  enc, ctx = Setup<MODE>S(pkR, info, ...)
  exported = ctx.Export(exporter_context, L)
  return enc, exported

def ReceiveExport<MODE>(enc, skR, info, exporter_context, L, ...):
  ctx = Setup<MODE>R(enc, skR, info, ...)
  return ctx.Export(exporter_context, L)
]]></artwork>
        <t>As in <xref target="single-shot-encryption"/>, the <tt>MODE</tt> template parameter is either Base or PSK.
The optional parameters indicated by "..." depend on <tt>MODE</tt> and may be empty.</t>
        <t>Secrets exported using this single-shot API face the same replay risks discussed
in <xref target="hpke-export"/>.  Usage of exported secrets needs to be limited as described
in that section.</t>
      </section>
    </section>
    <section anchor="ciphersuites">
      <name>Algorithm Identifiers</name>
      <t>This section lists algorithm identifiers suitable for different HPKE configurations.
Future specifications may introduce new KEM, KDF, and AEAD algorithm identifiers
and retain the security guarantees presented in this document provided they adhere
to the security requirements in <xref target="kem-security"/>, <xref target="kdf-choice"/>, and <xref target="aead-security"/>,
respectively.</t>
      <section anchor="kem-ids">
        <name>Key Encapsulation Mechanisms (KEMs)</name>
        <table anchor="kemid-values">
          <name>KEM IDs</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">KEM</th>
              <th align="left">Nsecret</th>
              <th align="left">Nenc</th>
              <th align="left">Npk</th>
              <th align="left">Nsk</th>
              <th align="left">Auth</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0000</td>
              <td align="left">Reserved</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x0010</td>
              <td align="left">DHKEM(P-256, HKDF-SHA256)</td>
              <td align="left">32</td>
              <td align="left">65</td>
              <td align="left">65</td>
              <td align="left">32</td>
              <td align="left">yes</td>
              <td align="left">
                <xref target="NISTCurves"/>, <xref target="RFC5869"/></td>
            </tr>
            <tr>
              <td align="left">0x0011</td>
              <td align="left">DHKEM(P-384, HKDF-SHA384)</td>
              <td align="left">48</td>
              <td align="left">97</td>
              <td align="left">97</td>
              <td align="left">48</td>
              <td align="left">yes</td>
              <td align="left">
                <xref target="NISTCurves"/>, <xref target="RFC5869"/></td>
            </tr>
            <tr>
              <td align="left">0x0012</td>
              <td align="left">DHKEM(P-521, HKDF-SHA512)</td>
              <td align="left">64</td>
              <td align="left">133</td>
              <td align="left">133</td>
              <td align="left">66</td>
              <td align="left">yes</td>
              <td align="left">
                <xref target="NISTCurves"/>, <xref target="RFC5869"/></td>
            </tr>
            <tr>
              <td align="left">0x0020</td>
              <td align="left">DHKEM(X25519, HKDF-SHA256)</td>
              <td align="left">32</td>
              <td align="left">32</td>
              <td align="left">32</td>
              <td align="left">32</td>
              <td align="left">yes</td>
              <td align="left">
                <xref target="RFC7748"/>, <xref target="RFC5869"/></td>
            </tr>
            <tr>
              <td align="left">0x0021</td>
              <td align="left">DHKEM(X448, HKDF-SHA512)</td>
              <td align="left">64</td>
              <td align="left">56</td>
              <td align="left">56</td>
              <td align="left">56</td>
              <td align="left">yes</td>
              <td align="left">
                <xref target="RFC7748"/>, <xref target="RFC5869"/></td>
            </tr>
          </tbody>
        </table>
        <t>The <tt>Auth</tt> column indicates whether the KEM algorithm provides the
<tt>AuthEncap()</tt>/<tt>AuthDecap()</tt> interface defined in <xref target="RFC9180"/>.  This document
does not use that interface, since it does not specify the modes that rely on
it.  The column is retained for compatibility with <xref target="RFC9180"/> and with future
specifications that reintroduce authenticated modes.  The DHKEMs listed above
provide that interface as specified in <xref section="4.1" sectionFormat="of" target="RFC9180"/>, and so have
"yes" in this column.</t>
        <section anchor="serializepublickey-and-deserializepublickey">
          <name>SerializePublicKey and DeserializePublicKey</name>
          <t>For P-256, P-384, and P-521, the <tt>SerializePublicKey()</tt> function of the
KEM performs the uncompressed Elliptic-Curve-Point-to-Octet-String
conversion according to <xref target="SECG"/>. <tt>DeserializePublicKey()</tt> performs the
uncompressed Octet-String-to-Elliptic-Curve-Point conversion.</t>
          <t>For X25519 and X448, the <tt>SerializePublicKey()</tt> and <tt>DeserializePublicKey()</tt>
functions are the identity function, since these curves already use
fixed-length byte strings for public keys.</t>
          <t>Some deserialized public keys MUST be validated before they can be used. See
<xref target="validation"/> for specifics.</t>
        </section>
        <section anchor="serializeprivatekey">
          <name>SerializePrivateKey and DeserializePrivateKey</name>
          <t>As per <xref target="SECG"/>, P-256, P-384, and P-521 private keys are field elements in the
scalar field of the curve being used. For this section, and for
<xref target="derive-key-pair"/>, it is assumed that implementors of ECDH over these curves
use an integer representation of private keys that is compatible with the
<tt>OS2IP()</tt> function.</t>
          <t>For P-256, P-384, and P-521, the <tt>SerializePrivateKey()</tt> function of the KEM
performs the Field-Element-to-Octet-String conversion according to <xref target="SECG"/>. If
the private key is an integer outside the range <tt>[0, order-1]</tt>, where <tt>order</tt>
is the order of the curve being used, the private key MUST be reduced to its
representative in <tt>[0, order-1]</tt> before being serialized.
<tt>DeserializePrivateKey()</tt> performs the Octet-String-to-Field-Element conversion
according to <xref target="SECG"/>.</t>
          <t>For X25519 and X448, private keys are identical to their byte string
representation.</t>
          <t>To catch invalid keys early on, implementors of DHKEMs SHOULD check that
deserialized private keys are not equivalent to 0 (mod <tt>order</tt>), where <tt>order</tt>
is the order of the DH group. Note that this property is trivially true for X25519
and X448 groups, since clamped values (see <xref section="5" sectionFormat="of" target="RFC7748"/>) can never be 0 (mod <tt>order</tt>).</t>
        </section>
        <section anchor="derive-key-pair">
          <name>DeriveKeyPair</name>
          <t>The keys that <tt>DeriveKeyPair()</tt> produces have only as much entropy as the provided
input keying material. For a given KEM, the <tt>ikm</tt> parameter given to <tt>DeriveKeyPair()</tt> SHOULD
have length at least <tt>Nsk</tt>, and SHOULD have at least <tt>Nsk</tt> bytes of entropy.</t>
          <t>All invocations of KDF functions (such as <tt>LabeledExtract</tt> or <tt>LabeledExpand</tt>) in any
DHKEM's <tt>DeriveKeyPair()</tt> function use the DHKEM's associated KDF (as opposed to
the ciphersuite's KDF).</t>
          <t>For P-256, P-384, and P-521, the <tt>DeriveKeyPair()</tt> function of the KEM performs
rejection sampling over field elements:</t>
          <artwork><![CDATA[
# For use with a one-stage KDF
def DeriveCandidate_OneStage(ikm, counter):
  return LabeledDerive(ikm, "candidate", I2OSP(counter, 1), Nsk)

# For use with a two-stage KDF
def DeriveCandidate_TwoStage(ikm, counter):
  # Note: dkp_prk may be derived once and cached
  dkp_prk = LabeledExtract("", "dkp_prk", ikm)
  return LabeledExpand(dkp_prk, "candidate",
                          I2OSP(counter, 1), Nsk)

def DeriveKeyPair(ikm):
  sk = 0
  counter = 0
  while sk == 0 or sk >= order:
    if counter > 255:
      raise DeriveKeyPairError
    bytes = DeriveCandidate(ikm, counter)
    bytes[0] = bytes[0] & bitmask
    sk = OS2IP(bytes)
    counter = counter + 1
  return (sk, pk(sk))
]]></artwork>
          <t><tt>order</tt> is the order of the curve being used (see Section 3.2.1 of <xref target="NISTCurves"/>), and
is listed below for completeness.</t>
          <artwork><![CDATA[
P-256:
0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551

P-384:
0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf
  581a0db248b0a77aecec196accc52973

P-521:
0x01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  fa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409
]]></artwork>
          <t><tt>bitmask</tt> is defined to be 0xFF for P-256 and P-384, and 0x01 for P-521.
The precise likelihood of <tt>DeriveKeyPair()</tt> failing with DeriveKeyPairError
depends on the group being used, but it is negligibly small in all cases.
See <xref target="api-errors"/> for information about dealing with such failures.</t>
          <t>For X25519 and X448, the <tt>DeriveKeyPair()</tt> function applies a KDF to the input:</t>
          <sourcecode type="pseudocode"><![CDATA[
# For use with a one-stage KDF
def DeriveKeyPair_OneStage(ikm):
  sk = LabeledDerive(ikm, "sk", "", Nsk)
  return (sk, pk(sk))

# For use with a two-stage KDF
def DeriveKeyPair_TwoStage(ikm):
  dkp_prk = LabeledExtract("", "dkp_prk", ikm)
  sk = LabeledExpand(dkp_prk, "sk", "", Nsk)
  return (sk, pk(sk))
]]></sourcecode>
          <t>The <tt>suite_id</tt> used implicitly in <tt>LabeledExtract()</tt>, <tt>LabeledExpand()</tt>, and <tt>LabeledDerive()</tt>
for <tt>DeriveKeyPair(ikm)</tt> is derived from the KEM identifier of the
DHKEM in use (see <xref target="kem-ids"/>), that is, based on the type of key
pair generated for that DHKEM type.</t>
          <t>For all of the above instances of DHKEM, the <tt>GenerateKeyPair</tt> can be
implemented as <tt>DeriveKeyPair(random(Nsk))</tt>.</t>
        </section>
        <section anchor="validation">
          <name>Validation of Inputs and Outputs</name>
          <t>The following public keys are subject to validation if the group
requires public key validation: the sender MUST validate the recipient's
public key <tt>pkR</tt>; the recipient MUST validate the ephemeral public key
<tt>pkE</tt>. Validation failure yields a <tt>ValidationError</tt>.</t>
          <t>For P-256, P-384, and P-521, senders and recipients MUST perform partial
public key validation on all public key inputs, as defined in Section 5.6.2.3.4
of <xref target="keyagreement"/>. This includes checking that the coordinates are in the
correct range, that the point is on the curve, and that the point is not the
point at infinity. Additionally, senders and recipients MUST ensure the
Diffie-Hellman shared secret is not the point at infinity.</t>
          <t>For X25519 and X448, public keys and Diffie-Hellman outputs MUST be validated
as described in <xref target="RFC7748"/>. In particular, recipients MUST check whether
the Diffie-Hellman shared secret is the all-zero value and abort if so.</t>
        </section>
        <section anchor="future-kems">
          <name>Future KEMs</name>
          <t><xref target="kem-security"/> lists security requirements on a KEM used within HPKE.</t>
          <t>A KEM algorithm may support different encoding algorithms, with different output
lengths, for KEM public keys. Such KEM algorithms MUST specify only one encoding
algorithm whose output length is <tt>Npk</tt>.</t>
        </section>
      </section>
      <section anchor="kdf-ids">
        <name>Key Derivation Functions (KDFs)</name>
        <table anchor="kdfid-values">
          <name>KDF IDs</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">KDF</th>
              <th align="left">Nh</th>
              <th align="left">Two-Stage</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0000</td>
              <td align="left">Reserved</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x0001</td>
              <td align="left">HKDF-SHA256</td>
              <td align="left">32</td>
              <td align="left">Y</td>
              <td align="left">
                <xref target="RFC5869"/></td>
            </tr>
            <tr>
              <td align="left">0x0002</td>
              <td align="left">HKDF-SHA384</td>
              <td align="left">48</td>
              <td align="left">Y</td>
              <td align="left">
                <xref target="RFC5869"/></td>
            </tr>
            <tr>
              <td align="left">0x0003</td>
              <td align="left">HKDF-SHA512</td>
              <td align="left">64</td>
              <td align="left">Y</td>
              <td align="left">
                <xref target="RFC5869"/></td>
            </tr>
          </tbody>
        </table>
        <t>This document defines no one-stage KDFs; every KDF listed in
<xref target="kdfid-values"/> is a two-stage KDF.  An initial set of one-stage KDFs is
defined in <xref target="I-D.ietf-hpke-pq"/>.</t>
        <section anchor="kdf-input-length">
          <name>Input Length Restrictions</name>
          <t>For one-stage KDFs, there is a length limit of 65,535 bytes for the <tt>psk</tt>,
<tt>psk_id</tt>, <tt>info</tt> fields. This limitation arises because these fields are all
prefixed with a two-byte length when being used as KDF inputs. There is no
inherent length limitation on <tt>exporter_context</tt>.  If a one-stage KDF has an
input length limit, then implementations MUST limit the length of
<tt>exporter_context</tt> accordingly, so that the <tt>LabeledDerive</tt> call in
<tt>Context.Export</tt> does not overflow the input length limit.</t>
          <t>For two-stage KDFs, this document defines <tt>LabeledExtract()</tt> and <tt>LabeledExpand()</tt> based on the
KDFs listed above. These functions add prefixes to their respective
inputs <tt>ikm</tt> and <tt>info</tt> before calling the KDF's <tt>Extract()</tt> and <tt>Expand()</tt>
functions. This leads to a reduction of the maximum input length that
is available for the inputs <tt>psk</tt>, <tt>psk_id</tt>, <tt>info</tt>, <tt>exporter_context</tt>,
<tt>ikm</tt>, i.e., the variable-length parameters provided by HPKE applications.
The following table lists the maximum allowed lengths of these parameters
for the KDFs defined in this document, as inclusive bounds in bytes:</t>
          <table anchor="input-limits">
            <name>Application Input Limits</name>
            <thead>
              <tr>
                <th align="left">Input</th>
                <th align="left">HKDF-SHA256</th>
                <th align="left">HKDF-SHA384</th>
                <th align="left">HKDF-SHA512</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">psk</td>
                <td align="left">2^{61} - 88</td>
                <td align="left">2^{125} - 152</td>
                <td align="left">2^{125} - 152</td>
              </tr>
              <tr>
                <td align="left">psk_id</td>
                <td align="left">2^{61} - 93</td>
                <td align="left">2^{125} - 157</td>
                <td align="left">2^{125} - 157</td>
              </tr>
              <tr>
                <td align="left">info</td>
                <td align="left">2^{61} - 91</td>
                <td align="left">2^{125} - 155</td>
                <td align="left">2^{125} - 155</td>
              </tr>
              <tr>
                <td align="left">exporter_context</td>
                <td align="left">2^{61} - 120</td>
                <td align="left">2^{125} - 200</td>
                <td align="left">2^{125} - 216</td>
              </tr>
              <tr>
                <td align="left">ikm (DeriveKeyPair)</td>
                <td align="left">2^{61} - 84</td>
                <td align="left">2^{125} - 148</td>
                <td align="left">2^{125} - 148</td>
              </tr>
            </tbody>
          </table>
          <t>This shows that the limits are only marginally smaller than the maximum
input length of the underlying hash function; these limits are large and
unlikely to be reached in practical applications. Future specifications
that define new KDFs MUST specify bounds for these variable-length
parameters.</t>
          <t>Since the above bounds are larger than any values used in practice, it may be
useful for implementations to impose a smaller maximum on the values they will
accept (for example, to avoid dynamic allocations). Implementations MUST
support <tt>info</tt> values of at least 64 bytes. Implementations SHOULD support
<tt>info</tt> values of at least 16384 bytes to accommodate protocols such as
Encrypted Client Hello <xref target="RFC9849"/>. Applications seeking
maximum interoperability with resource-constrained HPKE implementations
SHOULD NOT provide <tt>info</tt> values exceeding 64 bytes without confirmation that an
implementation supports larger <tt>info</tt> values.</t>
          <t>The values for <tt>psk</tt>, <tt>psk_id</tt>, <tt>info</tt>, and <tt>ikm</tt>, which are inputs to
<tt>LabeledExtract()</tt>, were computed with the following expression:</t>
          <artwork><![CDATA[
max_size_hash_input - Nb - size_version_label -
    size_suite_id - size_input_label
]]></artwork>
          <t>The value for <tt>exporter_context</tt>, which is an input to <tt>LabeledExpand()</tt>,
was computed with the following expression:</t>
          <artwork><![CDATA[
max_size_hash_input - Nb - Nh - size_version_label -
    size_suite_id - size_input_label - 2 - 1
]]></artwork>
          <t>In these equations, <tt>max_size_hash_input</tt> is the maximum input length
of the underlying hash function in bytes, <tt>Nb</tt> is the block size of the
underlying hash function in bytes, <tt>size_version_label</tt> is the size
of "HPKE-v1" in bytes and equals 7, <tt>size_suite_id</tt> is the size of the
<tt>suite_id</tt> in bytes and equals 5 for DHKEM (relevant for <tt>ikm</tt>) and 10 for the
remainder of HPKE (relevant for <tt>psk</tt>, <tt>psk_id</tt>, <tt>info</tt>, and <tt>exporter_context</tt>),
and <tt>size_input_label</tt> is the size in bytes of the label used as parameter to
<tt>LabeledExtract()</tt> or <tt>LabeledExpand()</tt>, the maximum of which is 13
across all labels in this document.</t>
        </section>
      </section>
      <section anchor="aead-ids">
        <name>Authenticated Encryption with Associated Data (AEAD) Functions</name>
        <table anchor="aeadid-values">
          <name>AEAD IDs</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">AEAD</th>
              <th align="left">Nk</th>
              <th align="left">Nn</th>
              <th align="left">Nt</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0000</td>
              <td align="left">Reserved</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x0001</td>
              <td align="left">AES-128-GCM</td>
              <td align="left">16</td>
              <td align="left">12</td>
              <td align="left">16</td>
              <td align="left">
                <xref target="GCM"/></td>
            </tr>
            <tr>
              <td align="left">0x0002</td>
              <td align="left">AES-256-GCM</td>
              <td align="left">32</td>
              <td align="left">12</td>
              <td align="left">16</td>
              <td align="left">
                <xref target="GCM"/></td>
            </tr>
            <tr>
              <td align="left">0x0003</td>
              <td align="left">ChaCha20Poly1305</td>
              <td align="left">32</td>
              <td align="left">12</td>
              <td align="left">16</td>
              <td align="left">
                <xref target="RFC8439"/></td>
            </tr>
            <tr>
              <td align="left">0xFFFF</td>
              <td align="left">Export-only</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">N/A</td>
              <td align="left">RFC XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>The <tt>0xFFFF</tt> AEAD ID is reserved for applications that only use the Export
interface; see <xref target="hpke-export"/> for more details.</t>
      </section>
    </section>
    <section anchor="api-considerations">
      <name>API Considerations</name>
      <t>This section documents considerations for interfaces to implementations of HPKE.
This includes error handling considerations and recommendations that improve
interoperability when HPKE is used in applications.</t>
      <section anchor="auxiliary-authenticated-application-information">
        <name>Auxiliary Authenticated Application Information</name>
        <t>HPKE has two places at which applications can specify auxiliary authenticated information:
(1) during context construction via the Setup <tt>info</tt> parameter, and (2) during Context
operations, i.e., with the <tt>aad</tt> parameter for <tt>Open()</tt> and <tt>Seal()</tt>, and the <tt>exporter_context</tt> parameter
for <tt>Export()</tt>. Application information applicable to multiple operations on a single Context
should use the Setup <tt>info</tt> parameter. This avoids redundantly processing this information for
each Context operation. In contrast, application information that varies on a per-message basis
should be specified via the Context APIs (<tt>Seal()</tt>, <tt>Open()</tt>, or <tt>Export()</tt>).</t>
        <t>Applications that only use the single-shot APIs described in <xref target="single-shot-apis"/> can specify
auxiliary authenticated information using both the Setup <tt>info</tt> parameter and the Context <tt>aad</tt>
and <tt>exporter_context</tt> parameters. Such applications SHOULD prefer the <tt>info</tt> parameter, because
<tt>info</tt> is the parameter intended for information that applies to the whole context, and using it
keeps their behavior consistent with applications that also use the underlying multi-shot APIs.</t>
      </section>
      <section anchor="api-errors">
        <name>Errors</name>
        <t>The high-level, public HPKE APIs specified in this document are all fallible.
These include the Setup functions and all encryption context functions.
For example, <tt>Decap()</tt> can fail if the encapsulated secret <tt>enc</tt> is invalid,
and <tt>Open()</tt> may fail if ciphertext decryption fails. The explicit errors
generated throughout this specification, along with the conditions that
lead to each error, are as follows:</t>
        <ul spacing="normal">
          <li>
            <t><tt>ValidationError</tt>: KEM input or output validation failure; <xref target="dhkem"/>.</t>
          </li>
          <li>
            <t><tt>DeserializeError</tt>: Public or private key deserialization failure; <xref target="base-crypto"/>.</t>
          </li>
          <li>
            <t><tt>EncapError</tt>: <tt>Encap()</tt> failure; <xref target="base-crypto"/>.</t>
          </li>
          <li>
            <t><tt>DecapError</tt>: <tt>Decap()</tt> failure; <xref target="base-crypto"/>.</t>
          </li>
          <li>
            <t><tt>OpenError</tt>: Context AEAD <tt>Open()</tt> failure; <xref target="base-crypto"/> and <xref target="hpke-dem"/>.</t>
          </li>
          <li>
            <t><tt>MessageLimitReachedError</tt>: Context AEAD sequence number overflow; <xref target="base-crypto"/> and <xref target="hpke-dem"/>.</t>
          </li>
          <li>
            <t><tt>DeriveKeyPairError</tt>: Key pair derivation failure; <xref target="derive-key-pair"/>.</t>
          </li>
        </ul>
        <t>Implicit errors may also occur. As an example, certain classes of failures,
e.g., malformed recipient public keys, may not yield explicit errors.
For example, for the DHKEM variant described in this specification,
the <tt>Encap()</tt> algorithm fails when given an invalid recipient public key.
However, other KEM algorithms may not have an efficient algorithm for verifying
the validity of public keys. As a result, an equivalent error may not manifest
until AEAD decryption at the recipient.</t>
        <t>The errors in this document are meant as a guide for implementors. They are not
an exhaustive list of all the errors an implementation might emit. For example,
future KEMs might have internal failure cases, or an implementation might run
out of memory.</t>
        <t>How these errors are expressed in an API or handled by applications is an
implementation-specific detail. For example, some implementations may abort or
panic upon a <tt>DeriveKeyPairError</tt> failure given that it only occurs with
negligible probability, whereas other implementations may retry the failed
DeriveKeyPair operation. See <xref target="derive-key-pair"/> for more information.
As another example, some implementations of the DHKEM specified in this document
may choose to transform <tt>ValidationError</tt> from <tt>DH()</tt> into an <tt>EncapError</tt> or
<tt>DecapError</tt> from <tt>Encap()</tt> or <tt>Decap()</tt>, respectively, whereas others may choose
to raise <tt>ValidationError</tt> unmodified.</t>
        <t>Applications using HPKE APIs should not assume that the errors here are complete,
nor should they assume certain classes of errors will always manifest the same way
for all ciphersuites. For example, the DHKEM specified in this document will emit
a <tt>DeserializeError</tt> or <tt>ValidationError</tt> if a KEM public key is invalid. However,
a new KEM might not have an efficient algorithm for determining whether or not a
public key is valid. In this case, an invalid public key might instead yield an
<tt>OpenError</tt> when trying to decrypt a ciphertext.</t>
      </section>
    </section>
    <section anchor="sec-considerations">
      <name>Security Considerations</name>
      <section anchor="sec-properties">
        <name>Security Properties</name>
        <t>HPKE has several security goals, depending on the mode of operation,
against active and adaptive attackers that can compromise partial
secrets of senders and recipients. The desired security goals are
detailed below:</t>
        <ul spacing="normal">
          <li>
            <t>Message secrecy: Confidentiality of the sender's messages against
chosen ciphertext attacks</t>
          </li>
          <li>
            <t>Export key secrecy: Indistinguishability of each export
secret from a uniformly random bitstring of equal length, i.e.,
<tt>Context.Export</tt> is a variable-length PRF</t>
          </li>
          <li>
            <t>Sender authentication: Proof of sender origin for the PSK mode</t>
          </li>
        </ul>
        <t>These security goals are expected to hold for any honest recipient key pair.</t>
        <t>A pre-shared key provides authentication; additionally, it strengthens the
secrecy properties in certain adversary models, including against a
quantum-capable adversary, see <xref target="post-quantum-security"/>.</t>
        <t>HPKE mitigates malleability problems (called benign malleability <xref target="SECG"/>) in prior
public key encryption standards based on ECIES by including all public keys in the
context of the key schedule.</t>
        <t>HPKE does not provide forward secrecy with respect to recipient compromise.
In the Base mode, the secrecy properties are only expected to
hold if the recipient private key <tt>skR</tt> is not compromised at any point
in time. In the PSK mode, the secrecy properties are
expected to hold if the recipient private key <tt>skR</tt> and the pre-shared key
are not both compromised at any point in time. See <xref target="non-goals"/> for more
details.</t>
        <t>Besides forward secrecy, HPKE has other non-goals that are described in
<xref target="non-goals"/>: no tolerance of message reordering or loss, no downgrade or replay
prevention, no hiding of the plaintext length, and no protection against bad
ephemeral randomness. <xref target="non-goals"/> suggests application-level mitigations for some
of them.</t>
        <section anchor="computational-analysis">
          <name>Computational Analysis</name>
          <t>It is shown in <xref target="CS01"/> that a hybrid public key encryption scheme of
essentially the same form as the Base mode described here is
IND-CCA2-secure as long as the underlying KEM and AEAD schemes are
IND-CCA2-secure. Moreover, it is shown in <xref target="HHK06"/> that IND-CCA2 security
of the KEM and the data encapsulation mechanism are necessary conditions
to achieve IND-CCA2 security for hybrid public key encryption.
The main difference between the scheme proposed in <xref target="CS01"/>
and the Base mode in this document (both named HPKE) is that we interpose
some KDF calls between the KEM and the AEAD. Analyzing the HPKE Base mode
instantiation in this document therefore requires verifying that the
additional KDF calls do not cause the IND-CCA2 property to fail, as
well as verifying the additional export key secrecy property.</t>
          <t>A preliminary computational analysis of all HPKE modes has been done
in <xref target="HPKEAnalysis"/>, indicating asymptotic security for the case where
the KEM is DHKEM, the AEAD is any scheme that provides both indistinguishability
under chosen-plaintext attack (IND-CPA) and integrity of ciphertexts (INT-CTXT)
<xref target="BN00"/>, and the DH group and KDF satisfy the following conditions:</t>
          <ul spacing="normal">
            <li>
              <t>DH group: The gap Diffie-Hellman (GDH) problem is hard in the
appropriate subgroup <xref target="GAP"/>.</t>
            </li>
            <li>
              <t><tt>Extract()</tt> and <tt>Expand()</tt>: <tt>Extract()</tt> can be modeled as a random oracle.
<tt>Expand()</tt> can be modeled as a pseudorandom function, wherein the first
argument is the key.</t>
            </li>
          </ul>
          <t>In particular, the KDFs and DH groups defined in this document (see
<xref target="kdf-ids"/> and <xref target="kem-ids"/>) satisfy these properties when used as
specified. The analysis in <xref target="HPKEAnalysis"/> demonstrates that under these
constraints, HPKE continues to provide IND-CCA2 security, and provides
the additional properties noted above. Also, the analysis confirms the
expected properties hold under the different key compromise cases
mentioned above. The analysis considers a sender that sends one message
using the encryption context, and additionally exports two independent
secrets using the secret export interface.</t>
          <t>The analysis in <xref target="HPKEAnalysis"/> considers only two-stage KDFs.  With a
one-stage KDF, each key schedule computation that a two-stage KDF performs with
<tt>Extract()</tt> and <tt>Expand()</tt> is instead performed by a single call to
<tt>LabeledDerive()</tt> over the encoded inputs (see <xref target="encryption-context"/>), and
the DHKEM and export computations are likewise single <tt>LabeledDerive()</tt> calls.
The analysis is expected to carry over to a one-stage KDF whose <tt>Derive()</tt>
function can be modeled as a random oracle, since such a function provides
the properties that the conditions above require of <tt>Extract()</tt> and
<tt>Expand()</tt>.  However, this has not been formally verified; see the discussion
of future work below.</t>
          <t>The table below summarizes the main results from <xref target="HPKEAnalysis"/>. N/A
means that a property does not apply for the given mode, whereas <tt>Y</tt> means
the given mode satisfies the property.</t>
          <table anchor="t-analysis">
            <name>Summary of Analysis Results</name>
            <thead>
              <tr>
                <th align="left">Mode</th>
                <th align="center">Message Sec.</th>
                <th align="center">Export Sec.</th>
                <th align="center">Sender Auth.</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Base</td>
                <td align="center">Y</td>
                <td align="center">Y</td>
                <td align="center">N/A</td>
              </tr>
              <tr>
                <td align="left">PSK</td>
                <td align="center">Y</td>
                <td align="center">Y</td>
                <td align="center">Y</td>
              </tr>
            </tbody>
          </table>
          <t>If non-DH-based KEMs are to be used with HPKE, further analysis will be
necessary to prove their security. The results from <xref target="CS01"/> provide
some indication that any IND-CCA2-secure KEM will suffice here, but are
not conclusive given the differences in the schemes.</t>
          <t>A detailed computational analysis of the PSK mode has been done in
<xref target="AJKL23"/>. In future work, the analyses from <xref target="ABHKLR20"/> and <xref target="AJKL23"/>
can be extended to cover a detailed computational analysis of HPKE's
base mode, the usage of a one-stage KDF, the multi-shot and secret export
interfaces, as well as the examples for bidirectional encryption
(<xref target="bidirectional"/>) and metadata protection (<xref target="metadata"/>).</t>
        </section>
        <section anchor="post-quantum-security">
          <name>Post-Quantum Security</name>
          <t>The computational analyses in <xref target="ABHKLR20"/> and <xref target="AJKL23"/> provide
composition theorems based on PRF assumptions, proving post-quantum
security for HPKE when used with a post-quantum secure KEM.
The analyses in <xref target="CS01"/> and <xref target="HPKEAnalysis"/> are premised on
classical security models and assumptions, and do not consider
adversaries capable of quantum computation.</t>
          <t>The PSK mode can provide a hybrid quantum-resistance property: if the PSK is
not known to a quantum-capable adversary, then that adversary cannot recover
the plaintext even if it can break the (classical) KEM.  This property is
proven in <xref target="AJKL23"/>. The analysis in <xref target="HPKEAnalysis"/> is not sufficient,
because it requires the random oracle model and would need adaption to, for
example, the quantum random oracle model.</t>
        </section>
      </section>
      <section anchor="kem-security">
        <name>Security Requirements on a KEM Used within HPKE</name>
        <t>A KEM used within HPKE MUST allow HPKE to satisfy its desired security
properties described in <xref target="sec-properties"/>. For the security proofs from
<xref target="ABHKLR20"/> and <xref target="AJKL23"/> to apply, the KEM MUST be CCA-secure.
<xref target="domain-separation"/> lists requirements concerning domain separation.</t>
        <t>In particular, the KEM
shared secret MUST be a uniformly random byte string of length <tt>Nsecret</tt>.
This means, for instance, that it would not be sufficient if the KEM
shared secret is only uniformly random as an element of some structured set
(such as an elliptic curve group or a finite field) prior
to its encoding as a byte string, because such an encoding is generally not
uniformly distributed over byte strings of length <tt>Nsecret</tt>.</t>
        <section anchor="kem-key-reuse">
          <name>KEM Key Reuse</name>
          <t>An <tt>ikm</tt> input to <tt>DeriveKeyPair()</tt> (<xref target="derive-key-pair"/>) MUST NOT be
reused elsewhere, in particular not with <tt>DeriveKeyPair()</tt> of a
different KEM.</t>
          <t>Since a KEM key pair belonging to a recipient works with all modes, it can
be used with multiple modes in parallel. HPKE is constructed to be
secure in such settings due to domain separation using the <tt>suite_id</tt>
variable. However, there is no formal proof of security at the time of
writing for using multiple modes in parallel; <xref target="HPKEAnalysis"/>,
<xref target="ABHKLR20"/>, and <xref target="AJKL23"/> only analyze isolated modes.</t>
        </section>
      </section>
      <section anchor="kdf-choice">
        <name>Security Requirements on a KDF</name>
        <t>The choice of the KDF for HPKE SHOULD be made based on the security
level provided by the KEM and, if applicable, by the PSK. The KDF
SHOULD at least have the security level of the KEM and SHOULD
at least have the security level provided by the PSK.</t>
        <t>For the security proofs from <xref target="ABHKLR20"/> and <xref target="AJKL23"/> to apply, the
KDF MUST allow proving PRF security for the key schedule both with
<tt>shared_secret</tt> or <tt>psk</tt> as PRF key.</t>
        <t>For a one-stage KDF, the corresponding requirements apply to <tt>Derive(ikm, L)</tt>
as invoked by <tt>LabeledDerive()</tt>.  The output of the key schedule MUST be
pseudorandom whenever either <tt>shared_secret</tt> or <tt>psk</tt> is unknown to the
adversary, even if the adversary knows or chooses the other inputs.
Similarly, the output of <tt>Context.Export()</tt> MUST be pseudorandom when
<tt>exporter_secret</tt> is unknown to the adversary, and the DHKEM shared secret
MUST be pseudorandom when the Diffie-Hellman output is unknown to the
adversary.  A KDF whose <tt>Derive()</tt> function can be modeled as a random oracle,
such as an extendable-output function (XOF) like SHAKE, satisfies these
requirements.  The proofs in <xref target="ABHKLR20"/> and <xref target="AJKL23"/> have not been
extended to one-stage KDFs (see <xref target="sec-properties"/>).</t>
      </section>
      <section anchor="aead-security">
        <name>Security Requirements on an AEAD</name>
        <t>All AEADs MUST provide confidentiality (IND-CPA) and ciphertext integrity
(INT-CTXT).</t>
        <t>In practice, all widely deployed IND-CCA2 symmetric authenticated encryption
schemes meet these definitions.  As discussed in <xref target="BN00"/>, IND-CPA and INT-CTXT
together imply IND-CCA2.  We list them separately because they are the AEAD security
properties relied upon by the analyses summarized in <xref target="sec-properties"/>.</t>
      </section>
      <section anchor="security-psk">
        <name>Pre-Shared Key Recommendations</name>
        <t>In PSK mode, the PSK MUST have at least 32 bytes of
entropy and SHOULD be of length <tt>Nh</tt> bytes or longer. Using a PSK longer than
32 bytes but shorter than <tt>Nh</tt> bytes is permitted.</t>
        <t>The KDFs used with HPKE are not designed to slow down dictionary attacks;
this is true of HKDF (see <xref target="RFC5869"/>) as well as of one-stage KDFs. Thus, HPKE's
PSK mechanism is not suitable for use with a low-entropy password as the
PSK: In scenarios in which the adversary knows the KEM shared secret
<tt>shared_secret</tt> and has access to an oracle that distinguishes between
a good and a wrong PSK, it can perform PSK-recovering attacks. This oracle
can be the decryption operation on a captured HPKE ciphertext or any other
recipient behavior that is observably different when using a wrong PSK.
The adversary knows the KEM shared secret <tt>shared_secret</tt> if it knows all
KEM private keys of one participant. In the PSK mode, this is trivially
the case if the adversary acts as the sender.</t>
        <t>To recover a lower entropy PSK, an attacker in this scenario can trivially
perform a dictionary attack. Given a set <tt>S</tt> of possible PSK values, the
attacker generates an HPKE ciphertext for each value in <tt>S</tt>, and submits
the resulting ciphertexts to the oracle to learn which PSK is being used by
the recipient. Further, because HPKE uses AEAD schemes that are not key-committing,
an attacker can mount a partitioning oracle attack <xref target="LGR20"/> that can recover
the PSK from a set of <tt>S</tt> possible PSK values, with |S| = m*k, in roughly
m + log k queries to the oracle using ciphertexts of length proportional to
k, the maximum message length in blocks. (Applying the multi-collision algorithm from
<xref target="LGR20"/> requires a small adaptation to the algorithm wherein the appropriate nonce
is computed for each candidate key. This modification adds one call to HKDF per key.
The number of partitioning oracle queries remains unchanged.) As a result, the PSK
must therefore be chosen with sufficient entropy so that m + log k is prohibitive for
attackers (e.g., 2^128). Future specifications can define new AEAD algorithms that
are key-committing.</t>
        <t>Pre-processing a low-entropy password with a memory-hard password-based key
derivation function such as scrypt <xref target="RFC7914"/> or Argon2 <xref target="RFC9106"/> before
using it as a PSK raises the per-guess cost of the attacks described above, but
it does not add entropy and therefore does not by itself make a low-entropy
password safe to use as a PSK.  Applications that need to derive keys from
passwords, and that must tolerate low-entropy passwords, should use a mechanism
designed for that purpose (for example, a password-authenticated key exchange)
rather than relying on HPKE's PSK mode.</t>
      </section>
      <section anchor="domain-separation">
        <name>Domain Separation</name>
        <t>HPKE allows combining a DHKEM variant <tt>DHKEM(Group, KDF')</tt> and a KDF
such that both KDFs are instantiated by the same KDF. By design, the
calls to <tt>Extract()</tt> and <tt>Expand()</tt> inside DHKEM and the remainder of
HPKE use separate input domains. This justifies modeling them as
independent functions even if instantiated by the same KDF.
This domain separation between DHKEM and the remainder of HPKE is achieved by
using prefix-free sets of <tt>suite_id</tt> values in <tt>LabeledExtract()</tt>,
<tt>LabeledExpand()</tt>, and <tt>LabeledDerive()</tt> (<tt>KEM...</tt> in DHKEM and <tt>HPKE...</tt> in the remainder of HPKE).
Recall that a set is prefix-free if no element is a prefix of another within the
set.</t>
        <t>Separation between uses of the one-stage and two-stage KDFs is ensured by the
inclusion of the <tt>suite_id</tt> in <tt>LabeledExtract()</tt>, <tt>LabeledExpand()</tt>, and
<tt>LabeledDerive()</tt>.</t>
        <t>Future KEM instantiations MUST ensure, should <tt>Extract()</tt>,
<tt>Expand()</tt>, and/or <tt>Derive()</tt> be used internally, that they can be modeled as functions
independent of the invocations of these functions in the
remainder of HPKE. One way to ensure this is by using <tt>LabeledExtract()</tt> /
<tt>LabeledExpand()</tt> / <tt>LabeledDerive()</tt> functions with a <tt>suite_id</tt> as defined in <xref target="base-crypto"/>,
which will ensure input domain separation, as outlined above.
Particular attention needs to
be paid if the KEM directly invokes functions that are used internally
in HPKE's <tt>Extract()</tt>, <tt>Expand()</tt>, or <tt>Derive()</tt>, such as <tt>Hash()</tt> and <tt>HMAC()</tt> in the case of HKDF.
It MUST be ensured that inputs to these invocations cannot collide with
inputs to the internal invocations of these functions inside <tt>Extract()</tt>,
<tt>Expand()</tt>, or <tt>Derive()</tt>. With a two-stage KDF, HPKE's <tt>KeySchedule()</tt> avoids this by using <tt>Extract()</tt> instead of
<tt>Hash()</tt> on the arbitrary-length inputs <tt>info</tt> and <tt>psk_id</tt>.  With a one-stage
KDF, <tt>KeySchedule()</tt> passes these inputs, length-prefixed, only to
<tt>LabeledDerive()</tt>, so they are processed only by the KDF's <tt>Derive()</tt> function
together with the HPKE-specific label and <tt>suite_id</tt>.</t>
        <t>The string literal "HPKE-v1" used in <tt>LabeledExtract()</tt> / <tt>LabeledExpand()</tt> / <tt>LabeledDerive()</tt>
ensures that any secrets derived in HPKE are bound to the scheme's name
and version, even when possibly derived from the same Diffie-Hellman or
KEM shared secret as in another scheme or version.</t>
      </section>
      <section anchor="non-goals">
        <name>Application Embedding and Non-Goals</name>
        <t>HPKE is designed to be a low-level mechanism.  As a result, it assumes
that certain properties are provided by the application in which HPKE is
embedded and leaves certain security properties to be provided by other
mechanisms. Otherwise said, certain properties are out-of-scope for HPKE.</t>
        <section anchor="message-order-and-message-loss">
          <name>Message Order and Message Loss</name>
          <t>The primary requirement that HPKE imposes on applications is the requirement
that ciphertexts MUST be presented to <tt>ContextR.Open()</tt> in the same order in
which they were generated by <tt>ContextS.Seal()</tt>.  When the single-shot API is
used (see <xref target="single-shot-apis"/>), this is trivially true (since there is only
ever one ciphertext).  Applications that allow for multiple invocations of
<tt>Open()</tt> / <tt>Seal()</tt> on the same context MUST enforce the ordering property
described above.</t>
          <t>Ordering requirements of this character are usually fulfilled by providing a
sequence number in the framing of encrypted messages.  Whatever information is
used to determine the ordering of HPKE-encrypted messages SHOULD be included in
the AAD passed to <tt>ContextS.Seal()</tt> and <tt>ContextR.Open()</tt>.  The specifics of
this scheme are up to the application.</t>
          <t>HPKE is not tolerant of lost messages. Applications MUST be able to detect when
a message has been lost.  When an unrecoverable loss is detected, the application MUST discard
any associated HPKE context.</t>
        </section>
        <section anchor="downgrade-prevention">
          <name>Downgrade Prevention</name>
          <t>HPKE assumes that the sender and recipient agree on what algorithms to use.
Depending on how these algorithms are negotiated, it may be possible for an
intermediary to force the two parties to use suboptimal algorithms.</t>
        </section>
        <section anchor="replay-protection">
          <name>Replay Protection</name>
          <t>The requirement that ciphertexts be presented to the <tt>ContextR.Open()</tt> function
in the same order they were generated by <tt>ContextS.Seal()</tt> provides a degree of
replay protection within a stream of ciphertexts resulting from a given context.
HPKE provides no other replay protection.</t>
          <t>While a sender can guarantee the uniqueness of HPKE ciphertexts, a recipient
might receive the same ciphertext multiple times.  Unless the recipient takes
particular care to guarantee that replay is impossible, such as tracking all enc
values that are received, this can result in multiple contexts that have the
same shared secret.  This is particularly relevant for exported secrets.</t>
          <t>If an attacker can cause a recipient to re-use an <tt>enc</tt> value, any exported
secrets will be the same as in the initial transaction.  While the exported
values are still known only to the sender and recipient (not the replay
attacker), such replay can allow the attacker to cause the recipient to re-use
the exported values.</t>
          <t>Consider the following scenario, in which B is using the recipient-to-sender
encryption described as an example in <xref section="9.8" sectionFormat="of" target="RFC9180"/>, which derives
an AEAD key and nonce deterministically from an exported secret, with no fresh
per-response input:</t>
          <figure anchor="replay-attack">
            <name>Attacker-triggered nonce reuse via replay</name>
            <artwork><![CDATA[
B->A: pk

A:    enc1, ctx = SetupBaseS(pk, info)
      ct1 = ctx.seal(aad, pt)
A->B: enc1, ct1

B:    ctx = SetupBaseR(enc1, sk, info)
      key, nonce = ctx.export(...)
      ct2 = AEAD.seal(key, nonce, aad2, pt2)
B->A: ct2

X->B: enc1, ct1 [replay of previously sent values]

B:    ctx = SetupBaseR(enc1, sk, info)
      key, nonce = ctx.export(...)
      ct3 = AEAD.seal(key, nonce, aad3, pt3)
B->X: ct3
]]></artwork>
          </figure>
          <t>In this scenario, if <tt>aad2</tt> is different from <tt>aad3</tt> or <tt>pt2</tt> is different from
<tt>pt3</tt> (for example, due to the use of a timestamp in either field), then the
ciphertexts <tt>ct2</tt> and <tt>ct3</tt> will represent encryptions of different values with
the same (key, nonce) pair -- a nonce reuse condition that can completely break
the authenticated encryption guarantees for several AEAD algorithms, including
those defined in <xref target="aead-ids"/>.</t>
          <t>In order to avoid such risks, applications SHOULD incorporate a fresh
recipient-provided nonce when deriving values from an export context, as
discussed in <xref section="4.4" sectionFormat="of" target="RFC9458"/> and <xref target="bidirectional"/>.</t>
        </section>
        <section anchor="forward-secrecy">
          <name>Forward Secrecy</name>
          <t>HPKE ciphertexts are not forward secret with respect to recipient compromise
in any mode. This means that compromise of long-term recipient secrets allows
an attacker to decrypt past ciphertexts encrypted under said secrets. This is because
only long-term secrets are used on the side of the recipient.</t>
          <t>HPKE ciphertexts are forward secret with respect to sender compromise in all
modes. This is because ephemeral randomness is used on the sender's side, which
is supposed to be erased directly after computation of the KEM shared secret and
ciphertext.</t>
        </section>
        <section anchor="bad-ephemeral-randomness">
          <name>Bad Ephemeral Randomness</name>
          <t>If the randomness used for KEM encapsulation is bad -- i.e., of low entropy or
compromised because of a broken or subverted random number generator -- the
confidentiality guarantees of HPKE degrade significantly. In Base mode,
confidentiality guarantees can be lost completely; in PSK mode, at least forward secrecy with
respect to sender compromise can be lost completely.</t>
          <t>Such a situation could also lead to the reuse of the same KEM shared secret
and thus to the reuse of same key-nonce pairs for the AEAD.
The AEADs specified in this document are not secure
in case of nonce reuse.</t>
          <t>One way for applications to mitigate the impacts of bad ephemeral randomness is
to combine ephemeral randomness with a local long-term secret that has been
generated securely, as described in <xref target="RFC8937"/>.</t>
        </section>
        <section anchor="hiding-plaintext-length">
          <name>Hiding Plaintext Length</name>
          <t>AEAD ciphertexts produced by HPKE do not hide the plaintext length. Applications
requiring this level of privacy should use a suitable padding mechanism. See
<xref target="RFC9849"/> and <xref target="RFC8467"/> for examples of protocol-specific
padding policies.</t>
        </section>
      </section>
      <section anchor="bidirectional">
        <name>Bidirectional Encryption</name>
        <t>As discussed in <xref target="hpke-dem"/>, HPKE encryption is unidirectional from sender
to recipient. Applications that require bidirectional encryption can derive
necessary keying material with the secret export interface (<xref target="hpke-export"/>).
The type and length of such keying material depends on the application use
case.</t>
        <t>As an example, if an application needs AEAD encryption from the recipient to
the sender, it can derive a key and nonce from the corresponding HPKE context
as follows:</t>
        <artwork><![CDATA[
# For use with a one-stage KDF
def EncryptResponse_OneStage(context, enc, response_aad, response_pt):
  secret = context.Export("[application] response", Nh)
  response_nonce = random(Nh)
  okm = Derive(concat(secret, enc, response_nonce), Nk + Nn)
  aead_key = okm[:Nk]
  aead_nonce = okm[Nk:]
  ct = Seal(aead_key, aead_nonce, response_aad, response_pt)
  return (response_nonce, ct)

# For use with a two-stage KDF
def EncryptResponse_TwoStage(context, enc, response_aad, response_pt):
  secret = context.Export("[application] response", Nh)
  response_nonce = random(Nh)
  salt = concat(enc, response_nonce)
  prk = Extract(salt, secret)
  aead_key = Expand(prk, "key", Nk)
  aead_nonce = Expand(prk, "nonce", Nn)
  ct = Seal(aead_key, aead_nonce, response_aad, response_pt)
  return (response_nonce, ct)
]]></artwork>
        <t>In the one-stage variant, <tt>secret</tt>, <tt>enc</tt>, and <tt>response_nonce</tt> each have a
fixed length for a given ciphersuite, so their concatenation is unambiguous.</t>
        <t>This example mechanism differs from the example mechanism in <xref target="RFC9180"/> by
incorporating a per-transaction random value <tt>response_nonce</tt>.  Because HPKE
does not provide replay protection, the mechanism in <xref target="RFC9180"/> enabled an
attacker to trigger reuse of a (key, nonce) pair by replaying an HPKE message
under certain application circumstances.  Incorporating per-transaction
entropy ensures that the key and nonce used in AEAD encryption will be distinct
for every invocation of the mechanism.</t>
        <t>In this context, HPKE's limitations with regard to sender authentication become
limits on recipient authentication. In particular, in the Base mode, there is no
authentication of the remote party at all.</t>
      </section>
      <section anchor="metadata">
        <name>Metadata Protection</name>
        <t>The PSK mode of HPKE requires that the recipient
know what key material to use for the sender.  This can be signaled in
applications by sending the PSK ID (<tt>psk_id</tt> above).  However, this value
itself might be considered sensitive, since, in a given application context, it
might identify the sender.</t>
        <t>An application that wishes to protect these metadata values without requiring
further provisioning of keys can use an additional instance of HPKE, using the
unauthenticated Base mode.  Where the application might have sent <tt>(psk_id,
enc, ciphertext)</tt> before, it would now send <tt>(enc2, ciphertext2, enc, ciphertext)</tt>,
where <tt>(enc2, ciphertext2)</tt> represent the encryption of the <tt>psk_id</tt> value.</t>
        <t>The cost of this approach is an additional KEM operation each for the sender and
the recipient.  A potential lower-cost approach (involving only symmetric
operations) would be available if the nonce-protection schemes in <xref target="BNT19"/>
could be extended to cover other metadata.  However, this construction would
require further analysis.</t>
      </section>
    </section>
    <section anchor="message-encoding">
      <name>Message Encoding</name>
      <t>This document does not specify a wire format encoding for HPKE messages. Applications
that adopt HPKE must therefore specify an unambiguous encoding mechanism that includes,
minimally: the encapsulated secret <tt>enc</tt>, ciphertext value(s) (and order if there are
multiple), and any info values that are not implicit. One example of a non-implicit
value is the recipient public key used for encapsulation, which may be needed if a
recipient has more than one public key.</t>
      <t>The AEAD interface used in this document is based on <xref target="RFC5116"/>, which produces and
consumes a single ciphertext value. As discussed in <xref target="RFC5116"/>, this ciphertext value
contains the encrypted plaintext as well as any authentication data, encoded in a manner
described by the individual AEAD scheme. Some implementations are not structured in this
way, instead providing a separate ciphertext and authentication tag. When such
AEAD implementations are used in HPKE implementations, the HPKE implementation must combine
these inputs into a single ciphertext value within <tt>Seal()</tt> and parse them out within
<tt>Open()</tt>, where the parsing details are defined by the AEAD scheme. For example, with
the AES-GCM schemes specified in this document, the GCM authentication tag is placed in
the last Nt bytes of the ciphertext output.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>IANA created three registries as requested in <xref section="11" sectionFormat="of" target="RFC9180"/>:</t>
      <ul spacing="normal">
        <li>
          <t>HPKE KEM Identifiers</t>
        </li>
        <li>
          <t>HPKE KDF Identifiers</t>
        </li>
        <li>
          <t>HPKE AEAD Identifiers</t>
        </li>
      </ul>
      <t>All these registries are in the "Hybrid Public Key Encryption (HPKE)" registry
group, and administered under a Specification Required policy <xref target="RFC8126"/>.</t>
      <t>This document replaces RFC 9180 as the specification for these registries and
provides instructions to the designated experts for these registries.  IANA is
requested to make the following changes, which apply only to the three
registries listed above:</t>
      <ul spacing="normal">
        <li>
          <t>For each of the three registries, replace <xref target="RFC9180"/> with this document as
the reference for the registry itself.</t>
        </li>
        <li>
          <t>For each registry entry, the Reference field identifies the document that
defines the entry.  The entries whose Reference is <xref target="RFC9180"/> are the
reserved entries with value 0x0000 in all three registries and the
Export-only entry 0xFFFF in the "HPKE AEAD Identifiers" registry.  These
entries are now defined by this document, so their Reference is updated to
this document.  Entries that reference other specifications are unchanged.</t>
        </li>
        <li>
          <t>Make the additional per-registry changes described in <xref target="kem-template"/>,
<xref target="kdf-template"/>, and <xref target="aead-template"/>.</t>
        </li>
      </ul>
      <t>Registrations made under RFC 9180 remain otherwise unchanged;
implementations that rely on those codepoints do not need to change.</t>
      <t>RFC Editor: Please replace all instances of "RFC XXXX" in this document with
the RFC number assigned to this document, and remove this note.</t>
      <section anchor="designated-expert-instructions">
        <name>Designated Expert Instructions</name>
        <t>The following instructions apply to all three HPKE registries.</t>
        <t>The DE should verify the following things with regard to a request for
allocation:</t>
        <ul spacing="normal">
          <li>
            <t>The requested entry is not duplicative with any existing registration.</t>
          </li>
          <li>
            <t>The specification defines the algorithm with enough precision that two
independent, interoperable implementations can be produced from it.</t>
          </li>
          <li>
            <t>For a KEM registration, the algorithm meets the security requirements in
<xref target="kem-security"/>, including that the KEM is CCA-secure, the KEM shared
secret is a uniformly random byte string of length <tt>Nsecret</tt>
(<xref target="kem-security"/>), and that the algorithm provides appropriate domain
separation (<xref target="domain-separation"/>).</t>
          </li>
          <li>
            <t>For a KDF registration, the specification meets the requirements in
<xref target="kdf-choice"/> and specifies the input-length bounds required by
<xref target="kdf-input-length"/>.</t>
          </li>
          <li>
            <t>For an AEAD registration, the algorithm meets the requirements in
<xref target="aead-security"/>.</t>
          </li>
          <li>
            <t>The values in the registration (lengths, references, and so on) are internally
consistent and match the cited specification.</t>
          </li>
        </ul>
      </section>
      <section anchor="kem-template">
        <name>KEM Identifiers</name>
        <t>The "HPKE KEM Identifiers" registry lists identifiers for key encapsulation
algorithms defined for use with HPKE.  These identifiers are two-byte values,
so the maximum possible value is 0xFFFF = 65535.</t>
        <t>Template:</t>
        <ul spacing="normal">
          <li>
            <t>Value: The two-byte identifier for the algorithm</t>
          </li>
          <li>
            <t>KEM: The name of the algorithm</t>
          </li>
          <li>
            <t>Nsecret: The length in bytes of a KEM shared secret produced by the algorithm</t>
          </li>
          <li>
            <t>Nenc: The length in bytes of an encoded encapsulated secret produced by the algorithm</t>
          </li>
          <li>
            <t>Npk: The length in bytes of an encoded public key for the algorithm</t>
          </li>
          <li>
            <t>Nsk: The length in bytes of an encoded private key for the algorithm</t>
          </li>
          <li>
            <t>Auth: A boolean indicating if this algorithm provides the <tt>AuthEncap()</tt>/<tt>AuthDecap()</tt> interface defined in <xref target="RFC9180"/>.
This field is retained for compatibility with RFC 9180 and with future
specifications that reintroduce authenticated modes; it is not used by this
document.  For new registrations, the value is <tt>yes</tt> only if the
specification for the KEM defines <tt>AuthEncap()</tt> and <tt>AuthDecap()</tt> for that
KEM, and <tt>no</tt> otherwise.</t>
          </li>
          <li>
            <t>Reference: Where this algorithm is defined</t>
          </li>
        </ul>
        <t>This document adds no entries to this registry.  <xref target="kemid-values"/> lists the
entries defined by <xref target="RFC9180"/>.  Their values are unchanged, except that for
the reserved entry 0x0000, the <tt>Auth</tt> value is changed from "yes" to "N/A" and
the Reference is updated to this document.</t>
        <t>IANA is also requested to add the following note to the registry:</t>
        <ul empty="true">
          <li>
            <t>The Auth column indicates whether the KEM provides the
AuthEncap()/AuthDecap() interface defined in RFC 9180.  This interface is not
used by RFC XXXX.  New registrations use "yes" only if the specification for
the KEM defines AuthEncap() and AuthDecap() for that KEM, and "no" otherwise.</t>
          </li>
        </ul>
      </section>
      <section anchor="kdf-template">
        <name>KDF Identifiers</name>
        <t>The "HPKE KDF Identifiers" registry lists identifiers for key derivation
functions defined for use with HPKE.  These identifiers are two-byte values,
so the maximum possible value is 0xFFFF = 65535.</t>
        <t>Template:</t>
        <ul spacing="normal">
          <li>
            <t>Value: The two-byte identifier for the algorithm</t>
          </li>
          <li>
            <t>KDF: The name of the algorithm</t>
          </li>
          <li>
            <t>Nh: For two-stage KDFs, the output size of the Extract function in
bytes.  For one-stage KDFs, the security strength in bytes, as
defined for the KDF identifier.</t>
          </li>
          <li>
            <t>Two-Stage: Whether the KDF provides Extract and Expand functions (Y)
or only a single-stage Derive function (N).  N/A for reserved
entries.</t>
          </li>
          <li>
            <t>Reference: Where this algorithm is defined</t>
          </li>
        </ul>
        <t>This document adds no entries to this registry.  It adds a <tt>Two-Stage</tt>
column to the registry.  <xref target="kdfid-values"/> lists the entries defined by
<xref target="RFC9180"/>, with the <tt>Two-Stage</tt> value assigned to each of them.  Their other
values are unchanged, except that the Reference of the reserved entry 0x0000
is updated to this document.</t>
        <t>The following existing entries, registered by <xref target="I-D.ietf-hpke-pq"/>, are
one-stage KDFs and are assigned the <tt>Two-Stage</tt> value <tt>N</tt>:</t>
        <ul spacing="normal">
          <li>
            <t>0x0010 (SHAKE128)</t>
          </li>
          <li>
            <t>0x0011 (SHAKE256)</t>
          </li>
          <li>
            <t>0x0012 (TurboSHAKE128)</t>
          </li>
          <li>
            <t>0x0013 (TurboSHAKE256)</t>
          </li>
        </ul>
      </section>
      <section anchor="aead-template">
        <name>AEAD Identifiers</name>
        <t>The "HPKE AEAD Identifiers" registry lists identifiers for authenticated
encryption with associated data (AEAD) algorithms defined for use with HPKE.
These identifiers are two-byte values, so the maximum possible value is
0xFFFF = 65535.</t>
        <t>Template:</t>
        <ul spacing="normal">
          <li>
            <t>Value: The two-byte identifier for the algorithm</t>
          </li>
          <li>
            <t>AEAD: The name of the algorithm</t>
          </li>
          <li>
            <t>Nk: The length in bytes of a key for this algorithm</t>
          </li>
          <li>
            <t>Nn: The length in bytes of a nonce for this algorithm</t>
          </li>
          <li>
            <t>Nt: The length in bytes of an authentication tag for this algorithm</t>
          </li>
          <li>
            <t>Reference: Where this algorithm is defined</t>
          </li>
        </ul>
        <t>This document adds no entries to this registry.  <xref target="aeadid-values"/> lists the
entries defined by <xref target="RFC9180"/>.  Their values are unchanged, except for the
following:</t>
        <ul spacing="normal">
          <li>
            <t>For the Export-only entry 0xFFFF, the <tt>Nk</tt> and <tt>Nn</tt> values are changed from
"N/A" to 0.  This makes the length <tt>Nk + Nn + Nh</tt> of the key schedule output
well defined when a one-stage KDF is used (<xref target="encryption-context"/>).</t>
          </li>
          <li>
            <t>The Reference of the reserved entry 0x0000 and of the Export-only entry
0xFFFF is updated to this document.</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="keyagreement">
          <front>
            <title>Recommendation for pair-wise key-establishment schemes using discrete logarithm cryptography</title>
            <author fullname="Elaine Barker" initials="E." surname="Barker">
              <organization/>
            </author>
            <author fullname="Lily Chen" initials="L." surname="Chen">
              <organization/>
            </author>
            <author fullname="Allen Roginsky" initials="A." surname="Roginsky">
              <organization/>
            </author>
            <author fullname="Apostol Vassilev" initials="A." surname="Vassilev">
              <organization/>
            </author>
            <author fullname="Richard Davis" initials="R." surname="Davis">
              <organization/>
            </author>
            <date month="April" year="2018"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.sp.800-56ar3"/>
          <refcontent>National Institute of Standards and Technology</refcontent>
        </reference>
        <reference anchor="NISTCurves">
          <front>
            <title>Recommendations for Discrete Logarithm-based Cryptography:: Elliptic Curve Domain Parameters</title>
            <author fullname="Lily Chen" initials="L." surname="Chen">
              <organization/>
            </author>
            <author fullname="Dustin Moody" initials="D." surname="Moody">
              <organization/>
            </author>
            <author fullname="Andrew Regenscheid" initials="A." surname="Regenscheid">
              <organization/>
            </author>
            <author fullname="Angela Robinson" initials="A." surname="Robinson">
              <organization/>
            </author>
            <author fullname="Karen Randall" initials="K." surname="Randall">
              <organization/>
            </author>
            <date month="February" year="2023"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.sp.800-186"/>
          <refcontent>National Institute of Standards and Technology</refcontent>
        </reference>
        <reference anchor="GCM">
          <front>
            <title>Recommendation for block cipher modes of operation :: GaloisCounter Mode (GCM) and GMAC</title>
            <author fullname="M J Dworkin" initials="M." surname="Dworkin">
              <organization/>
            </author>
            <date year="2007"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.sp.800-38d"/>
          <refcontent>National Institute of Standards and Technology</refcontent>
        </reference>
        <reference anchor="SECG" target="https://secg.org/sec1-v2.pdf">
          <front>
            <title>Elliptic Curve Cryptography, Standards for Efficient Cryptography Group, ver. 2</title>
            <author>
              <organization/>
            </author>
            <date year="2009"/>
          </front>
        </reference>
        <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="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="RFC5116">
          <front>
            <title>An Interface and Algorithms for Authenticated Encryption</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>This document defines algorithms for Authenticated Encryption with Associated Data (AEAD), and defines a uniform interface and a registry for such algorithms. The interface and registry can be used as an application-independent set of cryptoalgorithm suites. This approach provides advantages in efficiency and security, and promotes the reuse of crypto implementations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5116"/>
          <seriesInfo name="DOI" value="10.17487/RFC5116"/>
        </reference>
        <reference anchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC8439">
          <front>
            <title>ChaCha20 and Poly1305 for IETF Protocols</title>
            <author fullname="Y. Nir" initials="Y." surname="Nir"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <date month="June" year="2018"/>
            <abstract>
              <t>This document defines the ChaCha20 stream cipher as well as the use of the Poly1305 authenticator, both as stand-alone algorithms and as a "combined mode", or Authenticated Encryption with Associated Data (AEAD) algorithm.</t>
              <t>RFC 7539, the predecessor of this document, was meant to serve as a stable reference and an implementation guide. It was a product of the Crypto Forum Research Group (CFRG). This document merges the errata filed against RFC 7539 and adds a little text to the Security Considerations section.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8439"/>
          <seriesInfo name="DOI" value="10.17487/RFC8439"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CS01" target="https://eprint.iacr.org/2001/108">
          <front>
            <title>Design and Analysis of Practical Public-Key Encryption Schemes Secure against Adaptive Chosen Ciphertext Attack</title>
            <author initials="R." surname="Cramer" fullname="Ronald Cramer">
              <organization/>
            </author>
            <author initials="V." surname="Shoup" fullname="Victor Shoup">
              <organization/>
            </author>
            <date year="2001"/>
          </front>
        </reference>
        <reference anchor="HHK06" target="https://eprint.iacr.org/2006/265">
          <front>
            <title>Some (in)sufficient conditions for secure hybrid encryption</title>
            <author initials="J." surname="Herranz" fullname="Javier Herranz">
              <organization/>
            </author>
            <author initials="D." surname="Hofheinz" fullname="Dennis Hofheinz">
              <organization/>
            </author>
            <author initials="E." surname="Kiltz" fullname="Eike Kiltz">
              <organization/>
            </author>
            <date year="2006"/>
          </front>
        </reference>
        <reference anchor="GAP" target="https://link.springer.com/content/pdf/10.1007/3-540-44586-2_8.pdf">
          <front>
            <title>The Gap-Problems - a New Class of Problems for the Security of Cryptographic Schemes</title>
            <author initials="T." surname="Okamoto" fullname="Tatsuaki Okamoto">
              <organization/>
            </author>
            <author initials="D." surname="Pointcheval" fullname="David Pointcheval">
              <organization/>
            </author>
            <date year="2001"/>
          </front>
          <seriesInfo name="ISBN" value="978-3-540-44586-9"/>
        </reference>
        <reference anchor="ANSI">
          <front>
            <title>ANSI X9.63 Public Key Cryptography for the Financial Services Industry -- Key Agreement and Key Transport Using Elliptic Curve Cryptography</title>
            <author>
              <organization>American National Standards Institute</organization>
            </author>
            <date year="2001"/>
          </front>
        </reference>
        <reference anchor="IEEE1363">
          <front>
            <title>IEEE 1363a, Standard Specifications for Public Key Cryptography - Amendment 1 -- Additional Techniques</title>
            <author>
              <organization>Institute of Electrical and Electronics Engineers</organization>
            </author>
            <date year="2004"/>
          </front>
        </reference>
        <reference anchor="ISO">
          <front>
            <title>ISO/IEC 18033-2, Information Technology - Security Techniques - Encryption Algorithms - Part 2 -- Asymmetric Ciphers</title>
            <author>
              <organization>International Organization for Standardization / International Electrotechnical Commission</organization>
            </author>
            <date year="2006"/>
          </front>
        </reference>
        <reference anchor="BN00" target="https://eprint.iacr.org/2000/025">
          <front>
            <title>Authenticated Encryption: Relations among Notions and Analysis of the Generic Composition Paradigm</title>
            <author initials="M." surname="Bellare" fullname="Mihir Bellare">
              <organization>University of California San Diego</organization>
            </author>
            <author initials="C." surname="Namprempre" fullname="Chanathip Namprempre">
              <organization>University of California San Diego</organization>
            </author>
            <date year="2000"/>
          </front>
        </reference>
        <reference anchor="HPKEAnalysis" target="https://eprint.iacr.org/2020/243">
          <front>
            <title>An Analysis of Hybrid Public Key Encryption</title>
            <author initials="B." surname="Lipp" fullname="Benjamin Lipp">
              <organization>Inria Paris</organization>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="ABHKLR20" target="https://eprint.iacr.org/2020/1499">
          <front>
            <title>Analysing the HPKE Standard</title>
            <author initials="J." surname="Alwen" fullname="Joël Alwen">
              <organization>Wickr</organization>
            </author>
            <author initials="B." surname="Blanchet" fullname="Bruno Blanchet">
              <organization>Inria Paris</organization>
            </author>
            <author initials="E." surname="Hauck" fullname="Eduard Hauck">
              <organization>Ruhr-Universität Bochum</organization>
            </author>
            <author initials="E." surname="Kiltz" fullname="Eike Kiltz">
              <organization>Ruhr-Universität Bochum</organization>
            </author>
            <author initials="B." surname="Lipp" fullname="Benjamin Lipp">
              <organization>Inria Paris</organization>
            </author>
            <author initials="D." surname="Riepel" fullname="Doreen Riepel">
              <organization>Ruhr-Universität Bochum</organization>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="MAEA10" target="https://ieeexplore.ieee.org/abstract/document/5604194/">
          <front>
            <title>A Comparison of the Standardized Versions of ECIES</title>
            <author initials="V." surname="Gayoso Martinez" fullname="V. Gayoso Martinez">
              <organization>Applied Physics Institute, CSIC, Madrid, Spain</organization>
            </author>
            <author initials="F." surname="Hernandez Alvarez" fullname="F. Hernandez Alvarez">
              <organization>Applied Physics Institute, CSIC, Madrid, Spain</organization>
            </author>
            <author initials="L." surname="Hernandez Encinas" fullname="L. Hernandez Encinas">
              <organization>Applied Physics Institute, CSIC, Madrid, Spain</organization>
            </author>
            <author initials="C." surname="Sanchez Avila" fullname="C. Sanchez Avila">
              <organization>Polytechnic University, Madrid, Spain</organization>
            </author>
            <date year="2010"/>
          </front>
        </reference>
        <reference anchor="BNT19" target="https://doi.org/10.1007/978-3-030-26948-7_9">
          <front>
            <title>Nonces Are Noticed: AEAD Revisited</title>
            <author initials="M." surname="Bellare" fullname="Mihir Bellare">
              <organization>University of California, San Diego</organization>
            </author>
            <author initials="R." surname="Ng" fullname="Ruth Ng">
              <organization>University of California, San Diego</organization>
            </author>
            <author initials="B." surname="Tackmann" fullname="Björn Tackmann">
              <organization>IBM Research</organization>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="LGR20" target="https://eprint.iacr.org/2020/1491">
          <front>
            <title>Partitioning Oracle Attacks</title>
            <author initials="J." surname="Len" fullname="Julia Len">
              <organization>Cornell Tech</organization>
            </author>
            <author initials="P." surname="Grubbs" fullname="Paul Grubbs">
              <organization>Cornell Tech</organization>
            </author>
            <author initials="T." surname="Ristenpart" fullname="Thomas Ristenpart">
              <organization>Cornell Tech</organization>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="TestVectors" target="https://github.com/hpkewg/hpke/blob/main/test-vectors/test-vectors.json">
          <front>
            <title>HPKE Test Vectors</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="AJKL23" target="https://eprint.iacr.org/2023/1480">
          <front>
            <title>The Pre-Shared Key Modes of HPKE</title>
            <author initials="J." surname="Alwen" fullname="Joël Alwen">
              <organization>AWS-Wickr</organization>
            </author>
            <author initials="J." surname="Janneck" fullname="Jonas Janneck">
              <organization>Ruhr-Universität Bochum</organization>
            </author>
            <author initials="E." surname="Kiltz" fullname="Eike Kiltz">
              <organization>Ruhr-Universität Bochum</organization>
            </author>
            <author initials="B." surname="Lipp" fullname="Benjamin Lipp">
              <organization>Max Planck Institute for Security and Privacy</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="RFC1421">
          <front>
            <title>Privacy Enhancement for Internet Electronic Mail: Part I: Message Encryption and Authentication Procedures</title>
            <author fullname="J. Linn" initials="J." surname="Linn"/>
            <date month="February" year="1993"/>
            <abstract>
              <t>This document defines message encryption and authentication procedures, in order to provide privacy-enhanced mail (PEM) services for electronic mail transfer in the Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1421"/>
          <seriesInfo name="DOI" value="10.17487/RFC1421"/>
        </reference>
        <reference anchor="RFC9420">
          <front>
            <title>The Messaging Layer Security (MLS) Protocol</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
            <author fullname="R. Robert" initials="R." surname="Robert"/>
            <author fullname="J. Millican" initials="J." surname="Millican"/>
            <author fullname="E. Omara" initials="E." surname="Omara"/>
            <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9420"/>
          <seriesInfo name="DOI" value="10.17487/RFC9420"/>
        </reference>
        <reference anchor="RFC9849">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="K. Oku" initials="K." surname="Oku"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="March" year="2026"/>
            <abstract>
              <t>This document describes a mechanism in Transport Layer Security (TLS) for encrypting a message under a server public key.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9849"/>
          <seriesInfo name="DOI" value="10.17487/RFC9849"/>
        </reference>
        <reference anchor="RFC9458">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="January" year="2024"/>
            <abstract>
              <t>This document describes Oblivious HTTP, a protocol for forwarding encrypted HTTP messages. Oblivious HTTP allows a client to make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client, while placing only limited trust in the nodes used to forward the messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9458"/>
          <seriesInfo name="DOI" value="10.17487/RFC9458"/>
        </reference>
        <reference anchor="RFC20">
          <front>
            <title>ASCII format for network interchange</title>
            <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
            <date month="October" year="1969"/>
          </front>
          <seriesInfo name="STD" value="80"/>
          <seriesInfo name="RFC" value="20"/>
          <seriesInfo name="DOI" value="10.17487/RFC20"/>
        </reference>
        <reference anchor="RFC9846">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="July" year="2026"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document obsoletes RFC 8446, which specified TLS 1.3. This document obsoletes RFC 5246 (specifying TLS 1.2) and RFCs 5077, 6961, 7627, and 8422, all of which pertain to TLS 1.2 or earlier, and updates RFCs 5705 and 6066. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9846"/>
          <seriesInfo name="DOI" value="10.17487/RFC9846"/>
        </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="I-D.ietf-hpke-pq">
          <front>
            <title>Post-Quantum and Post-Quantum/Traditional Hybrid Algorithms for HPKE</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Deirdre Connolly" initials="D." surname="Connolly">
              <organization>Selkie Cryptography</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   Updating key exchange and public-key encryption protocols to resist
   attack by quantum computers is a high priority given the possibility
   of "harvest now, decrypt later" attacks.  Hybrid Public Key
   Encryption (HPKE) is a widely-used public key encryption scheme based
   on combining a Key Encapsulation Mechanism (KEM), a Key Derivation
   Function (KDF), and an Authenticated Encryption with Associated Data
   (AEAD) scheme.  In this document, we define KEM algorithms for HPKE
   based on both post-quantum KEMs and hybrid constructions of post-
   quantum KEMs with traditional KEMs, as well as a KDF based on SHA-3
   that is suitable for use with these KEMs.  When used with these
   algorithms, HPKE is resilient with respect to attacks by a quantum
   computer.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-hpke-pq-05"/>
        </reference>
        <reference anchor="RFC7914">
          <front>
            <title>The scrypt Password-Based Key Derivation Function</title>
            <author fullname="C. Percival" initials="C." surname="Percival"/>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>This document specifies the password-based key derivation function scrypt. The function derives one or more secret keys from a secret string. It is based on memory-hard functions, which offer added protection against attacks using custom hardware. The document also provides an ASN.1 schema.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7914"/>
          <seriesInfo name="DOI" value="10.17487/RFC7914"/>
        </reference>
        <reference anchor="RFC9106">
          <front>
            <title>Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications</title>
            <author fullname="A. Biryukov" initials="A." surname="Biryukov"/>
            <author fullname="D. Dinu" initials="D." surname="Dinu"/>
            <author fullname="D. Khovratovich" initials="D." surname="Khovratovich"/>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="September" year="2021"/>
            <abstract>
              <t>This document describes the Argon2 memory-hard function for password hashing and proof-of-work applications. We provide an implementer-oriented description with test vectors. The purpose is to simplify adoption of Argon2 for Internet protocols. This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9106"/>
          <seriesInfo name="DOI" value="10.17487/RFC9106"/>
        </reference>
        <reference anchor="RFC8937">
          <front>
            <title>Randomness Improvements for Security Protocols</title>
            <author fullname="C. Cremers" initials="C." surname="Cremers"/>
            <author fullname="L. Garratt" initials="L." surname="Garratt"/>
            <author fullname="S. Smyshlyaev" initials="S." surname="Smyshlyaev"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="October" year="2020"/>
            <abstract>
              <t>Randomness is a crucial ingredient for Transport Layer Security (TLS) and related security protocols. Weak or predictable "cryptographically secure" pseudorandom number generators (CSPRNGs) can be abused or exploited for malicious purposes. An initial entropy source that seeds a CSPRNG might be weak or broken as well, which can also lead to critical and systemic security problems. This document describes a way for security protocol implementations to augment their CSPRNGs using long-term private keys. This improves randomness from broken or otherwise subverted CSPRNGs.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8937"/>
          <seriesInfo name="DOI" value="10.17487/RFC8937"/>
        </reference>
        <reference anchor="RFC8467">
          <front>
            <title>Padding Policies for Extension Mechanisms for DNS (EDNS(0))</title>
            <author fullname="A. Mayrhofer" initials="A." surname="Mayrhofer"/>
            <date month="October" year="2018"/>
            <abstract>
              <t>RFC 7830 specifies the "Padding" option for Extension Mechanisms for DNS (EDNS(0)) but does not specify the actual padding length for specific applications. This memo lists the possible options ("padding policies"), discusses the implications of each option, and provides a recommended (experimental) option.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8467"/>
          <seriesInfo name="DOI" value="10.17487/RFC8467"/>
        </reference>
      </references>
    </references>
    <?line 2071?>

<section anchor="differences-from-rfc-9180">
      <name>Differences from RFC 9180</name>
      <t>This specification is intended to be backwards-compatible with RFC 9180, in the
sense that any behavior specified in both this document and RFC 9180 should
specify identical behavior for any functionality that they both specify.</t>
      <t>Within that constraint, the following list summarizes the major changes from RFC
9180:</t>
      <ul spacing="normal">
        <li>
          <t>Incorporated fixes for all valid errata on RFC 9180.</t>
        </li>
        <li>
          <t>Updated the IANA Considerations section to refer to existing registries.</t>
        </li>
        <li>
          <t>Added a framework for single-stage KDFs.</t>
        </li>
        <li>
          <t>Removed the Auth and AuthPSK modes.</t>
        </li>
        <li>
          <t>Extended the discussion of replay to cover considerations related to exported
secrets.</t>
        </li>
        <li>
          <t>Added a requirement that applications not derive AEAD (key, nonce) pairs from
exported secrets without fresh per-derivation input (<xref target="hpke-export"/>), and
updated the bidirectional encryption example (<xref target="bidirectional"/>) to
incorporate a fresh recipient-provided nonce.  Applications built on the
example in <xref section="9.8" sectionFormat="of" target="RFC9180"/> do not meet this requirement.</t>
        </li>
        <li>
          <t>Changed the guidance on <tt>info</tt> lengths (<xref target="kdf-input-length"/>).  RFC 9180
RECOMMENDED a limit of 64 bytes for all application-provided inputs; this document requires implementations to
support <tt>info</tt> values of at least 64 bytes and recommends support for at
least 16384 bytes.  Implementations that followed the RFC 9180 recommendation
may not meet the new recommendation.</t>
        </li>
      </ul>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to thank Joël Alwen, Jean-Philippe Aumasson, David
Benjamin, Benjamin Beurdouche, Bruno Blanchet, Brian Campbell, Deirdre Connolly,
Deb Cooley, Frank Denis, Stephen Farrell, Scott Fluhrer, Eduard Hauck, Scott
Hollenbeck, Kevin Jacobs, Jonas Janneck, Michael B. Jones, Burt Kaliski, Eike
Kiltz, Samuel Lee, Julia Len, Ilari Liusvaara, Rohan Mahy, John Mattsson, Cory
Francis Myers, Christopher Patton, Tommy Pauly, Eric Rescorla, Doreen Riepel,
Raphael Robert, Michael Rosenberg, Yaroslav Rosomakho, Rich Salz, Martin
Schanzenbach, David Schinazi, Michael Scott, Filip Skokan, Nick Sullivan, Martin
Thomson, Steven Valdez, Filippo Valsorda, Riad Wahby, Weijun Wang, Bas Westerbaan,
and other contributors in the CFRG and HPKE WG for helpful feedback that greatly
improved this document.</t>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>Each section below contains test vectors for a single HPKE ciphersuite and
contains the following values:</t>
      <ol spacing="normal" type="1"><li>
          <t>Configuration information and private key material: This includes the <tt>mode</tt>,
<tt>info</tt> string, HPKE ciphersuite identifiers (<tt>kem_id</tt>, <tt>kdf_id</tt>, <tt>aead_id</tt>),
and the recipient's key material. Recipient key pairs are generated as <tt>(skR,
pkR) = DeriveKeyPair(ikmR)</tt>.  Key pairs are written in their serialized form
(as produced by <tt>SerializePublicKey</tt> and <tt>SerializePrivateKey</tt>).  For the PSK
mode, the shared PSK and PSK identifier are also included.</t>
        </li>
        <li>
          <t>Context creation intermediate values and outputs: This includes the
randomness <tt>ikmE</tt> used for deterministic encapsulation,
KEM outputs <tt>enc</tt> and <tt>shared_secret</tt> used to create the context, along
with intermediate values <tt>key_schedule_context</tt> and <tt>secret</tt> computed
in the KeySchedule function in <xref target="encryption-context"/>. The outputs
include the context values <tt>key</tt>, <tt>base_nonce</tt>, and <tt>exporter_secret</tt>.
For DHKEM test vectors, the ephemeral key pair (<tt>skEm</tt>, <tt>pkEm</tt>) is also
provided.</t>
        </li>
        <li>
          <t>Encryption test vectors: A fixed plaintext message is encrypted using
different sequence numbers and AAD values using the context computed in (2).
Each test vector lists the sequence number and corresponding nonce computed
with <tt>base_nonce</tt>, the plaintext message <tt>pt</tt>, AAD <tt>aad</tt>, and output
ciphertext <tt>ct</tt>.</t>
        </li>
        <li>
          <t>Export test vectors: Several exported values of the same length with differing
context parameters are computed using the context computed in (2). Each test
vector lists the <tt>exporter_context</tt>, output length <tt>L</tt>, and resulting export
value.</t>
        </li>
      </ol>
      <t>These test vectors are also available in JSON format at <xref target="TestVectors"/>.</t>
      <section anchor="deterministic-encapsulation">
        <name>Deterministic Encapsulation</name>
        <t>The test vectors can support testing of encapsulation as well as decapsulation
if the KEM being tested provides a derandomized encapsulation function:</t>
        <dl>
          <dt><tt>EncapDerand(pkR, randomness)</tt></dt>
          <dd>
            <t>Deterministic algorithm to generate an ephemeral, fixed-length
shared secret and a fixed-length encapsulation of that secret (also known as
the KEM ciphertext) that can be decapsulated by the holder of the private
key corresponding to <tt>pkR</tt>. This function can raise an <tt>EncapError</tt> on
encapsulation failure.</t>
          </dd>
        </dl>
        <t>For DHKEM, this function simply replaces <tt>GenerateKeyPair()</tt> with
<tt>DeriveKeyPair()</tt> in the generation of the ephemeral key pair:</t>
        <artwork><![CDATA[
def EncapDerand(pkR, randomness):
  skE, pkE = DeriveKeyPair(randomness)
  dh = DH(skE, pkR)
  enc = SerializePublicKey(pkE)

  pkRm = SerializePublicKey(pkR)
  kem_context = concat(enc, pkRm)

  shared_secret = ExtractAndExpand(dh, kem_context)
  return shared_secret, enc
]]></artwork>
        <t>The input <tt>ikmE</tt> in the context creation inputs is the <tt>randomness</tt> input to
<tt>EncapDerand()</tt>.</t>
      </section>
      <section anchor="dhkemx25519-hkdf-sha256-hkdf-sha256-aes-128-gcm">
        <name>DHKEM(X25519, HKDF-SHA256), HKDF-SHA256, AES-128-GCM</name>
        <section anchor="base-setup-information">
          <name>Base Setup Information</name>
          <artwork><![CDATA[
mode: 0
kem_id: 32
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
ikmE:
7268600d403fce431561aef583ee1613527cff655c1343f29812e66706df3234
pkEm:
37fda3567bdbd628e88668c3c8d7e97d1d1253b6d4ea6d44c150f741f1bf4431
skEm:
52c4a758a802cd8b936eceea314432798d5baf2d7e9235dc084ab1b9cfa2f736
ikmR:
6db9df30aa07dd42ee5e8181afdb977e538f5e1fec8a06223f33f7013e525037
pkRm:
3948cfe0ad1ddb695d780e59077195da6c56506b027329794ab02bca80815c4d
skRm:
4612c550263fc8ad58375df3f557aac531d26850903e55a9f23f21d8534e8ac8
enc:
37fda3567bdbd628e88668c3c8d7e97d1d1253b6d4ea6d44c150f741f1bf4431
shared_secret:
fe0e18c9f024ce43799ae393c7e8fe8fce9d218875e8227b0187c04e7d2ea1fc
key_schedule_context: 00725611c9d98c07c03f60095cd32d400d8347d45ed670
97bbad50fc56da742d07cb6cffde367bb0565ba28bb02c90744a20f5ef37f3052352
6106f637abb05449
secret:
12fff91991e93b48de37e7daddb52981084bd8aa64289c3788471d9a9712f397
key: 4531685d41d65f03dc48f6b8302c05b0
base_nonce: 56d890e5accaaf011cff4b7d
exporter_secret:
45ff1c2e220db587171952c0592d5f5ebe103f1561a2614e38f2ffd47e99e3f8
]]></artwork>
          <section anchor="encryptions">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 56d890e5accaaf011cff4b7d
ct: f938558b5d72f1a23810b4be2ab4f84331acc02fc97babc53a52ae8218a355a9
6d8770ac83d07bea87e13c512a

sequence number: 1
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 56d890e5accaaf011cff4b7c
ct: af2d7e9ac9ae7e270f46ba1f975be53c09f8d875bdc8535458c2494e8a6eab25
1c03d0c22a56b8ca42c2063b84

sequence number: 2
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 56d890e5accaaf011cff4b7f
ct: 498dfcabd92e8acedc281e85af1cb4e3e31c7dc394a1ca20e173cb7251649158
8d96a19ad4a683518973dcc180

sequence number: 4
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 56d890e5accaaf011cff4b79
ct: 583bd32bc67a5994bb8ceaca813d369bca7b2a42408cddef5e22f880b631215a
09fc0012bc69fccaa251c0246d

sequence number: 255
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323535
nonce: 56d890e5accaaf011cff4b82
ct: 7175db9717964058640a3a11fb9007941a5d1757fda1a6935c805c21af32505b
f106deefec4a49ac38d71c9e0a

sequence number: 256
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323536
nonce: 56d890e5accaaf011cff4a7d
ct: 957f9800542b0b8891badb026d79cc54597cb2d225b54c00c5238c25d05c30e3
fbeda97d2e0e1aba483a2df9f2
]]></artwork>
          </section>
          <section anchor="exported-values">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
3853fe2b4035195a573ffc53856e77058e15d9ea064de3e59f4961d0095250ee

exporter_context: 00
L: 32
exported_value:
2e8f0b54673c7029649d4eb9d5e33bf1872cf76d623ff164ac185da9e88c21a5

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
e9e43065102c3836401bed8c3c3c75ae46be1639869391d62c61f1ec7af54931
]]></artwork>
          </section>
        </section>
        <section anchor="psk-setup-information">
          <name>PSK Setup Information</name>
          <artwork><![CDATA[
mode: 1
kem_id: 32
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
ikmE:
78628c354e46f3e169bd231be7b2ff1c77aa302460a26dbfa15515684c00130b
pkEm:
0ad0950d9fb9588e59690b74f1237ecdf1d775cd60be2eca57af5a4b0471c91b
skEm:
463426a9ffb42bb17dbe6044b9abd1d4e4d95f9041cef0e99d7824eef2b6f588
ikmR:
d4a09d09f575fef425905d2ab396c1449141463f698f8efdb7accfaff8995098
pkRm:
9fed7e8c17387560e92cc6462a68049657246a09bfa8ade7aefe589672016366
skRm:
c5eb01eb457fe6c6f57577c5413b931550a162c71a03ac8d196babbd4e5ce0fd
psk:
0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc:
0ad0950d9fb9588e59690b74f1237ecdf1d775cd60be2eca57af5a4b0471c91b
shared_secret:
727699f009ffe3c076315019c69648366b69171439bd7dd0807743bde76986cd
key_schedule_context: 01e78d5cf6190d275863411ff5edd0dece5d39fa48e04e
ec1ed9b71be34729d18ccb6cffde367bb0565ba28bb02c90744a20f5ef37f3052352
6106f637abb05449
secret:
3728ab0b024b383b0381e432b47cced1496d2516957a76e2a9f5c8cb947afca4
key: 15026dba546e3ae05836fc7de5a7bb26
base_nonce: 9518635eba129d5ce0914555
exporter_secret:
3d76025dbbedc49448ec3f9080a1abab6b06e91c0b11ad23c912f043a0ee7655
]]></artwork>
          <section anchor="encryptions-1">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 9518635eba129d5ce0914555
ct: e52c6fed7f758d0cf7145689f21bc1be6ec9ea097fef4e959440012f4feb73fb
611b946199e681f4cfc34db8ea

sequence number: 1
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 9518635eba129d5ce0914554
ct: 49f3b19b28a9ea9f43e8c71204c00d4a490ee7f61387b6719db765e948123b45
b61633ef059ba22cd62437c8ba

sequence number: 2
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 9518635eba129d5ce0914557
ct: 257ca6a08473dc851fde45afd598cc83e326ddd0abe1ef23baa3baa4dd8cde99
fce2c1e8ce687b0b47ead1adc9

sequence number: 4
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 9518635eba129d5ce0914551
ct: a71d73a2cd8128fcccbd328b9684d70096e073b59b40b55e6419c9c68ae21069
c847e2a70f5d8fb821ce3dfb1c

sequence number: 255
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323535
nonce: 9518635eba129d5ce09145aa
ct: 55f84b030b7f7197f7d7d552365b6b932df5ec1abacd30241cb4bc4ccea27bd2
b518766adfa0fb1b71170e9392

sequence number: 256
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323536
nonce: 9518635eba129d5ce0914455
ct: c5bf246d4a790a12dcc9eed5eae525081e6fb541d5849e9ce8abd92a3bc15517
76bea16b4a518f23e237c14b59
]]></artwork>
          </section>
          <section anchor="exported-values-1">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
dff17af354c8b41673567db6259fd6029967b4e1aad13023c2ae5df8f4f43bf6

exporter_context: 00
L: 32
exported_value:
6a847261d8207fe596befb52928463881ab493da345b10e1dcc645e3b94e2d95

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
8aff52b45a1be3a734bc7a41e20b4e055ad4c4d22104b0c20285a7c4302401cd
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="dhkemx25519-hkdf-sha256-hkdf-sha256-chacha20poly1305">
        <name>DHKEM(X25519, HKDF-SHA256), HKDF-SHA256, ChaCha20Poly1305</name>
        <section anchor="base-setup-information-1">
          <name>Base Setup Information</name>
          <artwork><![CDATA[
mode: 0
kem_id: 32
kdf_id: 1
aead_id: 3
info: 4f6465206f6e2061204772656369616e2055726e
ikmE:
909a9b35d3dc4713a5e72a4da274b55d3d3821a37e5d099e74a647db583a904b
pkEm:
1afa08d3dec047a643885163f1180476fa7ddb54c6a8029ea33f95796bf2ac4a
skEm:
f4ec9b33b792c372c1d2c2063507b684ef925b8c75a42dbcbf57d63ccd381600
ikmR:
1ac01f181fdf9f352797655161c58b75c656a6cc2716dcb66372da835542e1df
pkRm:
4310ee97d88cc1f088a5576c77ab0cf5c3ac797f3d95139c6c84b5429c59662a
skRm:
8057991eef8f1f1af18f4a9491d16a1ce333f695d4db8e38da75975c4478e0fb
enc:
1afa08d3dec047a643885163f1180476fa7ddb54c6a8029ea33f95796bf2ac4a
shared_secret:
0bbe78490412b4bbea4812666f7916932b828bba79942424abb65244930d69a7
key_schedule_context: 00431df6cd95e11ff49d7013563baf7f11588c75a6611e
e2a4404a49306ae4cfc5b69c5718a60cc5876c358d3f7fc31ddb598503f67be58ea1
e798c0bb19eb9796
secret:
5b9cd775e64b437a2335cf499361b2e0d5e444d5cb41a8a53336d8fe402282c6
key:
ad2744de8e17f4ebba575b3f5f5a8fa1f69c2a07f6e7500bc60ca6e3e3ec1c91
base_nonce: 5c4d98150661b848853b547f
exporter_secret:
a3b010d4994890e2c6968a36f64470d3c824c8f5029942feb11e7a74b2921922
]]></artwork>
          <section anchor="encryptions-2">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 5c4d98150661b848853b547f
ct: 1c5250d8034ec2b784ba2cfd69dbdb8af406cfe3ff938e131f0def8c8b60b4db
21993c62ce81883d2dd1b51a28

sequence number: 1
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 5c4d98150661b848853b547e
ct: 6b53c051e4199c518de79594e1c4ab18b96f081549d45ce015be002090bb119e
85285337cc95ba5f59992dc98c

sequence number: 2
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 5c4d98150661b848853b547d
ct: 71146bd6795ccc9c49ce25dda112a48f202ad220559502cef1f34271e0cb4b02
b4f10ecac6f48c32f878fae86b

sequence number: 4
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 5c4d98150661b848853b547b
ct: 63357a2aa291f5a4e5f27db6baa2af8cf77427c7c1a909e0b37214dd47db122b
b153495ff0b02e9e54a50dbe16

sequence number: 255
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323535
nonce: 5c4d98150661b848853b5480
ct: 18ab939d63ddec9f6ac2b60d61d36a7375d2070c9b683861110757062c52b888
0a5f6b3936da9cd6c23ef2a95c

sequence number: 256
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323536
nonce: 5c4d98150661b848853b557f
ct: 7a4a13e9ef23978e2c520fd4d2e757514ae160cd0cd05e556ef692370ca53076
214c0c40d4c728d6ed9e727a5b
]]></artwork>
          </section>
          <section anchor="exported-values-2">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
4bbd6243b8bb54cec311fac9df81841b6fd61f56538a775e7c80a9f40160606e

exporter_context: 00
L: 32
exported_value:
8c1df14732580e5501b00f82b10a1647b40713191b7c1240ac80e2b68808ba69

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
5acb09211139c43b3090489a9da433e8a30ee7188ba8b0a9a1ccf0c229283e53
]]></artwork>
          </section>
        </section>
        <section anchor="psk-setup-information-1">
          <name>PSK Setup Information</name>
          <artwork><![CDATA[
mode: 1
kem_id: 32
kdf_id: 1
aead_id: 3
info: 4f6465206f6e2061204772656369616e2055726e
ikmE:
35706a0b09fb26fb45c39c2f5079c709c7cf98e43afa973f14d88ece7e29c2e3
pkEm:
2261299c3f40a9afc133b969a97f05e95be2c514e54f3de26cbe5644ac735b04
skEm:
0c35fdf49df7aa01cd330049332c40411ebba36e0c718ebc3edf5845795f6321
ikmR:
26b923eade72941c8a85b09986cdfa3f1296852261adedc52d58d2930269812b
pkRm:
13640af826b722fc04feaa4de2f28fbd5ecc03623b317834e7ff4120dbe73062
skRm:
77d114e0212be51cb1d76fa99dd41cfd4d0166b08caa09074430a6c59ef17879
psk:
0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc:
2261299c3f40a9afc133b969a97f05e95be2c514e54f3de26cbe5644ac735b04
shared_secret:
4be079c5e77779d0215b3f689595d59e3e9b0455d55662d1f3666ec606e50ea7
key_schedule_context: 016870c4c76ca38ae43efbec0f2377d109499d7ce73f4a
9e1ec37f21d3d063b97cb69c5718a60cc5876c358d3f7fc31ddb598503f67be58ea1
e798c0bb19eb9796
secret:
16974354c497c9bd24c000ceed693779b604f1944975b18c442d373663f4a8cc
key:
600d2fdb0313a7e5c86a9ce9221cd95bed069862421744cfb4ab9d7203a9c019
base_nonce: 112e0465562045b7368653e7
exporter_secret:
73b506dc8b6b4269027f80b0362def5cbb57ee50eed0c2873dac9181f453c5ac
]]></artwork>
          <section anchor="encryptions-3">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 112e0465562045b7368653e7
ct: 4a177f9c0d6f15cfdf533fb65bf84aecdc6ab16b8b85b4cf65a370e07fc1d78d
28fb073214525276f4a89608ff

sequence number: 1
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 112e0465562045b7368653e6
ct: 5c3cabae2f0b3e124d8d864c116fd8f20f3f56fda988c3573b40b09997fd6c76
9e77c8eda6cda4f947f5b704a8

sequence number: 2
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 112e0465562045b7368653e5
ct: 14958900b44bdae9cbe5a528bf933c5c990dbb8e282e6e495adf8205d19da9eb
270e3a6f1e0613ab7e757962a4

sequence number: 4
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 112e0465562045b7368653e3
ct: c2a7bc09ddb853cf2effb6e8d058e346f7fe0fb3476528c80db6b698415c5f8c
50b68a9a355609e96d2117f8d3

sequence number: 255
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323535
nonce: 112e0465562045b736865318
ct: 2414d0788e4bc39a59a26d7bd5d78e111c317d44c37bd5a4c2a1235f2ddc2085
c487d406490e75210c958724a7

sequence number: 256
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323536
nonce: 112e0465562045b7368652e7
ct: c567ae1c3f0f75abe1dd9e4532b422600ed4a6e5b9484dafb1e43ab9f5fd662b
28c00e2e81d3cde955dae7e218
]]></artwork>
          </section>
          <section anchor="exported-values-3">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
813c1bfc516c99076ae0f466671f0ba5ff244a41699f7b2417e4c59d46d39f40

exporter_context: 00
L: 32
exported_value:
2745cf3d5bb65c333658732954ee7af49eb895ce77f8022873a62a13c94cb4e1

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
ad40e3ae14f21c99bfdebc20ae14ab86f4ca2dc9a4799d200f43a25f99fa78ae
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="dhkemp-256-hkdf-sha256-hkdf-sha256-aes-128-gcm">
        <name>DHKEM(P-256, HKDF-SHA256), HKDF-SHA256, AES-128-GCM</name>
        <section anchor="base-setup-information-2">
          <name>Base Setup Information</name>
          <artwork><![CDATA[
mode: 0
kem_id: 16
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
ikmE:
4270e54ffd08d79d5928020af4686d8f6b7d35dbe470265f1f5aa22816ce860e
pkEm: 04a92719c6195d5085104f469a8b9814d5838ff72b60501e2c4466e5e67b32
5ac98536d7b61a1af4b78e5b7f951c0900be863c403ce65c9bfcb9382657222d18c4
skEm:
4995788ef4b9d6132b249ce59a77281493eb39af373d236a1fe415cb0c2d7beb
ikmR:
668b37171f1072f3cf12ea8a236a45df23fc13b82af3609ad1e354f6ef817550
pkRm: 04fe8c19ce0905191ebc298a9245792531f26f0cece2460639e8bc39cb7f70
6a826a779b4cf969b8a0e539c7f62fb3d30ad6aa8f80e30f1d128aafd68a2ce72ea0
skRm:
f3ce7fdae57e1a310d87f1ebbde6f328be0a99cdbcadf4d6589cf29de4b8ffd2
enc: 04a92719c6195d5085104f469a8b9814d5838ff72b60501e2c4466e5e67b325
ac98536d7b61a1af4b78e5b7f951c0900be863c403ce65c9bfcb9382657222d18c4
shared_secret:
c0d26aeab536609a572b07695d933b589dcf363ff9d93c93adea537aeabb8cb8
key_schedule_context: 00b88d4e6d91759e65e87c470e8b9141113e9ad5f0c8ce
efc1e088c82e6980500798e486f9c9c09c9b5c753ac72d6005de254c607d1b534ed1
1d493ae1c1d9ac85
secret:
2eb7b6bf138f6b5aff857414a058a3f1750054a9ba1f72c2cf0684a6f20b10e1
key: 868c066ef58aae6dc589b6cfdd18f97e
base_nonce: 4e0bc5018beba4bf004cca59
exporter_secret:
14ad94af484a7ad3ef40e9f3be99ecc6fa9036df9d4920548424df127ee0d99f
]]></artwork>
          <section anchor="encryptions-4">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 4e0bc5018beba4bf004cca59
ct: 5ad590bb8baa577f8619db35a36311226a896e7342a6d836d8b7bcd2f20b6c7f
9076ac232e3ab2523f39513434

sequence number: 1
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 4e0bc5018beba4bf004cca58
ct: fa6f037b47fc21826b610172ca9637e82d6e5801eb31cbd3748271affd4ecb06
646e0329cbdf3c3cd655b28e82

sequence number: 2
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 4e0bc5018beba4bf004cca5b
ct: 895cabfac50ce6c6eb02ffe6c048bf53b7f7be9a91fc559402cbc5b8dcaeb52b
2ccc93e466c28fb55fed7a7fec

sequence number: 4
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 4e0bc5018beba4bf004cca5d
ct: 8787491ee8df99bc99a246c4b3216d3d57ab5076e18fa27133f520703bc70ec9
99dd36ce042e44f0c3169a6a8f

sequence number: 255
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323535
nonce: 4e0bc5018beba4bf004ccaa6
ct: 2ad71c85bf3f45c6eca301426289854b31448bcf8a8ccb1deef3ebd87f60848a
a53c538c30a4dac71d619ee2cd

sequence number: 256
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323536
nonce: 4e0bc5018beba4bf004ccb59
ct: 10f179686aa2caec1758c8e554513f16472bd0a11e2a907dde0b212cbe87d74f
367f8ffe5e41cd3e9962a6afb2
]]></artwork>
          </section>
          <section anchor="exported-values-4">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
5e9bc3d236e1911d95e65b576a8a86d478fb827e8bdfe77b741b289890490d4d

exporter_context: 00
L: 32
exported_value:
6cff87658931bda83dc857e6353efe4987a201b849658d9b047aab4cf216e796

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
d8f1ea7942adbba7412c6d431c62d01371ea476b823eb697e1f6e6cae1dab85a
]]></artwork>
          </section>
        </section>
        <section anchor="psk-setup-information-2">
          <name>PSK Setup Information</name>
          <artwork><![CDATA[
mode: 1
kem_id: 16
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
ikmE:
2afa611d8b1a7b321c761b483b6a053579afa4f767450d3ad0f84a39fda587a6
pkEm: 04305d35563527bce037773d79a13deabed0e8e7cde61eecee403496959e89
e4d0ca701726696d1485137ccb5341b3c1c7aaee90a4a02449725e744b1193b53b5f
skEm:
57427244f6cc016cddf1c19c8973b4060aa13579b4c067fd5d93a5d74e32a90f
ikmR:
d42ef874c1913d9568c9405407c805baddaffd0898a00f1e84e154fa787b2429
pkRm: 040d97419ae99f13007a93996648b2674e5260a8ebd2b822e84899cd52d874
46ea394ca76223b76639eccdf00e1967db10ade37db4e7db476261fcc8df97c5ffd1
skRm:
438d8bcef33b89e0e9ae5eb0957c353c25a94584b0dd59c991372a75b43cb661
psk:
0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: 04305d35563527bce037773d79a13deabed0e8e7cde61eecee403496959e89e
4d0ca701726696d1485137ccb5341b3c1c7aaee90a4a02449725e744b1193b53b5f
shared_secret:
2e783ad86a1beae03b5749e0f3f5e9bb19cb7eb382f2fb2dd64c99f15ae0661b
key_schedule_context: 01b873cdf2dff4c1434988053b7a775e980dd2039ea24f
950b26b056ccedcb933198e486f9c9c09c9b5c753ac72d6005de254c607d1b534ed1
1d493ae1c1d9ac85
secret:
f2f534e55931c62eeb2188c1f53450354a725183937e68c85e68d6b267504d26
key: 55d9eb9d26911d4c514a990fa8d57048
base_nonce: b595dc6b2d7e2ed23af529b1
exporter_secret:
895a723a1eab809804973a53c0ee18ece29b25a7555a4808277ad2651d66d705
]]></artwork>
          <section anchor="encryptions-5">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: b595dc6b2d7e2ed23af529b1
ct: 90c4deb5b75318530194e4bb62f890b019b1397bbf9d0d6eb918890e1fb2be1a
c2603193b60a49c2126b75d0eb

sequence number: 1
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: b595dc6b2d7e2ed23af529b0
ct: 9e223384a3620f4a75b5a52f546b7262d8826dea18db5a365feb8b997180b22d
72dc1287f7089a1073a7102c27

sequence number: 2
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: b595dc6b2d7e2ed23af529b3
ct: adf9f6000773035023be7d415e13f84c1cb32a24339a32eb81df02be9ddc6abc
880dd81cceb7c1d0c7781465b2

sequence number: 4
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: b595dc6b2d7e2ed23af529b5
ct: 1f4cc9b7013d65511b1f69c050b7bd8bbd5a5c16ece82b238fec4f30ba2400e7
ca8ee482ac5253cffb5c3dc577

sequence number: 255
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323535
nonce: b595dc6b2d7e2ed23af5294e
ct: cdc541253111ed7a424eea5134dc14fc5e8293ab3b537668b8656789628e4589
4e5bb873c968e3b7cdcbb654a4

sequence number: 256
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323536
nonce: b595dc6b2d7e2ed23af528b1
ct: faf985208858b1253b97b60aecd28bc18737b58d1242370e7703ec33b73a4c31
a1afee300e349adef9015bbbfd
]]></artwork>
          </section>
          <section anchor="exported-values-5">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
a115a59bf4dd8dc49332d6a0093af8efca1bcbfd3627d850173f5c4a55d0c185

exporter_context: 00
L: 32
exported_value:
4517eaede0669b16aac7c92d5762dd459c301fa10e02237cd5aeb9be969430c4

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
164e02144d44b607a7722e58b0f4156e67c0c2874d74cf71da6ca48a4cbdc5e0
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="dhkemp-256-hkdf-sha256-hkdf-sha512-aes-128-gcm">
        <name>DHKEM(P-256, HKDF-SHA256), HKDF-SHA512, AES-128-GCM</name>
        <section anchor="base-setup-information-3">
          <name>Base Setup Information</name>
          <artwork><![CDATA[
mode: 0
kem_id: 16
kdf_id: 3
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
ikmE:
4ab11a9dd78c39668f7038f921ffc0993b368171d3ddde8031501ee1e08c4c9a
pkEm: 0493ed86735bdfb978cc055c98b45695ad7ce61ce748f4dd63c525a3b8d53a
15565c6897888070070c1579db1f86aaa56deb8297e64db7e8924e72866f9a472580
skEm:
2292bf14bb6e15b8c81a0f45b7a6e93e32d830e48cca702e0affcfb4d07e1b5c
ikmR:
ea9ff7cc5b2705b188841c7ace169290ff312a9cb31467784ca92d7a2e6e1be8
pkRm: 04085aa5b665dc3826f9650ccbcc471be268c8ada866422f739e2d531d4a88
18a9466bc6b449357096232919ec4fe9070ccbac4aac30f4a1a53efcf7af90610edd
skRm:
3ac8530ad1b01885960fab38cf3cdc4f7aef121eaa239f222623614b4079fb38
enc: 0493ed86735bdfb978cc055c98b45695ad7ce61ce748f4dd63c525a3b8d53a1
5565c6897888070070c1579db1f86aaa56deb8297e64db7e8924e72866f9a472580
shared_secret:
02f584736390fc93f5b4ad039826a3fa08e9911bd1215a3db8e8791ba533cafd
key_schedule_context: 005b8a3617af7789ee716e7911c7e77f84cdc4cc46e60f
b7e19e4059f9aeadc00585e26874d1ddde76e551a7679cd47168c466f6e1f705cc93
74c192778a34fcd5ca221d77e229a9d11b654de7942d685069c633b2362ce3b3d8ea
4891c9a2a87a4eb7cdb289ba5e2ecbf8cd2c8498bb4a383dc021454d70d46fcbbad1
252ef4f9
secret: 0c7acdab61693f936c4c1256c78e7be30eebfe466812f9cc49f0b58dc970
328dfc03ea359be0250a471b1635a193d2dfa8cb23c90aa2e25025b892a725353eeb
key: 090ca96e5f8aa02b69fac360da50ddf9
base_nonce: 9c995e621bf9a20c5ca45546
exporter_secret: 4a7abb2ac43e6553f129b2c5750a7e82d149a76ed56dc342d7b
ca61e26d494f4855dff0d0165f27ce57756f7f16baca006539bb8e4518987ba61048
0ac03efa8
]]></artwork>
          <section anchor="encryptions-6">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 9c995e621bf9a20c5ca45546
ct: d3cf4984931484a080f74c1bb2a6782700dc1fef9abe8442e44a6f09044c8890
7200b332003543754eb51917ba

sequence number: 1
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 9c995e621bf9a20c5ca45547
ct: d14414555a47269dfead9fbf26abb303365e40709a4ed16eaefe1f2070f1ddeb
1bdd94d9e41186f124e0acc62d

sequence number: 2
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 9c995e621bf9a20c5ca45544
ct: 9bba136cade5c4069707ba91a61932e2cbedda2d9c7bdc33515aa01dd0e0f7e9
d3579bf4016dec37da4aafa800

sequence number: 4
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 9c995e621bf9a20c5ca45542
ct: a531c0655342be013bf32112951f8df1da643602f1866749519f5dcb09cc6843
2579de305a77e6864e862a7600

sequence number: 255
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323535
nonce: 9c995e621bf9a20c5ca455b9
ct: be5da649469efbad0fb950366a82a73fefeda5f652ec7d3731fac6c4ffa21a70
04d2ab8a04e13621bd3629547d

sequence number: 256
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323536
nonce: 9c995e621bf9a20c5ca45446
ct: 62092672f5328a0dde095e57435edf7457ace60b26ee44c9291110ec135cb0e1
4b85594e4fea11247d937deb62
]]></artwork>
          </section>
          <section anchor="exported-values-6">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
a32186b8946f61aeead1c093fe614945f85833b165b28c46bf271abf16b57208

exporter_context: 00
L: 32
exported_value:
84998b304a0ea2f11809398755f0abd5f9d2c141d1822def79dd15c194803c2a

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
93fb9411430b2cfa2cf0bed448c46922a5be9beff20e2e621df7e4655852edbc
]]></artwork>
          </section>
        </section>
        <section anchor="psk-setup-information-3">
          <name>PSK Setup Information</name>
          <artwork><![CDATA[
mode: 1
kem_id: 16
kdf_id: 3
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
ikmE:
c11d883d6587f911d2ddbc2a0859d5b42fb13bf2c8e89ef408a25564893856f5
pkEm: 04a307934180ad5287f95525fe5bc6244285d7273c15e061f0f2efb211c350
57f3079f6e0abae200992610b25f48b63aacfcb669106ddee8aa023feed301901371
skEm:
a5901ff7d6931959c2755382ea40a4869b1dec3694ed3b009dda2d77dd488f18
ikmR:
75bfc2a3a3541170a54c0b06444e358d0ee2b4fb78a401fd399a47a33723b700
pkRm: 043f5266fba0742db649e1043102b8a5afd114465156719cea90373229aabd
d84d7f45dabfc1f55664b888a7e86d594853a6cccdc9b189b57839cbbe3b90b55873
skRm:
bc6f0b5e22429e5ff47d5969003f3cae0f4fec50e23602e880038364f33b8522
psk:
0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: 04a307934180ad5287f95525fe5bc6244285d7273c15e061f0f2efb211c3505
7f3079f6e0abae200992610b25f48b63aacfcb669106ddee8aa023feed301901371
shared_secret:
2912aacc6eaebd71ff715ea50f6ef3a6637856b2a4c58ea61e0c3fc159e3bc16
key_schedule_context: 01713f73042575cebfd132f0cc4338523f8eae95c80a74
9f7cf3eb9436ff1c612ca62c37df27ca46d2cc162445a92c5f5fdc57bcde129ca7b1
f284b0c12297c037ca221d77e229a9d11b654de7942d685069c633b2362ce3b3d8ea
4891c9a2a87a4eb7cdb289ba5e2ecbf8cd2c8498bb4a383dc021454d70d46fcbbad1
252ef4f9
secret: ff2051d2128d5f3078de867143e076262ce1d0aecafc3fff3d607f1eaff0
5345c7d5ffcb3202cdecb3d1a2f7da20592a237747b6e855390cbe2109d3e6ac70c2
key: 0b910ba8d9cfa17e5f50c211cb32839a
base_nonce: 0c29e714eb52de5b7415a1b7
exporter_secret: 50c0a182b6f94b4c0bd955c4aa20df01f282cc12c43065a0812
fe4d4352790171ed2b2c4756ad7f5a730ba336c8f1edd0089d8331192058c385bae3
9c7cc8b57
]]></artwork>
          <section anchor="encryptions-7">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 0c29e714eb52de5b7415a1b7
ct: 57624b6e320d4aba0afd11f548780772932f502e2ba2a8068676b2a0d3b5129a
45b9faa88de39e8306da41d4cc

sequence number: 1
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 0c29e714eb52de5b7415a1b6
ct: 159d6b4c24bacaf2f5049b7863536d8f3ffede76302dace42080820fa51925d4
e1c72a64f87b14291a3057e00a

sequence number: 2
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 0c29e714eb52de5b7415a1b5
ct: bd24140859c99bf0055075e9c460032581dd1726d52cf980d308e9b20083ca62
e700b17892bcf7fa82bac751d0

sequence number: 4
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 0c29e714eb52de5b7415a1b3
ct: 93ddd55f82e9aaaa3cfc06840575f09d80160b20538125c2549932977d1238dd
e8126a4a91118faf8632f62cb8

sequence number: 255
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323535
nonce: 0c29e714eb52de5b7415a148
ct: 377a98a3c34bf716581b05a6b3fdc257f245856384d5f2241c8840571c52f5c8
5c21138a4a81655edab8fe227d

sequence number: 256
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323536
nonce: 0c29e714eb52de5b7415a0b7
ct: cc161f5a179831d456d119d2f2c19a6817289c75d1c61cd37ac8a450acd9efba
02e0ac00d128c17855931ff69a
]]></artwork>
          </section>
          <section anchor="exported-values-7">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
8158bea21a6700d37022bb7802866edca30ebf2078273757b656ef7fc2e428cf

exporter_context: 00
L: 32
exported_value:
6a348ba6e0e72bb3ef22479214a139ef8dac57be34509a61087a12565473da8d

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
2f6d4f7a18ec48de1ef4469f596aada4afdf6d79b037ed3c07e0118f8723bffc
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="dhkemp-256-hkdf-sha256-hkdf-sha256-chacha20poly1305">
        <name>DHKEM(P-256, HKDF-SHA256), HKDF-SHA256, ChaCha20Poly1305</name>
        <section anchor="base-setup-information-4">
          <name>Base Setup Information</name>
          <artwork><![CDATA[
mode: 0
kem_id: 16
kdf_id: 1
aead_id: 3
info: 4f6465206f6e2061204772656369616e2055726e
ikmE:
f1f1a3bc95416871539ecb51c3a8f0cf608afb40fbbe305c0a72819d35c33f1f
pkEm: 04c07836a0206e04e31d8ae99bfd549380b072a1b1b82e563c935c09582782
4fc1559eac6fb9e3c70cd3193968994e7fe9781aa103f5b50e934b5b2f387e381291
skEm:
7550253e1147aae48839c1f8af80d2770fb7a4c763afe7d0afa7e0f42a5b3689
ikmR:
61092f3f56994dd424405899154a9918353e3e008171517ad576b900ddb275e7
pkRm: 04a697bffde9405c992883c5c439d6cc358170b51af72812333b015621dc0f
40bad9bb726f68a5c013806a790ec716ab8669f84f6b694596c2987cf35baba2a006
skRm:
a4d1c55836aa30f9b3fbb6ac98d338c877c2867dd3a77396d13f68d3ab150d3b
enc: 04c07836a0206e04e31d8ae99bfd549380b072a1b1b82e563c935c095827824
fc1559eac6fb9e3c70cd3193968994e7fe9781aa103f5b50e934b5b2f387e381291
shared_secret:
806520f82ef0b03c823b7fc524b6b55a088f566b9751b89551c170f4113bd850
key_schedule_context: 00b738cd703db7b4106e93b4621e9a19c89c838e559642
40e5d3f331aaf8b0d58b2e986ea1c671b61cf45eec134dac0bae58ec6f63e790b140
0b47c33038b0269c
secret:
fe891101629aa355aad68eff3cc5170d057eca0c7573f6575e91f9783e1d4506
key:
a8f45490a92a3b04d1dbf6cf2c3939ad8bfc9bfcb97c04bffe116730c9dfe3fc
base_nonce: 726b4390ed2209809f58c693
exporter_secret:
4f9bd9b3a8db7d7c3a5b9d44fdc1f6e37d5d77689ade5ec44a7242016e6aa205
]]></artwork>
          <section anchor="encryptions-8">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 726b4390ed2209809f58c693
ct: 6469c41c5c81d3aa85432531ecf6460ec945bde1eb428cb2fedf7a29f5a685b4
ccb0d057f03ea2952a27bb458b

sequence number: 1
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 726b4390ed2209809f58c692
ct: f1564199f7e0e110ec9c1bcdde332177fc35c1adf6e57f8d1df24022227ffa87
16862dbda2b1dc546c9d114374

sequence number: 2
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 726b4390ed2209809f58c691
ct: 39de89728bcb774269f882af8dc5369e4f3d6322d986e872b3a8d074c7c18e85
49ff3f85b6d6592ff87c3f310c

sequence number: 4
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 726b4390ed2209809f58c697
ct: bc104a14fbede0cc79eeb826ea0476ce87b9c928c36e5e34dc9b6905d91473ec
369a08b1a25d305dd45c6c5f80

sequence number: 255
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323535
nonce: 726b4390ed2209809f58c66c
ct: 8f2814a2c548b3be50259713c6724009e092d37789f6856553d61df23ebc0792
35f710e6af3c3ca6eaba7c7c6c

sequence number: 256
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323536
nonce: 726b4390ed2209809f58c793
ct: b45b69d419a9be7219d8c94365b89ad6951caf4576ea4774ea40e9b7047a09d6
537d1aa2f7c12d6ae4b729b4d0
]]></artwork>
          </section>
          <section anchor="exported-values-8">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
9b13c510416ac977b553bf1741018809c246a695f45eff6d3b0356dbefe1e660

exporter_context: 00
L: 32
exported_value:
6c8b7be3a20a5684edecb4253619d9051ce8583baf850e0cb53c402bdcaf8ebb

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
477a50d804c7c51941f69b8e32fe8288386ee1a84905fe4938d58972f24ac938
]]></artwork>
          </section>
        </section>
        <section anchor="psk-setup-information-4">
          <name>PSK Setup Information</name>
          <artwork><![CDATA[
mode: 1
kem_id: 16
kdf_id: 1
aead_id: 3
info: 4f6465206f6e2061204772656369616e2055726e
ikmE:
e1a4e1d50c4bfcf890f2b4c7d6b2d2aca61368eddc3c84162df2856843e1057a
pkEm: 04f336578b72ad7932fe867cc4d2d44a718a318037a0ec271163699cee653f
a805c1fec955e562663e0c2061bb96a87d78892bff0cc0bad7906c2d998ebe1a7246
skEm:
7d6e4e006cee68af9b3fdd583a0ee8962df9d59fab029997ee3f456cbc857904
ikmR:
ee51dec304abf993ef8fd52aacdd3b539108bbf6e491943266c1de89ec596a17
pkRm: 041eb8f4f20ab72661af369ff3231a733672fa26f385ffb959fd1bae46bfda
43ad55e2d573b880831381d9367417f554ce5b2134fbba5235b44db465feffc6189e
skRm:
12ecde2c8bc2d5d7ed2219c71f27e3943d92b344174436af833337c557c300b3
psk:
0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: 04f336578b72ad7932fe867cc4d2d44a718a318037a0ec271163699cee653fa
805c1fec955e562663e0c2061bb96a87d78892bff0cc0bad7906c2d998ebe1a7246
shared_secret:
ac4f260dce4db6bf45435d9c92c0e11cfdd93743bd3075949975974cc2b3d79e
key_schedule_context: 01622b72afcc3795841596c67ea74400ca3b029374d7d5
640bda367c5d67b3fbeb2e986ea1c671b61cf45eec134dac0bae58ec6f63e790b140
0b47c33038b0269c
secret:
858c8087a1c056db5811e85802f375bb0c19b9983204a1575de4803575d23239
key:
6d61cb330b7771168c8619498e753f16198aad9566d1f1c6c70e2bc1a1a8b142
base_nonce: 0de7655fb65e1cd51a38864e
exporter_secret:
754ca00235b245e72d1f722a7718e7145bd113050a2aa3d89586d4cb7514bfdb
]]></artwork>
          <section anchor="encryptions-9">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 0de7655fb65e1cd51a38864e
ct: 21433eaff24d7706f3ed5b9b2e709b07230e2b11df1f2b1fe07b3c70d5948a53
d6fa5c8bed194020bd9df0877b

sequence number: 1
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 0de7655fb65e1cd51a38864f
ct: c74a764b4892072ea8c2c56b9bcd46c7f1e9ca8cb0a263f8b40c2ba59ac9c857
033f176019562218769d3e0452

sequence number: 2
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 0de7655fb65e1cd51a38864c
ct: dc8cd68863474d6e9cbb6a659335a86a54e036249d41acf909e738c847ff2bd3
6fe3fcacda4ededa7032c0a220

sequence number: 4
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 0de7655fb65e1cd51a38864a
ct: cd54a8576353b1b9df366cb0cc042e46eef6f4cf01e205fe7d47e306b2fdd90f
7185f289a26c613ca094e3be10

sequence number: 255
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323535
nonce: 0de7655fb65e1cd51a3886b1
ct: 6324570c9d542c70c7e70570c1d8f4c52a89484746bf0625441890ededcc80c2
4ef2301c38bfd34d689d19f67d

sequence number: 256
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323536
nonce: 0de7655fb65e1cd51a38874e
ct: 1ea6326c8098ed0437a553c466550114fb2ca1412cca7de98709b9ccdf19206e
52c3d39180e2cf62b3e9f4baf4
]]></artwork>
          </section>
          <section anchor="exported-values-9">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
530bbc2f68f078dccc89cc371b4f4ade372c9472bafe4601a8432cbb934f528d

exporter_context: 00
L: 32
exported_value:
6e25075ddcc528c90ef9218f800ca3dfe1b8ff4042de5033133adb8bd54c401d

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
6f6fbd0d1c7733f796461b3235a856cc34f676fe61ed509dfc18fa16efe6be78
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="dhkemp-521-hkdf-sha512-hkdf-sha512-aes-256-gcm">
        <name>DHKEM(P-521, HKDF-SHA512), HKDF-SHA512, AES-256-GCM</name>
        <section anchor="base-setup-information-5">
          <name>Base Setup Information</name>
          <artwork><![CDATA[
mode: 0
kem_id: 18
kdf_id: 3
aead_id: 2
info: 4f6465206f6e2061204772656369616e2055726e
ikmE: 7f06ab8215105fc46aceeb2e3dc5028b44364f960426eb0d8e4026c2f8b5d7
e7a986688f1591abf5ab753c357a5d6f0440414b4ed4ede71317772ac98d9239f709
04
pkEm: 040138b385ca16bb0d5fa0c0665fbbd7e69e3ee29f63991d3e9b5fa740aab8
900aaeed46ed73a49055758425a0ce36507c54b29cc5b85a5cee6bae0cf1c21f2731
ece2013dc3fb7c8d21654bb161b463962ca19e8c654ff24c94dd2898de12051f1ed0
692237fb02b2f8d1dc1c73e9b366b529eb436e98a996ee522aef863dd5739d2f29b0
skEm: 014784c692da35df6ecde98ee43ac425dbdd0969c0c72b42f2e708ab9d5354
15a8569bdacfcc0a114c85b8e3f26acf4d68115f8c91a66178cdbd03b7bcc5291e37
4b
ikmR: 2ad954bbe39b7122529f7dde780bff626cd97f850d0784a432784e69d86ecc
aade43b6c10a8ffdb94bf943c6da479db137914ec835a7e715e36e45e29b587bab3b
f1
pkRm: 0401b45498c1714e2dce167d3caf162e45e0642afc7ed435df7902ccae0e84
ba0f7d373f646b7738bbbdca11ed91bdeae3cdcba3301f2457be452f271fa6837580
e661012af49583a62e48d44bed350c7118c0d8dc861c238c72a2bda17f64704f464b
57338e7f40b60959480c0e58e6559b190d81663ed816e523b6b6a418f66d2451ec64
skRm: 01462680369ae375e4b3791070a7458ed527842f6a98a79ff5e0d4cbde83c2
7196a3916956655523a6a2556a7af62c5cadabe2ef9da3760bb21e005202f7b24628
47
enc: 040138b385ca16bb0d5fa0c0665fbbd7e69e3ee29f63991d3e9b5fa740aab89
00aaeed46ed73a49055758425a0ce36507c54b29cc5b85a5cee6bae0cf1c21f2731e
ce2013dc3fb7c8d21654bb161b463962ca19e8c654ff24c94dd2898de12051f1ed06
92237fb02b2f8d1dc1c73e9b366b529eb436e98a996ee522aef863dd5739d2f29b0
shared_secret: 776ab421302f6eff7d7cb5cb1adaea0cd50872c71c2d63c30c4f1
d5e43653336fef33b103c67e7a98add2d3b66e2fda95b5b2a667aa9dac7e59cc1d46
d30e818
key_schedule_context: 0083a27c5b2358ab4dae1b2f5d8f57f10ccccc822a4733
26f543f239a70aee46347324e84e02d7651a10d08fb3dda739d22d50c53fbfa8122b
aacd0f9ae5913072ef45baa1f3a4b169e141feb957e48d03f28c837d8904c3d67753
08c3d3faa75dd64adfa44e1a1141edf9349959b8f8e5291cbdc56f62b0ed6527d692
e85b09a4
secret: 49fd9f53b0f93732555b2054edfdc0e3101000d75df714b98ce5aa295a37
f1b18dfa86a1c37286d805d3ea09a20b72f93c21e83955a1f01eb7c5eead563d21e7
key:
751e346ce8f0ddb2305c8a2a85c70d5cf559c53093656be636b9406d4d7d1b70
base_nonce: 55ff7a7d739c69f44b25447b
exporter_secret: e4ff9dfbc732a2b9c75823763c5ccc954a2c0648fc6de80a585
81252d0ee3215388a4455e69086b50b87eb28c169a52f42e71de4ca61c920e7bd24c
95cc3f992
]]></artwork>
          <section anchor="encryptions-10">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 55ff7a7d739c69f44b25447b
ct: 170f8beddfe949b75ef9c387e201baf4132fa7374593dfafa90768788b7b2b20
0aafcc6d80ea4c795a7c5b841a

sequence number: 1
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 55ff7a7d739c69f44b25447a
ct: d9ee248e220ca24ac00bbbe7e221a832e4f7fa64c4fbab3945b6f3af0c5ecd5e
16815b328be4954a05fd352256

sequence number: 2
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 55ff7a7d739c69f44b254479
ct: 142cf1e02d1f58d9285f2af7dcfa44f7c3f2d15c73d460c48c6e0e506a3144ba
e35284e7e221105b61d24e1c7a

sequence number: 4
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 55ff7a7d739c69f44b25447f
ct: 3bb3a5a07100e5a12805327bf3b152df728b1c1be75a9fd2cb2bf5eac0cca1fb
80addb37eb2a32938c7268e3e5

sequence number: 255
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323535
nonce: 55ff7a7d739c69f44b254484
ct: 4f268d0930f8d50b8fd9d0f26657ba25b5cb08b308c92e33382f369c768b558e
113ac95a4c70dd60909ad1adc7

sequence number: 256
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323536
nonce: 55ff7a7d739c69f44b25457b
ct: dbbfc44ae037864e75f136e8b4b4123351d480e6619ae0e0ae437f036f2f8f1e
f677686323977a1ccbb4b4f16a
]]></artwork>
          </section>
          <section anchor="exported-values-10">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
05e2e5bd9f0c30832b80a279ff211cc65eceb0d97001524085d609ead60d0412

exporter_context: 00
L: 32
exported_value:
fca69744bb537f5b7a1596dbf34eaa8d84bf2e3ee7f1a155d41bd3624aa92b63

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
f389beaac6fcf6c0d9376e20f97e364f0609a88f1bc76d7328e9104df8477013
]]></artwork>
          </section>
        </section>
        <section anchor="psk-setup-information-5">
          <name>PSK Setup Information</name>
          <artwork><![CDATA[
mode: 1
kem_id: 18
kdf_id: 3
aead_id: 2
info: 4f6465206f6e2061204772656369616e2055726e
ikmE: f3ebfa9a69a924e672114fcd9e06fa9559e937f7eccce4181a2b506df53dbe
514be12f094bb28e01de19dd345b4f7ede5ad7eaa6b9c3019592ec68eaae9a14732c
e0
pkEm: 040085eff0835cc84351f32471d32aa453cdc1f6418eaaecf1c2824210eb1d
48d0768b368110fab21407c324b8bb4bec63f042cfa4d0868d19b760eb4beba1bff7
93b30036d2c614d55730bd2a40c718f9466faf4d5f8170d22b6df98dfe0c067d02b3
49ae4a142e0c03418f0a1479ff78a3db07ae2c2e89e5840f712c174ba2118e90fdcb
skEm: 012e5cfe0daf5fe2a1cd617f4c4bae7c86f1f527b3207f115e262a98cc6526
8ec88cb8645aec73b7aa0a472d0292502d1078e762646e0c093cf873243d12c39915
f6
ikmR: a2a2458705e278e574f835effecd18232f8a4c459e7550a09d44348ae5d3b1
ea9d95c51995e657ad6f7cae659f5e186126a471c017f8f5e41da9eba74d4e0473e1
79
pkRm: 04006917e049a2be7e1482759fb067ddb94e9c4f7f5976f655088dec452466
14ff924ed3b385fc2986c0ecc39d14f907bf837d7306aada59dd5889086125ecd038
ead400603394b5d81f89ebfd556a898cc1d6a027e143d199d3db845cb91c5289fb26
c5ff80832935b0e8dd08d37c6185a6f77683347e472d1edb6daa6bd7652fea628fae
skRm: 011bafd9c7a52e3e71afbdab0d2f31b03d998a0dc875dd7555c63560e142bd
e264428de03379863b4ec6138f813fa009927dc5d15f62314c56d4e7ff2b485753eb
72
psk:
0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: 040085eff0835cc84351f32471d32aa453cdc1f6418eaaecf1c2824210eb1d4
8d0768b368110fab21407c324b8bb4bec63f042cfa4d0868d19b760eb4beba1bff79
3b30036d2c614d55730bd2a40c718f9466faf4d5f8170d22b6df98dfe0c067d02b34
9ae4a142e0c03418f0a1479ff78a3db07ae2c2e89e5840f712c174ba2118e90fdcb
shared_secret: 0d52de997fdaa4797720e8b1bebd3df3d03c4cf38cc8c1398168d
36c3fc7626428c9c254dd3f9274450909c64a5b3acbe45e2d850a2fd69ac0605fe5c
8a057a5
key_schedule_context: 0124497637cf18d6fbcc16e9f652f00244c981726f293b
b7819861e85e50c94f0be30e022ab081e18e6f299fd3d3d976a4bc590f85bc7711bf
ce32ee1a7fb1c154ef45baa1f3a4b169e141feb957e48d03f28c837d8904c3d67753
08c3d3faa75dd64adfa44e1a1141edf9349959b8f8e5291cbdc56f62b0ed6527d692
e85b09a4
secret: 2cf425e26f65526afc0634a3dba4e28d980c1015130ce07c2ac7530d7a39
1a75e5a0db428b09f27ad4d975b4ad1e7f85800e03ffeea35e8cf3fe67b18d4a1345
key:
f764a5a4b17e5d1ffba6e699d65560497ebaea6eb0b0d9010a6d979e298a39ff
base_nonce: 479afdf3546ddba3a9841f38
exporter_secret: 5c3d4b65a13570502b93095ef196c42c8211a4a188c4590d358
63665c705bb140ecba6ce9256be3fad35b4378d41643867454612adfd0542a684b61
799bf293f
]]></artwork>
          <section anchor="encryptions-11">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 479afdf3546ddba3a9841f38
ct: de69e9d943a5d0b70be3359a19f317bd9aca4a2ebb4332a39bcdfc97d5fe62f3
a77702f4822c3be531aa7843a1

sequence number: 1
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 479afdf3546ddba3a9841f39
ct: 77a16162831f90de350fea9152cfc685ecfa10acb4f7994f41aed43fa5431f23
82d078ec88baec53943984553e

sequence number: 2
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 479afdf3546ddba3a9841f3a
ct: f1d48d09f126b9003b4c7d3fe6779c7c92173188a2bb7465ba43d899a6398a33
3914d2bb19fd769d53f3ec7336

sequence number: 4
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 479afdf3546ddba3a9841f3c
ct: 829b11c082b0178082cd595be6d73742a4721b9ac05f8d2ef8a7704a53022d82
bd0d8571f578c5c13b99eccff8

sequence number: 255
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323535
nonce: 479afdf3546ddba3a9841fc7
ct: a3ee291e20f37021e82df14d41f3fbe98b27c43b318a36cacd8471a3b1051ab1
2ee055b62ded95b72a63199a3f

sequence number: 256
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d323536
nonce: 479afdf3546ddba3a9841e38
ct: eecc2173ce1ac14b27ee67041e90ed50b7809926e55861a579949c07f6d26137
bf9cf0d097f60b5fd2fbf348ec
]]></artwork>
          </section>
          <section anchor="exported-values-11">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
62691f0f971e34de38370bff24deb5a7d40ab628093d304be60946afcdb3a936

exporter_context: 00
L: 32
exported_value:
76083c6d1b6809da088584674327b39488eaf665f0731151128452e04ce81bff

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
0c7cfc0976e25ae7680cf909ae2de1859cd9b679610a14bec40d69b91785b2f6
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="dhkemx25519-hkdf-sha256-hkdf-sha256-export-only-aead">
        <name>DHKEM(X25519, HKDF-SHA256), HKDF-SHA256, Export-Only AEAD</name>
        <section anchor="base-setup-information-6">
          <name>Base Setup Information</name>
          <artwork><![CDATA[
mode: 0
kem_id: 32
kdf_id: 1
aead_id: 65535
info: 4f6465206f6e2061204772656369616e2055726e
ikmE:
55bc245ee4efda25d38f2d54d5bb6665291b99f8108a8c4b686c2b14893ea5d9
pkEm:
e5e8f9bfff6c2f29791fc351d2c25ce1299aa5eaca78a757c0b4fb4bcd830918
skEm:
095182b502f1f91f63ba584c7c3ec473d617b8b4c2cec3fad5af7fa6748165ed
ikmR:
683ae0da1d22181e74ed2e503ebf82840deb1d5e872cade20f4b458d99783e31
pkRm:
194141ca6c3c3beb4792cd97ba0ea1faff09d98435012345766ee33aae2d7664
skRm:
33d196c830a12f9ac65d6e565a590d80f04ee9b19c83c87f2c170d972a812848
enc:
e5e8f9bfff6c2f29791fc351d2c25ce1299aa5eaca78a757c0b4fb4bcd830918
shared_secret:
e81716ce8f73141d4f25ee9098efc968c91e5b8ce52ffff59d64039e82918b66
key_schedule_context: 009bd09219212a8cf27c6bb5d54998c5240793a70ca0a8
92234bd5e082bc619b6a3f4c22aa6d9a0424c2b4292fdf43b8257df93c2f6adbf6dd
c9c64fee26bdd292
secret:
04d64e0620aa047e9ab833b0ebcd4ff026cefbe44338fd7d1a93548102ee01af
key:
base_nonce:
exporter_secret:
79dc8e0509cf4a3364ca027e5a0138235281611ca910e435e8ed58167c72f79b
]]></artwork>
          <section anchor="exported-values-12">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
7a36221bd56d50fb51ee65edfd98d06a23c4dc87085aa5866cb7087244bd2a36

exporter_context: 00
L: 32
exported_value:
d5535b87099c6c3ce80dc112a2671c6ec8e811a2f284f948cec6dd1708ee33f0

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
ffaabc85a776136ca0c378e5d084c9140ab552b78f039d2e8775f26efff4c70e
]]></artwork>
          </section>
        </section>
        <section anchor="psk-setup-information-6">
          <name>PSK Setup Information</name>
          <artwork><![CDATA[
mode: 1
kem_id: 32
kdf_id: 1
aead_id: 65535
info: 4f6465206f6e2061204772656369616e2055726e
ikmE:
c51211a8799f6b8a0021fcba673d9c4067a98ebc6794232e5b06cb9febcbbdf5
pkEm:
d3805a97cbcd5f08babd21221d3e6b362a700572d14f9bbeb94ec078d051ae3d
skEm:
1d72396121a6a826549776ef1a9d2f3a2907fc6a38902fa4e401afdb0392e627
ikmR:
5e0516b1b29c0e13386529da16525210c796f7d647c37eac118023a6aa9eb89a
pkRm:
d53af36ea5f58f8868bb4a1333ed4cc47e7a63b0040eb54c77b9c8ec456da824
skRm:
98f304d4ecb312689690b113973c61ffe0aa7c13f2fbe365e48f3ed09e5a6a0c
psk:
0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc:
d3805a97cbcd5f08babd21221d3e6b362a700572d14f9bbeb94ec078d051ae3d
shared_secret:
024573db58c887decb4c57b6ed39f2c9a09c85600a8a0ecb11cac24c6aaec195
key_schedule_context: 01446fb1fe2632a0a338f0a85ed1f3a0ac475bdea2cd72
f8c713b3a46ee737379a3f4c22aa6d9a0424c2b4292fdf43b8257df93c2f6adbf6dd
c9c64fee26bdd292
secret:
638b94532e0d0bf812cf294f36b97a5bdcb0299df36e22b7bb6858e3c113080b
key:
base_nonce:
exporter_secret:
04261818aeae99d6aba5101bd35ddf3271d909a756adcef0d41389d9ed9ab153
]]></artwork>
          <section anchor="exported-values-13">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
be6c76955334376aa23e936be013ba8bbae90ae74ed995c1c6157e6f08dd5316

exporter_context: 00
L: 32
exported_value:
1721ed2aa852f84d44ad020c2e2be4e2e6375098bf48775a533505fd56a3f416

exporter_context: 54657374436f6e74657874
L: 32
exported_value:
7c9d79876a288507b81a5a52365a7d39cc0fa3f07e34172984f96fec07c44cba
]]></artwork>
          </section>
        </section>
      </section>
    </section>
    <section anchor="edge-case-test-vectors">
      <name>Edge-Case Test Vectors</name>
      <t>This appendix contains test vectors that exercise behavior defined by HPKE itself -- DeriveKeyPair rejection sampling, the labeled key schedule, and the handling of empty and zero-byte inputs -- rather than the underlying KEM, KDF, and AEAD primitives.  Except for the rejection-sampling vector in the first section, all vectors use the suite DHKEM(X25519, HKDF-SHA256), HKDF-SHA256, AES-128-GCM, because the behavior exercised is independent of the choice of KEM, KDF, and AEAD.</t>
      <section anchor="kem-key-derivation-with-rejection-sampling">
        <name>KEM Key Derivation with Rejection Sampling</name>
        <t>In this vector the recipient <tt>ikm</tt> is chosen so that the candidate private key derived with <tt>counter = 0</tt> (<tt>rejected_candidate</tt> below) is greater than or equal to the order of the P-256 group and is therefore rejected; the key pair is produced from the candidate at <tt>counter = 1</tt>.  This exercises the rejection sampling loop in <tt>DeriveKeyPair</tt>.</t>
        <section anchor="base-setup-information-7">
          <name>Base Setup Information</name>
          <artwork><![CDATA[
mode: 0
kem_id: 16
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
ikmE: 4270e54ffd08d79d5928020af4686d8f6b7d35dbe470265f1f5aa22816ce860e
ikmR: 68706b652d656467652d703235362d72656a656374696f6e00000001c6be4ce7
rejected_candidate (counter=0):
ffffffffc6e92ab863d8293933c849d280fc9a40f07471a06702bdf2eac30fa2
skRm: d9cbff7adaa1c604a2e4fcfb762c9e1c5ed7d2e33b15fcad4c6c3f23a9637325
pkRm:
04d3bec6a691f47bbedd5caa1d51c7228f6afeeec5576495b855bbe6595e49643570be
005fc177b3d80f6eeef280b1cf8a565d7ca28116dee2e875550ef3050ca8
enc:
04a92719c6195d5085104f469a8b9814d5838ff72b60501e2c4466e5e67b325ac98536
d7b61a1af4b78e5b7f951c0900be863c403ce65c9bfcb9382657222d18c4
shared_secret:
1f38c13d9156ad1439d1edf648a12bf9c62cecb95cbb2087e16683636744251a
key: 58337e18488e9e09ab4278759207d006
base_nonce: d4967824655d4887a04b3d87
exporter_secret:
04f68c9f58b994666057b92606f7b738c47300fcb3a33bac157ee4a934bbae25
]]></artwork>
          <section anchor="encryptions-12">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: d4967824655d4887a04b3d87
ct:
bcf25d5db84780b5b222eb26a63d8fb489c6a0bf1f6281cbc10c633707dbcda9af7cee
7a57abdb59ce4c9d4162
]]></artwork>
          </section>
          <section anchor="exported-values-14">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context: 54657374436f6e74657874
L: 32
exported_value:
abd921fc81dae75036e9146d2e5826e3ea075b410c1c46a0a0533a9e3e685490
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="empty-and-zero-byte-aead-inputs">
        <name>Empty and Zero-Byte AEAD Inputs</name>
        <t>This vector uses a normal context and exercises empty and zero-byte values for the per-message <tt>aad</tt> and <tt>pt</tt> inputs and the <tt>exporter_context</tt> input.</t>
        <section anchor="base-setup-information-8">
          <name>Base Setup Information</name>
          <artwork><![CDATA[
mode: 0
kem_id: 32
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
ikmE: 7268600d403fce431561aef583ee1613527cff655c1343f29812e66706df3234
ikmR: 6db9df30aa07dd42ee5e8181afdb977e538f5e1fec8a06223f33f7013e525037
skRm: 4612c550263fc8ad58375df3f557aac531d26850903e55a9f23f21d8534e8ac8
pkRm: 3948cfe0ad1ddb695d780e59077195da6c56506b027329794ab02bca80815c4d
enc: 37fda3567bdbd628e88668c3c8d7e97d1d1253b6d4ea6d44c150f741f1bf4431
shared_secret:
fe0e18c9f024ce43799ae393c7e8fe8fce9d218875e8227b0187c04e7d2ea1fc
key: 4531685d41d65f03dc48f6b8302c05b0
base_nonce: 56d890e5accaaf011cff4b7d
exporter_secret:
45ff1c2e220db587171952c0592d5f5ebe103f1561a2614e38f2ffd47e99e3f8
]]></artwork>
          <section anchor="encryptions-13">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt:
aad: 436f756e742d30
nonce: 56d890e5accaaf011cff4b7d
ct: 3f431133aa05608a56675bec51d03e0f

sequence number: 1
pt: 4265617574792069732074727574682c20747275746820626561757479
aad:
nonce: 56d890e5accaaf011cff4b7c
ct:
af2d7e9ac9ae7e270f46ba1f975be53c09f8d875bdc8535458c2494e8aa7d2bb71109b
5730bb714a8e64e5cc16

sequence number: 2
pt: 00010002000300
aad: 436f756e742d30
nonce: 56d890e5accaaf011cff4b7f
ct: 0be99ddcad54aabf548b3dbae884aff7aaeb0afc9ab60f

sequence number: 3
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 00ff00ff00
nonce: 56d890e5accaaf011cff4b7e
ct:
6b0f4cd351730cd25993d8ad0f11bff1ef2c3a957cb4d8694bb06c60a2f65e4f4cf8c1
ae35431071bb18eff3e8
]]></artwork>
          </section>
          <section anchor="exported-values-15">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context:
L: 32
exported_value:
3853fe2b4035195a573ffc53856e77058e15d9ea064de3e59f4961d0095250ee

exporter_context: 00
L: 32
exported_value:
2e8f0b54673c7029649d4eb9d5e33bf1872cf76d623ff164ac185da9e88c21a5

exporter_context: 0011002200
L: 32
exported_value:
73ac25f70dd55c215b4220e6978533ee2d3a559a48c507b11e200af81e64337a
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="empty-info">
        <name>Empty info</name>
        <t>This vector uses an empty <tt>info</tt> value in the key schedule.</t>
        <section anchor="base-setup-information-9">
          <name>Base Setup Information</name>
          <artwork><![CDATA[
mode: 0
kem_id: 32
kdf_id: 1
aead_id: 1
info:
ikmE: 7268600d403fce431561aef583ee1613527cff655c1343f29812e66706df3234
ikmR: 6db9df30aa07dd42ee5e8181afdb977e538f5e1fec8a06223f33f7013e525037
skRm: 4612c550263fc8ad58375df3f557aac531d26850903e55a9f23f21d8534e8ac8
pkRm: 3948cfe0ad1ddb695d780e59077195da6c56506b027329794ab02bca80815c4d
enc: 37fda3567bdbd628e88668c3c8d7e97d1d1253b6d4ea6d44c150f741f1bf4431
shared_secret:
fe0e18c9f024ce43799ae393c7e8fe8fce9d218875e8227b0187c04e7d2ea1fc
key: a9b96236b306695e8729863403f68d4f
base_nonce: 0816b7f1635cce3ee2a7f611
exporter_secret:
ac9efc2aea9784504d6e817cf056845b1947cb604e6f398704c0524a1cc8e90f
]]></artwork>
          <section anchor="encryptions-14">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 0816b7f1635cce3ee2a7f611
ct:
2a19b5c53b9bc4d52723cfa64b0c0532b9fd5473e8c1105285be1a5fd763463c3d3423
6f5d26ebfe906277e094
]]></artwork>
          </section>
          <section anchor="exported-values-16">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context: 54657374436f6e74657874
L: 32
exported_value:
8a02de446479bb7d27490ed85a69c6bbaddd0969fbc84f7661ab038c9008f053
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="info-with-embedded-zero-bytes">
        <name>info with Embedded Zero Bytes</name>
        <t>This vector uses an <tt>info</tt> value that contains embedded zero bytes in the key schedule.</t>
        <section anchor="base-setup-information-10">
          <name>Base Setup Information</name>
          <artwork><![CDATA[
mode: 0
kem_id: 32
kdf_id: 1
aead_id: 1
info: f0000f00ff
ikmE: 7268600d403fce431561aef583ee1613527cff655c1343f29812e66706df3234
ikmR: 6db9df30aa07dd42ee5e8181afdb977e538f5e1fec8a06223f33f7013e525037
skRm: 4612c550263fc8ad58375df3f557aac531d26850903e55a9f23f21d8534e8ac8
pkRm: 3948cfe0ad1ddb695d780e59077195da6c56506b027329794ab02bca80815c4d
enc: 37fda3567bdbd628e88668c3c8d7e97d1d1253b6d4ea6d44c150f741f1bf4431
shared_secret:
fe0e18c9f024ce43799ae393c7e8fe8fce9d218875e8227b0187c04e7d2ea1fc
key: 7d8ac6f5d6276d9411b66d4bfa232381
base_nonce: 626c42fcd01b1690bf10cb44
exporter_secret:
47c5306e700000a21465f2efd0c81d8df46e607b538fb330b213726d1004899e
]]></artwork>
          <section anchor="encryptions-15">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 626c42fcd01b1690bf10cb44
ct:
dccc58fdd5dd0f80a162809a6bd47bf881ce2821b5ab718892dd568e2dcef6c98750fa
1dc39a6182802ef3416c
]]></artwork>
          </section>
          <section anchor="exported-values-17">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context: 54657374436f6e74657874
L: 32
exported_value:
b16979c789e60ff4a21a3975b785ed3114d44525a3f660a4a848891dcf54446a
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="psk-and-pskid-with-embedded-zero-bytes">
        <name>psk and psk_id with Embedded Zero Bytes</name>
        <t>This vector uses PSK mode with a <tt>psk</tt> and <tt>psk_id</tt> that contain embedded zero bytes.</t>
        <section anchor="psk-setup-information-7">
          <name>PSK Setup Information</name>
          <artwork><![CDATA[
mode: 1
kem_id: 32
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
ikmE: 78628c354e46f3e169bd231be7b2ff1c77aa302460a26dbfa15515684c00130b
ikmR: d4a09d09f575fef425905d2ab396c1449141463f698f8efdb7accfaff8995098
skRm: c5eb01eb457fe6c6f57577c5413b931550a162c71a03ac8d196babbd4e5ce0fd
pkRm: 9fed7e8c17387560e92cc6462a68049657246a09bfa8ade7aefe589672016366
enc: 0ad0950d9fb9588e59690b74f1237ecdf1d775cd60be2eca57af5a4b0471c91b
shared_secret:
727699f009ffe3c076315019c69648366b69171439bd7dd0807743bde76986cd
key: ca4f3f1e77364e55e5554d480a8ee58a
base_nonce: a8cf850e9bdd7d73155a5243
exporter_secret:
d08a0e5476626a7fccf354ec6b1787a238e53f8e38e96af3d2c4f76f6295007b
psk: 0000000000000000111111111111111100000000000000002222222222222222
psk_id: 0050534b00696400
]]></artwork>
          <section anchor="encryptions-16">
            <name>Encryptions</name>
            <artwork><![CDATA[
sequence number: 0
pt: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: a8cf850e9bdd7d73155a5243
ct:
cf34c6d0f86cd81c527cff7a2a20541cd017877d6e95f82f9dc13e6937bef65723bf43
d4a2362690c20591ce67
]]></artwork>
          </section>
          <section anchor="exported-values-18">
            <name>Exported Values</name>
            <artwork><![CDATA[
exporter_context: 54657374436f6e74657874
L: 32
exported_value:
000521bf952f7f7c56cf7dbf40ec1f6943a3233abe36a72d20aa4f87e0d90a95
]]></artwork>
          </section>
        </section>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
/evlZ58/0+9fPnsxNWNP27z5p/Z9Z7T/tJ7+z19+5ndqNfQfWat/0vnWi954
8pE8d76BFtE5GgrJli9XIX/9//7ub4/deKiVf/rbc3Px9ePz/cuPN3ut2Y+M
cm21PyoARvXyfjpah813qMy/u/mD7ib/G+D3TEEq37Wjl864xFErkfIu7Euf
/JfzJy8B/pcIpTcSWY8w/9sotLtwsTsmcIYYHLz9RttiP/3jLy9u3cddIaFz
o9+74/HbWOdvb0/YzmGGZ+4q3/pEl+i3MHbbwumd93pTSP3myQ/rJ8W1fn3z
BGC+/OrIreCXXx3PuysrenEw/8/Le6/zjToXXCL9blsinXnzXWqfig7+5uUP
vzse+PyH3331OsPntuHS0x9++t1Rr+gf7j1CTYVerUvv9HMbS33n0VpBM6Xn
/abdT/J78vvbz5zDiHjihdff/cV5WvU3X11OmDREVXrmgXcdFi6XMSIvesBR
pvxOEx7aXkezt7Wavjm5Y0GPKK0j8Oq8preVfF6r1TMFPxTAyyvLqZd4I51S
fbC+e3IXgXmvTsZb8Zj60SPg+PzwS2WUc+W+++Xwb4tUnQPEzheBr7PjlbSp
Rx0s/NoAMJw//fOtmPnnyw/eftHlG24re+tBl337RtHDN0/7Hmg8/M0b3Xhe
np9yTNKbL/vmC8l4FSF6SVu5XEu83ddGdzvHkp/L0b65pc+rfpfT+rrF12+e
vPzhu5/0/Of6/69uT+UPe76Qj29O/ps3w9XefLCusM7JQXehorflsJ7eS7kX
nOipdxUg3ipOdjYelQO7jPyudMvtlLwuqc7M/sZ9dQz4QLU3XumNw7y3q58d
3V/u5RueDx3eXM9z07R7k61HvTu6J8+VQKXXVfGNy5q8Fr9vhjU+GVqb8M1t
F+D78/f7S/2Jtyrd3EvBvqjv493O83eZzNuJUXzBT9o9F2F/O09/eQrv5k/P
e2cK74zsdit8fXvQfXsk8J+e3Abv3NaquvR01fPusgokb990Mq9B5o0IfjjO
7//rf7kNc2+quC4XdvFgt/1l/uYeTHx377L9nCH75vcokuWWz+ov7urevVFn
4I3o5rnefN4btWzPTRxena+q7pX3OkPagd33H3uLBHjEJ8d7/s3x2d/gKb5+
Awi/enL69q1R3R1LqRjWxd8c98u3e/jr8767qA3R/berMhzdEe8+8ta7HfbV
botp4Gy0FufCT68DHTXsN3JNbl5XXOnrjXm6u23//tmPlzLIx545O6PTUWvn
rY2nUn/MwpNLUYt7/a6OSvlH9atjzr578eLZC930HhcK96YXwzmabJ5eo94l
vv2ugv+5S9LrqNcnf3uZyzcaIp6btr3TJ/GC7JfJfyNn5l0YveQnX7JfH1zm
I7H1h+++hil89w5ReONzuuL5Xh/4u99cPv67r86DP/JF3yYBfM93X51OBwH5
6aFPHE8QKboFgvtpsPrR4xn3nOldHuxf/Xxb0nbCrN94zhupqPd+9MgGOCei
/uE2EunW4d9WZH6XUJwj5C/Qczcjd80y7++jr55cEOEotv/fXYy2fn1UeP7t
7//ur3RDcO93Xx+R7dYVRbff1il5uc61om7+/o6iHu8ttvTtjTmdmeS3N96d
zlTy2xt7ulBJ/VK09NubsFNI0Zm00+J/rTMhZ5di8qkmqz+Lkd+vk6bg2xO/
LMmYGYzfYwVvY7Jt7Vj8WjZZH10ee6cYh/XBb1eLdSulbNLc3vlwkrv+9uTz
ns3HlPvsM7mySkmpDD/KzKvmaad10fc0w2r8Txg2mp2D3bbvwLeeXh6PiW6E
lmNpxbgxS68+rbFW85YPuVzLjL1tp2c6H+cwJbRuex27uZ190qB+9+0pzV55
PdOayXMGt1ZcxRbbNn+R84q+7LjsXqM0k5zz2/udjfUrumh8PskKGVQNZexl
Gq8/e6px5mJWrCZny29aGjFFk7px2buaK+9iXB+8fLFxhMmg9JjAIowYjUtM
cWmTuc2R19ssRGsjejtZhGiq4ftjq5v3cXaW6MMqbRRd9jzGDL+5K749Ma5l
y6jbuKCFz7W25asfeZXNv2PV6WwpmalzLndjSx4mrDzdanaP0zV+ipmajIFb
O+qsZRh+xG/sq8YxvcPKzCw+5BnimhjRqebemRGzmcrZcnCTH+kJk5vLM9Zu
mOLeXOFXbjDzITRnWLzNfHgTsQJ3SlbW7nPTx0Oop9sxWrf3rrZWu6rvofDM
zAAaqxllyZhPn6W1FFypw+dSQraztpr5SV+zxsiOYoVYnxnsTHEbP0coO/Xi
eSMTuzndkbRvbxhGqRhJG6O1bZiIvUPP8/QWScYs4t52uOWc4XVKtjIqPbG6
GRlhX5a5O/ajSzYsbJbhzMBq1+V3OWPavxN43HHil8efvsU3BR7PWZsgGLA5
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
kte1gWHVKnp79D5va6mdAGwTmzqOD/ULhMF3FT9SL/KVulchRmOiDseUk9tV
+Gkpn3uKQC0/L8hrZ3ae11QFCPWFZLsyuQjKpkgO31xVu2o2J9reoeBX0AZR
P/GqSnX5grxs5GhTtwpPMcuyr+RCQOKkztYWj1uTqq0poSADVqrBdwTbtKMN
a7sgr2ohb5/wMDuWXUo6ikDxOL9Ugyco8iOpHhtCtkfWVEmLKuaA+TflnJ+R
t5YNSzm6x3lEQ1EBM7i1h/CBNWh7cCFDkNU4ZR1FS4sC5E1l+yaM6nMf1T3C
4r5dChov5ZWogdbLR0KcKm2kpb66boC3CodPBmhWoox0SIMesO5qA1YfPpsK
IW2lD7iEjjZNeMozACCpN6Qno1VkGe4zu9MuI6NKfFMoN5ve5/qIoJ+Y9Kpu
xzAAuCs+VK1Gw1ZoSG68xjiyuxRUvpRKA88pank9lO1RTP83gL6CQuEVpamw
Go6xwVKs0e1ZnDzXZTtFI48aW3gYg5xh38yKRFFpBf9IoI/ZDfUijd4HLFOF
yRck/FzDtbFlmhoNHeynVoQgNq++ZdjRVAX19wN9bFS1w5Tl7nZRH4A2jTND
RbQgj4CAz3jB0ncQ3Kp4eFScQzwc+vUvey/QR+DPXAvjdAgFAw9EIimvLUmY
+DoGWxPvklEuvGyV70lb22GEAK5eJv3mu/nH9du/FuX+w3r56ua/rfHq2YuX
p9Mfvn/68qY9f75+nk//943esT39+eXNK33oX84funn1fXt1s/73ejGe8vN9
fd/+5emzFzdz7ac/s4b9Tzd/94//8N3N01cv14/75re/vfmb9eLpv6x/WH/6
x/b0xc2L9T95EB7m5mX76fmPT3/+49c8ct382Pr6kZ/H8m5ud9fXN+3nefzt
9/xCn715tm/WT89f/en4m39dL579tv/p1bp5+vPzX1691Le9aHz+hd7y5+Mn
f/l5rhc//kk/i0D5+gYpcn6stMfN8xdPf3r6itd7+c0NdjjW81c3+MDjJ1+/
6W9v3/QyB3zb8YH99AXz8vL8IR7644+vJ+kXpkYfefnLU97u36yN3uj48DVT
O9rtc15P8+3EzxtW6ilj01qtn19pYvTB8f2zp6h9fvfuaL85hBp/fsNinJfl
8PU3/+vpq+9vfvd6YX5/Ge7p9PcaKF90Gfd5VsbT50/1jU9wd0/0Gnzny8V6
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
B5veO9Ls/UBMQ1EwZ6lqGruDOhJ4KYisy0TEjy6ejoa5O8FkEQmBt+c94exA
3x2fev7yh+P84Xz3+j5wppAAYc35Z9rNEx5xe7ZxPOzJPYS7BnDfPE5wwa89
1yhJ5XtjWEH13qyqoDivhNbupHRzVjV4F6QElA6o3D8rDz6guxj8BelmUIqS
SsxmVYwM6AsT1fvQ1zRsCNUG9g7rUBW6D/xlVIqCotglugi8IN1AQCu9P8S8
V9KGxrZVwUJxqaBwPIxz6AxbHZgVKtVbx06RfkjaeUG6uhdgpIonHuNMZlU3
BtOiyHSDaoiqwcgLq7ZCm0vNmlcsNWUVFfcpXVJfUEe8nJqV1ljKOlqa9Ry2
dT4vlZmaOccxk1Gxj6EDwa3ofqO8q2rfzhY5sW1TBeeYpb3UJyId7b+Vm5pC
UZkM5WDpTLjPrMwlgFklHxc/VtKYZ6QbLYD8FknkpXgj/8agVFUkMIO43ytK
MVUqWMsTp/KvmMEGybpSg52va7rrwNW7BMMZahGglCW1wsmgKONXczD+v6rA
8XTKB1PqBVMEAh7RDzfmrX/sW/+8/ffurX9eRz8YE2EZzKXR5BjzpQDpgxMq
IGXKwkjCUFarKC1NLCEr1c9gwkJf5lJ1Zasa9+w6oQ/IP5/7UlF+9QvhUewl
9T7D2IaaiIG+KX9cIDUqTqOmoNHtvNlvCfE71Yt2KbdLKRF4Ud8U99KymwqR
UxuopTSVVs8H//8/Kspb1Jw4AgA=

-->

</rfc>
