<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.8 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-hpke-05" category="info" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.46.0 -->
  <front>
    <title abbrev="HPKE">Hybrid Public Key Encryption</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-hpke-05"/>
    <author initials="R.L." surname="Barnes" fullname="Richard L. Barnes">
      <organization>Cisco</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>Inria</organization>
      <address>
        <email>ietf@benjaminlipp.de</email>
      </address>
    </author>
    <author initials="C.A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2020" month="July" day="30"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes a scheme for hybrid public-key encryption
(HPKE).  This scheme provides authenticated public key encryption of
arbitrary-sized plaintexts for a recipient public key. HPKE works
for any combination of an asymmetric key encapsulation mechanism
(KEM), key derivation function (KDF), and authenticated encryption
with additional data (AEAD) encryption function. We provide
instantiations of the scheme using widely-used and efficient
primitives, such as Elliptic Curve Diffie-Hellman key agreement,
HKDF, and SHA2.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <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="RFC1113" format="default"/>. 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 schemes (HPKE), specified here, take a different approach:
"generate the symmetric key and its encapsulation with the public key."
Specifically, encrypted messages convey an encryption key 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, for example:</t>
      <ul spacing="normal">
        <li>PGP <xref target="RFC6637" format="default"/></li>
        <li>Messaging Layer Security <xref target="I-D.ietf-mls-protocol" format="default"/></li>
        <li>TLS Encrypted ClientHello <xref target="I-D.ietf-tls-esni" format="default"/></li>
        <li>Protection of 5G subscriber identities <xref target="fiveG" format="default"/></li>
      </ul>
      <t>Currently, there are numerous competing and non-interoperable standards and
variants for hybrid encryption, mostly based on ECIES, including ANSI X9.63
(ECIES) <xref target="ANSI" format="default"/>, IEEE 1363a <xref target="IEEE" format="default"/>, ISO/IEC 18033-2 <xref target="ISO" format="default"/>, and SECG SEC 1
<xref target="SECG" format="default"/>.  See <xref target="MAEA10" format="default"/> for a thorough comparison.  All of these existing
schemes have problems, e.g., because they rely on outdated primitives, lack
proofs of 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" format="default"/>. A summary of this analysis is in
<xref target="sec-properties" format="default"/>.</t>
    </section>
    <section anchor="requirements-notation" numbered="true" toc="default">
      <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
BCP14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/>  when, and only when, they appear in
all capitals, as shown here.</t>
    </section>
    <section anchor="notation" numbered="true" toc="default">
      <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>
          <tt>(skX, pkX)</tt>: A KEM key pair used in role X; <tt>skX</tt> is the private
key and <tt>pkX</tt> is the public key.</li>
        <li>
          <tt>pk(skX)</tt>: The public key corresponding to private key <tt>skX</tt>.</li>
        <li>Sender (S): Role of entity which sends an encrypted message.</li>
        <li>Recipient (R): Role of entity which receives an encrypted message.</li>
        <li>Ephemeral (E): Role of a fresh random value meant for one-time use.</li>
        <li>I2OSP and OS2IP: Convert a byte string to and from a non-negative integer as
described in <xref target="RFC8017" format="default"/>. Note that these functions operate on byte strings
in big-endian byte order.</li>
        <li>
          <tt>concat(x0, ..., xN)</tt>: Concatenation of byte strings.
<tt>concat(0x01, 0x0203, 0x040506) = 0x010203040506</tt>.</li>
        <li>
          <tt>random(n)</tt>: A pseudorandom byte string of length <tt>n</tt> bytes</li>
        <li>
          <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.</li>
      </ul>
    </section>
    <section anchor="cryptographic-dependencies" numbered="true" toc="default">
      <name>Cryptographic Dependencies</name>
      <t>HPKE variants rely on the following primitives:</t>
      <ul spacing="normal">
        <li>
          <t>A Key Encapsulation Mechanism (KEM):
          </t>
          <ul spacing="normal">
            <li>
              <tt>GenerateKeyPair()</tt>: Generate a key pair <tt>(skX, pkX)</tt></li>
            <li>
              <tt>DeriveKeyPair(ikm)</tt>: Derive a key pair <tt>(skX, pkX)</tt> from the byte string <tt>ikm</tt>,
where <tt>ikm</tt> SHOULD have at least <tt>Nsk</tt> bytes of entropy (see
<xref target="derive-key-pair" format="default"/> for discussion)</li>
            <li>
              <tt>Serialize(pk)</tt>: Produce a byte string of length <tt>Npk</tt> encoding the
public key <tt>pk</tt></li>
            <li>
              <tt>Deserialize(enc)</tt>: Parse the byte string <tt>enc</tt> of length <tt>Npk</tt> to recover a
public key (note: this function can raise an error upon <tt>enc</tt> deserialization failure)</li>
            <li>
              <tt>Encap(pk)</tt>: Generate an ephemeral, fixed-length symmetric key (the KEM shared secret) and
a fixed-length encapsulation of that key that can be decapsulated
by the holder of the private key corresponding to <tt>pk</tt></li>
            <li>
              <tt>Decap(enc, sk)</tt>: Use the private key <tt>sk</tt> to recover the ephemeral
symmetric key (the KEM shared secret) from its encapsulated representation <tt>enc</tt></li>
            <li>
              <tt>AuthEncap(pkR, skS)</tt> (optional): Same as <tt>Encap()</tt>, and the outputs
encode an assurance that the KEM shared secret key was generated by the
holder of the private key <tt>skS</tt></li>
            <li>
              <tt>AuthDecap(skR, pkS)</tt> (optional): Same as <tt>Decap()</tt>, and the recipient
is assured that the KEM shared secret was generated by the holder of
the private key <tt>skS</tt></li>
            <li>
              <tt>Nsecret</tt>: The length in bytes of a KEM shared secret produced by this KEM</li>
            <li>
              <tt>Nenc</tt>: The length in bytes of an encapsulated key produced by this KEM</li>
            <li>
              <tt>Npk</tt>: The length in bytes of an encoded public key for this KEM</li>
            <li>
              <tt>Nsk</tt>: The length in bytes of an encoded private key for this KEM</li>
          </ul>
        </li>
        <li>
          <t>A Key Derivation Function (KDF):
          </t>
          <ul spacing="normal">
            <li>
              <tt>Extract(salt, ikm)</tt>: 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></li>
            <li>
              <tt>Expand(prk, info, L)</tt>: Expand a pseudorandom key <tt>prk</tt> using
optional string <tt>info</tt> into <tt>L</tt> bytes of output keying material</li>
            <li>
              <tt>Nh</tt>: The output size of the <tt>Extract()</tt> function in bytes</li>
          </ul>
        </li>
        <li>
          <t>An AEAD encryption algorithm <xref target="RFC5116" format="default"/>:
          </t>
          <ul spacing="normal">
            <li>
              <tt>Seal(key, nonce, aad, pt)</tt>: 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> (note: this function
 can raise a <tt>NonceOverflowError</tt> upon failure)</li>
            <li>
              <tt>Open(key, nonce, aad, ct)</tt>: 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> (note: this function can raise an
<tt>OpenError</tt> or <tt>NonceOverflowError</tt> upon failure)</li>
            <li>
              <tt>Nk</tt>: The length in bytes of a key for this algorithm</li>
            <li>
              <tt>Nn</tt>: The length in bytes of a nonce for this algorithm</li>
          </ul>
        </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" format="default"/>.  Algorithm identifier
values are two bytes long.</t>
      <t>Note that <tt>GenerateKeyPair</tt> can be implemented as <tt>DeriveKeyPair(random(Nsk))</tt>.</t>
      <t>The following two functions are defined to facilitate domain separation of
KDF calls as well as context binding:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
def LabeledExtract(salt, label, ikm):
  labeled_ikm = concat("HPKE-05 ", suite_id, label, ikm)
  return Extract(salt, labeled_ikm)

def LabeledExpand(prk, label, info, L):
  labeled_info = concat(I2OSP(L, 2), "HPKE-05 ", suite_id, label, info)
  return Expand(prk, labeled_info, L)
]]></artwork>
      <t>[[RFC editor: please change "HPKE-05" to "RFCXXXX", where XXXX is the final number, before publication.]]</t>
      <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 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 sections <xref target="dhkem" format="default"/>
and <xref target="encryption-context" format="default"/> for details.</t>
      <section anchor="dhkem" numbered="true" toc="default">
        <name>DH-Based KEM</name>
        <t>Suppose we are given a KDF, and a Diffie-Hellman group providing the
following operations:</t>
        <ul spacing="normal">
          <li>
            <tt>GenerateKeyPair()</tt>: Generate an ephemeral key pair <tt>(skX, pkX)</tt>
for the DH group in use</li>
          <li>
            <tt>DH(sk, pk)</tt>: Perform a non-interactive DH exchange using the
private key <tt>sk</tt> and public key <tt>pk</tt> to produce a Diffie-Hellman
shared secret of length <tt>Ndh</tt></li>
          <li>
            <tt>Serialize(pk)</tt>: Produce a byte string of length <tt>Npk</tt>
encoding the public key <tt>pk</tt></li>
          <li>
            <tt>Deserialize(enc)</tt>: Parse a byte string of length <tt>Npk</tt> to recover a
public key (note: this function can raise an error upon <tt>enc</tt> deserialization failure)</li>
          <li>
            <tt>Ndh</tt>: The length in bytes of a Diffie-Hellman shared secret produced
by <tt>DH()</tt></li>
          <li>
            <tt>Nsk</tt>: The length in bytes of a Diffie-Hellman private key</li>
        </ul>
        <t>Then we can construct a KEM called <tt>DHKEM(Group, KDF)</tt> in the
following way, where <tt>Group</tt> denotes the Diffie-Hellman group and
<tt>KDF</tt> the KDF. The function parameters <tt>pkR</tt> and <tt>pkS</tt> are deserialized
public keys, and <tt>enc</tt> is a serialized public key.
<xref target="derive-key-pair" format="default"/> contains the <tt>DeriveKeyPair</tt> function specification
for DHKEMs defined in this document.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
def ExtractAndExpand(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 = Serialize(pkE)

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

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

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

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

  shared_secret = ExtractAndExpand(dh, kem_context)
  return shared_secret

def AuthEncap(pkR, skS):
  skE, pkE = GenerateKeyPair()
  dh = concat(DH(skE, pkR), DH(skS, pkR))
  enc = Serialize(pkE)

  pkRm = Serialize(pkR)
  pkSm = Serialize(pk(skS))
  kem_context = concat(enc, pkRm, pkSm)

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

def AuthDecap(enc, skR, pkS):
  pkE = Deserialize(enc)
  dh = concat(DH(skR, pkE), DH(skR, pkS))

  pkRm = Serialize(pk(skR))
  pkSm = Serialize(pkS)
  kem_context = concat(enc, pkRm, pkSm)

  shared_secret = ExtractAndExpand(dh, kem_context)
  return shared_secret
]]></artwork>
        <t>The implicit <tt>suite_id</tt> value used within <tt>LabeledExtract</tt> and
<tt>LabeledExpand</tt> is defined as follows, where <tt>kem_id</tt> is defined
in <xref target="kem-ids" format="default"/>:</t>
        <artwork name="" type="" align="left" alt=""><![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>) of the appropriate KDF when
implementing DHKEM. See <xref target="kdf-choice" format="default"/> for a comment on the choice of
a KDF for the remainder of HPKE, and <xref target="domain-separation" format="default"/> for the
rationale of the labels.</t>
        <t>For the variants of DHKEM defined in this document, the size <tt>Ndh</tt> of the
Diffie-Hellman shared secret is equal to <tt>Npk</tt>, and the size <tt>Nsecret</tt> of the
KEM shared secret is equal to the output length of the hash function
underlying the KDF.</t>
        <t>It is important to note that the <tt>AuthEncap()</tt> and <tt>AuthDecap()</tt> functions of the
DHKEM variants defined in this document are vulnerable to key-compromise
impersonation (KCI). This means the assurance that the KEM shared secret key
was generated by the holder of the private key <tt>skS</tt> does not hold if
the recipient private key <tt>skR</tt> is compromised. See <xref target="sec-properties" format="default"/>
for more details.</t>
        <t>Senders and recipients MUST validate KEM inputs and outputs as described
in <xref target="kem-ids" format="default"/>.</t>
      </section>
    </section>
    <section anchor="hpke" numbered="true" toc="default">
      <name>Hybrid Public Key Encryption</name>
      <t>In this section, we define a few HPKE variants.  All variants take a
recipient public key and a sequence of plaintexts <tt>pt</tt>, and produce an
encapsulated key <tt>enc</tt> and a sequence of ciphertexts <tt>ct</tt>.  These outputs are
constructed so that only the holder of the private key corresponding
to <tt>pkR</tt> can decapsulate the key from <tt>enc</tt> and decrypt the
ciphertexts.  All of 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 three authenticated variants, one which authenticates
possession of a pre-shared key, one which authenticates
possession of a KEM private key, and one which authenticates possession of both
a pre-shared key and a KEM private key. All authenticated variants contribute
additional keying material to the encryption operation. The following one-byte
values will be used to distinguish between modes:</t>
      <table align="center">
        <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">mode_auth</td>
            <td align="left">0x02</td>
          </tr>
          <tr>
            <td align="left">mode_auth_psk</td>
            <td align="left">0x03</td>
          </tr>
        </tbody>
      </table>
      <t>All of these cases follow the same basic two-step pattern:</t>
      <ol spacing="normal" type="1">
        <li>Set up an encryption context that is shared between the sender
and the recipient</li>
        <li>Use that context to encrypt or decrypt content</li>
      </ol>
      <t>A <em>context</em> 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" format="default"/>. See <xref target="hpke-dem" format="default"/> 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 sender to receiver. Specification of
such a mechanism is left to the application. See <xref target="message-encoding" format="default"/> for more
details.</t>
      <t>Note that some KEMs may not support <tt>AuthEncap()</tt> or <tt>AuthDecap()</tt>.
For such KEMs, only <tt>mode_base</tt> or <tt>mode_psk</tt> are supported. Future specifications
which define new KEMs MUST indicate whether or not these modes are supported.</t>
      <t>The procedures described in this session are laid out in a
Python-like pseudocode. The algorithms in use are left implicit.</t>
      <section anchor="encryption-context" numbered="true" toc="default">
        <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>
            <tt>mode</tt> - A one-byte value indicating the HPKE mode, defined in <xref target="hpke" format="default"/>.</li>
          <li>
            <tt>shared_secret</tt> - A KEM shared secret generated for this transaction</li>
          <li>
            <tt>info</tt> - Application-supplied information (optional; default value
"")</li>
          <li>
            <tt>psk</tt> - A pre-shared key (PSK) held by both the sender
and the recipient (optional; default value "")</li>
          <li>
            <tt>psk_id</tt> - An identifier for the PSK (optional; default value "")</li>
        </ul>
        <t>Senders and recipients MUST validate KEM inputs and outputs as described
in <xref target="kem-ids" format="default"/>.</t>
        <t>The <tt>psk</tt> and <tt>psk_id</tt> fields 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> fields 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" format="default"/> for
precise limits on these lengths.</t>
        <t>The <tt>key</tt>, <tt>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>In the Auth and AuthPSK modes, the recipient is assured that the sender
