<?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.2.9 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-irtf-cfrg-hpke-01" category="info">

  <front>
    <title abbrev="HPKE">Hybrid Public Key Encryption</title>

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

    <date year="2019" month="November" day="04"/>

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



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>“Hybrid” public-key encryption schemes (HPKE) that combine
asymmetric and symmetric algorithms are a substantially more
efficient solution than traditional public key encryption techniques
such as those based on RSA or ElGamal.  Encrypted messages convey a
single ciphertext and authentication tag alongside a short public
key, which may be further compressed. The key size and computational
complexity of elliptic curve cryptographic primitives for
authenticated encryption therefore make it compelling for a variety
of use cases. This type of public key encryption has many
applications in practice, for example:</t>

<t><list style="symbols">
  <t>PGP <xref target="RFC6637"/></t>
  <t>Messaging Layer Security <xref target="I-D.ietf-mls-protocol"/></t>
  <t>Encrypted Server Name Indication <xref target="I-D.ietf-tls-esni"/></t>
  <t>Protection of 5G subscriber identities <xref target="fiveG"/></t>
</list></t>

<t>Currently, there are numerous competing and non-interoperable
standards and variants for hybrid encryption, including ANSI X9.63
<xref target="ANSI"/>, IEEE 1363a <xref target="IEEE"/>, ISO/IEC 18033-2 <xref target="ISO"/>, and SECG SEC
1 <xref target="SECG"/>.  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 and formally verified.</t>

</section>
<section anchor="requirements-notation" title="Requirements Notation">

<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"/> <xref target="RFC8174"/>  when, and only when, they appear in
all capitals, as shown here.</t>

</section>
<section anchor="security-properties" title="Security Properties">

<t>As a hybrid authentication encryption algorithm, we desire security
against (adaptive) chosen ciphertext attacks (IND-CCA2 secure). The
HPKE variants described in this document achieve this property under
the Random Oracle model assuming the gap Computational Diffie
Hellman (CDH) problem is hard <xref target="S01"/>.</t>

<t>[[ TODO - Provide citations to these proofs once they exist ]]</t>

</section>
<section anchor="notation" title="Notation">

<t>The following terms are used throughout this document to describe the
operations, roles, and behaviors of HPKE:</t>

<t><list style="symbols">
  <t>Initiator (I): Sender of an encrypted message.</t>
  <t>Responder (R): Receiver of an encrypted message.</t>
  <t>Ephemeral (E): A fresh random value meant for one-time use.</t>
  <t><spanx style="verb">(skX, pkX)</spanx>: A KEM key pair used in role X; <spanx style="verb">skX</spanx> is the private
key and <spanx style="verb">pkX</spanx> is the public key</t>
  <t><spanx style="verb">pk(skX)</spanx>: The public key corresponding to private key <spanx style="verb">skX</spanx></t>
  <t><spanx style="verb">len(x)</spanx>: The length of the octet string <spanx style="verb">x</spanx>, expressed as a
two-octet unsigned integer in network (big-endian) byte order</t>
  <t><spanx style="verb">encode_big_endian(x, n)</spanx>: An octet string encoding the integer
value <spanx style="verb">x</spanx> as an n-byte big-endian value</t>
  <t><spanx style="verb">concat(x0, ..., xN)</spanx>: Concatenation of octet strings.
<spanx style="verb">concat(0x01, 0x0203, 0x040506) = 0x010203040506</spanx></t>
  <t><spanx style="verb">zero(n)</spanx>: An all-zero octet string of length <spanx style="verb">n</spanx>. <spanx style="verb">zero(4) =
0x00000000</spanx></t>
  <t><spanx style="verb">xor(a,b)</spanx>: XOR of octet strings; <spanx style="verb">xor(0xF0F0, 0x1234) = 0xE2C4</spanx>.
It is an error to call this function with two arguments of unequal
length.</t>
</list></t>

</section>
<section anchor="cryptographic-dependencies" title="Cryptographic Dependencies">

<t>HPKE variants rely on the following primitives:</t>

<t><list style="symbols">
  <t>A Key Encapsulation Mechanism (KEM):
  <list style="symbols">
      <t>GenerateKeyPair(): Generate a key pair (sk, pk)</t>
      <t>Marshal(pk): Produce a fixed-length octet string encoding the
public key <spanx style="verb">pk</spanx></t>
      <t>Unmarshal(enc): Parse a fixed-length octet string to recover a
public key</t>
      <t>Encap(pk): Generate an ephemeral, fixed-length symmetric key and
a fixed-length encapsulation of that key that can be decapsulated
by the holder of the private key corresponding to pk</t>
      <t>Decap(enc, sk): Use the private key <spanx style="verb">sk</spanx> to recover the ephemeral
symmetric key from its encapsulated representation <spanx style="verb">enc</spanx></t>
      <t>AuthEncap(pkR, skI) (optional): Same as Encap(), but the outputs
encode an assurance that the ephemeral shared key is known only
to the holder of the private key <spanx style="verb">skI</spanx></t>
      <t>AuthDecap(skR, pkI) (optional): Same as Decap(), but the holder
of the private key <spanx style="verb">skR</spanx> is assured that the ephemeral shared
key is known only to the holder of the private key corresponding
to <spanx style="verb">pkI</spanx></t>
      <t>Nenc: The length in octets of an encapsulated key from this KEM</t>
      <t>Npk: The length in octets of a public key for this KEM</t>
    </list></t>
  <t>A Key Derivation Function:
  <list style="symbols">
      <t>Hash(m): Compute the cryptographic hash of input message <spanx style="verb">m</spanx></t>
      <t>Extract(salt, IKM): Extract a pseudorandom key of fixed length
from input keying material <spanx style="verb">IKM</spanx> and an optional octet string
<spanx style="verb">salt</spanx></t>
      <t>Expand(PRK, info, L): Expand a pseudorandom key <spanx style="verb">PRK</spanx> using
optional string <spanx style="verb">info</spanx> into <spanx style="verb">L</spanx> bytes of output keying material</t>
      <t>Nh: The output size of the Hash and Extract functions</t>
    </list></t>
  <t>An AEAD encryption algorithm <xref target="RFC5116"/>:
  <list style="symbols">
      <t>Seal(key, nonce, aad, pt): Encrypt and authenticate plaintext
<spanx style="verb">pt</spanx> with associated data <spanx style="verb">aad</spanx> using secret key <spanx style="verb">key</spanx> and nonce
<spanx style="verb">nonce</spanx>, yielding ciphertext and tag <spanx style="verb">ct</spanx></t>
      <t>Open(key, nonce, aad, ct): Decrypt ciphertext <spanx style="verb">ct</spanx> using
associated data <spanx style="verb">aad</spanx> with secret key <spanx style="verb">key</spanx> and nonce <spanx style="verb">nonce</spanx>,
returning plaintext message <spanx style="verb">pt</spanx> or the error value <spanx style="verb">OpenError</spanx></t>
      <t>Nk: The length in octets of a key for this algorithm</t>
      <t>Nn: The length in octets of a nonce for this algorithm</t>
    </list></t>
</list></t>

<t>A set of algorithm identifiers for concrete instantiations of these
primitives is provided in <xref target="ciphersuites"/>.  Algorithm identifier
values are two octets long.</t>

<section anchor="dh-based-kem" title="DH-Based KEM">

<t>Suppose we are given a Diffie-Hellman group that provides the
following operations:</t>

<t><list style="symbols">
  <t>GenerateKeyPair(): Generate an ephemeral key pair <spanx style="verb">(sk, pk)</spanx>
for the DH group in use</t>
  <t>DH(sk, pk): Perform a non-interactive DH exchange using the
private key sk and public key pk to produce a fixed-length shared
secret</t>
  <t>Marshal(pk): Produce a fixed-length octet string encoding the
public key <spanx style="verb">pk</spanx></t>
  <t>Unmarshal(enc): Parse a fixed-length octet string to recover a
public key</t>
</list></t>

<t>Then we can construct a KEM (which we’ll call “DHKEM”) in the
following way:</t>

<figure><artwork><![CDATA[
def Encap(pkR):
  skE, pkE = GenerateKeyPair()
  zz = DH(skE, pkR)
  enc = Marshal(pkE)
  return zz, enc

def Decap(enc, skR):
  pkE = Unmarshal(enc)
  return DH(skR, pkE)

def AuthEncap(pkR, skI):
  skE, pkE = GenerateKeyPair()
  zz = concat(DH(skE, pkR), DH(skI, pkR))
  enc = Marshal(pkE)
  return zz, enc

def AuthDecap(enc, skR, pkI):
  pkE = Unmarshal(enc)
  return concat(DH(skR, pkE), DH(skR, pkI))
]]></artwork></figure>

<t>The GenerateKeyPair, Marshal, and Unmarshal functions are the same
as for the underlying DH group.  The Marshal functions for the
curves referenced in {#ciphersuites} are as follows:</t>

<t><list style="symbols">
  <t>P-256: The X-coordinate of the point, encoded as a 32-octet
big-endian integer</t>
  <t>P-521: The X-coordinate of the point, encoded as a 66-octet
big-endian integer</t>
  <t>Curve25519: The standard 32-octet representation of the public key</t>
  <t>Curve448: The standard 56-octet representation of the public key</t>
</list></t>

</section>
</section>
<section anchor="hybrid-public-key-encryption" title="Hybrid Public Key Encryption">

<t>In this section, we define a few HPKE variants.  All variants take a
recipient public key and a sequence of plaintexts <spanx style="verb">pt</spanx>, and produce an
encapsulated key <spanx style="verb">enc</spanx> and a sequence of ciphertexts <spanx style="verb">ct</spanx>.  These outputs are
constructed so that only the holder of the private key corresponding
to <spanx style="verb">pkR</spanx> can decapsulate the key from <spanx style="verb">enc</spanx> and decrypt the
ciphertexts.  All of the algorithms also take an <spanx style="verb">info</spanx> parameter
that can be used to influence the generation of keys (e.g., to fold
in identity information) and an <spanx style="verb">aad</spanx> 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 two authenticated variants, one of which authenticates
possession of a pre-shared key, and one of which authenticates
possession of a KEM private key.  The following one-octet values
will be used to distinguish between modes:</t>

<texttable>
      <ttcol align='left'>Mode</ttcol>
      <ttcol align='left'>Value</ttcol>
      <c>mode_base</c>
      <c>0x00</c>
      <c>mode_psk</c>
      <c>0x01</c>
      <c>mode_auth</c>
      <c>0x02</c>
      <c>mode_psk_auth</c>
      <c>0x03</c>
</texttable>

<t>All of these cases follow the same basic two-step pattern:</t>

<t><list style="numbers">
  <t>Set up an encryption context that is shared between the sender
and the recipient</t>
  <t>Use that context to encrypt or decrypt content</t>
</list></t>

<t>A “context” encodes the AEAD algorithm and key in use, and manages
the nonces used so that the same nonce is not used with multiple
plaintexts.</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="creating-the-encryption-context" title="Creating the Encryption Context">

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

<t><list style="symbols">
  <t><spanx style="verb">pkR</spanx> - The receiver’s public key</t>
  <t><spanx style="verb">zz</spanx> - A shared secret generated via the KEM for this transaction</t>
  <t><spanx style="verb">enc</spanx> - An encapsulated key produced by the KEM for the receiver</t>
  <t><spanx style="verb">info</spanx> - Application-supplied information (optional; default value
“”)</t>
  <t><spanx style="verb">psk</spanx> - A pre-shared secret held by both the initiator
and the receiver (optional; default value <spanx style="verb">zero(Nh)</spanx>).</t>
  <t><spanx style="verb">pskID</spanx> - An identifier for the PSK (optional; default
value <spanx style="verb">"" = zero(0)</spanx></t>
  <t><spanx style="verb">pkI</spanx> - The initiator’s public key (optional; default
value <spanx style="verb">zero(Npk)</spanx>)</t>
</list></t>

<t>The <spanx style="verb">psk</spanx> and <spanx style="verb">pskID</spanx> 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.</t>

<t>The key and nonce computed by this algorithm have the property that
they are only known to the holder of the receipient private key, and
the party that ran the KEM to generate <spanx style="verb">zz</spanx> and <spanx style="verb">enc</spanx>.  If the <spanx style="verb">psk</spanx>
and <spanx style="verb">pskID</spanx> arguments are provided, then the recipient is assured
that the initiator held the PSK.  If the <spanx style="verb">pkIm</spanx> argument is
provided, then the recipient is assued that the initator held the
corresponding private key (assuming that <spanx style="verb">zz</spanx> and <spanx style="verb">enc</spanx> were
generated using the AuthEncap / AuthDecap methods; see below).</t>

<t>The HPKE algorithm identifiers, i.e., the KEM <spanx style="verb">kem_id</spanx>, KDF <spanx style="verb">kdf_id</spanx>, and
AEAD <spanx style="verb">aead_id</spanx> 2-octet code points, are assumed implicit from the
implementation and not passed as parameters.</t>

<figure><artwork><![CDATA[
default_pkIm = zero(Npk)
default_psk = zero(Nh)
default_pskID = zero(0)

def VerifyMode(mode, psk, pskID, pkIm):
  got_psk = (psk != default_psk and pskID != default_pskID)
  no_psk = (psk == default_psk and pskID == default_pskID)
  got_pkIm = (pkIm != default_pkIm)
  no_pkIm = (pkIm == default_pkIm)

  if mode == mode_base and (got_psk or got_pkIm):
    raise Exception("Invalid configuration for mode_base")
  if mode == mode_psk and (no_psk or got_pkIm):
    raise Exception("Invalid configuration for mode_psk")
  if mode == mode_auth and (got_psk or no_pkIm):
    raise Exception("Invalid configuration for mode_auth")
  if mode == mode_psk_auth and (no_psk or no_pkIm):
    raise Exception("Invalid configuration for mode_psk_auth")

def KeySchedule(mode, pkRm, zz, enc, info, psk, pskID, pkIm):
  VerifyMode(mode, psk, pskID, pkI)

  pkRm = Marshal(pkR)
  ciphersuite = concat(kem_id, kdf_id, aead_id)
  pskID_hash = Hash(pskID)
  info_hash = Hash(info)
  context = concat(mode, ciphersuite, enc, pkRm, pkIm, pskID_hash, info_hash)

  secret = Extract(psk, zz)
  key = Expand(secret, concat("hpke key", context), Nk)
  nonce = Expand(secret, concat("hpke nonce", context), Nn)
  return Context(key, nonce)
]]></artwork></figure>

<t>Note that the context construction in the KeySchedule procedure is
equivalent to serializing a structure of the following form in the
TLS presentation syntax:</t>

<figure><artwork><![CDATA[
struct {
    // Mode and algorithms
    uint8 mode;
    uint16 kem_id;
    uint16 kdf_id;
    uint16 aead_id;

    // Public inputs to this key exchange
    opaque enc[Nenc];
    opaque pkR[Npk];
    opaque pkI[Npk];

    // Cryptographic hash of application-supplied pskID
    opaque pskID_hash[Nh];

    // Cryptographic hash of application-supplied info
    opaque info_hash[Nh];
} HPKEContext;
]]></artwork></figure>

</section>
<section anchor="hpke-kem" title="Encryption to a Public Key">

<t>The most basic function of an HPKE scheme is to enable encryption
for the holder of a given KEM private key.  The <spanx style="verb">SetupBaseI()</spanx> and
<spanx style="verb">SetupBaseR()</spanx> procedures establish contexts that can be used to
encrypt and decrypt, respectively, for a given private key.</t>

<t>The shared secret produced by the KEM is combined via the KDF
with information describing the key exchange, as well as the
explicit <spanx style="verb">info</spanx> parameter provided by the caller.</t>

<figure><artwork><![CDATA[
def SetupBaseI(pkR, info):
  zz, enc = Encap(pkR)
  return enc, KeySchedule(mode_base, pkR, zz, enc, info,
                          default_psk, default_pskID, default_pkIm)

def SetupBaseR(enc, skR, info):
  zz = Decap(enc, skR)
  return KeySchedule(mode_base, pk(skR), zz, enc, info,
                     default_psk, default_pskID, default_pkIm)
]]></artwork></figure>

</section>
<section anchor="authentication-using-a-pre-shared-key" title="Authentication using a Pre-Shared Key">

<t>This variant extends the base mechansism by allowing the recipient
to authenticate that the sender possessed a given pre-shared key
(PSK).  We assume that both parties have been provisioned with both
the PSK value <spanx style="verb">psk</spanx> and another octet string <spanx style="verb">pskID</spanx> that is used to
identify which PSK should be used.</t>

<t>The primary differences from the base case are:</t>

<t><list style="symbols">
  <t>The PSK is used as the <spanx style="verb">salt</spanx> input to the KDF (instead of 0)</t>
  <t>The PSK ID is added to the context string used as the <spanx style="verb">info</spanx> input
to the KDF</t>
</list></t>

<t>This mechanism is not suitable for use with a low-entropy password
as the PSK.  A malicious recipient that does not possess the PSK can
use decryption of a plaintext as an oracle for performing offline
dictionary attacks.</t>

<figure><artwork><![CDATA[
def SetupPSKI(pkR, info, psk, pskID):
  zz, enc = Encap(pkR)
  return enc, KeySchedule(mode_psk, pkR, zz, enc, info,
                          psk, pskId, default_pkIm)

def SetupPSKR(enc, skR, info, psk, pskID):
  zz = Decap(enc, skR)
  return KeySchedule(mode_psk, pk(skR), zz, enc, info,
                     psk, pskId, default_pkIm)
]]></artwork></figure>

</section>
<section anchor="authentication-using-an-asymmetric-key" title="Authentication using an Asymmetric Key">

<t>This variant extends the base mechansism by allowing the recipient
to authenticate that the sender possessed a given KEM private key.
This assurance is based on the assumption that
<spanx style="verb">AuthDecap(enc, skR, pkI)</spanx> produces the correct shared secret
only if the encapsulated value <spanx style="verb">enc</spanx> was produced by
<spanx style="verb">AuthEncap(pkR, skI)</spanx>, where <spanx style="verb">skI</spanx> is the private key corresponding
to <spanx style="verb">pkI</spanx>.  In other words, only two people could have produced this
secret, so if the recipient is one, then the sender must be the
other.</t>

<t>The primary differences from the base case are:</t>

<t><list style="symbols">
  <t>The calls to <spanx style="verb">Encap</spanx> and <spanx style="verb">Decap</spanx> are replaced with calls to
<spanx style="verb">AuthEncap</spanx> and <spanx style="verb">AuthDecap</spanx>.</t>
  <t>The initiator public key is added to the context string</t>
</list></t>

<t>Obviously, this variant can only be used with a KEM that provides
<spanx style="verb">AuthEncap()</spanx> and <spanx style="verb">AuthDecap()</spanx> procuedures.</t>

<t>This mechanism authenticates only the key pair of the initiator, 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 <spanx style="verb">info</spanx> parameter
to avoid unknown key share attacks.</t>

<figure><artwork><![CDATA[
def SetupAuthI(pkR, info, skI):
  zz, enc = AuthEncap(pkR, skI)
  pkIm = Marshal(pk(skI))
  return enc, KeySchedule(mode_auth, pkR, zz, enc, info,
                          default_psk, default_pskID, pkIm)

def SetupAuthR(enc, skR, info, pkI):
  zz = AuthDecap(enc, skR, pkI)
  pkIm = Marshal(pkI)
  return KeySchedule(mode_auth, pk(skR), zz, enc, info,
                     default_psk, default_pskID, pkIm)
]]></artwork></figure>

</section>
<section anchor="authentication-using-both-a-psk-and-an-asymmetric-key" title="Authentication using both a PSK and an Asymmetric Key">

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

<figure><artwork><![CDATA[
def SetupAuthPSKI(pkR, info, psk, pskID, skI):
  zz, enc = AuthEncap(pkR, skI)
  pkIm = Marshal(pk(skI))
  return enc, KeySchedule(mode_psk_auth, pkR, zz, enc, info,
                          psk, pskID, pkIm)

def SetupAuthPSKR(enc, skR, info, psk, pskID, pkI):
  zz = AuthDecap(enc, skR, pkI)
  pkIm = Marshal(pkI)
  return KeySchedule(mode_psk_auth, pk(skR), zz, enc, info,
                     psk, pskID, pkIm)
]]></artwork></figure>

</section>
<section anchor="hpke-dem" title="Encryption and Decryption">

<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 decryption must be
stateful.  Each of the setup procedures above produces a context
object that stores the required state:</t>

<t><list style="symbols">
  <t>The AEAD algorithm in use</t>
  <t>The key to be used with the AEAD algorithm</t>
  <t>A base nonce value</t>
  <t>A sequence number (initially 0)</t>
</list></t>

<t>All of these fields except the 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 return an error if the sequence number
overflows.</t>

<t>Each encryption or decryption operation increments the sequence
number for the context in use.  A given context SHOULD be used either
only for encryption or only for decryption.</t>

<t>It is up to the application to ensure that encryptions and
decryptions are done in the proper sequence, so that the nonce
values used for encryption and decryption line up.  If a Seal or Open operation
would cause the <spanx style="verb">seq</spanx> field to wrap, then the implementation MUST return an
error.</t>

<figure><artwork><![CDATA[
def Context.Nonce(seq):
  encSeq = encode_big_endian(seq, len(self.nonce))
  return xor(self.nonce, encSeq)

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

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

def Context.Open(aad, ct):
  pt = Open(self.key, self.Nonce(self.seq), aad, ct)
  if pt == OpenError:
    return OpenError
  self.IncrementSeq()
  return pt
]]></artwork></figure>

</section>
</section>
<section anchor="single-shot-apis" title="Single-Shot APIs">

<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 “single-shot” encryption
and decryption using APIs specified in <xref target="hpke-kem"/> and <xref target="hpke-dem"/>:</t>

<figure><artwork><![CDATA[
def Seal<MODE>(pkR, info, aad, pt, ...):
  enc, ctx = Setup<MODE>I(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></figure>

<t>The <spanx style="verb">MODE</spanx> template parameter is one of Base, PSK, Auth, or AuthPSK. The optional parameters
indicated by “…”” depend on <spanx style="verb">MODE</spanx> and may be empty. SetupBase, for example, has no
additional parameters. Thus, SealAuthPSK and OpenAuthPSK would be implemented as follows:</t>

<figure><artwork><![CDATA[
def SealAuthPSK(pkR, info, aad, pt, psk, pskID, skI):
  enc, ctx = SetupAuthPSKI(pkR, info, psk, pskID, skI)
  ct = ctx.Seal(aad, pt)
  return enc, ct

def OpenAuthPSK(enc, skR, info, aad, ct, psk, pskID, pkI):
  ctx = SetupAuthPSKR(enc, skR, info, psk, pskID, pkI)
  return ctx.Open(aad, ct)
]]></artwork></figure>

</section>
<section anchor="ciphersuites" title="Algorithm Identifiers">

<section anchor="kem-ids" title="Key Encapsulation Mechanisms (KEMs)">

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>KEM</ttcol>
      <ttcol align='left'>Nenc</ttcol>
      <ttcol align='left'>Npk</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0x0000</c>
      <c>(reserved)</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>0x0001</c>
      <c>DHKEM(P-256)</c>
      <c>32</c>
      <c>32</c>
      <c><xref target="NISTCurves"/></c>
      <c>0x0002</c>
      <c>DHKEM(Curve25519)</c>
      <c>32</c>
      <c>32</c>
      <c><xref target="RFC7748"/></c>
      <c>0x0003</c>
      <c>DHKEM(P-521)</c>
      <c>65</c>
      <c>65</c>
      <c><xref target="NISTCurves"/></c>
      <c>0x0004</c>
      <c>DHKEM(Curve448)</c>
      <c>56</c>
      <c>56</c>
      <c><xref target="RFC7748"/></c>
</texttable>

<t>For the NIST curves P-256 and P-521, the Marshal function of the DH
scheme produces the normal (non-compressed) representation of the
public key, according to <xref target="SECG"/>.  When these curves are used, the
recipient of an HPKE ciphertext MUST validate that the ephemeral public
key <spanx style="verb">pkE</spanx> is on the curve.  The relevant validation procedures are
defined in <xref target="keyagreement"/></t>

<t>For the CFRG curves Curve25519 and Curve448, the Marshal function is
the identity function, since these curves already use fixed-length
octet strings for public keys.</t>

</section>
<section anchor="kdf-ids" title="Key Derivation Functions (KDFs)">

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>KDF</ttcol>
      <ttcol align='left'>Nh</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0x0000</c>
      <c>(reserved)</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>0x0001</c>
      <c>HKDF-SHA256</c>
      <c>32</c>
      <c><xref target="RFC5869"/></c>
      <c>0x0002</c>
      <c>HKDF-SHA512</c>
      <c>64</c>
      <c><xref target="RFC5869"/></c>
</texttable>

</section>
<section anchor="aead-ids" title="Authenticated Encryption with Associated Data (AEAD) Functions">

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>AEAD</ttcol>
      <ttcol align='left'>Nk</ttcol>
      <ttcol align='left'>Nn</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0x0000</c>
      <c>(reserved)</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>0x0001</c>
      <c>AES-GCM-128</c>
      <c>16</c>
      <c>12</c>
      <c><xref target="GCM"/></c>
      <c>0x0002</c>
      <c>AES-GCM-256</c>
      <c>32</c>
      <c>12</c>
      <c><xref target="GCM"/></c>
      <c>0x0003</c>
      <c>ChaCha20Poly1305</c>
      <c>32</c>
      <c>12</c>
      <c><xref target="RFC8439"/></c>
</texttable>

</section>
</section>
<section anchor="security-considerations" title="Security Considerations">

<t>The general security properties of HPKE are described in
<xref target="security-properties"/>.  In this section, we consider a security issue that may
arise in practice and an advanced use case.</t>

<section anchor="metadata-protection" title="Metadata Protection">

<t>The authenticated modes of HPKE (PSK, Auth, AuthPSK) require that the receiver
know what key material to use for the initiator.  This can be signaled in
applications by sending the PSK ID (<spanx style="verb">pskID</spanx> above) and/or the initiator’s public
key (<spanx style="verb">pkI</spanx>).  However, these values themselves might be considered sensitive,
since in a given application context, they might identify the initiator.</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 <spanx style="verb">(pskID, pkI,
enc, ciphertext)</spanx> before, it would now send (enc2, ciphertext2, enc, ciphertext),
where <spanx style="verb">(enc2, ciphertext2)</spanx> represent the encryption of the <spanx style="verb">pskID</spanx> and <spanx style="verb">pkI</spanx>
values.</t>

<t>The cost of this approach is an additional KEM operation each for the sender and
the receiver.  A potential lower-cost approach (involving only symmetric
operations) would be available if the nonce-protection schemes in <xref target="BNT19"/>
could be extended to cover other metadata.  However, this construction would
require further analysis.</t>

</section>
<section anchor="designated-verifier-signature" title="Designated-Verifier Signature">

<t>The Auth and AuthPSK modes HPKE can be used to construct a lightweight
“designated-verifier signature” scheme <xref target="JKR96"/>, in the sense that the message
is authenticated as coming from the initiator, but the only party who can verify
the authentication is the receiver (the holder of <spanx style="verb">skR</spanx>).</t>

<t>To create such a signature, the initator 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 <spanx style="verb">enc</spanx> and a ciphertext value that contains only the AAD tag.</t>

<t>For example, using DHKEM-X25519 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 receiver performs the corresponding HPKE setup
and calls Open with the provided ciphertext.  If the AEAD authentication passes,
then the signature is valid.</t>

<t>This scheme re-uses 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" title="Message Encoding">

<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 <spanx style="verb">enc</spanx>, ciphertext value(s) (and order if there are
multiple), and any info values that are not implicit.</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>This document requests the creation of three new IANA registries:</t>

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

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

<section anchor="kem-identifiers" title="KEM Identifiers">

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

<t><list style="symbols">
  <t>Value: The two-byte identifier for the algorithm</t>
  <t>KEM: The name of the algorithm</t>
  <t>Nenc: The length in bytes of an encapsulated key produced by the algorithm</t>
  <t>Npk: The length in bytes of a public key for the algorithm</t>
  <t>Reference: Where this algorithm is defined</t>
</list></t>

<t>Initial contents: Provided in <xref target="kem-ids"/></t>

</section>
<section anchor="kdf-identifiers" title="KDF Identifiers">

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

<t><list style="symbols">
  <t>Value: The two-byte identifier for the algorithm</t>
  <t>KDF: The name of the algorithm</t>
  <t>Nh: The length in bytes of the output of the KDF</t>
  <t>Reference: Where this algorithm is defined</t>
</list></t>

<t>Initial contents: Provided in <xref target="kdf-ids"/></t>

</section>
<section anchor="aead-identifiers" title="AEAD Identifiers">

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

<t><list style="symbols">
  <t>Value: The two-byte identifier for the algorithm</t>
  <t>AEAD: The name of the algorithm</t>
  <t>Nk: The length in bytes of a key for this algorithm</t>
  <t>Nn: The length in bytes of a nonce for this algorithm</t>
  <t>Reference: Where this algorithm is defined</t>
</list></t>

<t>Initial contents: Provided in <xref target="aead-ids"/></t>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<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>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</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>
<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>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='8174'/>
<seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>



<reference  anchor="RFC5116" target='https://www.rfc-editor.org/info/rfc5116'>
<front>
<title>An Interface and Algorithms for Authenticated Encryption</title>
<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>
<seriesInfo name='RFC' value='5116'/>
<seriesInfo name='DOI' value='10.17487/RFC5116'/>
</reference>



<reference  anchor="RFC8126" target='https://www.rfc-editor.org/info/rfc8126'>
<front>
<title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
<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>
<seriesInfo name='BCP' value='26'/>
<seriesInfo name='RFC' value='8126'/>
<seriesInfo name='DOI' value='10.17487/RFC8126'/>
</reference>




    </references>

    <references title='Informative References'>

<reference anchor="S01" target="http://www.shoup.net/papers/iso-2_1.pdf">
  <front>
    <title>A Proposal for an ISO Standard for Public Key Encryption (verison 2.1)</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="ANSI" >
  <front>
    <title>Public Key Cryptography for the Financial Services Industry -- Key Agreement and Key Transport Using Elliptic Curve Cryptography</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IEEE" >
  <front>
    <title>IEEE 1363a, Standard Specifications for Public Key Cryptography - Amendment 1 -- Additional Techniques</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="ISO" >
  <front>
    <title>ISO/IEC 18033-2, Information Technology - Security Techniques - Encryption Algorithms - Part 2 -- Asymmetric Ciphers</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </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></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="MAEA10" target="http://sceweb.sce.uhcl.edu/yang/teaching/csci5234WebSecurityFall2011/Chaum-blind-signatures.PDF">
  <front>
    <title>A Comparison of the Standardized Versions of ECIES</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </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 >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </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 >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="TestVectors" target="https://github.com/cfrg/draft-irtf-cfrg-hpke/blob/1e98830311b27f9af00787c16e2c5ac43abeadfb/test-vectors.json">
  <front>
    <title>HPKE Test Vectors</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


<reference anchor="keyagreement" >
  <front>
    <title>Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography</title>
    <author initials="E." surname="Barker" fullname="Elaine Barker">
      <organization></organization>
    </author>
    <author initials="L." surname="Chen" fullname="Lily Chen">
      <organization></organization>
    </author>
    <author initials="A." surname="Roginsky" fullname="Allen Roginsky">
      <organization></organization>
    </author>
    <author initials="M." surname="Smid" fullname="Miles Smid">
      <organization></organization>
    </author>
    <date year="2013" month="May"/>
  </front>
  <seriesInfo name="National Institute of Standards and Technology" value="report"/>
  <seriesInfo name="DOI" value="10.6028/nist.sp.800-56ar2"/>
</reference>

<reference anchor="NISTCurves" >
  <front>
    <title>Digital Signature Standard (DSS)</title>
    <author >
      <organization></organization>
    </author>
    <date year="2013" month="July"/>
  </front>
  <seriesInfo name="National Institute of Standards and Technology" value="report"/>
  <seriesInfo name="DOI" value="10.6028/nist.fips.186-4"/>
</reference>

<reference anchor="GCM" >
  <front>
    <title>Recommendation for block cipher modes of operation :</title>
    <author initials="M." surname="Dworkin" fullname="M J Dworkin">
      <organization></organization>
    </author>
    <date year="2007"/>
  </front>
  <seriesInfo name="National Institute of Standards and Technology" value="report"/>
  <seriesInfo name="DOI" value="10.6028/nist.sp.800-38d"/>
</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></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>




<reference  anchor="RFC6637" target='https://www.rfc-editor.org/info/rfc6637'>
<front>
<title>Elliptic Curve Cryptography (ECC) in OpenPGP</title>
<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>
<seriesInfo name='RFC' value='6637'/>
<seriesInfo name='DOI' value='10.17487/RFC6637'/>
</reference>



<reference anchor="I-D.ietf-mls-protocol">
<front>
<title>The Messaging Layer Security (MLS) Protocol</title>

<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='July' day='8' year='2019' />

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

<seriesInfo name='Internet-Draft' value='draft-ietf-mls-protocol-07' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-mls-protocol-07.txt' />
</reference>



<reference anchor="I-D.ietf-tls-esni">
<front>
<title>Encrypted Server Name Indication for TLS 1.3</title>

<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='July' day='8' year='2019' />

<abstract><t>This document defines a simple mechanism for encrypting the Server Name Indication for TLS 1.3.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-esni-04' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-esni-04.txt' />
</reference>



<reference  anchor="RFC7748" target='https://www.rfc-editor.org/info/rfc7748'>
<front>
<title>Elliptic Curves for Security</title>
<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>
<seriesInfo name='RFC' value='7748'/>
<seriesInfo name='DOI' value='10.17487/RFC7748'/>
</reference>



<reference  anchor="RFC5869" target='https://www.rfc-editor.org/info/rfc5869'>
<front>
<title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
<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>
<seriesInfo name='RFC' value='5869'/>
<seriesInfo name='DOI' value='10.17487/RFC5869'/>
</reference>



<reference  anchor="RFC8439" target='https://www.rfc-editor.org/info/rfc8439'>
<front>
<title>ChaCha20 and Poly1305 for IETF Protocols</title>
<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 &quot;combined mode&quot;, or Authenticated Encryption with Associated Data (AEAD) algorithm.</t><t>RFC 7539, the predecessor of this document, was meant to serve as a stable reference and an implementation guide.  It was a product of the Crypto Forum Research Group (CFRG).  This document merges the errata filed against RFC 7539 and adds a little text to the Security Considerations section.</t></abstract>
</front>
<seriesInfo name='RFC' value='8439'/>
<seriesInfo name='DOI' value='10.17487/RFC8439'/>
</reference>




    </references>


<section anchor="test-vectors" title="Test Vectors">

<t>These test vectors are also available in JSON format at <xref target="TestVectors"/>.</t>

<section anchor="dhkemp-256-hkdf-sha256-chacha20poly1305" title="DHKEM(P-256), HKDF-SHA256, ChaCha20Poly1305">

<section anchor="base-setup-information" title="Base Setup Information">
<figure><artwork><![CDATA[
mode: 0
kemID: 1
kdfID: 1
aeadID: 3
info: 4f6465206f6e2061204772656369616e2055726e
skR: 52c35c751dfc5234c08915cd819bb101de551e73377168450a93fcdfc85f69a4
skI: 89e112c2c801fa2f5f9ab81e9537bc2a9184f1c7e91763025b9914f46fee7bce
skE: 26d476593ddebc0e028d585bcb8bc2567212add5727a4b1788998098fa241640
psk: 6d656c6c6f6e
pskID: 456e6e796e20447572696e206172616e204d6f726961
pkR: 36efe961ada191d9327317c77a04509f9e0039f4cb9295b71a99591547b5822d
pkI: aa10cc9706de8c42b6cb107943d7019e486f128fac3e0093888ce9dc6946b56b
pkE: d94c4e4965313e32417706daf275a8177ff02ec3944289cfe08bb785fcb06535
enc: d94c4e4965313e32417706daf275a8177ff02ec3944289cfe08bb785fcb06535
zz: 2af66f3ac72e0ea5bdabf4535cf214fa419722ca770d4dc4b50d9cdf98d9bc03
context: 00000100010003d94c4e4965313e32417706daf275a8177ff02ec3944289cfe
08bb785fcb0653536efe961ada191d9327317c77a04509f9e0039f4cb9295b71a9959154
7b5822d0000000000000000000000000000000000000000000000000000000000000000e
3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85555c404062
9c64c5efec2f7230407d612d16289d7c5d7afcf9340280abd2de1ab
secret: 5d8ddb224e17e5def17466d25c84b5859c3952eb162db833aada3c6a31141edc
key: 3539b4782f8406e89a8938c04ecab55904972e4824a4e7765145ea1c6e0e639c
nonce: 564a1233316a27c88b525e00
]]></artwork></figure>

<section anchor="encryptions" title="Encryptions">
<figure><artwork><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 564a1233316a27c88b525e00
ciphertext: 0a4663a24385c26df033735981339a67d0c9177d79e884c2bad997b537a3
e92e3e52ced0aae34b45af62ff6856

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 564a1233316a27c88b525e01
ciphertext: 23fdfa43ccf4dac6023109f96992aced43bc3ec55f13bec6eb410c442d40
ecf410cd0ece1b1737abb0528bd38b

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 564a1233316a27c88b525e02
ciphertext: 2946d753a3f33b5331252744e9142cff4f952c05f801755f75962c463013
e72b99e2873bb79338b156ea8cbcde

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 564a1233316a27c88b525e04
ciphertext: 95eef5fbb968353a89e62df841180bca764a703f1d3c9ad567799af9c23b
27bcee116f4f8029c45c81edb6da6b

]]></artwork></figure>

</section>
</section>
</section>
<section anchor="dhkemp-256-hkdf-sha256-chacha20poly1305-1" title="DHKEM(P-256), HKDF-SHA256, ChaCha20Poly1305">

<section anchor="psk-setup-information" title="PSK Setup Information">
<figure><artwork><![CDATA[
mode: 1
kemID: 1
kdfID: 1
aeadID: 3
info: 4f6465206f6e2061204772656369616e2055726e
skR: dcfb864fa0621fd2fa2503eb59ea6697a688d287ebf186397140c20ca377e19d
skI: 252be9a871e9557ac4eb98d8ef7099853010cc12a8ee235298d87303f72ac627
skE: 923669b3b6d6bc42b0869990698489e491096c63ec44627ecd956c8367cf9b66
psk: 6d656c6c6f6e
pskID: 456e6e796e20447572696e206172616e204d6f726961
pkR: d452e65ed769df5e7510917377786f823396b3482b904a21c54907963b09ee70
pkI: f55f917bc5fed0c1941ff01c8d4af4d9afd24aae784f3c4456eb8e5e88906210
pkE: a391b2db73ec4a0d16fcd19ab101a105f38f46d241be92f2c14c2cf14455d44c
enc: a391b2db73ec4a0d16fcd19ab101a105f38f46d241be92f2c14c2cf14455d44c
zz: 8ae12384a807b4fb2d831f59b4a7ca47ae6e20807a10375dcd53a87377f6333e
context: 01000100010003a391b2db73ec4a0d16fcd19ab101a105f38f46d241be92f2c
14c2cf14455d44cd452e65ed769df5e7510917377786f823396b3482b904a21c54907963
b09ee700000000000000000000000000000000000000000000000000000000000000000e
ca994d516108a16db86e155390f3c3cec6f0aff60ade1ae9e3189140b0f3dea55c404062
9c64c5efec2f7230407d612d16289d7c5d7afcf9340280abd2de1ab
secret: e1b27041a309f61291b8bc19b28e5ca933ce4e9f41a512697dee4e74fe9c35c3
key: c129d72828e86a8837d5324c66b4b899bb75a8cccdcd9748a10cfdd072c51ea1
nonce: a9afe7dae4a0cae8d2ae55fc
]]></artwork></figure>

<section anchor="encryptions-1" title="Encryptions">
<figure><artwork><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: a9afe7dae4a0cae8d2ae55fc
ciphertext: 007b8f8d80aad47d6f00bfd08016edb253089f383575b746c1b572cdc31e
b2fa54b2868ff31bb6028d25ee9254

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: a9afe7dae4a0cae8d2ae55fd
ciphertext: 21132f6191883b3a2527dfa06e76509532140e1d292dee19fe0736c07c3c
e1b75b6d5824165a552f0e61b95546

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: a9afe7dae4a0cae8d2ae55fe
ciphertext: 6634023b7fad0a5fc3e0c80635bcaf4d55f3dd0e8962a9994865175e6225
ebb2d8ca6f9ed77237140bd6c7941c

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: a9afe7dae4a0cae8d2ae55f8
ciphertext: 3c825fe43b32e97f5897a26d216902b480ed158595c0878b445ec7ca821a
94ac9feb4e4465214781eac5ebd5ed

]]></artwork></figure>

</section>
</section>
</section>
<section anchor="dhkemp-256-hkdf-sha256-chacha20poly1305-2" title="DHKEM(P-256), HKDF-SHA256, ChaCha20Poly1305">

<section anchor="auth-setup-information" title="Auth Setup Information">
<figure><artwork><![CDATA[
mode: 2
kemID: 1
kdfID: 1
aeadID: 3
info: 4f6465206f6e2061204772656369616e2055726e
skR: 001a3727bf51c439a536f56777a3b44e6bb5f930ccab0bd2ddeae41792cafe54
skI: d586635b9dbd6bc1fad686e9a7cd3850c45bc941e302d15f1a39764705d8c131
skE: 6e506ff15d1eecfc8ac842141fc47073f3b84249c08b3ace21fda7e6c0d28ea9
psk: 6d656c6c6f6e
pskID: 456e6e796e20447572696e206172616e204d6f726961
pkR: 275157e7fca8b456c7d46c338fbc29820934c136b77ffdfbd1065f3be53b3d58
pkI: 11b9264691855bcd42dd83650a98fdf5452cff6ab02d544d21350e7c980cf84c
pkE: a95181c9b5c2cd6b698e1dc5ff0224b07b4310d0104c93e8a9f8ab0b51194d5c
enc: a95181c9b5c2cd6b698e1dc5ff0224b07b4310d0104c93e8a9f8ab0b51194d5c
zz: 25045c1cf5d0aac89c91f01ede92dc865176377a19ea76ecccc85a491e345136e205
ba378b99fbbab6e13823eb608013093c08580efaf02f3563398e9248a76f
context: 02000100010003a95181c9b5c2cd6b698e1dc5ff0224b07b4310d0104c93e8a
9f8ab0b51194d5c275157e7fca8b456c7d46c338fbc29820934c136b77ffdfbd1065f3be
53b3d5811b9264691855bcd42dd83650a98fdf5452cff6ab02d544d21350e7c980cf84ce
3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85555c404062
9c64c5efec2f7230407d612d16289d7c5d7afcf9340280abd2de1ab
secret: b5f5053d4b59fdc11b408e605159040c9f811069285c0ad6bd9b192c9149d9b0
key: 64ff57edb470b5c1159070783353e9e3bee30d3a541ca80db8f48f358016e73b
nonce: 3b2a156b859b66080b2c7aaa
]]></artwork></figure>

<section anchor="encryptions-2" title="Encryptions">
<figure><artwork><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 3b2a156b859b66080b2c7aaa
ciphertext: ccdfff2f9bc186b9bb9f70101dec6af0a8d8e459fc668ccc2621bdbbf540
a7a3bc406c66059a218f55fc7d5c96

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 3b2a156b859b66080b2c7aab
ciphertext: 2335befdca9bbca95b379e1c217dd2e51277922351bc0094ecc16d9cd9a0
eae9e7509fe37d918215c487ea511d

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 3b2a156b859b66080b2c7aa8
ciphertext: 02b57dae23e9021e5696cbbfa263d518c090434c962b64fcb28529a31e04
8250abecbd3bc8f299c0bd3838e32e

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 3b2a156b859b66080b2c7aae
ciphertext: 5509f4be3541faecfe54f5798728e99086505f13045e3078dcfd9ed51145
2b3bd4324927c6f31b052ec31cdf4f

]]></artwork></figure>