held the private key <tt>skS</tt>. This assurance is limited for the DHKEM
variants defined in this document because of key-compromise impersonation,
as described in <xref target="dhkem" format="default"/> and <xref target="sec-properties" format="default"/>. If in the PSK and
AuthPSK modes, the <tt>psk</tt> and <tt>psk_id</tt> arguments are provided as required,
then the recipient is assured that the sender held the corresponding
pre-shared key. See <xref target="sec-properties" format="default"/> for more details.</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="ciphersuites" format="default"/>, are
assumed implicit from the implementation and not passed as parameters.
The implicit <tt>suite_id</tt> value used within <tt>LabeledExtract</tt> and
<tt>LabeledExpand</tt> is defined based on them as follows:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
suite_id = concat(
  "HPKE",
  I2OSP(kem_id, 2),
  I2OSP(kdf_id, 2),
  I2OSP(aead_id, 2)
)
]]></artwork>
        <artwork name="" type="" align="left" alt=""><![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 in [mode_base, mode_auth]):
    raise Exception("PSK input provided when not needed")
  if (not got_psk) and (mode in [mode_psk, mode_auth_psk]):
    raise Exception("Missing required PSK input")

def KeySchedule(mode, shared_secret, info, psk, psk_id):
  VerifyPSKInputs(mode, 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)

  psk_hash = LabeledExtract("", "psk_hash", psk)

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

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

  return Context(key, nonce, 0, exporter_secret)
]]></artwork>
        <t>See <xref target="hpke-dem" format="default"/> for a description of the <tt>Context()</tt> output.</t>
        <t>Note that the <tt>key_schedule_context</tt> construction in <tt>KeySchedule()</tt> is
equivalent to serializing a structure of the following form in the TLS presentation
syntax:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
    uint8 mode;
    opaque psk_id_hash[Nh];
    opaque info_hash[Nh];
} KeyScheduleContext;
]]></artwork>
        <section anchor="hpke-kem" numbered="true" toc="default">
          <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 a
serialized public key.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
def SetupBaseS(pkR, info):
  shared_secret, enc = Encap(pkR)
  return enc, KeySchedule(mode_base, shared_secret, info, default_psk, default_psk_id)

def SetupBaseR(enc, skR, info):
  shared_secret = Decap(enc, skR)
  return KeySchedule(mode_base, shared_secret, info, default_psk, default_psk_id)
]]></artwork>
        </section>
        <section anchor="mode-psk" numbered="true" toc="default">
          <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" format="default"/>. 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 PSK and PSK ID values
are used as <tt>ikm</tt> inputs to the KDF (instead of using the empty string)</t>
          <t>The PSK SHOULD be of length Nh bytes or longer, and SHOULD have
Nh bytes of entropy or more. See <xref target="security-psk" format="default"/> for a more detailed
discussion.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
def SetupPSKS(pkR, info, psk, psk_id):
  shared_secret, enc = Encap(pkR)
  return enc, KeySchedule(mode_psk, shared_secret, info, psk, psk_id)

def SetupPSKR(enc, skR, info, psk, psk_id):
  shared_secret = Decap(enc, skR)
  return KeySchedule(mode_psk, shared_secret, info, psk, psk_id)
]]></artwork>
        </section>
        <section anchor="mode-auth" numbered="true" toc="default">
          <name>Authentication using an Asymmetric Key</name>
          <t>This variant extends the base mechanism by allowing the recipient
to authenticate that the sender possessed a given KEM private key.
This assurance is based on the assumption that
<tt>AuthDecap(enc, skR, pkS)</tt> produces the correct KEM shared secret
only if the encapsulated value <tt>enc</tt> was produced by
<tt>AuthEncap(pkR, skS)</tt>, where <tt>skS</tt> is the private key corresponding
to <tt>pkS</tt>.  In other words, at most two entities (precisely two, in the case
of DHKEM) could have produced this secret, so if the recipient is at most one, then
the sender is the other with overwhelming probability.</t>
          <t>The primary difference from the base case is that the calls to
<tt>Encap()</tt> and <tt>Decap()</tt> are replaced with calls to <tt>AuthEncap()</tt> and
<tt>AuthDecap()</tt>, which add the sender public key to their internal
context string. The function parameters <tt>pkR</tt> and <tt>pkS</tt> are
public keys, and <tt>enc</tt> is a serialized public key.</t>
          <t>Obviously, this variant can only be used with a KEM that provides
<tt>AuthEncap()</tt> and <tt>AuthDecap()</tt> procedures.</t>
          <t>This mechanism authenticates only the key pair of the sender, not
any other identity.  If an application wishes to authenticate some
other identity for the sender (e.g., an email address or domain
name), then this identity should be included in the <tt>info</tt> parameter
to avoid identity mis-binding issues <xref target="UKS" format="default"/>.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
def SetupAuthS(pkR, info, skS):
  shared_secret, enc = AuthEncap(pkR, skS)
  return enc, KeySchedule(mode_auth, shared_secret, info, default_psk, default_psk_id)

def SetupAuthR(enc, skR, info, pkS):
  shared_secret = AuthDecap(enc, skR, pkS)
  return KeySchedule(mode_auth, shared_secret, info, default_psk, default_psk_id)
]]></artwork>
        </section>
        <section anchor="mode-auth-psk" numbered="true" toc="default">
          <name>Authentication using both a PSK and an Asymmetric Key</name>
          <t>This mode is a straightforward combination of the PSK and
authenticated modes.  The PSK is passed through to the key schedule
as in the former, and as in the latter, we use the authenticated KEM
variants.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
def SetupAuthPSKS(pkR, info, psk, psk_id, skS):
  shared_secret, enc = AuthEncap(pkR, skS)
  return enc, KeySchedule(mode_auth_psk, shared_secret, info, psk, psk_id)

def SetupAuthPSKR(enc, skR, info, psk, psk_id, pkS):
  shared_secret = AuthDecap(enc, skR, pkS)
  return KeySchedule(mode_auth_psk, shared_secret, info, psk, psk_id)
]]></artwork>
          <t>The PSK SHOULD be of length Nh bytes or longer, and SHOULD have
Nh bytes of entropy or more. See <xref target="security-psk" format="default"/> for a more detailed
discussion.</t>
        </section>
      </section>
      <section anchor="hpke-dem" numbered="true" toc="default">
        <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 context object
that stores the AEAD and Secret Export parameters. The AEAD parameters
consist of:</t>
        <ul spacing="normal">
          <li>The AEAD algorithm in use</li>
          <li>The key to be used with the AEAD algorithm</li>
          <li>A base nonce value</li>
          <li>A sequence number (initially 0)</li>
        </ul>
        <t>The Secret Export parameters consist of:</t>
        <ul spacing="normal">
          <li>The ciphersuite in use</li>
          <li>The exporter secret used for the Secret Export interface; see <xref target="hpke-export" format="default"/></li>
        </ul>
        <t>All of these parameters except the AEAD sequence number are constant.
The sequence number is used to provide nonce uniqueness: The nonce used
for each encryption or decryption operation is the result of XORing
the base nonce with the current sequence number, encoded as a
big-endian integer of the same length as the nonce.  Implementations
MAY use a sequence number that is shorter than the nonce (padding on
the left with zero), but MUST raise an error if the sequence number
overflows.</t>
        <t>Encryption is unidirectional from sender to recipient. Each encryption
or decryption operation increments the sequence number for the context
in use.  The sender's context MUST NOT be used for decryption. Similarly,
the recipient's context MUST NOT be used for encryption. Higher-level
protocols re-using the HPKE key exchange for more general purposes can
derive separate keying material as needed using use the Export interface;
see <xref target="hpke-export" format="default"/> 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>Context.Seal()</tt> or <tt>Context.Open()</tt> would cause
the <tt>seq</tt> field to overflow, then the implementation MUST fail with an error.
(In the pseudocode below, <tt>Context.IncrementSeq()</tt> fails with an error when <tt>seq</tt> overflows,
which causes <tt>Context.Seal()</tt> and <tt>Context.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>
        <artwork name="" type="" align="left" alt=""><![CDATA[
def Context.ComputeNonce(seq):
  seq_bytes = I2OSP(seq, Nn)
  return xor(self.nonce, seq_bytes)

def Context.IncrementSeq():
  if self.seq >= (1 << (8*Nn)) - 1:
    raise NonceOverflowError
  self.seq += 1

def Context.Seal(aad, pt):
  ct = Seal(self.key, self.ComputeNonce(self.seq), aad, pt)
  self.IncrementSeq()
  return ct

def Context.Open(aad, ct):
  pt = Open(self.key, self.ComputeNonce(self.seq), aad, ct)
  if pt == OpenError:
    raise OpenError
  self.IncrementSeq()
  return pt
]]></artwork>
      </section>
      <section anchor="hpke-export" numbered="true" toc="default">
        <name>Secret Export</name>
        <t>HPKE provides a interface for exporting secrets from the encryption <tt>Context</tt>, similar
to the TLS 1.3 exporter interface (See <xref target="RFC8446" format="default"/>, Section 7.5). This interface takes as
input a context string <tt>exporter_context</tt> and desired length <tt>L</tt> (in bytes), and produces
a secret derived from the internal exporter secret using the corresponding KDF Expand
function. For the KDFs defined in this specification, <tt>L</tt> has a maximum value of
<tt>255*Nh</tt>. Future specifications which define new KDFs MUST specify a bound for <tt>L</tt>.</t>
        <t>The <tt>exporter_context</tt> field has a maximum length that depends on the KDF
itself, on the definition of <tt>LabeledExpand()</tt>, and on the constant labels
used together with them. See <xref target="kdf-input-length" format="default"/> for precise limits on this length.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
def Context.Export(exporter_context, L):
  return LabeledExpand(self.exporter_secret, "sec", exporter_context, L)
]]></artwork>
      </section>
    </section>
    <section anchor="single-shot-apis" numbered="true" toc="default">
      <name>Single-Shot APIs</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="hpke-kem" format="default"/> and <xref target="hpke-dem" format="default"/>:</t>
      <artwork name="" type="" align="left" alt=""><![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 one of Base, PSK, Auth, or AuthPSK. The optional parameters
indicated by "..." depend on <tt>MODE</tt> and may be empty. <tt>SetupBase()</tt>, for example, has no
additional parameters. <tt>SealAuthPSK()</tt> and <tt>OpenAuthPSK()</tt> would be implemented as follows:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
def SealAuthPSK(pkR, info, aad, pt, psk, psk_id, skS):
  enc, ctx = SetupAuthPSKS(pkR, info, psk, psk_id, skS)
  ct = ctx.Seal(aad, pt)
  return enc, ct

def OpenAuthPSK(enc, skR, info, aad, ct, psk, psk_id, pkS):
  ctx = SetupAuthPSKR(enc, skR, info, psk, psk_id, pkS)
  return ctx.Open(aad, ct)
]]></artwork>
    </section>
    <section anchor="ciphersuites" numbered="true" toc="default">
      <name>Algorithm Identifiers</name>
      <section anchor="kem-ids" numbered="true" toc="default">
        <name>Key Encapsulation Mechanisms (KEMs)</name>
        <table align="center">
          <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">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>
            </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">
                <xref target="NISTCurves" format="default"/>, <xref target="RFC5869" format="default"/></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">
                <xref target="NISTCurves" format="default"/>, <xref target="RFC5869" format="default"/></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">
                <xref target="NISTCurves" format="default"/>, <xref target="RFC5869" format="default"/></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">
                <xref target="RFC7748" format="default"/>, <xref target="RFC5869" format="default"/></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">
                <xref target="RFC7748" format="default"/>, <xref target="RFC5869" format="default"/></td>
            </tr>
          </tbody>
        </table>
        <section anchor="serializedeserialize" numbered="true" toc="default">
          <name>Serialize/Deserialize</name>
          <t>For P-256, P-384 and P-521, the <tt>Serialize()</tt> function of the
KEM performs the uncompressed Elliptic-Curve-Point-to-Octet-String
conversion according to <xref target="SECG" format="default"/>. <tt>Deserialize()</tt> performs the
uncompressed Octet-String-to-Elliptic-Curve-Point conversion.</t>
          <t>For X25519 and X448, the <tt>Serialize()</tt> and <tt>Deserialize()</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" format="default"/> for specifics.</t>
        </section>
        <section anchor="derive-key-pair" numbered="true" toc="default">
          <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>Expand</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 name="" type="" align="left" alt=""><![CDATA[
def DeriveKeyPair(ikm):
  dkp_prk = LabeledExtract("", "dkp_prk", ikm)
  sk = 0
  counter = 0
  while sk == 0 or sk >= order:
    if counter > 255:
      raise DeriveKeyPairError
    bytes = LabeledExpand(dkp_prk, "candidate", I2OSP(counter, 1), Nsk)
    bytes[0] = bytes[0] & bitmask
    sk = OS2IP(bytes)
    counter = counter + 1
  return (sk, pk(sk))
]]></artwork>
          <t>where <tt>order</tt> is the order of the curve being used (this can be found in
section D.1.2 of <xref target="NISTCurves" format="default"/>), and <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.</t>
          <t>For X25519 and X448, the <tt>DeriveKeyPair()</tt> function applies a KDF to the input:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
def DeriveKeyPair(ikm):
  dkp_prk = LabeledExtract("", "dkp_prk", ikm)
  sk = LabeledExpand(dkp_prk, "sk", "", Nsk)
  return (sk, pk(sk))
]]></artwork>
        </section>
        <section anchor="validation" numbered="true" toc="default">
          <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>; in authenticated modes, the recipient MUST validate the sender's
static public key <tt>pkS</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" format="default"/>. 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" format="default"/>. In particular, recipients MUST check whether
the Diffie-Hellman shared secret is the all-zero value and abort if so.</t>
        </section>
      </section>
      <section anchor="kdf-ids" numbered="true" toc="default">
        <name>Key Derivation Functions (KDFs)</name>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">KDF</th>
              <th align="left">Nh</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>
            </tr>
            <tr>
              <td align="left">0x0001</td>
              <td align="left">HKDF-SHA256</td>
              <td align="left">32</td>
              <td align="left">
                <xref target="RFC5869" format="default"/></td>
            </tr>
            <tr>
              <td align="left">0x0002</td>
              <td align="left">HKDF-SHA384</td>
              <td align="left">48</td>
              <td align="left">
                <xref target="RFC5869" format="default"/></td>
            </tr>
            <tr>
              <td align="left">0x0003</td>
              <td align="left">HKDF-SHA512</td>
              <td align="left">64</td>
              <td align="left">
                <xref target="RFC5869" format="default"/></td>
            </tr>
          </tbody>
        </table>
        <section anchor="kdf-input-length" numbered="true" toc="default">
          <name>Input Length Restrictions</name>
          <t>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>,
i.e., the variable-length parameters provided by HPKE applications.
The following table lists the maximum allowed lengths of these fields
for the KDFs defined in this document, as inclusive bounds in bytes:</t>
          <table align="center">
            <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} - 91</td>
                <td align="left">2^{125} - 155</td>
                <td align="left">2^{125} - 155</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} - 92</td>
                <td align="left">2^{125} - 156</td>
                <td align="left">2^{125} - 156</td>
              </tr>
              <tr>
                <td align="left">exporter_context</td>
                <td align="left">2^{61} - 121</td>
                <td align="left">2^{125} - 201</td>
                <td align="left">2^{125} - 217</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