</section>
</section>
</section>
<section anchor="dhkemp-256-hkdf-sha256-chacha20poly1305-3" title="DHKEM(P-256), HKDF-SHA256, ChaCha20Poly1305">

<section anchor="authpsk-setup-information" title="AuthPSK Setup Information">
<figure><artwork><![CDATA[
mode: 3
kemID: 1
kdfID: 1
aeadID: 3
info: 4f6465206f6e2061204772656369616e2055726e
skR: a351b736c063b8c7ce267502c60163cd1520e9017f51fec08d7bd4aafddb4d18
skI: 52c643314f4002323b5dfed2930879b2500e26720d1e032a8441570db6fe6a27
skE: 88cb72cc3a97a52298730704bb1a21ab351bd53b26ade9801d24d8956ed1e073
psk: 6d656c6c6f6e
pskID: 456e6e796e20447572696e206172616e204d6f726961
pkR: 20f504f57c1a26364c34cb0cf76652ed6cfbd2f53b632094dcc8fc5c9cbdb447
pkI: 1fcdd165ed3308c78503795c62cbb7744157296ae38e75d12132cf046db77b3c
pkE: e5dc6885b8937cd7757d793056ec088c6c4f23664b1447cddc75faa6fda4220d
enc: e5dc6885b8937cd7757d793056ec088c6c4f23664b1447cddc75faa6fda4220d
zz: 97a1e67d462b910cb7fbfc2f47b41468c53f9c42acfa1ffde96c15dc44835f45c7b4
786df392f409dd758b4a82a3f8068ac27cce47cffda29ed4825fbc23f938
context: 03000100010003e5dc6885b8937cd7757d793056ec088c6c4f23664b1447cdd
c75faa6fda4220d20f504f57c1a26364c34cb0cf76652ed6cfbd2f53b632094dcc8fc5c9
cbdb4471fcdd165ed3308c78503795c62cbb7744157296ae38e75d12132cf046db77b3ce
ca994d516108a16db86e155390f3c3cec6f0aff60ade1ae9e3189140b0f3dea55c404062
9c64c5efec2f7230407d612d16289d7c5d7afcf9340280abd2de1ab
secret: 11a27001c204196ea0fdcab4661d8489110b96b53affa32e999a8021a8cccc44
key: a7751c97a3e447653a93df7dbd015a989c142556db2d46fc9b215500d850af3c
nonce: aa48d361cb83e5616c17e878
]]></artwork></figure>

<section anchor="encryptions-3" title="Encryptions">
<figure><artwork><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: aa48d361cb83e5616c17e878
ciphertext: c5f5cb79ff3e78a0d2a79f8ad48fd6a7ce712b7ea784de83014617cff327
8ba7a883da3331202337baca48cede

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: aa48d361cb83e5616c17e879
ciphertext: 77a69a25b544c8cafb360f51369422c0a128a81958a0f977b67eb4347f97
e129f758be762ab081463681d145ab

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: aa48d361cb83e5616c17e87a
ciphertext: 578097c8434c45fcfa579b2c0bc7f429949cd8224d2ef803a5f35956b410
2acced104eb2f3e239634c0c6ed20f

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: aa48d361cb83e5616c17e87c
ciphertext: d4a3b5e8f3ced951a6740152ff4fd59b59fd28077f241e92c8a9d937908e
03e552ae3201c32598e6553158e186

]]></artwork></figure>

</section>
</section>
</section>
<section anchor="dhkemcurve25519-hkdf-sha256-aes-gcm-128" title="DHKEM(Curve25519), HKDF-SHA256, AES-GCM-128">

<section anchor="authpsk-setup-information-1" title="AuthPSK Setup Information">
<figure><artwork><![CDATA[
mode: 3
kemID: 2
kdfID: 1
aeadID: 1
info: 4f6465206f6e2061204772656369616e2055726e
skR: 761a7649a4f2d544041e9c0b0a5b21b17c50f620b0f0f0f6be379d06e9cc03b0eb9
6e80d407b02a9a6e2639d89b3b63ebf4309c14bd42cc2
skI: 00dc8c9f25f4a8e37d8b9c4c128b0418b56588ef22d3ed923517d50ef2f6002ed4c
1b4980a73f9cfb21b936d372709c996f90da398682ba7
skE: 74f6d921192c57575bcc035a528accb5a6cf0b14c843c0eed7ad2ac7eb4130234e8
b7153c5c8b4caf9e3b07876e4030d0832d5146ce420e6
psk: 6d656c6c6f6e
pskID: 456e6e796e20447572696e206172616e204d6f726961
pkR: a48085d97d77fd2fd9f40e7e15244cb1c86a588de779e09313190f1a6f421d3b44f
2e1ee7c2880cdfc53fbdc5073cd893aff9824e5525f4e
pkI: 7a49877950822efe7b98192a4570cbaa0ed56e74503ea5392f8a0610ccc2b44560d
9c0fa3abe661f0b1ae42b715192fa38fe45b88e6ada5c
pkE: 7fe48abb457c6eea9adfbabf0e00d2cd9d39bca29a6b71e5a402fedae49bcd13ee2
9a0a381628f615df58c1160d6dab9997f215f0d84611e
enc: 7fe48abb457c6eea9adfbabf0e00d2cd9d39bca29a6b71e5a402fedae49bcd13ee2
9a0a381628f615df58c1160d6dab9997f215f0d84611e
zz: 588066a93d965e4603bef980cc537f297ed78f968972db01b22293a08db7ebddf0ba
75e871048bf55e2bfe765f48ad682c19e76a2b3ac6f2d482f084dc48a0926b88395634f9
16265aed52a14059d141fe19b391feb88472b7036d671a907ea71bdacd5bf020c751b085
36868e13a54a
context: 030002000100017fe48abb457c6eea9adfbabf0e00d2cd9d39bca29a6b71e5a
402fedae49bcd13ee29a0a381628f615df58c1160d6dab9997f215f0d84611ea48085d97
d77fd2fd9f40e7e15244cb1c86a588de779e09313190f1a6f421d3b44f2e1ee7c2880cdf
c53fbdc5073cd893aff9824e5525f4e7a49877950822efe7b98192a4570cbaa0ed56e745
03ea5392f8a0610ccc2b44560d9c0fa3abe661f0b1ae42b715192fa38fe45b88e6ada5ce
ca994d516108a16db86e155390f3c3cec6f0aff60ade1ae9e3189140b0f3dea55c404062
9c64c5efec2f7230407d612d16289d7c5d7afcf9340280abd2de1ab
secret: f4bf05f0d79ef456265e779a2ae6189cfb79fc9f44e21abdf66c4429fcb6386d
key: 07812dd5841687f5d874b25ad34512a8
nonce: 07e9c742808709ee42e8e2db
]]></artwork></figure>