which define new KDFs MUST specify bounds for these variable-length
parameters.</t>
          <t>The values for <tt>psk</tt>, <tt>psk_id</tt>, and <tt>info</tt> which are inputs to
<tt>LabeledExtract()</tt> were computed with the following expression:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
max_size_hash_input - Nb - size_label_rfcXXXX - 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 name="" type="" align="left" alt=""><![CDATA[
max_size_hash_input - Nb - Nh - size_label_rfcXXXX - 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_label_rfcXXXX</tt> is the size
of "HPKE-05 " in bytes and equals 8, <tt>size_suite_id</tt> is the size of the
<tt>suite_id</tt> and equals 9, and <tt>size_input_label</tt> is the size
of the label used as parameter to <tt>LabeledExtract()</tt> or <tt>LabeledExpand()</tt>.</t>
          <t>[[RFC editor: please change "HPKE-05" to "RFCXXXX", where XXXX is the final number, before publication.]]</t>
        </section>
      </section>
      <section anchor="aead-ids" numbered="true" toc="default">
        <name>Authenticated Encryption with Associated Data (AEAD) Functions</name>
        <table align="center">
          <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">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>
            </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">
                <xref target="GCM" format="default"/></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">
                <xref target="GCM" format="default"/></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">
                <xref target="RFC8439" format="default"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="sec-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <section anchor="sec-properties" numbered="true" toc="default">
        <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>Message secrecy: Privacy of the sender's messages, i.e., IND-CCA2
security</li>
          <li>Export key secrecy: Indistinguishability of each export
secret from a uniformly random bitstring of equal length</li>
          <li>Sender authentication: Proof of sender origin for PSK, Auth, and
AuthPSK modes</li>
        </ul>
        <t>These security goals are expected to hold for any honest sender and
honest recipient keys, as well as if the honest sender and honest
recipient keys are the same.</t>
        <t>As noted in <xref target="non-goals" format="default"/>, HPKE does not provide forward secrecy.
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 and AuthPSK modes, 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.</t>
        <t>In the Auth mode, sender authentication is generally expected to hold if
the sender private key <tt>skS</tt> is not compromised at the time of message
reception. In the AuthPSK mode, sender authentication is generally
expected to hold if at the time of message reception, the sender private
key skS and the pre-shared key are not both compromised. However, it is
important to note that the DHKEM variants defined in this document are
vulnerable to key-compromise impersonation attacks <xref target="BJM97" format="default"/>,
which means that sender authentication cannot be expected to hold in the
Auth mode if the recipient private key <tt>skR</tt> is compromised, and in the
AuthPSK mode if the pre-shared key and the recipient private key <tt>skR</tt> are
both compromised. NaCl's <tt>box</tt> interface <xref target="NaCl" format="default"/> has the same issue. At
the same time, this enables repudiability.</t>
        <t>Applications that require resistance against key-compromise impersonation
SHOULD take extra steps to prevent this attack. One possibility is to
produce a digital signature over the Auth and AuthPSK <tt>enc</tt> output using
a sender's private key, as a proof of possession.</t>
        <t>Given these properties, pre-shared keys strengthen both the authentication and the
secrecy properties in certain adversary models. One particular example in which
this can be useful is a hybrid quantum setting: if a
non-quantum-resistant KEM used with HPKE is broken by a
quantum computer, the security properties are preserved through the use
of a pre-shared key. This assumes that the pre-shared key has not been
compromised, as described in <xref target="WireGuard" format="default"/>.</t>
        <t>It is shown in <xref target="CS01" format="default"/> that a hybrid public-key encryption scheme of
essentially the same form described here is IND-CCA2-secure as long as
the underlying KEM and AEAD schemes are IND-CCA2-secure. The main
difference between the scheme proposed there and the scheme in this
document (both named HPKE) is that we interpose some KDF calls between
the KEM and the AEAD. Analyzing the HPKE instantiation in this
document therefore required verifying that the additional KDF calls
do not cause the IND-CCA2 property to fail, as well as verifying the
two additional properties noted above (export key secrecy and
sender authentication).</t>
        <t>This work has been done for the case where the KEM is DHKEM, the AEAD is
any IND-CCA2-secure scheme, and the DH group and KDF satisfy the
following conditions <xref target="HPKEAnalysis" format="default"/>:</t>
        <ul spacing="normal">
          <li>DH group: The gap Diffie-Hellman (GDH) problem is hard in the
appropriate subgroup <xref target="GAP" format="default"/>.</li>
          <li>
            <tt>Extract()</tt> and <tt>Expand()</tt> (in DHKEM): <tt>Extract()</tt> is indifferentiable from a
random oracle. <tt>Expand()</tt> is a pseudorandom function, wherein the first
argument is the key.</li>
          <li>
            <tt>Extract()</tt> and <tt>Expand()</tt> (elsewhere): <tt>Extract()</tt> is indifferentiable from a
random oracle. <tt>Expand()</tt> is a pseudorandom function, wherein the first
argument is the key.</li>
        </ul>
        <t>In particular, the KDFs and DH groups defined in this document (see
<xref target="kdf-ids" format="default"/> and <xref target="kem-ids" format="default"/>) satisfy these properties when used as
specified.</t>
        <t>The analysis in <xref target="HPKEAnalysis" format="default"/> 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 table below summarizes the main results from <xref target="HPKEAnalysis" format="default"/>. N/A
means that a property does not apply for the given mode, whereas X means
the given mode satisfies the property.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Variant</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">X</td>
              <td align="center">X</td>
              <td align="center">N/A</td>
            </tr>
            <tr>
              <td align="left">PSK</td>
              <td align="center">X</td>
              <td align="center">X</td>
              <td align="center">X</td>
            </tr>
            <tr>
              <td align="left">Auth</td>
              <td align="center">X</td>
              <td align="center">X</td>
              <td align="center">X</td>
            </tr>
            <tr>
              <td align="left">AuthPSK</td>
              <td align="center">X</td>
              <td align="center">X</td>
              <td align="center">X</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" format="default"/> provide
some indication that any IND-CCA2-secure KEM will suffice here, but are
not conclusive given the differences in the schemes.</t>
        <t>In addition, both <xref target="CS01" format="default"/> and <xref target="HPKEAnalysis" format="default"/> are premised on
classical security models and assumptions, and do not consider
adversaries capable of quantum computation. A full proof of post-quantum
security would need to take appropriate security models and assumptions
into account, in addition to simply using a post-quantum KEM. The hybrid
quantum-resistance property described above, which is achieved by using
the PSK or AuthPSK mode, is proven in <xref target="HPKEAnalysis" format="default"/>; in a quantum
setting, the remaining security level is smaller and defined by the
post-quantum security level of the AEAD scheme.</t>
      </section>
      <section anchor="security-requirements-on-a-kem-used-within-hpke" numbered="true" toc="default">
        <name>Security Requirements on a KEM used within HPKE</name>
        <t>A KEM used within HPKE MUST ensure the following to avoid identity
mis-binding issues: The KEM shared secret computed by <tt>Encap()</tt> and <tt>Decap()</tt> MUST
depend explicitly on the KEM public key <tt>pkR</tt> and the encapsulated key <tt>enc</tt>,
as observed in <xref target="S01" format="default"/>. The KEM shared secret returned by <tt>AuthEncap()</tt> and <tt>AuthDecap()</tt>
MUST explicitly depend on the KEM public keys <tt>pkR</tt> and <tt>pkS</tt> and the encapsulated
key <tt>enc</tt>. This is usually implemented by including these values explicitly into
the context of the key derivation function used to compute the KEM shared
secret. This is also how DHKEM meets the requirement.</t>
      </section>
      <section anchor="kdf-choice" numbered="true" toc="default">
        <name>Security Requirements on a KDF</name>
        <t>The choice of the KDF for the remainder of HPKE SHOULD be made based on
the security level provided by the KEM and, if applicable, by the PSK.
The KDF SHOULD have at least have the security level of the KEM and
SHOULD at least have the security level provided by the PSK.</t>
        <t>HPKE's <tt>KeySchedule()</tt> uses <tt>LabeledExtract()</tt> to convert an arbitrary-length
PSK into a fixed-length PSK. This is necessary because of the
restrictions on the key in HMAC's indifferentiability theorem <xref target="HMAC" format="default"/>.
A future instantiation of HPKE MAY omit this line and use the PSK
directly as salt for the computation of <tt>secret</tt>, if: <tt>Extract()</tt> is not
instantiated by <tt>HKDF-Extract()</tt> and there is an indifferentiability theorem
for <tt>Extract()</tt> without restriction on the key's length.</t>
      </section>
      <section anchor="security-psk" numbered="true" toc="default">
        <name>Pre-Shared Key Recommendations</name>
        <t>In the PSK and AuthPSK modes, the PSK SHOULD be of length <tt>Nh</tt> bytes or
longer, and SHOULD have <tt>Nh</tt> bytes of entropy or more. Using a PSK shorter
than <tt>Nh</tt> bytes is permitted. A PSK that is longer than <tt>Nh</tt> bytes or that
has more than <tt>Nh</tt> bytes of entropy, respectively, does not increase the
security level of HPKE, because the extraction step involving the PSK
only outputs <tt>Nh</tt> bytes.</t>
        <t>HPKE is specified to use HKDF as key derivation function. HKDF is not
designed to slow down dictionary attacks, see <xref target="RFC5869" format="default"/>. 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 allows to distinguish between a good
and a wrong PSK, it can perform a dictionary attack on the PSK. This
oracle can be the decryption operation on a captured HPKE ciphertext or
any other recipient behavior which 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 sender.</t>
      </section>
      <section anchor="domain-separation" numbered="true" toc="default">
        <name>Domain Separation</name>
        <t>HPKE allows combining a DHKEM variant DHKEM(Group, KDF') 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 have
different prefix-free encodings for the second parameter. This is
achieved by the different prefix-free label parameters in the calls to
<tt>LabeledExtract()</tt> and <tt>LabeledExpand()</tt>. This serves to separate the input
domains of all <tt>Extract()</tt> and <tt>Expand()</tt> invocations. It also justifies modeling
them as independent functions even if instantiated by the same KDF.</t>
        <t>Future KEM instantiations MUST ensure that all internal invocations of
<tt>Extract()</tt> and <tt>Expand()</tt> can be modeled as functions independent from the
invocations of <tt>Extract()</tt> and <tt>Expand()</tt> in the remainder of HPKE. One way to
ensure this is by using an equal or similar prefixing scheme with
an identifier different from "HPKE-05 ". Particular attention needs to
be paid if the KEM directly invokes functions that are used internally
in HPKE's <tt>Extract()</tt> or <tt>Expand()</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 Extract or
Expand. In HPKE's <tt>KeySchedule()</tt> this is avoided by using <tt>Extract()</tt> instead of
<tt>Hash()</tt> on the arbitrary-length inputs <tt>info</tt>, <tt>psk_id</tt>, and <tt>psk</tt>.</t>
        <t>The string literal "HPKE-05 " used in <tt>LabeledExtract()</tt> and <tt>LabeledExpand()</tt>
ensures that any secrets derived in HPKE are bound to the scheme's name,
even when possibly derived from the same Diffie-Hellman or KEM shared
secret as in another scheme.</t>
      </section>
      <section anchor="non-goals" numbered="true" toc="default">
        <name>External Requirements / Non-Goals</name>
        <t>HPKE is designed to be a fairly low-level primitive, and thus does not provide
several features that a more high-level protocol might provide, for example:</t>
        <ul spacing="normal">
          <li>Downgrade prevention - 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.</li>
          <li>Replay protection - The requirement that ciphertexts be presented to the
<tt>Context.Open()</tt> function in the same order they were generated by <tt>Context.Seal()</tt>
provides a degree of replay protection within a stream of ciphertexts
resulting from a given <tt>Context</tt>.  HPKE provides no other replay protection.</li>
          <li>Forward secrecy - HPKE ciphertexts are not forward-secure. In Base and
Auth modes, a given ciphertext can be decrypted if the recipient's public
encryption key is compromised. In PSK and AuthPSK modes, a given
ciphertext can be decrypted if the recipient's public encryption key and the
PSK are compromised.</li>
        </ul>
      </section>
      <section anchor="metadata-protection" numbered="true" toc="default">
        <name>Metadata Protection</name>
        <t>The authenticated modes of HPKE (PSK, Auth, AuthPSK) require 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) and/or the sender's public
key (<tt>pkS</tt>).  However, these values themselves might be considered sensitive,
since in a given application context, they 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, pkS,
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> and <tt>pkS</tt>
values.</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" format="default"/>
could be extended to cover other metadata.  However, this construction would
require further analysis.</t>
      </section>
      <section anchor="designated-verifier-signature" numbered="true" toc="default">
        <name>Designated-Verifier Signature</name>
        <t>The Auth and AuthPSK modes can be used to construct a lightweight
"designated-verifier signature" scheme <xref target="JKR96" format="default"/>, in the sense that the message
is authenticated as coming from the sender, but the only party who can verify
the authentication is the recipient (the holder of <tt>skR</tt>).</t>
        <t>To create such a signature, the sender simply performs a normal HPKE setup in
the proper mode, and calls the Seal method on the resulting context with an
empty plaintext value and the content to be signed as AAD.  This produces an
encoded key <tt>enc</tt> and a ciphertext value that contains only the AAD tag.</t>
        <t>For example, using DHKEM(X25519, HKDF-SHA256) and AES-128-GCM, this would produce
a 48-byte signature comprising a 32-byte ephemeral X25519 key and a 16-byte GCM tag.</t>
        <t>To verify such a signature, the recipient performs the corresponding HPKE setup
and calls <tt>Open()</tt> with the provided ciphertext.  If the AEAD authentication passes,
then the signature is valid.</t>
        <t>This scheme reuses the authentication scheme underlying the AEAD algorithm in
use, while using the KEM to establish a one-time authentication key from a pair
of KEM public keys.</t>
      </section>
    </section>
    <section anchor="message-encoding" numbered="true" toc="default">
      <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 which includes,
minimally: the encapsulated value <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 receiver public key used for encapsulation, which may be needed if a receiver
has more than one public key.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document requests the creation of three new IANA registries:</t>
      <ul spacing="normal">
        <li>HPKE KEM Identifiers</li>
        <li>HPKE KDF Identifiers</li>
        <li>HPKE AEAD Identifiers</li>
      </ul>
      <t>All of these registries should be under a heading of "Hybrid Public Key
Encryption", and administered under a Specification Required policy <xref target="RFC8126" format="default"/></t>
      <section anchor="kem-identifiers" numbered="true" toc="default">
        <name>KEM Identifiers</name>
        <t>The "HPKE KEM Identifiers" registry lists identifiers for key encapsulation
algorithms defined for use with HPKE.  These are two-byte values, so the
maximum possible value is 0xFFFF = 65535.</t>
        <t>Template:</t>
        <ul spacing="normal">
          <li>Value: The two-byte identifier for the algorithm</li>
          <li>KEM: The name of the algorithm</li>
          <li>Nsecret: The length in bytes of a KEM shared secret produced by the algorithm</li>
          <li>Nenc: The length in bytes of an encapsulated key produced by the algorithm</li>
          <li>Npk: The length in bytes of an encoded public key for the algorithm</li>
          <li>Reference: Where this algorithm is defined</li>
        </ul>
        <t>Initial contents: Provided in <xref target="kem-ids" format="default"/></t>
      </section>
      <section anchor="kdf-identifiers" numbered="true" toc="default">
        <name>KDF Identifiers</name>
        <t>The "HPKE KDF Identifiers" registry lists identifiers for key derivation
functions defined for use with HPKE.  These are two-byte values, so the maximum
possible value is 0xFFFF = 65535.</t>
        <t>Template:</t>
        <ul spacing="normal">
          <li>Value: The two-byte identifier for the algorithm</li>
          <li>KDF: The name of the algorithm</li>
          <li>Nh: The output size of the Extract function in bytes</li>
          <li>Reference: Where this algorithm is defined</li>
        </ul>
        <t>Initial contents: Provided in <xref target="kdf-ids" format="default"/></t>
      </section>
      <section anchor="aead-identifiers" numbered="true" toc="default">
        <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 are two-byte values, so the maximum possible value is 0xFFFF = 65535.</t>
        <t>Template:</t>
        <ul spacing="normal">
          <li>Value: The two-byte identifier for the algorithm</li>
          <li>AEAD: The name of the algorithm</li>
          <li>Nk: The length in bytes of a key for this algorithm</li>
          <li>Nn: The length in bytes of a nonce for this algorithm</li>
          <li>Reference: Where this algorithm is defined</li>
        </ul>
        <t>Initial contents: Provided in <xref target="aead-ids" format="default"/></t>
      </section>
    </section>
    <section anchor="acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
      <t>The authors would like to thank
David Benjamin,
Benjamin Beurdouche,
Frank Denis,
Kevin Jacobs,
Raphael Robert,
Michael Rosenberg,
Michael Scott,
Steven Valdez,
Riad Wahby,
and other contributors in the CFRG for helpful feedback that greatly improved this document.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <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>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="BCP" value="14"/>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <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>
        </reference>
        <reference anchor="RFC8017" target="https://www.rfc-editor.org/info/rfc8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <seriesInfo name="DOI" value="10.17487/RFC8017"/>
            <seriesInfo name="RFC" value="8017"/>
            <author initials="K." surname="Moriarty" fullname="K. Moriarty" role="editor">
              <organization/>
            </author>
            <author initials="B." surname="Kaliski" fullname="B. Kaliski">
              <organization/>
            </author>
            <author initials="J." surname="Jonsson" fullname="J. Jonsson">
              <organization/>
            </author>
            <author initials="A." surname="Rusch" fullname="A. Rusch">
              <organization/>
            </author>
            <date year="2016" month="November"/>
            <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>
        </reference>
        <reference anchor="RFC5116" target="https://www.rfc-editor.org/info/rfc5116">
          <front>
            <title>An Interface and Algorithms for Authenticated Encryption</title>
            <seriesInfo name="DOI" value="10.17487/RFC5116"/>
            <seriesInfo name="RFC" value="5116"/>
            <author initials="D." surname="McGrew" fullname="D. McGrew">
              <organization/>
            </author>
            <date year="2008" month="January"/>
            <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>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <seriesInfo name="DOI" value="10.17487/RFC8126"/>
            <seriesInfo name="RFC" value="8126"/>
            <seriesInfo name="BCP" value="26"/>
            <author initials="M." surname="Cotton" fullname="M. Cotton">
              <organization/>
            </author>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <author initials="T." surname="Narten" fullname="T. Narten">
              <organization/>
            </author>
            <date year="2017" month="June"/>
            <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>
        </reference>
      </references>
      <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="S01" target="https://eprint.iacr.org/2001/112">
          <front>
            <title>A proposal for an ISO standard for public key encryption (version 2.1)</title>
            <author initials="V." surname="Shoup" fullname="Victor Shoup">
              <organization/>
            </author>
            <date year="2001"/>
          </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>
            <seriesInfo name="ISBN" value="978-3-540-44586-9"/>
            <author initials="T." surname="Okamoto" fullname="Tatsuaki Okamoto">
              <organization/>
            </author>
            <author initials="D." surname="Pointcheval" fullname="David Pointcheval">
              <organization/>
            </author>
            <date year="2001"/>
          </front>
        </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="IEEE">
          <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="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="HPKEAnalysis" target="https://eprint.iacr.org/2020/243.pdf">
          <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="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="http://dx.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="JKR96" target="https://doi.org/10.1007%2F3-540-49677-7_30">
          <front>
            <title>Designated Verifier Proofs and Their Applications</title>
            <author initials="M." surname="Jakobsson" fullname="Markus Jakobsson">
              <organization>University of California, San Diego</organization>
            </author>
            <author initials="K." surname="Sako" fullname="Kazue Sako">
              <organization>NEC Corporation</organization>
            </author>
            <author initials="R." surname="Impagliazzo" fullname="Russell Impagliazzo">
              <organization>University of California, San Diego</organization>
            </author>
            <date year="1996"/>
          </front>
        </reference>
        <reference anchor="UKS">
          <front>
            <title>Authentication and authenticated key exchanges</title>
            <seriesInfo name="DOI" value="10.1007/bf00124891"/>
            <seriesInfo name="Designs, Codes and Cryptography" value="Vol. 2, pp. 107-125"/>
            <author initials="W." surname="Diffie" fullname="Whitfield Diffie">
              <organization/>
            </author>
            <author initials="P." surname="Van Oorschot" fullname="Paul C. Van Oorschot">
              <organization/>
            </author>
            <author initials="M." surname="Wiener" fullname="Michael J. Wiener">
              <organization/>
            </author>
            <date year="1992" month="June"/>
          </front>
        </reference>
        <reference anchor="TestVectors" target="https://github.com/cfrg/draft-irtf-cfrg-hpke/blob/580119bb7bb45fd09a1079b920f8ef257f901309/test-vectors.json">
          <front>
            <title>HPKE Test Vectors</title>
            <author>
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="keyagreement">
          <front>
            <title>Recommendation for pair-wise key-establishment schemes using discrete logarithm cryptography</title>
            <seriesInfo name="DOI" value="10.6028/nist.sp.800-56ar3"/>
            <seriesInfo name="National Institute of Standards and Technology" value="report"/>
            <author initials="E." surname="Barker" fullname="Elaine Barker">
              <organization/>
            </author>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="A." surname="Roginsky" fullname="Allen Roginsky">
              <organization/>
            </author>
            <author initials="A." surname="Vassilev" fullname="Apostol Vassilev">
              <organization/>
            </author>
            <author initials="R." surname="Davis" fullname="Richard Davis">
              <organization/>
            </author>
            <date year="2018" month="April"/>
          </front>
        </reference>
        <reference anchor="NISTCurves">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <seriesInfo name="DOI" value="10.6028/nist.fips.186-4"/>
            <seriesInfo name="National Institute of Standards and Technology" value="report"/>
            <author>
              <organization/>
            </author>
            <date year="2013" month="July"/>
          </front>
        </reference>
        <reference anchor="GCM">
          <front>
            <title>Recommendation for block cipher modes of operation :</title>
            <seriesInfo name="DOI" value="10.6028/nist.sp.800-38d"/>
            <seriesInfo name="National Institute of Standards and Technology" value="report"/>
            <author initials="M." surname="Dworkin" fullname="M J Dworkin">
              <organization/>
            </author>
            <date year="2007"/>
          </front>
        </reference>
        <reference anchor="fiveG" target="https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3169">
          <front>
            <title>Security architecture and procedures for 5G System</title>
            <author>
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="HMAC" target="https://eprint.iacr.org/2013/382">
          <front>
            <title>To Hash or Not to Hash Again? (In)differentiability Results for H^2 and HMAC</title>
            <author initials="Y." surname="Dodis" fullname="Yevgeniy Dodis">
              <organization>Department of Computer Science, New York University</organization>
            </author>
            <author initials="T." surname="Ristenpart" fullname="Thomas Ristenpart">
              <organization>Department of Computer Sciences, University of Wisconsin–Madison</organization>
            </author>
            <author initials="J." surname="Steinberger" fullname="John Steinberger">
              <organization>Institute of Theoretical Computer Science, Tsinghua University</organization>
            </author>
            <author initials="S." surname="Tessaro" fullname="Stefano Tessaro">
              <organization>CSAIL, Massachusetts Institute of Technology</organization>
            </author>
            <date year="2013"/>
          </front>
        </reference>
        <reference anchor="WireGuard" target="https://www.wireguard.com/papers/wireguard.pdf">
          <front>
            <title>WireGuard: Next Generation Kernel Network Tunnel</title>
            <author initials="J.A." surname="Donenfeld" fullname="Jason A. Donenfeld">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="NaCl" target="https://nacl.cr.yp.to/box.html">
          <front>
            <title>Public-key authenticated encryption: crypto_box</title>
            <author>
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="RFC1113" target="https://www.rfc-editor.org/info/rfc1113">
          <front>
            <title>Privacy enhancement for Internet electronic mail: Part I - message encipherment and authentication procedures</title>
            <seriesInfo name="DOI" value="10.17487/RFC1113"/>
            <seriesInfo name="RFC" value="1113"/>
            <author initials="J." surname="Linn" fullname="J. Linn">
              <organization/>
            </author>
            <date year="1989" month="August"/>
            <abstract>
              <t>This RFC specifies features for private electronic mail based on encryption technology.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC6637" target="https://www.rfc-editor.org/info/rfc6637">
          <front>
            <title>Elliptic Curve Cryptography (ECC) in OpenPGP</title>
            <seriesInfo name="DOI" value="10.17487/RFC6637"/>
            <seriesInfo name="RFC" value="6637"/>
            <author initials="A." surname="Jivsov" fullname="A. Jivsov">
              <organization/>
            </author>
            <date year="2012" month="June"/>
            <abstract>
              <t>This document defines an Elliptic Curve Cryptography extension to the OpenPGP public key format and specifies three Elliptic Curves that enjoy broad support by other standards, including standards published by the US National Institute of Standards and Technology.  The document specifies the conventions for interoperability between compliant OpenPGP implementations that make use of this extension and these Elliptic Curves.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-mls-protocol" target="http://www.ietf.org/internet-drafts/draft-ietf-mls-protocol-09.txt">
          <front>
            <title>The Messaging Layer Security (MLS) Protocol</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-mls-protocol-09"/>
            <author initials="R" surname="Barnes" fullname="Richard Barnes">
              <organization/>
            </author>
            <author initials="B" surname="Beurdouche" fullname="Benjamin Beurdouche">
              <organization/>
            </author>
            <author initials="J" surname="Millican" fullname="Jon Millican">
              <organization/>
            </author>
            <author initials="E" surname="Omara" fullname="Emad Omara">
              <organization/>
            </author>
            <author initials="K" surname="Cohn-Gordon" fullname="Katriel Cohn-Gordon">
              <organization/>
            </author>
            <author initials="R" surname="Robert" fullname="Raphael Robert">
              <organization/>
            </author>
            <date month="March" day="6" year="2020"/>
            <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 and post-compromise security for groups in size ranging from two to thousands.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-tls-esni" target="http://www.ietf.org/internet-drafts/draft-ietf-tls-esni-07.txt">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-07"/>
            <author initials="E" surname="Rescorla" fullname="Eric Rescorla">
              <organization/>
            </author>
            <author initials="K" surname="Oku" fullname="Kazuho Oku">
              <organization/>
            </author>
            <author initials="N" surname="Sullivan" fullname="Nick Sullivan">
              <organization/>
            </author>
            <author initials="C" surname="Wood" fullname="Christopher Wood">
              <organization/>
            </author>
            <date month="June" day="1" year="2020"/>
            <abstract>
              <t>This document describes a mechanism in Transport Layer Security (TLS) for encrypting a ClientHello message under a server public key.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <seriesInfo name="DOI" value="10.17487/RFC8446"/>
            <seriesInfo name="RFC" value="8446"/>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization/>
            </author>
            <date year="2018" month="August"/>
            <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 updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC5869" target="https://www.rfc-editor.org/info/rfc5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <seriesInfo name="DOI" value="10.17487/RFC5869"/>
            <seriesInfo name="RFC" value="5869"/>
            <author initials="H." surname="Krawczyk" fullname="H. Krawczyk">
              <organization/>
            </author>
            <author initials="P." surname="Eronen" fullname="P. Eronen">
              <organization/>
            </author>
            <date year="2010" month="May"/>
            <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>
        </reference>
        <reference anchor="RFC7748" target="https://www.rfc-editor.org/info/rfc7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <seriesInfo name="DOI" value="10.17487/RFC7748"/>
            <seriesInfo name="RFC" value="7748"/>
            <author initials="A." surname="Langley" fullname="A. Langley">
              <organization/>
            </author>
            <author initials="M." surname="Hamburg" fullname="M. Hamburg">
              <organization/>
            </author>
            <author initials="S." surname="Turner" fullname="S. Turner">
              <organization/>
            </author>
            <date year="2016" month="January"/>
            <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>
        </reference>
        <reference anchor="RFC8439" target="https://www.rfc-editor.org/info/rfc8439">
          <front>
            <title>ChaCha20 and Poly1305 for IETF Protocols</title>
            <seriesInfo name="DOI" value="10.17487/RFC8439"/>
            <seriesInfo name="RFC" value="8439"/>
            <author initials="Y." surname="Nir" fullname="Y. Nir">
              <organization/>
            </author>
            <author initials="A." surname="Langley" fullname="A. Langley">
              <organization/>
            </author>
            <date year="2018" month="June"/>
            <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>
        </reference>
        <reference anchor="BJM97">
          <front>
            <title>Key agreement protocols and their security analysis</title>
            <seriesInfo name="DOI" value="10.1007/bfb0024447"/>
            <seriesInfo name="Crytography and Coding" value="pp. 30-45"/>
            <author initials="S." surname="Blake-Wilson" fullname="Simon Blake-Wilson">
              <organization/>
            </author>
            <author initials="D." surname="Johnson" fullname="Don Johnson">
              <organization/>
            </author>
            <author initials="A." surname="Menezes" fullname="Alfred Menezes">
              <organization/>
            </author>
            <date year="1997"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="test-vectors" numbered="true" toc="default">
      <name>Test Vectors</name>
      <t>These test vectors are also available in JSON format at <xref target="TestVectors" format="default"/>.
Note that the plaintext is the same for each test vector. Only the nonce
and AAD values differ. In these vectors, <tt>GenerateKeyPair()</tt> is implemented
as <tt>DeriveKeyPair(random(Nsk))</tt>.</t>
      <section anchor="dhkemx25519-hkdf-sha256-hkdf-sha256-aes-128-gcm" numbered="true" toc="default">
        <name>DHKEM(X25519, HKDF-SHA256), HKDF-SHA256, AES-128-GCM</name>
        <section anchor="base-setup-information" numbered="true" toc="default">
          <name>Base Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 0
kem_id: 32
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
seedE: a77ae3e14cc2ec9e603a9049423d48e66a5e3139e896e95cf19919430657adc7
seedR: 1289f0db1d8f68d0c531b5e53a40911a2a2347059355d7c267717033fef2b08c
enc: 8a07563949fac6232936ed6f36c4fa735930ecdeaef6734e314aeac35a56fd0a
shared_secret:
f3822302c852b924c5f984f192d39705ddd287ea93bb73e3c5f95ba6da7e01f5
key_schedule_context: 000c085d4e6d2e6a568b5dcf334f7badd56222cd79f2ac98b6
f99059f311c3f16a44c484c33962433c90728ac6c2893f828d58cebf58ba4fdae59b0a8f
7ab84ff8
secret: 98a35c8191d511d39a35afcb6cd4072d5038afb2bcc1ecb468626466b2870447
key: 550ee0b7ec1ea2532f2e2bac87040a4c
nonce: 2b855847756795a57229559a
exporter_secret:
1aabf0ea393517daa48a9eaf44a886f5e059d455988a65ae8d66b3c017fc3722
]]></artwork>
          <section anchor="encryptions" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 2b855847756795a57229559a
ciphertext: 971ba65db526758ea30ae748cd769bc8d90579b62a037816057f24ce4274
16bd47c05ed1c2446ac8e19ec9ae79

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 2b855847756795a57229559b
ciphertext: f18f1ec397667ca069b9a6ee0bebf0890cd5caa34bb9875b3600ca0142cb
a774dd35f2aafd79a02a08ca5f2806

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 2b855847756795a572295598
ciphertext: 51a8dea350fe6e753f743ec17c956de4cbdfa35f3018fc6a12752c51d137
2c5093959f18c7253da9c953c6cfbe

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 2b855847756795a57229559e
ciphertext: 2e5fa3a358e3ab64e5e981c4b89b5ae4cc5b800aaf726dc64ff857536a3d
b0e6d816199e711aac60c4670c2a31

]]></artwork>
          </section>
        </section>
        <section anchor="psk-setup-information" numbered="true" toc="default">
          <name>PSK Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 1
kem_id: 32
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
seedE: 0fa1407ccee05de0cceb2f2d2381d2df0602dbd43be90eefd288ce4ad0b3ba32
seedR: 326ee379f778718e6cb343f55668fbb9d0098ba0503cd4414a8f1ce252605c39
psk: 5db3b80a81cb63ca59470c83414ef70a
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: 08d39d3e7f9b586341b6004dafba9679d2bd9340066edb247e3e919013efcd0f
shared_secret:
9d4fe1809006b38854f056830b8900086f562207dce6010eadf23d2d5303cdf8
key_schedule_context: 01512564fc13bf3387a7d73eb72eb6b62766480582bfe146c4
e5afb8788652269644c484c33962433c90728ac6c2893f828d58cebf58ba4fdae59b0a8f
7ab84ff8
secret: 84d1c77bdf45e43e2e84f607573f0db0758c56f322500a673be8e2062d343b1f
key: 811e9b2d7a10f4f9d58786bf8a534ca6
nonce: b79b0c5a8c3808e238b10411
exporter_secret:
7e9ef6d537503f815d0eaf70550a1f8e9af12c1cccb76919aafe93535547c150
]]></artwork>
          <section anchor="encryptions-1" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: b79b0c5a8c3808e238b10411