<section anchor="encryptions-4" title="Encryptions">
<figure><artwork><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 07e9c742808709ee42e8e2db
ciphertext: 4b90fbbec45da6db8d1ca7495a20b20f2b2e75baeef235ba9964fe786afa
efd3b602d845f164f6b8a4d1984f47

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 07e9c742808709ee42e8e2da
ciphertext: 80782ff6020220603c7903aa40273e361fbb9d9f839ae328142160c14e55
79b2eb3bdd25c1f0b461eca6b77938

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 07e9c742808709ee42e8e2d9
ciphertext: 268bccd2cb9e5801b83a7ed2cd17a3fc4fbc7f13f83938c53a5501de2edf
a57fea94509e7b83f9aff93c86604d

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 07e9c742808709ee42e8e2df
ciphertext: 6da0f4abbdf81cfb828c2e996bf4bc6ef8ce4aab8d8b449d00fa1136076b
a6798fe9300040c73a7fcf29fc6568

]]></artwork></figure>

</section>
</section>
</section>
<section anchor="dhkemcurve25519-hkdf-sha256-aes-gcm-128-1" title="DHKEM(Curve25519), HKDF-SHA256, AES-GCM-128">

<section anchor="base-setup-information-1" title="Base Setup Information">
<figure><artwork><![CDATA[
mode: 0
kemID: 2
kdfID: 1
aeadID: 1
info: 4f6465206f6e2061204772656369616e2055726e
skR: c2ff8ebf27a7c216aaef69e6df8e8ea0499dede7c2f1e9c3285c0dbab016e8fe012
f26b7111766b354a05a7452e035952c577628b60ccc0b
skI: cfeb3fdcd27170b8d1737024ef962b08c5ef08a64598c974b6cf29bdfd27b430efc
01183024d99fbcf670d3153a3eca29560a3dd504d95bc
skE: b271caee10cfc57210246f4bccddb164efbf5987f036ce86ebb9adef8f2f4de2772
f3127154ef6e0938dfe8079beadb29fc0b1a6d9bbecd2
psk: 6d656c6c6f6e
pskID: 456e6e796e20447572696e206172616e204d6f726961
pkR: 130240c653ffd47b450ead456bfe2ffcefa3cb994127ee3b956e639a1c598aea33d
9b0ca1ef6955e00941d3114a791546ec7f69f1485a794
pkI: 0254b53e2c0d7fb542be2976ae4cc36151d5aa158dbb820f10514397db0a7764b1b
af35869123eb4308d3f023766238dd324f86b7c37fbd6
pkE: 609f6d88f7d666c05ab3b227d9cee9785d6b3bb84db38bcb27252f3fc247b8ef9f5
806a6785196f2fd14ccd3901a389c14bfe9983a18f3bd
enc: 609f6d88f7d666c05ab3b227d9cee9785d6b3bb84db38bcb27252f3fc247b8ef9f5
806a6785196f2fd14ccd3901a389c14bfe9983a18f3bd
zz: 3fbd8e680fdd883813cc22743eec42d68882a14534099133c74ba99ca17ff574c090
c9b7dd80a9b1a7050f572fae530e3df9e2bd70829fab
context: 00000200010001609f6d88f7d666c05ab3b227d9cee9785d6b3bb84db38bcb2
7252f3fc247b8ef9f5806a6785196f2fd14ccd3901a389c14bfe9983a18f3bd130240c65
3ffd47b450ead456bfe2ffcefa3cb994127ee3b956e639a1c598aea33d9b0ca1ef6955e0
0941d3114a791546ec7f69f1485a79400000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000e
3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85555c404062
9c64c5efec2f7230407d612d16289d7c5d7afcf9340280abd2de1ab
secret: ea4890f434398f3dab9689597e13367893db043eade9d2e26168969d6681b2b7
key: 64a7134ced54e7c12f0f29f6694dd454
nonce: 9d320a6d7e64e70cd0049300
]]></artwork></figure>

<section anchor="encryptions-5" title="Encryptions">
<figure><artwork><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 9d320a6d7e64e70cd0049300
ciphertext: 5eb83009dd19217e69ad034ea299c23d053ebd4a55f380ee272498c42839
71ebe0355d5bd1102c83262a1b1469

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 9d320a6d7e64e70cd0049301
ciphertext: c69efba335ab5b0b1478cce1bf4c0a05cf72f7e8d874bac89c8d9a0b95c2
59f4cda592e87923a551912a6fcb95

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 9d320a6d7e64e70cd0049302
ciphertext: 9a54c080ce6869b45e341a8674ac0200f7229b5fd191195c4383b902ff77
345c925934dd872bc2b57224ce8c55

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 9d320a6d7e64e70cd0049304
ciphertext: a7846b2b7bce9938e0c2cb7f08c9dd785b0a36e8f3479f780609b6740715
688cd234331ee30e94e771753ed68f

]]></artwork></figure>

</section>
</section>
</section>
<section anchor="dhkemcurve25519-hkdf-sha256-aes-gcm-128-2" title="DHKEM(Curve25519), HKDF-SHA256, AES-GCM-128">

<section anchor="psk-setup-information-1" title="PSK Setup Information">
<figure><artwork><![CDATA[
mode: 1
kemID: 2
kdfID: 1
aeadID: 1
info: 4f6465206f6e2061204772656369616e2055726e
skR: 885ac6a90c62d9e321a911e910464b1a3c559f02ad1d3539a0e1887f2583b632fd4
b15cd21f933959dd8a292d9482f3b7111fb71e0834a46
skI: bd135e910763604691fc86a76487b2477ec3c9450c06b6a4657fff00c0467aada6a
587f0c9cd0679ce8f66205fa60e64dfa3fe0102527563
skE: 982fbcd7f1546fe5b887fafaf43be898523b35d487ab89e2d38f6da9481b04b96e8
a826a2409bdafb3b39dbbd1e7fc4508bdd8dc3ea85f7b
psk: 6d656c6c6f6e
pskID: 456e6e796e20447572696e206172616e204d6f726961
pkR: 2affe562e4d391693111503c8623e2c14b262a6a0888bab8d375f4f548f9434c54e
85f54e7c149c9d3c4809643ccb1652d3737ecf1cd3c88
pkI: 23f814d016e8994ee4ab89ffcc326810ceb57aaafa5c50e2d642ffd53ca5b383e45
e0a4b19e271ef1fd08edf7dcd99c3eb20f1db434549de
pkE: e7ed1af6399a724c56a107e5de47b9e078bf6f6e2fa5ae49755793c366c0b6da060
97369d91a6b8bdb98936b4fd954c33c0be002e7d501ff
enc: e7ed1af6399a724c56a107e5de47b9e078bf6f6e2fa5ae49755793c366c0b6da060
97369d91a6b8bdb98936b4fd954c33c0be002e7d501ff
zz: f5fba4938687c4e111adde8f57e7df91de83095a8174908072aa6ec0bc23193c217c
b5c1dad836c6999602d89d5a9a01a0a0346a1aa7ff39
context: 01000200010001e7ed1af6399a724c56a107e5de47b9e078bf6f6e2fa5ae497
55793c366c0b6da06097369d91a6b8bdb98936b4fd954c33c0be002e7d501ff2affe562e
4d391693111503c8623e2c14b262a6a0888bab8d375f4f548f9434c54e85f54e7c149c9d
3c4809643ccb1652d3737ecf1cd3c8800000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000e
ca994d516108a16db86e155390f3c3cec6f0aff60ade1ae9e3189140b0f3dea55c404062
9c64c5efec2f7230407d612d16289d7c5d7afcf9340280abd2de1ab
secret: f5331d04b242473371650b149609a72a927208b3e7b70f11928664293437cc70
key: 3a4fc7cbff082518a71497c4984114f8
nonce: 2f5450a77c41c5fbf350b588
]]></artwork></figure>

<section anchor="encryptions-6" title="Encryptions">
<figure><artwork><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 2f5450a77c41c5fbf350b588
ciphertext: fb3ccc2a6a044bdb300d49f1d4846f717b3635d5d4cb1a470bc5125c7f54
dff129d24d73c11c73ce2538a77bc0

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 2f5450a77c41c5fbf350b589
ciphertext: 12edb000094a983da0689e9f07aa818b2973397f211848b59d17473b1ceb
74eea926b069906a531c6ee91f8767

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 2f5450a77c41c5fbf350b58a
ciphertext: 21a4906ea82622f499609dea9cf4141208be57dd5893ad373fda77db621b
ba82fa4701252ca77916b52905888f

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 2f5450a77c41c5fbf350b58c
ciphertext: af937d500799e7965bb4826872640e503ceaea2feb4b6b191e4f15bef38b
9ada8d2161cbbbc6cc2ddcdec5d7d9

]]></artwork></figure>