ciphertext: fb68f911b4e4033d1547f646ea30c9cee987fb4b4a8c30918e5de6e96de3
2fc63466f2fc05e09aeff552489741

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: b79b0c5a8c3808e238b10410
ciphertext: 85e7472fbb7e2341af35fb2a0795df9a85caa99a8f584056b11d452bc160
470672e297f9892ce2c5020e794ae1

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: b79b0c5a8c3808e238b10413
ciphertext: 74229b7491102bcf94cf7633888bc48baa4e5a73cc544bfad4ff61585506
facb44b359ade03c0b2b35c6430e4c

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: b79b0c5a8c3808e238b10415
ciphertext: 5aeb09a3798d21dc2ca01f5c255624c9c8c20d75d79d19269eca7b280be0
cb7851fae82b646bd5673d10368276

]]></artwork>
          </section>
        </section>
        <section anchor="auth-setup-information" numbered="true" toc="default">
          <name>Auth Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 2
kem_id: 32
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
seedE: 02900cb4856b5f222293a9bd7bda2f1f81c562dc3002336ad1c39f6572402b7d
seedR: 518df90f0f5044ce653180c700e4902d37a7ba1cd23482a76e18b300fecaac4e
seedS: 262a05ad0c08030cdbbaafc03d64f33b95bf8089f216c62ac39b72064a4b4dcb
enc: 56a21e8b5416d187c3d865765794e7f361d631049ebbb6a64ed28fd071068121
shared_secret:
dec9ae331e9017669151e07c06d1cd7f3dd318c180c9cad5223e1c2b019d2243
key_schedule_context: 020c085d4e6d2e6a568b5dcf334f7badd56222cd79f2ac98b6
f99059f311c3f16a44c484c33962433c90728ac6c2893f828d58cebf58ba4fdae59b0a8f
7ab84ff8
secret: a78ac3f106be621d7ce48d7f02e9c69f23c042912697a985787c34e5340ca8e7
key: 82a24b8790521d6b2d260664d9bfaefc
nonce: bb0cb3a72dff841c796fce56
exporter_secret:
933d7ef819b2fabc810db31f7fcbe5b16c4efa0f4b715e888466829d9b22062d
]]></artwork>
          <section anchor="encryptions-2" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: bb0cb3a72dff841c796fce56
ciphertext: 86dea722bc4f4cb0983b70dbdb539cf79e393546805d90d3f832af5f907c
86f37ac579976db191a479c9450f37

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: bb0cb3a72dff841c796fce57
ciphertext: 4f6b757fc0e807cf8f4726ed1bd05c6b87714b2332372795f7e8579fe21e
104ff8180fea797855a62f71a37aea

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: bb0cb3a72dff841c796fce54
ciphertext: 999285da95ed93dfb48bbe99d46ebba43c98e35f6ccd4fed92edf9d618e9
8174b63a0a2c12ab91521669fdad2c

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: bb0cb3a72dff841c796fce52
ciphertext: 1ac6af74dfe65c63b046eb99fb9036ce759ddf5bfb3a396796892c78ce3f
35beeedb7b3d1b515a9dff7d9af365

]]></artwork>
          </section>
        </section>
        <section anchor="authpsk-setup-information" numbered="true" toc="default">
          <name>AuthPSK Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 3
kem_id: 32
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
seedE: c1d1028243a951dbf6469025f3a1304407b08fb932104e61c7aab42ab4f1995c
seedR: 02a965d8f53bbdcc11cc618d4f31f69277500b75959ca97fd533058315511d1b
seedS: e9c09a3e50073935e75d3846007a26088a93ebf58ad0bb30ad6c42a9d4d2419e
psk: 5db3b80a81cb63ca59470c83414ef70a
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: 0f496b65ac352457865d9f6cb30e0ceaffee742accb016c2c1a7cec68a33244c
shared_secret:
83272c7b992c197f882d992ef6737bb7f4b17ddf103368e1d7e90b07c946b2e3
key_schedule_context: 03512564fc13bf3387a7d73eb72eb6b62766480582bfe146c4
e5afb8788652269644c484c33962433c90728ac6c2893f828d58cebf58ba4fdae59b0a8f
7ab84ff8
secret: 619e4c000edf5cb8c2b795fbf2dce842d0ff5cba4e12312f5fc67510eb059560
key: b305d06827e854504246d9bbae3b1f80
nonce: 4940e55b734bbe1d46e24bd6
exporter_secret:
bd6ec34885e97fe0c07bda3454d47ece7b6e9a1a05f729223485e4335c40cbdf
]]></artwork>
          <section anchor="encryptions-3" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 4940e55b734bbe1d46e24bd6
ciphertext: c7200a5246b4aa9e6878e22830d19466ca31394651ae84383f183991d3a8
662415d60e1e073209e6dadd480ff2

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 4940e55b734bbe1d46e24bd7
ciphertext: 8071f54a0a43f77a30de1fd96133d91184b5f863525d7810eb9350aa2555
8bc470781e62c27fe9a566f15efdc8

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 4940e55b734bbe1d46e24bd4
ciphertext: fc9747b21f74c098899e408d86c11d28617a1a3eb2d985fe4af7ccea2023
43df096920759614bfa2586f0f1c5a

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 4940e55b734bbe1d46e24bd2
ciphertext: d85c2d06220ae34064210c4129f8c95dd43c45fb87ab25885467dc2c6a66
3deb84043eedde254968c55ef693e6

]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="dhkemx25519-hkdf-sha256-hkdf-sha256-chacha20poly1305" numbered="true" toc="default">
        <name>DHKEM(X25519, HKDF-SHA256), HKDF-SHA256, ChaCha20Poly1305</name>
        <section anchor="base-setup-information-1" numbered="true" toc="default">
          <name>Base Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 0
kem_id: 32
kdf_id: 1
aead_id: 3
info: 4f6465206f6e2061204772656369616e2055726e
seedE: 8c5a8a722a10c144a7577a73bbbbddb0284ea3436f9901a12c54eafd6eb5cb81
seedR: da0002ddf1803c7d54c1fb10fd68eb76afa2aa4577352b9ce26462cf63a97f6f
enc: 716281787b035b2fee90455d951fa70b3db6cc92f13bedfd758c3487994b7020
shared_secret:
f995f043efe63c77ac333fbe6007240fd01006bac1b075d2807845afae89a19f
key_schedule_context: 00cbe688614d6e54c26594f3c118e6cb1a01f6c6572a9112dc
2687bd3e8b1e6ba06da3f8f29fa93987a2c185c1c17e719f7ae8eb4d564b80119e012c9c
959b0ca1
secret: b061e1b7e604df2fe8a4d32e25d33aeb5a0849e7b15dd212231adbf656259f8b
key: 1d5e71e2885ddadbcc479798cc65ea74d308f2a9e99c0cc7fe480adce66b5722
nonce: 8354a7fcfef97d4bbef6d24e
exporter_secret:
3ef38fcad3a0bc7fca8ba8ccea4a556db32320bca35140cb9ee6ec6dd801b602
]]></artwork>
          <section anchor="encryptions-4" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 8354a7fcfef97d4bbef6d24e
ciphertext: fa4632a400962c98143e58450e75d879365359afca81a5f5b5997c655564
7ec302045a80c57d3e2c2abe7e1ced

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 8354a7fcfef97d4bbef6d24f
ciphertext: 8313fcbf760714f5a93b6864820e48dcec3ddd476ad4408ff1c1a1f7bfb8
cb8699fada4a9e59bf8086eb1c0635

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 8354a7fcfef97d4bbef6d24c
ciphertext: 020f2856d95b85e1def9549bf327c484d327616f1e213045f117be4c2875
71ab983958f74766cbc6f8197c8d8d

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 8354a7fcfef97d4bbef6d24a
ciphertext: 5e688918b05e96631628eef3e74781caf41c4f25ee1ef52ca1d746ca3156
1392c8833a7232036bf8e839a4c8e0

]]></artwork>
          </section>
        </section>
        <section anchor="psk-setup-information-1" numbered="true" toc="default">
          <name>PSK Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 1
kem_id: 32
kdf_id: 1
aead_id: 3
info: 4f6465206f6e2061204772656369616e2055726e
seedE: 31c63611a67f55281f76477958758873f7a65113f3e1666ba5fce96e96852684
seedR: 2dc8b23353f632c2797ba4644fafb7363d958c1fce79162a215863951bd9a06c
psk: 5db3b80a81cb63ca59470c83414ef70a
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: f4639297e3305b03d34dd5d86522ddc6ba11a608a0003670a30734823cdd3763
shared_secret:
95978c18311fc9e360209dd2cd10b2fcacf019ed25f7703cb2b4e4538558c13f
key_schedule_context: 01f5f7e2ba59c3ff0cff51f71c4204fcfc76c95f778b37ccdc
6a83b3df36c33e7b6da3f8f29fa93987a2c185c1c17e719f7ae8eb4d564b80119e012c9c
959b0ca1
secret: 2c25a1d6e3b889cc8ea031a96aa3357f16973f83ab1d444114e7bb4f56e4a639
key: 396c06a52b39d0930594aa2c6944561cc1741f638557a12bef1c1cad349157c9
nonce: baa4ecf96b5d6d536d0d7210
exporter_secret:
96c88d4b561a2fc98cbafc9cb7d98895c8962ba5d9693da550cf7ed115d9753f
]]></artwork>
          <section anchor="encryptions-5" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: baa4ecf96b5d6d536d0d7210
ciphertext: f97ca72675b8199e8ffec65b4c200d901110b177b246f241b6f9716fb60b
35b32a6d452675534b591e8141468a

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: baa4ecf96b5d6d536d0d7211
ciphertext: 57796e2b9dd0ddf807f1a7cb5884dfc50e61468c4fd69fa03963731e5167
4ca88fee94eeac3290734e1627ded6

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: baa4ecf96b5d6d536d0d7212
ciphertext: b514150af1057151687d0036a9b4a3ad50fb186253f839d8433622baa857
19ed5d2532017a0ce7b9ca0007f276

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: baa4ecf96b5d6d536d0d7214
ciphertext: 6232e4a184dbff7361f9e4d6bfaaf97631225ee317e63cb09e8f74fc93ef
eedb6385d4f4cb2e30ffb82aea0e1f

]]></artwork>
          </section>
        </section>
        <section anchor="auth-setup-information-1" numbered="true" toc="default">
          <name>Auth Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 2
kem_id: 32
kdf_id: 1
aead_id: 3
info: 4f6465206f6e2061204772656369616e2055726e
seedE: c9c2d6f5a6f88e4c2bf5600817aa140fcb46dc682942bfca357c30fe2db17d6b
seedR: 71237558db2b55c1a09f6695187d2af6e7d1dd97256cbb927bfc8a794476d07f
seedS: 4255c61730d15a7ed2018a023ad45274c1ab38ce621d4b597636e08e97619ef1
enc: f82cc290dd57c0c63f041ad62605d1ae0c5436243e18758b2b63658904ee6a09
shared_secret:
92d03a5e87f58fda583129e62f1cb55769df02a2453863b0a09f55e4bd5ff7be
key_schedule_context: 02cbe688614d6e54c26594f3c118e6cb1a01f6c6572a9112dc
2687bd3e8b1e6ba06da3f8f29fa93987a2c185c1c17e719f7ae8eb4d564b80119e012c9c
959b0ca1
secret: 4760feb6cc5ac6891ef2114490723c6ca2ad3352b2c52a60b390616d731f7767
key: 7638c7ade5856344fbc3a92600fa278dfff1c22b5857fe2c391e5bd248ac32ac
nonce: 1d14b2320b54376e6c43e791
exporter_secret:
0ea20eb846e3c26f1ee8b2ecf55c9abdfecc910387945528c73a5ff91bc4ef38
]]></artwork>
          <section anchor="encryptions-6" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 1d14b2320b54376e6c43e791