</section>
</section>
</section>
<section anchor="dhkemcurve25519-hkdf-sha256-aes-gcm-128-3" title="DHKEM(Curve25519), HKDF-SHA256, AES-GCM-128">

<section anchor="auth-setup-information-1" title="Auth Setup Information">
<figure><artwork><![CDATA[
mode: 2
kemID: 2
kdfID: 1
aeadID: 1
info: 4f6465206f6e2061204772656369616e2055726e
skR: 9e80592ee6011c31ceb7a4680f02a02eacb71b59a2d9e34c315c24901e3876223cf
3053d819b568975dd61e5e117681489bc1a3fd76baf6c
skI: 9aa35e568ff49255ee33d4b6d6ba44ae2750f476c42139184f784e1cdcd8845022b
5a953a34921a451b2ee545923b047b03d6d7b7dca4fe8
skE: 350d983c911282901ba1d9079486c46ee14bd119a220264a573c70efb09d1f25ec0
3a03774ef79b0c863dd6fcd9f303522f2a3e96a6b222f
psk: 6d656c6c6f6e
pskID: 456e6e796e20447572696e206172616e204d6f726961
pkR: 20ca731de41d98833df502bced639da3dc7a3ab2ad779807b32fe3e8c60522dbbd1
5ee52ba708e92581cf3da99aebabb082e1adbc225d4b8
pkI: 7c40802c09f8c1b77e79db90519e5d509194b89f6187130965b5a0a79f9f4b9f6ab
e6698230705ebab98f2776e653351ed010931506432f5
pkE: cf5f023b6c4515a5aa0a544428fa6697200046ade662f3891d0b13b37f45e331547
a2739743a6db1c95f9905d81d8a0ecc1d14213cc278b3
enc: cf5f023b6c4515a5aa0a544428fa6697200046ade662f3891d0b13b37f45e331547
a2739743a6db1c95f9905d81d8a0ecc1d14213cc278b3
zz: 2c86a1eeb5f0c453f2d2d070d0d610f1bae29eb4248511ba71889c0105bad8de81ec
10c851ab347548197ead9efafc623519f27264f00af59c64db921cdba429d6710e0e5ee4
3099fa5c9a665b450f8ead9d9c3ee865006e1e946ec66fde58ffd3618fa0d610c158eb3c
ad17be13f235
context: 02000200010001cf5f023b6c4515a5aa0a544428fa6697200046ade662f3891
d0b13b37f45e331547a2739743a6db1c95f9905d81d8a0ecc1d14213cc278b320ca731de
41d98833df502bced639da3dc7a3ab2ad779807b32fe3e8c60522dbbd15ee52ba708e925
81cf3da99aebabb082e1adbc225d4b87c40802c09f8c1b77e79db90519e5d509194b89f6
187130965b5a0a79f9f4b9f6abe6698230705ebab98f2776e653351ed010931506432f5e
3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85555c404062
9c64c5efec2f7230407d612d16289d7c5d7afcf9340280abd2de1ab
secret: e9d6fd4f27d1db870790cf4d274b6909f52985cfa04a58b191ce87b67ef17912
key: d389ba90853500ee9171641c5c66c497
nonce: 6f5f478828efc9b6d6b7d4a6
]]></artwork></figure>

<section anchor="encryptions-7" title="Encryptions">
<figure><artwork><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 6f5f478828efc9b6d6b7d4a6
ciphertext: 673a6802116d206f52d83ef246d973405644ccdb8c20a5b37f643ae4fa83
a95dcb6e90d048c2673d25f67fcf10

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 6f5f478828efc9b6d6b7d4a7
ciphertext: 378958a8c31f189959a170f0157eabcf39bc6e4e89135fdf13c14fbd0545
9b281eab9a6efa8669ae714634ad5c

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 6f5f478828efc9b6d6b7d4a4
ciphertext: 23d2e25e5ebac0c026c25e5073b6c26deba7dbdc834c40df2d72b4c5e27f
c73015c1ebc97460c5a5760dbfa647

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 6f5f478828efc9b6d6b7d4a2
ciphertext: 341d4276f22509a990cd42cf30916d388e2990f46931cbea3777f5f1126b
02f88eeff18350c50b9697f1c760c9

]]></artwork></figure>

</section>
</section>
</section>
<section anchor="dhkemp-521-hkdf-sha512-aes-gcm-256" title="DHKEM(P-521), HKDF-SHA512, AES-GCM-256">

<section anchor="base-setup-information-2" title="Base Setup Information">
<figure><artwork><![CDATA[
mode: 0
kemID: 3
kdfID: 2
aeadID: 2
info: 4f6465206f6e2061204772656369616e2055726e
skR: 15720150fdc70e202db0956306b423db726b56c3320351d0f76ee1c8a1e820f2
skI: fca1778fde831a4c54d99b0e94cf628d2f4feb8622ccfa48de72996c68e0b2a8
skE: ab7994440d264007a2a1afc1864dd8db747d442829ea30749d1e118310fd1ccd
psk: 6d656c6c6f6e
pskID: 456e6e796e20447572696e206172616e204d6f726961
pkR: 04df33a4ae755005d0b210de3dbd2e74414b8244516fdb0e4909a64833feb8f4f16
e2fb37f715e8eb55fcfd0343f1292c4342d5acf6d2c823d01509f72a5218760
pkI: 04bfee09860a8fccfdb126f63134aa5110b24c46d3d41b88a1f46b2b468c7c3786e
5ee049592ce834be8610a339716d5ee6285f225431bcc8781a75df50576c4af
pkE: 040dc51b668e178a1d08a271b15f3eef6e52bff842a401e40a3f419a678a82893a3
fb36986981e03093a35d6a1c368d3f476cff823c899d8ffe16057703949f75f
enc: 040dc51b668e178a1d08a271b15f3eef6e52bff842a401e40a3f419a678a82893a3
fb36986981e03093a35d6a1c368d3f476cff823c899d8ffe16057703949f75f
zz: f0c1b41ab1f08d0ae60a01f90753ba726db187c9e86dd2d13ff6068e2f0a15a7
context: 00000300020002040dc51b668e178a1d08a271b15f3eef6e52bff842a401e40
a3f419a678a82893a3fb36986981e03093a35d6a1c368d3f476cff823c899d8ffe160577
03949f75f04df33a4ae755005d0b210de3dbd2e74414b8244516fdb0e4909a64833feb8f
4f16e2fb37f715e8eb55fcfd0343f1292c4342d5acf6d2c823d01509f72a521876000000
000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000cf83e1357eefb8bdf15
42850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877
eec2f63b931bd47417a81a538327af927da3e490ce9df289fea4615a6eef004e5cec7a77
f0f0478e663643a1ab75945a0082e5b91ad84905c1632605d8377ed3d2cb688cf352d674
66c37bfaa08c8c765077b
secret: 7c8c575f12f28450dc3a30bd99879e54e194c39109dc15956b5562e6e1aa3628
8a68840fac961298b3294d0184a3791fa1feff6a348452adebdfc1e948310611
key: d94aeb074804cce1550b5d93aff2cc5ef61cc057f3530410e6ad75a32158218a
nonce: e735a50ad34d3f96e99080e0
]]></artwork></figure>

<section anchor="encryptions-8" title="Encryptions">
<figure><artwork><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: e735a50ad34d3f96e99080e0
ciphertext: dc47edece37f47f230f1d79b5de86b25ea27d7e18df91efb6d88efccaf73
ac504f23f923838672643b440c05f4

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: e735a50ad34d3f96e99080e1
ciphertext: 8e42bb9f01ea722a5fb24221a10ab19f53dff653c548ef866e14e791edd0
368caa7f10b20cc6effaa3c08ca450

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: e735a50ad34d3f96e99080e2
ciphertext: 3a7db4e1e3d6ec5d46c9544f3c659f64bf24511f3b3ada2f6b0c81e0ca3d
55e9047286491ba499af335bb7a15f

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: e735a50ad34d3f96e99080e4
ciphertext: 9f4e98355810ea87a650e4521d4c0e234909a798af0f692e4bd4996d423c
d40258c953b0e3161a66abf006cca6

]]></artwork></figure>

</section>
</section>
</section>
<section anchor="dhkemp-521-hkdf-sha512-aes-gcm-256-1" title="DHKEM(P-521), HKDF-SHA512, AES-GCM-256">

<section anchor="psk-setup-information-2" title="PSK Setup Information">
<figure><artwork><![CDATA[
mode: 1
kemID: 3
kdfID: 2
aeadID: 2
info: 4f6465206f6e2061204772656369616e2055726e
skR: df31e865b81e51872ff021f123188ea9f703caaeea9dc6fae26af89a5dd451c2
skI: 45bdb91bfd1009cff37046ef690f59f51968447ce30b8c8586e5ca079e9c8d01
skE: 4da9cd396ed063743f48ef9ae37df12d52f491b32ca450aa09c0cb83506ea06c
psk: 6d656c6c6f6e
pskID: 456e6e796e20447572696e206172616e204d6f726961
pkR: 04f4cc2713eaecac82beb27aa7609b5986355e8dc1df0e788ae9692aebf3bd0096b
ca786a9eb283d3548290090a2013f4e7a93f896c4c8ef7eb558bb6ae2eba635
pkI: 04e3a33ec7aee1a4c0ec7385e5d0413f36099134a929d03b17bf9cb863c467b2821
1a3a7dfccd5ecf4904d45479379e10a3c048c3bb1ca5a42f4cdec6ddc8cb89d
pkE: 04af29b75dfe3325bf0ab69cc028d88223561e5c28ad6ecf5b43f6b0c45beb4c6dd
d78e6264ebb77fb1247683fe03ee6fd740cc1d98e5ca221034ed2aa3f47d4d8
enc: 04af29b75dfe3325bf0ab69cc028d88223561e5c28ad6ecf5b43f6b0c45beb4c6dd
d78e6264ebb77fb1247683fe03ee6fd740cc1d98e5ca221034ed2aa3f47d4d8
zz: 90b5476ca2fc006713b0b9bb897b3398e28f8e8b2f515402759c73adac45c633
context: 0100030002000204af29b75dfe3325bf0ab69cc028d88223561e5c28ad6ecf5
b43f6b0c45beb4c6ddd78e6264ebb77fb1247683fe03ee6fd740cc1d98e5ca221034ed2a
a3f47d4d804f4cc2713eaecac82beb27aa7609b5986355e8dc1df0e788ae9692aebf3bd0
096bca786a9eb283d3548290090a2013f4e7a93f896c4c8ef7eb558bb6ae2eba63500000
000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000f19e7afbe93b9d8b983
7fe0a40ada462caf9a0318248f66dd7832fac65a58dcacbf170937f825b35d22fd191254
83b1f2f6993549423617d8ab9f65322d627b6490ce9df289fea4615a6eef004e5cec7a77
f0f0478e663643a1ab75945a0082e5b91ad84905c1632605d8377ed3d2cb688cf352d674
66c37bfaa08c8c765077b
secret: de997bdce9af8585cc667355840f4834ee476a672b0d2f2c681ccce12e95db22
936f2d9a5fa50ade203d93235e3564fb3ade9d663542ffbfc76ae424d39de475
key: afa0f39b5329014f931ae6290aca25692e87160cb2b04b41b939e3b084a6ba42
nonce: 56e7e5cb2208f2efa5518dc1
]]></artwork></figure>