ciphertext: 30b013196168dcaf7a07047eda596f8c4f425abe6cfa269a7602b2a2b0be
a958e2ded3c68c8c9e341ca4bf2e31

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 1d14b2320b54376e6c43e790
ciphertext: a259ce67a35c44ff9616f83cceadb2f0f542b208e9410686ece7e3eb92f0
8ca2e3fc95ccde64e849c96367952a

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 1d14b2320b54376e6c43e793
ciphertext: 4691caf957cf159e39a3f66cee9cd76e06ae3e7f97c577898423babfdc98
00669d69356531dab839e0a491d502

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 1d14b2320b54376e6c43e795
ciphertext: 471ccbb6a81a3bfcc4c11dbeed62e95a7279fdab214f3b0cf22e998a89a2
fd054fdf6326ea6a340b20cfafae20

]]></artwork>
          </section>
        </section>
        <section anchor="authpsk-setup-information-1" numbered="true" toc="default">
          <name>AuthPSK Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 3
kem_id: 32
kdf_id: 1
aead_id: 3
info: 4f6465206f6e2061204772656369616e2055726e
seedE: ca35fe19e214033e34465a3bb125dfea8b483e55fb8163774413d95a4d9b1f0e
seedR: 9a063358dc95c04f2bdf2a9a2911145c0632f49012829d92b2b5d9f398a9cbe3
seedS: bc7c6a9ce74ba9e7fff0644da70899148f4775eaa1857478f0275af76cabb764
psk: 5db3b80a81cb63ca59470c83414ef70a
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: a6125996b3bb128bfa05392ffb39afd1e5b0031625e26c8c484e4aea0721ec39
shared_secret:
0c9ac657691ef63b088f9777e84a9a8ccda766f0c9834ad318c0e49cc34fa43f
key_schedule_context: 03f5f7e2ba59c3ff0cff51f71c4204fcfc76c95f778b37ccdc
6a83b3df36c33e7b6da3f8f29fa93987a2c185c1c17e719f7ae8eb4d564b80119e012c9c
959b0ca1
secret: 502a94d9ee9cf5367beb65a97e7bfeae19a7cfbff25c6a4d2a9d1ece4d744b41
key: 968ebe599b1443cbfbd1914daa5bf667a52cf7a3339ecb209e8684f1f9c97d86
nonce: a0bcc93f25f5b9e707f453e3
exporter_secret:
12fa76c18f0c16769262574bc6d49e9b22cac1d963e3e6b91031f61ef4277350
]]></artwork>
          <section anchor="encryptions-7" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: a0bcc93f25f5b9e707f453e3
ciphertext: 1b049559f757b7c16d77bec8a8cf9c1cecc6becaa08aa513c791822b8293
45cf4477936df226e34804acb93b33

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: a0bcc93f25f5b9e707f453e2
ciphertext: 21311cd102acdb30e18669620623c54dc66eb0c5cc7fad1ac1a327062d89
fc1fb6cd1228f8de48418d089a709d

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: a0bcc93f25f5b9e707f453e1
ciphertext: 3e84e9e5c3d004a6d8cea022c8ae5a10bac7d75829a189b137db55e6a5c1
1974792e8a6b92cc208d615f424d45

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: a0bcc93f25f5b9e707f453e7
ciphertext: 595f2004a961c4762e418d33821f5c73335a681e75512134c5a5e3912d24
bd089b074e018f042e6164bc72c5f5

]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="dhkemp-256-hkdf-sha256-hkdf-sha256-aes-128-gcm" numbered="true" toc="default">
        <name>DHKEM(P-256, HKDF-SHA256), HKDF-SHA256, AES-128-GCM</name>
        <section anchor="base-setup-information-2" numbered="true" toc="default">
          <name>Base Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 0
kem_id: 16
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
seedE: 616ed5a6277fd3324e0cc0f4349cd345b0adbb1ceb98de44c03aab083fbaa6e6
seedR: 67bc0b8ba01fd8a1526d13c803d4d9ffe1a9914ac27e7a6c925b1580893a8485
enc: 048a0c9b27c844f5f1c6a1d9d570e34909c6359997b6acbd8132f1536d1f7685ff0
d203f205dfe4a789e4af3f599172b613d060c80d0e1341f066a87c0f83d827c
shared_secret:
5f175bec391524f0153b05559212adbc2f5d6981b95a5d53fa7ed58fe5e156be
key_schedule_context: 00c14ae6a0da7c6764c62eba270ec0cc28b5b568b4849a9b59
425c08860800fad8a633c96fae27707d2cfedac544e900a8b52a016cf86e4bf25a7d350f
be847f8d
secret: f753e6728460efed42ca308bef93e8b6646cec0252a0154d8310984445bb0629
key: d0696b5461fee5620d54f33b04a00f79
nonce: 99f33bd3ad9ad334b17de055
exporter_secret:
f79e9a0e83b5c678cc0c9240b68fc3a84096ce374f37673ad4ea345ef0a3510c
]]></artwork>
          <section anchor="encryptions-8" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 99f33bd3ad9ad334b17de055
ciphertext: 0d77ad2340cc7af125fcd7f4ea63bca7e857d774d08365eff8c7f63091a5
e5aebca4721c854579b11149649209

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 99f33bd3ad9ad334b17de054
ciphertext: 90260e86b560860d0bf7bd1273bf7b6f4bf43aa94d475c93015c5d5b536a
ae7631227968ab1aecc337cd080988

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 99f33bd3ad9ad334b17de057
ciphertext: fba616306cbe53eb8faef059a8d39947102a037c2e5bfb6b770bf7241576
b74e197ae6972c39177b8393e4bece

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 99f33bd3ad9ad334b17de051
ciphertext: ca7c1e359bb916ec8aed3a10bd2a703d044af6a1a1b5a8f8bbba63141f35
ca7c292516bda6c97c4bfe85333f6f

]]></artwork>
          </section>
        </section>
        <section anchor="psk-setup-information-2" numbered="true" toc="default">
          <name>PSK Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 1
kem_id: 16
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
seedE: 8131f719cf2d1f5263da51e133876a99eaaf5d5fb118bda64ef12ca6fa40f987
seedR: 236ddc165201cb79b2d8c7399c7f6e6e8cc4542b2fd1b75d107875db2b89cced
psk: 5db3b80a81cb63ca59470c83414ef70a
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: 04df79d22d7cba95ff448cf84ffa01cdd87a68c9ef70dd926fe164a76d2cd243036
f3a34e9bac0725406fcb46d7c723248e42c3b329bed5bf8fcaa47d87d9d3e00
shared_secret:
1f245a22765eaf94b3a76463b9a248941078d138c3216acfcbd1d25f8772afda
key_schedule_context: 018c27d3410cb79f908302ae06a67ad4c6f971cc37f64c2380
7cb4de4adeaa7d76a633c96fae27707d2cfedac544e900a8b52a016cf86e4bf25a7d350f
be847f8d
secret: fc6a6aca6b179515d69086844efec0acda07bd55efd50873cb46fb811faea941
key: 89fb75a38ba6bab89b1a8b0fc7db366e
nonce: 00b1c2de64b6a56a51921d56
exporter_secret:
cbd0d3b0ce32cc4ad834a0e81cecd21ecba042a0f4f25ae839a1fe95e56b89ff
]]></artwork>
          <section anchor="encryptions-9" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 00b1c2de64b6a56a51921d56
ciphertext: 75e82c5e991af745c380557b2f03f793dde5f4a78b3bf31429735aebbbd8
81580917e8a489fb0da3b081444319

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 00b1c2de64b6a56a51921d57
ciphertext: bc7e436c6435634a69147dc20e3abae51f2c02f96ec2b198138b5e10e284
20cb45a7ee149b1d936154ca320e08

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 00b1c2de64b6a56a51921d54
ciphertext: bd020f02b8eaae481e512bfe4969b2b285c636f756c72d70022f31af52bf
00692c57264bb214a412ac8fb1b965

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 00b1c2de64b6a56a51921d52
ciphertext: b1ff4e7b8ec452aff36b06c5c1bcf7e4e1cdd3211f1516ce752366f1b81d
5cc813e4d5e2142239afcbd1a75f4e

]]></artwork>
          </section>
        </section>
        <section anchor="auth-setup-information-2" numbered="true" toc="default">
          <name>Auth Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 2
kem_id: 16
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
seedE: f9b977313fa3cd4dd8637307fc93e48093ab6bcd45781ad9f7a79f5f0e379bb6
seedR: 740a67dba29760f8d95e953a1ae75fda6d5eede2a41c15f4860b5557d4763fbf
seedS: 174deda86fb885b78e5ef8ad158be3c38349c5322120f03ee9ddb6336788d8ca
enc: 04686fc26c925890636fdaabae3434af53172035f7a191bc21fbc7ad9161ee1673c
0e6b61d0c4b2db3140d622c46c8e42fd4e10fb48b4fd522ff59f795659a5b13
shared_secret:
8e1409be7adea332a36fbf29bf8668ae13d66cfecf5d02e8d2cb2c16950af36e
key_schedule_context: 02c14ae6a0da7c6764c62eba270ec0cc28b5b568b4849a9b59
425c08860800fad8a633c96fae27707d2cfedac544e900a8b52a016cf86e4bf25a7d350f
be847f8d
secret: 35cafa2133584ef110a63010be05bcbc32fe5b5985f5b62ae94c07cd3a844ae1
key: 40eef365aa0dcee18cb7d16b0d24e35d
nonce: a5f0d2f22f3e404976ca7b1b
exporter_secret:
162a8e2af6ba4e66e110b8dca44a076f49d4fba4614540341f4013159eab5e69
]]></artwork>
          <section anchor="encryptions-10" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: a5f0d2f22f3e404976ca7b1b
ciphertext: 1e9233f2b21834f72bc2b23173b107770d97092d1fc57960aaf0d011b1bb
8f1767d6ff8cb3b5bdb857168260ee

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: a5f0d2f22f3e404976ca7b1a
ciphertext: e870727eec0872dfc176e3d48e894a6fd23c560b2f7c097febd70cf81971
0e8a0c30adfe0a1d740b5e42d09325

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: a5f0d2f22f3e404976ca7b19
ciphertext: 1b28bcf1c88146063ca68a999bee8b6d339bf9ec9ce1b22aad255abf96b7
951f0d14db39d2a7042402d2ff3b41

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: a5f0d2f22f3e404976ca7b1f
ciphertext: 10ec221a706669d206e4fdaffe72adadf4c98286728aa58b91ffea203517
9ecf97677723a814464d6c0e3220f5

]]></artwork>
          </section>
        </section>
        <section anchor="authpsk-setup-information-2" numbered="true" toc="default">
          <name>AuthPSK Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 3
kem_id: 16
kdf_id: 1
aead_id: 1
info: 4f6465206f6e2061204772656369616e2055726e
seedE: ac7928bd504449496e56517f59ad30ba62575c3c328864340247d73217823bb3
seedR: 85c7ca573ca20cffc0db7748f2b93a1faaa951aaedace61a6cc0b15755cf7cdb
seedS: adfa10a0be028fec577fc0d8da73b3af3f6c8d96976ac3664b1a191c8ef0506c
psk: 5db3b80a81cb63ca59470c83414ef70a
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: 0435ea0b3e1693ee6c10ab35b0d6a01d9c6879be1ca8676cc2fd16e94b622368b41
25f4528deeb1d32dbb0a9b815341ee6dc723e00dfad789a46abc337c0cb2d74
shared_secret:
acabc837f0148300e7264c7bfc597ce119a5a77c51eb091fb943573cafa69ce2
key_schedule_context: 038c27d3410cb79f908302ae06a67ad4c6f971cc37f64c2380
7cb4de4adeaa7d76a633c96fae27707d2cfedac544e900a8b52a016cf86e4bf25a7d350f
be847f8d
secret: dbbb9e2244449b76d56b48a7c8257f8b03e9a5948fc382528ad4f8464f3b8ee9
key: 51ad48b07edc1bc355bbd8ba1288f90d
nonce: fa9f85cd9f4e97cc5655eeee
exporter_secret:
25fa7177ee5c4686f095fc5c51d2ce5c5871a6d1210c3e345fe4ba2fc8febbdf
]]></artwork>
          <section anchor="encryptions-11" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: fa9f85cd9f4e97cc5655eeee
ciphertext: bab2fad2725ecde8486e17afb2ea44d908c023f80ee2592273e8ca7a2536
7c946d318f3bf241038f9ebd0267b3

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: fa9f85cd9f4e97cc5655eeef
ciphertext: 63270c658fe7f960837760b763d487ba9b663643a3843399328aa90d06a1
9046e76b6e5a23460dec758b41a03c

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: fa9f85cd9f4e97cc5655eeec
ciphertext: 9ee05381c12b4ac0d6fdddfb0efaf7ebe126474af24785af7ead4730b338
2155a7924996410f42905b05a7a3de

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: fa9f85cd9f4e97cc5655eeea
ciphertext: 971ba4154f709dcd45fd46b3a7cf53cfaa34ffcf8758c7bc6beea9e91b57
25cd611356da09dff633517c9284d2

]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="dhkemp-256-hkdf-sha256-hkdf-sha256-chacha20poly1305" numbered="true" toc="default">
        <name>DHKEM(P-256, HKDF-SHA256), HKDF-SHA256, ChaCha20Poly1305</name>
        <section anchor="base-setup-information-3" numbered="true" toc="default">
          <name>Base Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 0
kem_id: 16
kdf_id: 1
aead_id: 3
info: 4f6465206f6e2061204772656369616e2055726e
seedE: fcdcc1cd73bf5cc87b991ca1f7b2f4f0ec2aac20e105efcb7111177a150af48c
seedR: 483bb0a0fe639035e3909be5c43af275da1cc8a0f355385fc4c7af211fbcad60
enc: 042eba2b8c1fa16ee99ab9f4627aee2358f71d6240955e5747ab869b5531a43ddab
8dec00e9fbdfb2f92073774a9981f72312ff6361b551bb254295fffea04de02
shared_secret:
23df0808be6ebbef5822349e5dae008d2c1e9f4020367097bde447ed5fcf383e
key_schedule_context: 005193809f9701d761ad3e980ec406cc14ea789817d821d0cb
139989260f37f4c6d3da0100c16489caa7ad5adf41151b806e7a2a438b79586881afdfaf
8bc6fedd
secret: e0001a90ebb7efc5e85e1f72c90ea2e98b14c0431379789250bd2acda2a95208
key: 652abfcff470224fec73d73cef7c424401cb4d72d92ff5a8447a865c19830535
nonce: 07e632ae808cddf6acaeb15b
exporter_secret:
f3a31ef376affde7513fa5989ffadf6e32b8c7ee40a71d2c2f890dda77a5dadd
]]></artwork>
          <section anchor="encryptions-12" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 07e632ae808cddf6acaeb15b
ciphertext: edcfa837ec3e00787a52b462ac2a3a438a75e8df971fd21fa617998398c3
4ecfb69b4878faaa68c21edc39be2a

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 07e632ae808cddf6acaeb15a
ciphertext: 02dfb0620b7d7835f66dd53b3444742649104532a808aab474b13c311b3d
5dfb99e80f00988b9e70546c369021

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 07e632ae808cddf6acaeb159
ciphertext: f42d3def0a450bbf6d15a6950a64c198bd36760a9b53e775bc3e60f9ec38
253597b725181e6d3b5feaa0ad80ef

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 07e632ae808cddf6acaeb15f
ciphertext: 03769cf4d9e13994376ee35afd627b9f7d1f495ae2d1d3538c4c803e9c08
aa13cf9ae7ec545c0f17b28d6b1cba

]]></artwork>
          </section>
        </section>
        <section anchor="psk-setup-information-3" numbered="true" toc="default">
          <name>PSK Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 1
kem_id: 16
kdf_id: 1
aead_id: 3
info: 4f6465206f6e2061204772656369616e2055726e
seedE: d5f77ccc5d8a284a97f6c9c72fa5cba1daff07cb177770796733129a39de0c14
seedR: 4ac36e24812130586b5326c046de98d3186124dedc8fa6afe6bb1181540bd0f7
psk: 5db3b80a81cb63ca59470c83414ef70a
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: 04f6ddb4c4f41ec4c1577e34519fb3a5b8d659945d425b4b117e02636841c4287fa
34bab4c35a5d41d788a8c321b8256cd71c93ff4a8799ed28301114196f9f6a6
shared_secret:
c6ab3fe04a92b975f5fd98a09db71063814b03ba86a69da3004e3a0dda8bbc40
key_schedule_context: 017d40471421306b100f7401fbf733fef208e1508bd2744517
e95ef7471f21a1dad3da0100c16489caa7ad5adf41151b806e7a2a438b79586881afdfaf
8bc6fedd
secret: 6ab05d9bade32456ac456527e164651f1e7b90a22cec55cd32878dd4770271bc
key: abc5af188ea872c94cafd11dbdb7836cc1930ca0271833ba2a36a04d54404912
nonce: 4724facf9d0af1c7a55a0560
exporter_secret:
38e87692f83d991b20e731e1a29fa86bb92630824de1df6aeaf04fd4d59778e9
]]></artwork>
          <section anchor="encryptions-13" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 4724facf9d0af1c7a55a0560
ciphertext: 6972d38453567d2624db55ad748d42ff3177d1e941bbe57f68d03b53fb0f
1d48b6fc2dfcb84d8ef39f3a8ad6c5

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 4724facf9d0af1c7a55a0561
ciphertext: 6ff2faf2ec58ddd27c3a97a25a1d1b3db45484f2bb1c84c751f58c03d660
cee4b942a10bac339044bd65157c65

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 4724facf9d0af1c7a55a0562
ciphertext: e2203b51c7d776ed347168dd7d93066184bb7e775277dea7f95bcc3e897c
edd52fdcea492158116a8354387f85

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 4724facf9d0af1c7a55a0564
ciphertext: c953c3657872749b048d8245ef98cf33a2f7e4c62f27d9b9e3496fdf50b9
51e63031092466f4bc67fb93bcee82

]]></artwork>
          </section>
        </section>
        <section anchor="auth-setup-information-3" numbered="true" toc="default">
          <name>Auth Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 2
kem_id: 16
kdf_id: 1
aead_id: 3
info: 4f6465206f6e2061204772656369616e2055726e
seedE: 336770111a4f3e97ddd1592a15e4734b910b9a5b566e846cd8f28c6199f8c5e7
seedR: df66678a95aaf77b4a3ec2635b23b181dd3d8a05c68022cb6d5d71b119c1535d
seedS: 01bbe1ed07b0688a97d888880ca203b9ac5ebf298f4a5a081e1fa46dbb6e183f
enc: 044b364b95db5fadf0617c48688eed541aab99ddf72a5357ae371c34df7803fcd0d
a422f17ce4c68d03fef7c6ab272041230a3901361445644c2a6c3d02e9532c5
shared_secret:
f7b6fa8884784f6723692603cd958db6830cb0c87718f72cdff10758cb97a3ab
key_schedule_context: 025193809f9701d761ad3e980ec406cc14ea789817d821d0cb
139989260f37f4c6d3da0100c16489caa7ad5adf41151b806e7a2a438b79586881afdfaf
8bc6fedd
secret: 53be166abcfea99cf7bbe7c20e3704bccee414244cebed9dd5a2bc9f3ffe1600
key: 807c3ed1b3fdfa8ffb052e01e2f60e75aa9f47ed8378c17ad737e58f32954888
nonce: 7c84b0a76e3bff59f55eeb66
exporter_secret:
ad0c4d9ecace4d473c702f15f83c14964abc8340d560fb103a8ed9e96d30477a
]]></artwork>
          <section anchor="encryptions-14" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 7c84b0a76e3bff59f55eeb66
ciphertext: b626e15a016a4d1141404694d4f42300324839c26442761558aff3f11bea
d5af3102ca3eaa3d9ebe7d61b5e9ad

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 7c84b0a76e3bff59f55eeb67
ciphertext: 9a71859d14fc01dd756e9c5ae3bd17f30276f60702913ed52d9bdd1f984d
d3c1f8d8da0e3cf80d7948322e5272

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 7c84b0a76e3bff59f55eeb64
ciphertext: 56e9a11b272337128786b69cbf4969d92bfa91ff642c76815c3ed4169d87
08d1736466d5ba124de3de05e274ed

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 7c84b0a76e3bff59f55eeb62
ciphertext: 47c2b0dd4cc2a0cdb9ece76eca03d71556f33554f52800adc208c1c954a5
0035d3a0c442ad07e5a4a0af2d3987

]]></artwork>
          </section>
        </section>
        <section anchor="authpsk-setup-information-3" numbered="true" toc="default">
          <name>AuthPSK Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 3
kem_id: 16
kdf_id: 1
aead_id: 3
info: 4f6465206f6e2061204772656369616e2055726e
seedE: 7454e819f88659590461a91dff451738df7789f5b4ced005211ed7b264be713f
seedR: 5f587a548f7cba21c98ac0dfdac619e962aba8526339c7ad98e804abd9fcbf19
seedS: 1093c27b5e2719ffade39714b76a8e994341b019de9522d89133b41a200f97da
psk: 5db3b80a81cb63ca59470c83414ef70a
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: 042b8f991a7f0e1a833f58ce65bf65c96780e9620ae3ab6e8df1645b54b70ed89ad
bc9c2db9f4b6a0c7c08a76523f24ccbd555da8cdd0403e5f1aaf3f68e0dc62d
shared_secret:
ae88d508550ecc1804706bf7ef31c329cd2475f20b3ce3082207dc7c806121d5
key_schedule_context: 037d40471421306b100f7401fbf733fef208e1508bd2744517
e95ef7471f21a1dad3da0100c16489caa7ad5adf41151b806e7a2a438b79586881afdfaf
8bc6fedd
secret: 35a0d70ef7522b31c1d534e268a6d5139b0943b598e61c1c81f8d21633f459cf
key: 2fc299bf7d673aa547d3cb9972a7976bc262508c52a1a84c617e0f0b6bca3c39
nonce: 4af68b1b2cd29814fc8020d5
exporter_secret:
6370cd9058b498d3db6cce9beb618b094ff0981b846d5cf59676cd7e5e41dd3b
]]></artwork>
          <section anchor="encryptions-15" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 4af68b1b2cd29814fc8020d5
ciphertext: 694ad6fefd198fece3706b5fd6fb696ed03f399f3bdfabaec36b52fa6315
3db22a50978c6b0329a6c583a7380b

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 4af68b1b2cd29814fc8020d4
ciphertext: b0f4eeb0f9ef54c9f5dbc1b16dec408dc4160e255e768b00cc21aec6c5fb
65b29835131275ce081ff80e9f05ff

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 4af68b1b2cd29814fc8020d7
ciphertext: 7d72a1eaeb27669fe6fa123a6c4bebecfe9fc035c8b0b2402ccab99dd92c
4047c9953a537fb1e647b9e8d49e0f

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 4af68b1b2cd29814fc8020d1
ciphertext: b55b04cb0cfa1911bf1c4cef46fdafeb2352de13cdb25e254d4b611ae59c
b2342208ccd645e4be0f6d02a34125

]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="dhkemp-521-hkdf-sha512-hkdf-sha512-aes-256-gcm" numbered="true" toc="default">
        <name>DHKEM(P-521, HKDF-SHA512), HKDF-SHA512, AES-256-GCM</name>
        <section anchor="base-setup-information-4" numbered="true" toc="default">
          <name>Base Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 0
kem_id: 18
kdf_id: 3
aead_id: 2
info: 4f6465206f6e2061204772656369616e2055726e
seedE: 1ed3768f499b5b3c2beda3166528b649d4b117a0bd450f0e9e19815c2597d1777
ac67ea367415fb28c8819c94b383a0a8a15c9f03b4835330e3e6c8bc8319202e473
seedR: 62641514bccd2858f3d6513305288d6ca0e443f00a86eb33ccd519d1803aebc5d
07bbad0e1013ce61d9c9d713b3c90c8e79a1af01d6c69750f67cbbd1d9d4afeedfa
enc: 04000fe222a93e988f2b890bf98345fdd3c08724631091dfbd8c3572a91e2fc8bd8
78f1537852bffdaaf55e168cfa4511445c390a705bf322ded61f4bf7e5a9f69248101acb
73eb821bf6c757ab35286af062fa59f614e319c7eb62a1423c84c86eba1ae8d65280fd69
916ff758825e2944c2df3242b3f6b110da559bf20919431cab76cfa
shared_secret: 836dec8ee53432fe6135a364858d61a256848874d645c286d454411ee
fde448bc7654cf506bf1e4ab3dd43f5d9baeb05b24e2ee6b3591b5136432ff747c71722
key_schedule_context: 005c0b2bdbbffbea1af82c95fa5560defe4ba0a05fd3c301cd
fab3bbc2fba9783d13d14ecba2cdc7a7c1f544087eb5b3a22ca199e34879b2bbeab3d644
cb2a005dd8854451600d718851b126f132b5ea0cf6942b64e7e586a7f8877bbcc281c8f6
c005e9d1c201fa65882d2162ed577741da4aed5c33fa050d83feb94a4e88638c
secret: 71529ceee3d8881f66363e99cd1bade88b2ea7b8c19363fc0e093bb92b961c31
d61e9147aeed52bc81be1e4f5ce18bb758a97dc54030e63ce37d3a92860328d6
key: 80358d48c8324176a44632f90c826a6bbfe7b2126f9ee47eca65f58faee8946f
nonce: 7502fc65d8e5db6fd14285c5
exporter_secret: d876060f03e1ba934c3e3c93416e91888b0a02614f8c5a27d24f311
2754c4d654bbc04fd54c1aa052c5dd81358362ecea1c15e20c9cebaa5393e52da73d4f61
1
]]></artwork>
          <section anchor="encryptions-16" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 7502fc65d8e5db6fd14285c5
ciphertext: ba38cbcd619868b4e993b7757cf8449aeab47d07741a62ec8b3fa72c136b
7e5f6c11ee2faceea367f4126181ca

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 7502fc65d8e5db6fd14285c4
ciphertext: a97932db8c889e85e844b1b8fc75fb3a21e25569bcfacc74ce47287eb35b
59372f0e6c1762446674aec9469774

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 7502fc65d8e5db6fd14285c7
ciphertext: dffe364d097f06751044647b5b992a834414c0d629b25f9db8e0bde6687e
26f73cd7f77078bd9d677a4e3555ed

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 7502fc65d8e5db6fd14285c1
ciphertext: e48c2e05ec38338e78a2ed2473a6052006f474957d9ff98ff26c07d51418
bda9bebb572b6a46bdb8367a65595c

]]></artwork>
          </section>
        </section>
        <section anchor="psk-setup-information-4" numbered="true" toc="default">
          <name>PSK Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 1
kem_id: 18
kdf_id: 3
aead_id: 2
info: 4f6465206f6e2061204772656369616e2055726e
seedE: 64463def238f309f1e9d1f28c15dc126cffa4ded911a4c527eeb71ba593847fb4
05756239d2c694ce4effa3996cafb5cc0b3736dd988deb7289210ec92bf6b339302
seedR: 41b782c18c14986c9d7a636152f13677aeddf479c1c7791ea46e0ebbe35ca9dd5
24c23d730eef443741d7d965415833d6c549c8c1b31ad05f2b9a88f916b2930528e
psk: 5db3b80a81cb63ca59470c83414ef70a
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: 040041d3923b7218cf378f7336712e2ab1d254a2e7b0e67b85ccd149f68115e9d1e
d4492f5542923586feecf2e5500be432e181e73bbcf87947914ba760ab1216e62f80067e
0e0899fbc87ffcf0b2e7556f4bac9395aa3e284f73323c87ab3e5bb8409e2b85ed657170
aacad0d83cd8ea71dee1b480634f818383d75899c877d3fa263fe49
shared_secret: 8fb618ff94fca65c1bb2183b5683bbefd0aefe66d1610e0d1623c8b3d
00c2fb5feba21b1050d7752ad1f0b52250624881902f3d5156b4b3c454aaee2b2b20a89
key_schedule_context: 017344e204124da2a856fc5693999bbfd1242c27f4b2f16fdc
92751d458fbb606adde7aecc32db4dd5b0fdbea7655c7c0e8363da1a34370ba59bfdb421
08a4bebbd8854451600d718851b126f132b5ea0cf6942b64e7e586a7f8877bbcc281c8f6
c005e9d1c201fa65882d2162ed577741da4aed5c33fa050d83feb94a4e88638c
secret: edfc1907ed7d5006b7e821f9802b49192ebd40dad26bb9ebc20192bfc4e6319f
22dd9950d51fe7c07c48739ff424509b056acf2a2acb655b59999626b91741b8
key: 6fb2ffb368d1d76a743b9e51d8293d0960810936399fb51dcffe83ddf14c6271
nonce: ba6d3b6c7435583230a60d86
exporter_secret: 1926473db83cdccbfc308c0a286b0e248c2d2cda275c6c511f50d64
768d483229f24f770271cdb01096bdcb15c8269ef5e80e592998fb43c93ea3b8c0e1e46d
2
]]></artwork>
          <section anchor="encryptions-17" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: ba6d3b6c7435583230a60d86
ciphertext: 264cd2ede05a9ab1527a01508fd537afe67b6c6f89d5a09e9e28bb3e0a52
c61a174f9ae71681f548ec44b38ccd

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: ba6d3b6c7435583230a60d87
ciphertext: 4b439bc9afa3ce832cbda50c31b549fcab63a7ffd040907e1fdc5200e01d
5d0ba4b4349eda9c135d4b1a39da7d

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: ba6d3b6c7435583230a60d84
ciphertext: b8bf1321fa9d670cd0fea9c59ca8a88583f793a27633a8ab5b026e3309b7
861d98c1546ee4205621da2d5899c0

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: ba6d3b6c7435583230a60d82
ciphertext: 84a1574168983ccb5b52a5e0b522f04cf5283bd6e818e0f4c3b165e179ad
899e34f8675aea5b905605f10cfb15

]]></artwork>
          </section>
        </section>
        <section anchor="auth-setup-information-4" numbered="true" toc="default">
          <name>Auth Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 2