<section anchor="encryptions-9" title="Encryptions">
<figure><artwork><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 56e7e5cb2208f2efa5518dc1
ciphertext: 78741eae8b0a80599b73b8cd17c62e223de6026e927bba1092f2604bde89
32f4cb94d07ab2906e4e81a8c8a3b5

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 56e7e5cb2208f2efa5518dc0
ciphertext: f1a616461772668be45b76d61875f2a7b66a949c28966cd959452caced0a
e9dad687f1c12cdc772f4c8ab89288

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 56e7e5cb2208f2efa5518dc3
ciphertext: bd2cb602fe814af8968aff7f674f8612448441ef0761566fde4c784857c4
04df4b0350deaa0b859d9b741f85a0

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 56e7e5cb2208f2efa5518dc5
ciphertext: 8be734d034491e079794d0deb991dced08c7862c9128b7c40df9e14fd8e1
db33fa6140dbea8ca8b08a45b7fbb9

]]></artwork></figure>

</section>
</section>
</section>
<section anchor="dhkemp-521-hkdf-sha512-aes-gcm-256-2" title="DHKEM(P-521), HKDF-SHA512, AES-GCM-256">

<section anchor="auth-setup-information-2" title="Auth Setup Information">
<figure><artwork><![CDATA[
mode: 2
kemID: 3
kdfID: 2
aeadID: 2
info: 4f6465206f6e2061204772656369616e2055726e
skR: 8dea808e9b7131fd0e8a17dd15e42cc099f117faa548d670efa5e6081f73ce60
skI: fe58f800178f4d5b997d8de6ed5be01067cd8268643617bd9d949d3cb4a877bf
skE: 211b4f599a7339fc7d221aa77db9a1f7cf242661d075e28fabbf7cfbb8e57dff
psk: 6d656c6c6f6e
pskID: 456e6e796e20447572696e206172616e204d6f726961
pkR: 0446410e894ef79edbbdea28bf24b6fcff98db20081c593420b6dcb073d41ec05a1
3360d5a612cbab1c45133835ddf4bc0995cbd1421daed3636f5cf7f898d9099
pkI: 043589359aeb7e0c1e025f7ab289e8e58d0c4b92733d144c7750489cd3ce394fa9c
a42493f33b2bb60105deec94a2bf2b244a41c8b9b108bd44140c774eea668bd
pkE: 046a82772774745fe8314cf6937130f79874399f109772ba65c7f2ddceb4f7f39a6
12a2dff81e72e5c2573f9758c03fdd49d95a6689499e40dfac065e3417847d5
enc: 046a82772774745fe8314cf6937130f79874399f109772ba65c7f2ddceb4f7f39a6
12a2dff81e72e5c2573f9758c03fdd49d95a6689499e40dfac065e3417847d5
zz: b7997963cddf3f4964808ab4b5eb977ce031e8006b03307b8ac6775c4590fde171e8
447c730dc23674426f97ff38917668804dbb7fadadfa70a1f9492e9751e7
context: 02000300020002046a82772774745fe8314cf6937130f79874399f109772ba6
5c7f2ddceb4f7f39a612a2dff81e72e5c2573f9758c03fdd49d95a6689499e40dfac065e
3417847d50446410e894ef79edbbdea28bf24b6fcff98db20081c593420b6dcb073d41ec
05a13360d5a612cbab1c45133835ddf4bc0995cbd1421daed3636f5cf7f898d909904358
9359aeb7e0c1e025f7ab289e8e58d0c4b92733d144c7750489cd3ce394fa9ca42493f33b
2bb60105deec94a2bf2b244a41c8b9b108bd44140c774eea668bdcf83e1357eefb8bdf15
42850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877
eec2f63b931bd47417a81a538327af927da3e490ce9df289fea4615a6eef004e5cec7a77
f0f0478e663643a1ab75945a0082e5b91ad84905c1632605d8377ed3d2cb688cf352d674
66c37bfaa08c8c765077b
secret: 02a461605f7ab25ec85ef87997224b1f6278194e6b1c51f982b4eddb8e5ba7a4
adb99e8824252055eb049f9b39b9b79aafa9681bf76da18f32d4fa127e2429d7
key: 940a93f92fe23971ed7e1c45643325875f1c9e6debdd9673b6a93323e6768d44
nonce: 1845b58e5b1fdf818468e430
]]></artwork></figure>

<section anchor="encryptions-10" title="Encryptions">
<figure><artwork><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 1845b58e5b1fdf818468e430
ciphertext: af0830628fb71aff13e657e790c04cfbb98e877380f82fd6a802c3c5a69e
bca266bbfaefcc21489381feb8bdf2

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 1845b58e5b1fdf818468e431
ciphertext: 1e57abf0021e46c1a69f71742518174e58a6f2730a42e12716c71206b450
cef73ecd67ffb9f4f16c15fa378174

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 1845b58e5b1fdf818468e432
ciphertext: a64c22d40e898bec453f4b7d37a2b1b1e03b110beb97ab368dd9ed80590b
031b52fb2a39a480c1b56b6a5137fc

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 1845b58e5b1fdf818468e434
ciphertext: 1d1e14028dcdfa8558f32f946430989f04656efcbbaae848a06c8ad13c93
cc3083ae9235e0152469ade6061f74

]]></artwork></figure>

</section>
</section>
</section>
<section anchor="dhkemp-521-hkdf-sha512-aes-gcm-256-3" title="DHKEM(P-521), HKDF-SHA512, AES-GCM-256">

<section anchor="authpsk-setup-information-2" title="AuthPSK Setup Information">
<figure><artwork><![CDATA[
mode: 3
kemID: 3
kdfID: 2
aeadID: 2
info: 4f6465206f6e2061204772656369616e2055726e
skR: dba96ffa3e49f77d14f5287436a6f18ba9517169221b09b657564c082ec8c75c
skI: 77139a3671704610c683c55390b7e22acce0fed77995ef04fec1ea39fd294510
skE: c3cccf8174f2eba1b8470f8949780fc1326d89792703e67f4c651b9ba9b6b90b
psk: 6d656c6c6f6e
pskID: 456e6e796e20447572696e206172616e204d6f726961
pkR: 04c2137257356e7117aed0dbab5cdb05420624709c5f21f1d1ff574fdb11be766a7
d744e4c591d8bb279f14337e1bc2efabc797fee302016ec60e5803fcac473de
pkI: 040515562bc995d4cc4054a06a1a10ed57e0865bfc9c04f9a2f09754cb4f98cc78f
6a48db7f8c2805447515d402fd51160fdd5bfe9bf98e058c02f6058dec29ffd
pkE: 049c76136a1d9fe7e529b54887cc5787fa77b5ed79a344ed18a7eea94385fe9a211
664e483beb6b7a089622db90ee3b90a33cb38053ca0a2356ef031b322f9554b
enc: 049c76136a1d9fe7e529b54887cc5787fa77b5ed79a344ed18a7eea94385fe9a211
664e483beb6b7a089622db90ee3b90a33cb38053ca0a2356ef031b322f9554b
zz: 146f3be856690d1cb668aa2e6357e76d27fcaeb79e736e1f1523f4783a2a7a5efcd5
5fdf5336cba4b5ef9f6690deecacab0ec2b424eacdbd6f8bdebc7c1803ad
context: 03000300020002049c76136a1d9fe7e529b54887cc5787fa77b5ed79a344ed1
8a7eea94385fe9a211664e483beb6b7a089622db90ee3b90a33cb38053ca0a2356ef031b
322f9554b04c2137257356e7117aed0dbab5cdb05420624709c5f21f1d1ff574fdb11be7
66a7d744e4c591d8bb279f14337e1bc2efabc797fee302016ec60e5803fcac473de04051
5562bc995d4cc4054a06a1a10ed57e0865bfc9c04f9a2f09754cb4f98cc78f6a48db7f8c
2805447515d402fd51160fdd5bfe9bf98e058c02f6058dec29ffdf19e7afbe93b9d8b983
7fe0a40ada462caf9a0318248f66dd7832fac65a58dcacbf170937f825b35d22fd191254
83b1f2f6993549423617d8ab9f65322d627b6490ce9df289fea4615a6eef004e5cec7a77
f0f0478e663643a1ab75945a0082e5b91ad84905c1632605d8377ed3d2cb688cf352d674
66c37bfaa08c8c765077b
secret: 3e67c4eec99e16bf3d0fabe2028570c7be28cb1d295cb53104b627a3a986241d
9edcf8d360cff6ed1f270a9e33b537497fa41416ba0b7eeed6521aa8e2fd6881
key: 9b3eef9e9deb5e0f7e2b79a913d58e5df5b7f3f03db6c62d991a041f35f0ecff
nonce: 95e7c32e5fb294b89a3d200a
]]></artwork></figure>

<section anchor="encryptions-11" title="Encryptions">
<figure><artwork><![CDATA[
sequence number: 0
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d30
nonce: 95e7c32e5fb294b89a3d200a
ciphertext: 97f14cb2285d45e8d366ba480d87adfa584fd04f7bbf84a5c06e52a6d805
0cca9904d814bc47e11b39895d57af

sequence number: 1
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d31
nonce: 95e7c32e5fb294b89a3d200b
ciphertext: 3fcfd33057227d616da1ab13ddb446926755d2343190d2d72083c622862d
2689799730b8640d14199705c94810

sequence number: 2
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d32
nonce: 95e7c32e5fb294b89a3d2008
ciphertext: d3b35551579f228ca7aef5675c48560005d4833a3c313721a0cb65da3651
bc824d3ae884e699cb03a3dd64f35d

sequence number: 4
plaintext: 4265617574792069732074727574682c20747275746820626561757479
aad: 436f756e742d34
nonce: 95e7c32e5fb294b89a3d200e
ciphertext: 87a8737364a510efdd50f704b45ea0c9c75d3bebc6a1e6ae35c13ad81f8b
3d1215aaeb166bda76cbf14b0b1f4e

]]></artwork></figure>

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


  </back>

<!-- ##markdown-source:
H4sIALphwF0AA+29a3cct7kl/L1+RY2y3jXkGZIqAHVBKcczo0hyrGNb9kjO
OZk366wItxJ7RHYz3U1JtOP89tkbqKquapLWNZY/DJ2I7O4qFPDguez94AH6
+Pg42y62Z+Fe/tWVXS98/v2lPVu4/OtwlT9auvXVxXaxWmbG2nV4hYu+//pR
5lduac5xi1+bbnu8WG+7Y9etXxyfXrwMx4XIvNmGe5nDvy9W66t7+WLZrbJs
cbG+l2/Xl5utLIq2kNnLcPV6tfb38sfLbVgvw/b4IRvMss3WLP1fzdlqiYdc
hU12sbiX/2W7ckf5ZrXerkO3wV9X5/zjP7PMXG5PV+t7WX6c41Gbe/nTk/yb
k/wPBm1ushw/qbtPF+7UrP3eZ6v1i3v5g8XGreLLcG4WZ/fy9Zn9n4uLVyeb
N7tmv8Z9aOCFeWWWk2a/Nuvt6eLl3mex2cfL9cJMm32Zrg1XZnlih+v/54KX
nXRryAiSWp+b7eIVBJjnzwpxL97ez9H9/Pv16mK1MWc5rsvNMn/87Lv8GcXF
gfG9G+cvP3gV1osN/pAn4jC1iIeH7b38dLu9uHf37uvXr082p6vLixPMw90L
cxHWm7u441j+VZxc+C7ekwS9SV3K8+P+dy+ef1+4LTrwjK2MnyQx/OHb/P+/
XEP8+dOwCWaNP74x9ih/Zi7P8aDt+iQvj3KtC5U/vdy407PFy9USH79ebH8M
6zMMDw3ef/Ls8Uwak6E+4EBXL9bm4vQqimF7GvIvF0uzdAsI61lYv1q4sMGE
eOjf+io/Po733X+xDuE8LLeQpY/v/LA2y80FtCz/02axfJE/OjtbQIYuf3C5
fhVmD4p9ucJw7uXQaPF2Ec2lch9DXzjM4RPDOWI3+4lkPzcY5OU24JbHjx49
mo2bb+RC1coc7eb+2UVwiw7tsa3NvirM5HPMRy99HLagJO57v+i78ENwp8vF
3y574xhHV77v6MYR5KsOQgxuy8GeRTmnl6vlwm2gpC8WywAl4EiffTcf6LPv
7j5+9CAXUAx1LI/QaG8e0OTY09XZ6gUH9Cw46Nf2atJ/vDsxgPtncEWL7ek5
3/8eVpjLOHJ4kfPArsEFXJymbkyGXb//sOnKhgn9Dga+XPyYOswpGaZreO/u
3g29ZLZxFBTXg9X5+WKzoQ+mP3j04I8zCf2Cdh5N1ImPftRBOxac85ky/HEN
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
jUBwkPLFAmgI2oVHwPO+hvuBKUYxjh7j+zgBNN8su0+F6A1sz5FPXNgYpeC8
A7uO6cgHPc3MC8MAnB8Yby6o3Ie5Y5RZziLFdgt9R3Qc9DzdHw6ju8+ivo5W
PxXOvkCBFcOrkN69SCO5yi/BddcZlfYphLQ6z7+Db0WoAgoMZ5DF5vKclssL
XpiLmKoY4wlQPPQWXYC7h5/ODx48/OpwsOt8QTtfe3qFQsApZNlf/pL/8N3D
75hb6o3SLba9V8dUJ2cx2DWYbJqn6D3y//xPzsRchzuY2ep17F5Y9zggwpTt
KTzni1M4jz0Z4CmDhNh4Fu0pduAoX6/O6FyoKjbAQy3gKGi+FDBiyzGc/4JA
Cb7l4PEhUThF16O9sB/8T3ADSOXFKl508BQ3PA0ukBP90i2PLugr1pDtwaND
5oY6hPbTfJ3m5pU5u8TUBEx19O+rZTjeLiJSi3c/P9i8/PNRfvHyz4fPeTOw
ZTT0CwN+GiUDreA48z//Pn+Oa59zlji3FxF6hkR1ogyeX0w/HuMzn3Lxks/h
I36YfQa/h0AWxxwnZTU0Gz+Mz+PtZ2F58Ga4Gy9ewAP2LnXltgFgDQAP9z9/
8xyx4U0PbmiXTJVsX6+O02WXS7LyOKhteMHousyXYUtgnh/YxYtjTBCs4hBe
mQnWNRUdj4fcodt/xQV/TRccvDnKl1Fgy3kH4pWD9vcPQQ/SLKB3sUt45nF8
wO6J6Qo+CwAQPuHgTXGUn5ycHOVvnvA5D+K7YUcXpk9FcMrHG4s3hTjK8a8s
VPxdFlVRH+Zf8G/Bd9M7Ua4/Ij4cDAOBTzvmG/MR4Vm9wJ8vn5/0t5RoD89E
i/1PbO3Nan1gjiyb+/N3T6/18vfpiuLNl8WXBbsmpCpTxx7JB+VzjuLxlvpD
VV+vudqwgpeFq40mOTKcGAAxabDeF5cpUhEoLhG6gFjzvr/RDz+YIdSH4YIW
uHTRHc/d4AAftjMvscMQESveH9Z/JsTs24GY5ZGYkXYf538MS7qJgMu/hyUd
wDCHtxADRgODUdD2DuM935r15tScHeD1Pbo7cCFe3C3eBH88KP1tyhbZ88Su
YHHPY6t/Wp737eJyNoxXv9wshA4Su6LbMXvNxhbj8FMvd2PCjA1+6Gje9pzU
piWnfL8Dc64bTRtghjckapcAjQ/DVSG10oOn09VZ71cnjukW9/IyjuEhW6JE
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
IPJ//Veu7+THeX9WZ99+7Od3vW7GDR9xSaq/9b99kYv5o+IOnHHXDVfDuHQV
3413xeWi+NcggdTU4W6vzvCAea8nZdrb+SPj/plxzwxBAx8Z332nR7ptvwzK
+9KNcaAzOYzvvq13F9sRPTB0vzhjvnW1ze9//3gTw9x5PI6ItYBH87g6luDR
wOCQ0pE0w06cuBYysvFZdU+f4ejrkCe7RgKUMzJH2kWEKOxF79oGxc3vpCcd
w9OlAr/xuNy5+STAHlvYHY8RN8uMqzI/R5Pr3yAy+vneHPKas3/99ruHj/77
FO/28x53YA/WwFl5ExUH8TvdMsPIvHRQLlw5V7s91DvoC6ewf/o+NO31YNeF
a0+/Dmf7LoxK+WauiIMWxIUjNvF8nI/JYklKqjBw/SEuCwA4H0U8HI9I6aF0
KuIb9+HtCkcA+XxPM+xVfgc9unMHM8Zt10SV/WNTHWZMVaADTAaM6xmz83mO
4nk+y1U2OapqUqSCTlxCZSnpvl+xZQ56eP16pPbT00+mRYZTTejvulEVbuJA
+2rxLtzpQ3Rk6NetSnITkbner7cToLdoDz3IbtfZ48nutr2dHpGo/MJW+U3c
K785xH0w0uOF5y1DnXT+95i0mv/8Pe7R5a+Ll/j36bDPpP80+/u94/Qz/jH5
6d9Lv65dwHrpdJIBGj7g+vwa5OVw8uS794df/YtJv4abBT6Lu6gO4paWw+Fm
Jcdff4cf2h30B9c03izHm3c7TQ6v38xDqpqm1DylZnezmjy5kmJ8cl2Nv25/
cjl/clnqw3hXVY+/bnhy9mUP5Nho3u/9ieOOFhj7kcra9ncMDYj44VfZ7gS+
XQZ7GQ8lYpHP8nh3StnhzXtjsukeA+Nc3OkTtx9MjpX6jx4XbcLQz+HMl9jB
yXaXyTL9ZHdrxE+xkGiW69/tYdydtsZs96PnyYMOtOHVUMm9DmfhFRO1fVt9
XBxZ4Dpkk2rsn36anh/JE78GiT/48ukfh5HslCWKfZjBWyS/SEXvuxRq/8ER
A3si9BMhna1Bg68iFZluQMxmR3qkRbBxFjYno+HfsJt9E48mTEbvuxuM/uGX
U3M/zfft/FYr//tNln+rWd9oyTM7/gpdOX721X3q89z6Kl23+4Y7XF0JvqrL
G67eSzZijidZnMjR7u92TT+cHMa4k91Pv2PlznWpRQ6/5ylfxn+X7y7Aa+7x
XWU58ZBvF+v9R8+O//jg22Mh9XCjiP5F9BLGh9HBTG+Ukxtl9EoTl/hLN9It
Pjg1+J8seEKyUEV17UbOki7VMEu7c7sA5XmmYp8tSqApFQOfjYdxDSXbi7Db
URHp4vS4sZ9+Gi4/3l0ePdNNu/Vc/9hI//unLFjinDwPQFPGY7/D9EjDIU1t
/CsTd14ORyYma/w2bE3ciL87ZTAN54Zk9DiMgwns69HD4ZB52jnBcfsDF0Py
18ORLePREPDE0X/0rmtcFBrOYO0rj+JJyWdJXDP+AQjJ9Z0hSddXHByM1ejM
nMW9b3f3nzCykeiXD+IyJAs6vtpl7ejseqaOF+egUPR758zks1PDTMR1VPzJ
2qejLHlK7tsZNstPsgp98qI/LC61NBZwzAWQZffn90aZ7ta/LtJc9d08H6aw
7y89BvcPpQlh4mo42XMsRemPboqbCCnmmFJaTs98TWcQpD2YnPOjyV75y+Vc
OdLieNqW9B9xCXg/o5JGGxdwGabz5wc7WHmUJUQ7BtXD55AwTwA94umfCaNT
gzjZOUGqnF4t+3z55P6jrF+Ivn4x2h7BwrDkPSnn2Pb7GqL+pDPLHj/vMzb9
MvEud7yIeeb1ismvdCzVRH7EqLvEV8w87i1KDlswBjOJea6LFbew0TpAQML6
OD5tfMpByp2nNB5I95gWn5w7d7hjNeaVWZzFCpk+hxdzLscXu/NEh5MkI6aI
578DTLjh/lQAkRKt6RyBtMw6KNzcYmLZ3qRkNnYjG7zCoIIGwrnaLHossDsH
/Xg8B/3Z8HUBSd73h9LugbQlV5SA2Hy/7PQkgzNq3OvAf7M7fveYV8Njxm8l
uDOUXf70UzyoneeQLsaKgc3EofWpjWyxfx60iRWLsaB3KBiYLHGPJzNxytKG
m9enq9j52JurbG8VbpaDHvZqbWeFn/FMpLiFBA1xcx86G48V3o3raOxHLCLY
kONeDTVJm7g5KaLpVHka1x0WKTfcJzFTGXg89DcVLuCjmINMm1kGGJvS5PHQ
mD49m2oLlllk75MCqVRRMmxD67dr9ksP/cl7kOT9+w+HCLBb9og7xmMufX+z
+ASMp/bHnaI8CnNXg4BmeYzNScLKYwohebXIcY7/vAPLxBQAIsQVvW4nq9od
AFLqeEpfNso7nZu86OsWlUyH+O2YQN/6br+8qNMleEbfM0xm0ohbJnPUhnEW
x7qecQvTbjqz3dTFlPG4XjFWvO5kt9tllVZ95soY1503R9mulGYcdKwxAWUZ
akF6W1oHnu+92V9f3vmc6TES1xebqIlxHe316eJsckzLsDltV6xsdmdW7j1n
3LJvYu0JD9mNlVZzPtKf5hx3xcYDWK6d5DsUBKYcIjOdr6NDi2XIu3NbxpTl
cFj3yfwLHKJaGr+62PaXcSFwOx52PbaOYLw053bx4pLViWPzuxqbVOvZF6Ng
UuB3FvGo3nu/WMN1dM1SDhArDuLW+LiQmWJEOiw6G9aEh6Pil+lEgR0kMulA
XQpmutU4f3z/yf0b4PFUogwJmMBeeePO5CH6gtHmy/A6tbIOLxZkkv3pilFq
nMFJZml8G+TwhrejUk3fny9G7h4wLZtNwTnnOm8Pk+5cO1cj2xG0O72EPOdh
s42QcGhj9hUHw+HJcCIrNHM1niss65/7lNje4GL8u3PTuO8Mfb9CoKMo98+S
uvYNAdlkr/iQSZjVzfIx4+Ea/QFRyT+lOe+XsqAa5s3i/PI8FjIuCC7GfbLF
my/xk3+R11WlKnqEPoEc5y9y0rQuOzZ9w2bi6YIzRt0v5HKFdP9IDVxw08l8
4/luNx3Mt7/fYNbY9SP6dm1dP6FvfvPIpO+NEHi2kXcxip2LKnF9fIiAm3vD
8cVjciclPXut2NPtqVbMP3onrdh9KUS2O6fnozQi7zUi+zU04uGXb9GI01vn
MGKwdKBf/4rF5Z946vrUVZq66/5nN3f7n7118maQMwt7GaL9c/X6DNE7WX32
zlP8axg9O/6WOf4lO73l7L5/ueHkvsldtx7c92nVY0zS/Zy+38Qa95JRc/a9
RP10TL9fIO3d5gFCE063zP/t2XdPBiCC//300+TLj+IB6fFIv92qw9E0d3l0
Lf/F638XF/bSwtD0i//iAg8Zwb28yOCgHmOORAZ1T39wYPxLxe/SvJeXXV3W
lSzqrg74V8iibBpZV7Wq25rfkVRUFV4DPr98ei+vpFOVayrhO8dvlHOFbkXl
vBattaIQPgA6h0apphG1LqvCtKpzuFhXXd2aEq08vpfrNgghnXS6EJ2RXdW1
xmoR2ko11knTCl12wjWhFU2tClnZthVlV9ZdCLiAfXl0L5e1L5u6apX3wboi
FFL7SlfWWY1GqrqRQoLno/eNKa1otG5bXbQaTyxFXRbZxQbqWXuM1eE/jD+L
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
YOZo2/8X4YZvv7b1AAA=

-->

</rfc>