kem_id: 18
kdf_id: 3
aead_id: 2
info: 4f6465206f6e2061204772656369616e2055726e
seedE: 81dc51e31ef8e9b33fefcdf00bd3b0ff585b941fe76cf39a86c269e2f53be7edb
3db0be1a58b6cb8d8e6020fe8a2018c59d47cacb35b2b8c61bd4155438b5eda5c0d
seedR: 54af23ea93c8fc34deb6a7cd70e657ea8990fc4e9a18656d5764b62f7a33a9e02
12adeae1585ad2ef28688c1b558866c1975973c4dff08955c1f9fd7939b10b5fbfc
seedS: b65599d814192278ab826ef197a61b77db50f40495f77502dfaa03acd1f3565a3
cefebd59de2328ece0638c90d8a89f9ca58f2850e39e9a4c9c339290d66da12fdf0
enc: 0400c708757d53d8a1ac555426d660014fefab2676fcebf62d7589339f24a0f632e
51da9e1b13631f461a48753b756c3322032cc27b32cea63cfefadba56952d7ae35c0166b
63cc1e329938a33728a2ef6fce3372589da2b9bcc80ae007dee3e084b1656349f1514590
5689ef920807ff239f94891b22057385c7b97ea517b1ab21bf5fec8
shared_secret: 7258e75f7c2a8ded295523a7b99c1045925dca1628a91bdca9a2e1bdc
c187eee3b627f2ab6a73853c8dcb13a95d0980585c21c25cf92b7c9d945430dfc47e690
key_schedule_context: 025c0b2bdbbffbea1af82c95fa5560defe4ba0a05fd3c301cd
fab3bbc2fba9783d13d14ecba2cdc7a7c1f544087eb5b3a22ca199e34879b2bbeab3d644
cb2a005dd8854451600d718851b126f132b5ea0cf6942b64e7e586a7f8877bbcc281c8f6
c005e9d1c201fa65882d2162ed577741da4aed5c33fa050d83feb94a4e88638c
secret: dc6a1631b3fbc9d6b6b856d60738cefe1743cfc14d1ae0627b38386b9abc9b2f
86dde080bb6b9d7c3eb579d6bf599765cb4a5e27cd134703acc06142901164c9
key: eedfdbacc250f004a9a4027184a95388f9ebf86ce9593c81921da9eef5d9f6e9
nonce: 8c1fb99aa9cca28b2a1ac3ec
exporter_secret: 1f64d525bc6f36488c46c0650b6f0c10a887e0e300737a2c167e4ff
d1b4d91193750fcf26173f0c8924f6a86b01fac3f6753d4e9f91abd92b042ae3218d7f45
e
]]></artwork>
          <section anchor="encryptions-18" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 8c1fb99aa9cca28b2a1ac3ec
ciphertext: 1f4da6829a7336ec414ffeebec31807dd1acb2ec248b165b5d29732dd005
7fa76be483b9af01437b32ebe6c061

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 8c1fb99aa9cca28b2a1ac3ed
ciphertext: 168714b29e7f1c3a91dffdb6cc576b7be34ef929b7ccd598435c4ef1af52
c5d7ddbe43f51ac50b27bbf9ce0e73

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 8c1fb99aa9cca28b2a1ac3ee
ciphertext: 639d9f6c9ca75d91fff8d4a9b0608d10db800fe6a1ed208a09fb907f70a3
27c61414a20e4910a54f12f2ada7a6

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 8c1fb99aa9cca28b2a1ac3e8
ciphertext: e325abd75e86991abc1ba269fef64c5ccb3a5c1636f4c8e026205ad45470
cae1771d9a5c87a3a21af1d6b89cc0

]]></artwork>
          </section>
        </section>
        <section anchor="authpsk-setup-information-4" numbered="true" toc="default">
          <name>AuthPSK Setup Information</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
mode: 3
kem_id: 18
kdf_id: 3
aead_id: 2
info: 4f6465206f6e2061204772656369616e2055726e
seedE: dc1fda9b21a1af6925ecf9ad79d2422f698b4168587c7908b36f5f58352181b95
06554d8d8c9427e0dd2cfda25f0eabf58e9f5597e1b76ac12c799fe96e3cc03dc59
seedR: 46592c2b171b8cdcce89601fab103f63ed43badadcf9df62a928ae3b7fa91f269
eff3485f6401c374e19a8bb988005626b9c26d39795282b1095bcc4f62a67255e15
seedS: d02446c344c10cd162486caa69aa1156ac3066e0fd668fa7faaf13bdbc944edbc
0cd68ee36e4c30ecc36c2c5ab0978473eb1b5dcfff27985c9328877e85fd48b657d
psk: 5db3b80a81cb63ca59470c83414ef70a
psk_id: 456e6e796e20447572696e206172616e204d6f726961
enc: 04007abb917b25112c8bf9a75233c90e0f55a4b6cd4f52a9f8a8856e85f82bbd84a
c0d1941f01aab2c7846e6b562c0f5168727f4443acb84249f357d591f7bef8651d2019e0
f9ef53c20a74f6cc9e6080e792877201ec7d4fb5fa22e184d1d848314811a3d110112172
bc802805ef7405dc0fac4f5f401865f0410c05d172524a71039963e
shared_secret: 82913b51b3809a9177ab90ca628e661126d8b64ca95739f6172b93ff5
11ccc0b7b6255dd9bc17d692b598acd10c1a3b86fb242554824f06df693f75c5d2935d6
key_schedule_context: 037344e204124da2a856fc5693999bbfd1242c27f4b2f16fdc
92751d458fbb606adde7aecc32db4dd5b0fdbea7655c7c0e8363da1a34370ba59bfdb421
08a4bebbd8854451600d718851b126f132b5ea0cf6942b64e7e586a7f8877bbcc281c8f6
c005e9d1c201fa65882d2162ed577741da4aed5c33fa050d83feb94a4e88638c
secret: fd3c39728bad99fcb7c2430841690994f624a2bcfaba38affe3596b651bae01c
cd0b7b1c9fbf10de0fddb9ec06bfc9dfcd0c1fcdb2cbfee6e27e4a653bc24344
key: 7262c38cfa0c8f468160fb1530579d53c433559a58bc1acf1facf5231bdbc7cf
nonce: 65560e6c300fd5a0a7dba420
exporter_secret: 58a7173f251e03619d615542539e40c9bf480f96efd026216211062
96dbff95aff003971cafb9265d92ba3d7fbf67283c40364f7def04cd4d6429c015172e76
e
]]></artwork>
          <section anchor="encryptions-19" numbered="true" toc="default">
            <name>Encryptions</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 65560e6c300fd5a0a7dba420
ciphertext: e0d4d9b38eb8b8dc1f2c986005a83b7df5bde76d48c95dd59bd60456639a
82feb3ea3205b6fce5e672fad9c73d

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 65560e6c300fd5a0a7dba421
ciphertext: a905aa5e9c23600c8bdd8c45b2bdd3352727175c565d4d60b7e4d7083b10
fe26afde4ccdab36726e6e0c26d78f

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 65560e6c300fd5a0a7dba422
ciphertext: f8d5733f3b2e850176ae68f998268125662161b4edf86752a80b70ec0376
2dcbb8508c495852fc313cbca8e065

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 65560e6c300fd5a0a7dba424
ciphertext: 644ce2fe731274c00b455a25e7a733032dd2916d25a4a39d28a89f3f5282
b12b20afde48860ea31f187c4c4ecd

]]></artwork>
          </section>
        </section>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAOoOI18AA8y965bbRpYu+B9PgZbXTGXWISncL6p2d6cl2VbZuoxSVeVe
deo4A0AgEyUmySaYktKye513mHeZF5g3mSeZb++4IACSKdlll12rlpUkgbju
y7cvsWM+n3u7breUD/wvb6tt1/gvbqplV/tfyVv/8are3m523Xrliarayjd4
6MVXj71mXa/ENV5ptqLdzbvtrp3X7fZyfrV5LedB6jViJx94Nf57ud7ePvC7
Vbv2vG6zfeDvtjf9LgqCMoi81/L27XrbPPCfrHZyu5K7+SNq0PP6nVg134rl
eoVObmXvbboH/l9363rm9+vtbivbHn/dXtMff/M8cbO7Wm8feP7cR1f9A//l
wv964X8m0Gbv+fifGu7Lrr4S22by23p7+cB/2PX1mj/Ka9EtH/jbZfUf3ebN
on83NPsV3kMDl+KNWDnNfiW2u6vu9eQ3bvbJatsJt9nX6ll5K1aLyjz/Hx09
tmi3Q1efYQbdZuP08plc/V1cd6vh+8M9dHLX/kelH17i2UUjh3YfLvyzhf+X
9bpxmn54te363XpzJbejX9XKLNc3TbsUW+n2Uou3/3ElxaZbXVbdrl9g87DB
2Obttdh1b7D7vv/wPAgf8Euawu49kn13ufKxuf7ZSixv+673163/YivqXVeL
pSa++Zj4/PP6Sl7L3j+X9c1W+uJSYC47/6wRG+oL41/3coU9pBns5Dv8tNuJ
+vU91TlWWe4e+Fe73aZ/cP++3Gy71W7RiXq7wAzvgxjD+2FQ8MNMuT59xR8t
ZfH/5vrfgcoebrGAW/u1JrM15taMf5u8+ueFf361vtlM3vxzV+/WW/0Tfttb
wDN/s11v1j2WCkuNhfSfnD/3mV2IsOm7jeJfkJgvhyU8eSO3Pf0RLcLTH7Mu
YfSj1+UjJ/fF2Yvx5F5dSf8LsZm/2K6rpbzuQbTCfybfggRFrwlF/0IT3eFx
pohud0s/PqS5ri+3YnOF+WuaOTzVZbd6vehpvpdyu6jX1/frNUTQand/07Sg
hUUYBPn9eJ4mwTxJ0iKbR98WC/z2o9fi1cJ//lpcr3fryWq8Erv+RrzuJj9P
Xn+08F+ssSuYzBuxnDTxSLwheT35vZfbDmwGVjRDenL+2bMHfpkXc3dGJe3B
2bPzJxMKwzf+N+Uii11N4KztrV38z7uVWNUdaPFcbt90NTj0yaqBeN/e+vM5
v3d2uZXYhtWOeZ6+ebUVq34DIe7/CYO89B8vIaPA/P7Dmy2xstPRvR+72vYD
C64zcB+Eysp/JogFaJiaT2icPSZ8s5O0CE8eP348WgT6wg/jLBYz+45/vpF1
16JBakxR4LEFmlPfq4bnHdJSnDVNp8fwStZXq+6/bgxp2uklP3J6dgpE+4+X
st5tWYTSQquP61VX95Cjl91Kgvt5qufPx9uNL+4/efzQD4sgjufRDM1qGQ5Z
wWNdL9eXNCXLasMM8K0jpc+WUPbd7ooZ9wX0nB/x3KGnryUNTgvo6cSzHz1x
AgtmT59Dha6679SAaVPMhpnv7k9e0Guz41nQgj1cX193PQlHFrmPH34xXqI7
KHTmkBT1/bgFgXS07SN6+GILkTfzIYIXfnRYIvWyvmSpiz/C+ZtoX9gwvxL8
MppzwrerkUq9C8x9rPiPgvtREu+NJAo+LPZc+DIIrH0I42wqYAxRTcd0+vTs
8VkYTHUfdmpDT2BXMUWW/3azZeP/Wak4nv/jh08enx+eaCelfLdZrrdyQX/y
ZEUFqQUQch/Q9ob49n6aBUlYJvdHUw8/YurQfl+I23W/9p+CB8B630314PEH
lNzabJYdpvPiCptZO7JqBkT15OEMrzXYW9DeBjjo8CA+X/hfEs2vGvkdGPMN
0Nt0GHc+8rMN5Gu3F5AgVEY/Gcidj/xsAwHwPYe2uqLJvumWYjKIoz/zAF6s
l7daYPh/WnWMpXa3037xzmfPXoXlmGyfrVekGc8AXJ+tIUYk7B1Q9yP/pXzT
oRnZ7JMpqLR5t2jWHROnwSNKgwdxMI+yMinm+bflmDrLD1PnU5gwcmnR/LAA
T7urbrv3G89+mDHDLLHsIOtWHSlHaNdHHYy8owD52eUUHGN07rf/WA+QM68A
9K/FajXp57O//7//z3a1/6uSNp89xfL3UmzrK9q2P371sswOmSpYWZYrUPyw
jQA/123PGhZYFcvFhKkRwWFhM9nD/yP6XGOwMstz7GAcOFsYluWHlSFt4R/F
63XVQw5ON1FsX9/0B37+x1b5K2KO11ME+5X47kaOf+BungFOPFxvgfF4YY6S
xhMI88tlJ777btryy5u+ByEefOKjZ4I3/vTVOVDy8ycLw0GffQ4YGSVFGdLP
r2S/+7Mko2SiS0nL8q++/vnw3l4C7NxUynxosceHvCH3q+W6up8WQRiWVZVX
VZK2TVCKMMjLqoyCtpBtlOZtGYRxUN7fodP5G9Xp4u9mBx3Ni8/kPDCw2k4v
C6Li/rMn568W5y8WRRDM0+xsG9Pj9CUjl/7Aw58/eXG+CGENJGyRPXx6vMG4
eETPtFj5MUCywJC4CfKs3rGRDiaBrQpxh08KHaVf+Oe3/U5eH1xNsgnEchFf
bjbMMY3sX+/Wm+t1c7OU/f0x/B5/fCR3olv2C9Fv3v177/7ypPk0DrM9MUlI
6unZw9E0Xq39L0V/BQIjOe3v9Mczcjb8u3/yZHXadG0rt1j1TlTdkmYMGXKz
3KnZffm/Ip40NfyRACuM78fF2L4O4w8LgP9c+I/WTTfVo/8p31zKVXc7+ZEZ
5pEEcNqxQUIMAxwF7QmsTGC1hholK/s/19vXDmcdtWdfdtjDFbU3NWmv1tei
P/T7R4yhn024+i/kkVvBRvz//vf/DT3b9cdEyR8hnXayW1US6z31xfxxfbU6
+PO+DQWRDky4MzbBZIVekbV6dSM+uELnCxIdvdhOpRpG0YrVeu9X5WU7P3vy
NQEK/FZf3fRyt+snw7PGGJHvX7qt/OIGyHcsuYavsaXvdv4XciWVGIYNsF3J
Jb7evaWNfnWzwsfDgu3t27eLt2jpklpi+bYRG8z5/vDlTzEK/si+x0frlVy1
ctlMd0oQrh89QNJLPFyOp6hdhOTfot6IHWtW04O364HPf62/rdbvDs9wJerl
Anx4u1ns1vfx2OJqd73cExNz2K/GNPC8V1ewrYyB4EM+1duugmwTfs/OJhYD
V8rw2gyjHMblnZBmOV1A9VBT+i1IyTddQ+2MpnPYj7duPbGtOoxoezvv2ezZ
LCGhyOup5JDwtxCAG7ZChzYWbDr6tPW9p1yHtz52tuqUYUwUBtUpBmNddyw2
EHHqkWtQIGzt/to7+erx09MZP9IAHL3R1vfNqlbOxq8efY6fSRoe2yLvLZSn
Lwa/CJZd+CcEjE/d+Zo2F/5f7Ep55P0VJIZ3xtwjW1Av5w27ld7iueXtHIzU
8Dikscw9SOHrjtzGFEK4qTGIfuqEegRB38n5l8AgwI48TatxZ96XmJ2a3PmX
Z9FCUcl11zRL6XmfkLdhC53Fo/Y8xz/Say/27krs9NJLd8GpRefT4E25EhhT
JeXK07pNz2mj3Ob4hCnXkhcBkHaJTRG3vCwOFdYjt4VcXC5m3vv3//7y84dh
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
Isbzfvf2/wZMJk/RHIIBAA==

-->

</rfc>
