<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.23 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-hybrid-kems-02" category="info" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.0 -->
  <front>
    <title abbrev="hybrid-kems">Hybrid PQ/T Key Encapsulation Mechanisms</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-hybrid-kems-02"/>
    <author fullname="Deirdre Connolly">
      <organization>SandboxAQ</organization>
      <address>
        <email>durumcrustulum@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="February" day="25"/>
    <workgroup>Crypto Forum</workgroup>
    <abstract>
      <?line 129?>

<t>This document defines generic techniques to achive hybrid
post-quantum/traditional (PQ/T) key encapsulation mechanisms (KEMs) from
post-quantum and traditional component algorithms that meet specified
security properties. It then uses those generic techniques to construct
several concrete instances of hybrid KEMs.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Crypto Forum Research Group mailing list (cfrg@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cfrg"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/cfrg/draft-irtf-cfrg-pq1"/>.</t>
    </note>
  </front>
  <middle>
    <?line 137?>

<section anchor="intro">
      <name>Introduction</name>
      <t>There are many choices that can be made when specifying a hybrid KEM: the
constituent KEMs; their security levels; the combiner; and the hash within,
to name but a few. Having too many similar options are a burden to the
ecosystem.</t>
      <t>The aim of this document is provide a small set of techniques for
constructing hybrid KEMs designed to achieve specific security properties
given conforming component algorithms, that should be suitable for the vast
majority of use cases.</t>
    </section>
    <section anchor="requirements-notation">
      <name>Requirements Notation</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="notation">
      <name>Notation</name>
      <t>This document is consistent with all terminology defined in
<xref target="I-D.driscoll-pqt-hybrid-terminology"/>.</t>
      <t>The following terms are used throughout this document:</t>
      <ul spacing="normal">
        <li>
          <t><tt>random(n)</tt>: return a pseudorandom byte string of length <tt>n</tt> bytes produced
by a cryptographically-secure random number generator.</t>
        </li>
        <li>
          <t><tt>concat(x0, ..., xN)</tt>: Concatenation of byte strings.  <tt>concat(0x01,
0x0203, 0x040506) = 0x010203040506</tt>.</t>
        </li>
        <li>
          <t><tt>I2OSP(n, w)</tt>: Convert non-negative integer <tt>n</tt> to a <tt>w</tt>-length, big-endian
byte string, as described in <xref target="RFC8017"/>.</t>
        </li>
        <li>
          <t><tt>OS2IP(x)</tt>: Convert byte string <tt>x</tt> to a non-negative integer, as described
in <xref target="RFC8017"/>, assuming big-endian byte order.</t>
        </li>
      </ul>
      <t>When <tt>x</tt> is a byte string, we use the notation <tt>x[..i]</tt> and <tt>x[i..]</tt> to
denote the slice of bytes in <tt>x</tt> starting from the beginning of <tt>x</tt> and
leading up to index <tt>i</tt>, including the <tt>i</tt>-th byte, and the slice the bytes
in <tt>x</tt> starting from index <tt>i</tt> to the end of <tt>x</tt>, respectively. For example,
if <tt>x = [0, 1, 2, 3]</tt>, then <tt>x[..2] = [0, 1]</tt> and <tt>x[2..] = [2, 3]</tt>.</t>
    </section>
    <section anchor="cryptographic-deps">
      <name>Cryptographic Dependencies</name>
      <t>The generic hybrid PQ/T KEM constructions we define depend on the the
following cryptographic primitives:</t>
      <ul spacing="normal">
        <li>
          <t>Key Encapsulation Mechanism <xref target="kems"/>;</t>
        </li>
        <li>
          <t>Extendable Output Function (XOF) <xref target="xof"/>;</t>
        </li>
        <li>
          <t>Key Derivation Function (KDF) <xref target="kdf"/>; and</t>
        </li>
        <li>
          <t>Nominal Diffie-Hellman Group <xref target="group"/>.</t>
        </li>
      </ul>
      <t>These dependencies are defined in the following subsections.</t>
      <section anchor="kems">
        <name>Key encapsulation mechanisms</name>
        <t>Key encapsulation mechanisms (KEMs) are cryptographic schemes that consist of
four algorithms:</t>
        <ul spacing="normal">
          <li>
            <t><tt>KeyGen() -&gt; (pk, sk)</tt>: A probabilistic key generation algorithm, which
generates a public encapsulation key <tt>pk</tt> and a secret decapsulation key
<tt>sk</tt>, each of which are byte strings.</t>
          </li>
          <li>
            <t><tt>DeriveKey(seed) -&gt; (pk, sk)</tt>: A deterministic algorithm, which takes as
input a seed <tt>seed</tt> and generates a public encapsulation key <tt>pk</tt> and a
secret decapsulation key <tt>sk</tt>, each of which are byte strings.</t>
          </li>
          <li>
            <t><tt>Encaps(pk) -&gt; (ct, shared_secret)</tt>: A probabilistic encapsulation
algorithm, which takes as input a public encapsulation key <tt>pk</tt> and outputs
a ciphertext <tt>ct</tt> and shared secret <tt>shared_secret</tt>.</t>
          </li>
          <li>
            <t><tt>Decaps(sk, ct) -&gt; shared_secret</tt>: A decapsulation algorithm, which takes
as input a secret decapsulation key <tt>sk</tt> and ciphertext <tt>ct</tt> and outputs a
shared secret <tt>shared_secret</tt>.</t>
          </li>
        </ul>
        <t>KEMs can also provide a deterministic version of <tt>Encaps</tt>, denoted
<tt>EncapsDerand</tt>, with the following signature:</t>
        <ul spacing="normal">
          <li>
            <t><tt>EncapsDerand(pk, randomness) -&gt; (ct, shared_secret)</tt>: A deterministic
 encapsulation algorithm, which takes as input a public encapsulation key
 <tt>pk</tt> and randomness <tt>randomness</tt>, and outputs a ciphertext <tt>ct</tt> and shared
 secret <tt>shared_secret</tt>.</t>
          </li>
        </ul>
        <t>Finally, KEMs are also parameterized with the following constants:</t>
        <ul spacing="normal">
          <li>
            <t>Nseed, which denotes the number of bytes for a key seed;</t>
          </li>
          <li>
            <t>Npk, which denotes the number of bytes in a public encapsulation key;</t>
          </li>
          <li>
            <t>Nsk, which denotes the number of bytes in a private decapsulation key; and</t>
          </li>
          <li>
            <t>Nct, which denotes the number of bytes in a ciphertext.</t>
          </li>
        </ul>
      </section>
      <section anchor="xof">
        <name><tt>XOF</tt></name>
        <t>Extendable-output function (XOF). A function on bit strings in which the
output can be extended to any desired length. Ought to satisfy the following
properties as long as the specified output length is sufficiently long to
prevent trivial attacks:</t>
        <ol spacing="normal" type="1"><li>
            <t>(One-way) It is computationally infeasible to find any input that maps to
any new pre-specified output.</t>
          </li>
          <li>
            <t>(Collision-resistant) It is computationally infeasible to find any two
distinct inputs that map to the same output.</t>
          </li>
        </ol>
        <t><bcp14>MUST</bcp14> provide the bit-security required to source input randomness for PQ/T
components from a seed that is expanded to a output length, of which a subset
is passed to the component key generation algorithms.</t>
      </section>
      <section anchor="kdf">
        <name>Key Derivation Function <tt>KDF</tt></name>
        <t>A secure key derivation function (KDF) that is modeled as a secure
pseudorandom function (PRF) in the standard model <xref target="GHP2018"/> and independent
random oracle in the random oracle model (ROM).</t>
      </section>
      <section anchor="group">
        <name>Nominal Diffie-Hellman Group</name>
        <t>The traditional DH-KEM construction depends on an abelian group of order
<tt>order</tt>. We represent this group as the object <tt>G</tt> that additionally defines
helper functions described below. The group operation for <tt>G</tt> is addition <tt>+</tt>
with identity element <tt>I</tt>. For any elements <tt>A</tt> and <tt>B</tt> of the group <tt>G</tt>,
<tt>A + B = B + A</tt> is also a member of <tt>G</tt>. Also, for any <tt>A</tt> in <tt>G</tt>, there
exists an element <tt>-A</tt> such that <tt>A + (-A) = (-A) + A = I</tt>. For convenience,
we use <tt>-</tt> to denote subtraction, e.g., <tt>A - B = A + (-B)</tt>.  Integers, taken
modulo the group order <tt>order</tt>, are called scalars; arithmetic operations on
scalars are implicitly performed modulo <tt>order</tt>. Scalar multiplication is
equivalent to the repeated application of the group operation on an element
<tt>A</tt> with itself <tt>r-1</tt> times, denoted as <tt>ScalarMult(A, r)</tt>. We denote the
sum, difference, and product of two scalars using the <tt>+</tt>, <tt>-</tt>, and <tt>*</tt>
operators, respectively. (Note that this means <tt>+</tt> may refer to group element
addition or scalar addition, depending on the type of the operands.) For any
element <tt>A</tt>, <tt>ScalarMult(A, order) = I</tt>.  We denote <tt>B</tt> as a fixed generator
of the group. Scalar base multiplication is equivalent to the repeated
application of the group operation on <tt>B</tt> with itself <tt>r-1</tt> times, this is
denoted as <tt>ScalarBaseMult(r)</tt>. The set of scalars corresponds to
<tt>GF(order)</tt>, which we refer to as the scalar field. It is assumed that group
element addition, negation, and equality comparison can be efficiently
computed for arbitrary group elements.</t>
        <t>This document uses types <tt>Element</tt> and <tt>Scalar</tt> to denote elements of the
group <tt>G</tt> and its set of scalars, respectively. We denote <tt>Scalar(x)</tt> as the
conversion of integer input <tt>x</tt> to the corresponding <tt>Scalar</tt> value with the
same numeric value. For example, <tt>Scalar(1)</tt> yields a <tt>Scalar</tt> representing
the value 1.  We denote equality comparison of these types as <tt>==</tt> and
assignment of values by <tt>=</tt>. When comparing Scalar values, e.g., for the
purposes of sorting lists of Scalar values, the least nonnegative
representation mod <tt>order</tt> is used.</t>
        <t>We now detail a number of member functions that can be invoked on <tt>G</tt>.</t>
        <ul spacing="normal">
          <li>
            <t>Order(): Outputs the order of <tt>G</tt> (i.e., <tt>order</tt>).</t>
          </li>
          <li>
            <t>Identity(): Outputs the identity <tt>Element</tt> of the group (i.e., <tt>I</tt>).</t>
          </li>
          <li>
            <t>RandomScalar(): Outputs a random <tt>Scalar</tt> element in GF(order), i.e., a
random scalar in [0, order - 1].</t>
          </li>
          <li>
            <t>ScalarMult(A, k): Outputs the scalar multiplication between Element <tt>A</tt> and
Scalar <tt>k</tt>.</t>
          </li>
          <li>
            <t>ScalarBaseMult(k): Outputs the scalar multiplication between Scalar <tt>k</tt> and
the group generator <tt>B</tt>.</t>
          </li>
          <li>
            <t>SerializeElementAsSharedSecret(A): Maps an <tt>Element</tt> <tt>A</tt> to a fixed-length byte
array. This function is used to produce a shared secret for Diffie-Hellman
operations performed on the group.</t>
          </li>
          <li>
            <t>SerializeElement(A): Maps an <tt>Element</tt> <tt>A</tt> to a canonical byte array <tt>buf</tt>
of fixed length <tt>Ne</tt>. This function raises an error if <tt>A</tt> is the identity
element of the group.</t>
          </li>
          <li>
            <t>DeserializeElement(buf): Attempts to map a byte array <tt>buf</tt> to an <tt>Element</tt>
              <tt>A</tt>, and fails if the input is not the valid canonical byte representation
of an element of the group. This function raises an error if
deserialization fails or if <tt>A</tt> is the identity element of the group.</t>
          </li>
          <li>
            <t>SerializeScalar(s): Maps a Scalar <tt>s</tt> to a canonical byte array <tt>buf</tt> of
fixed length <tt>Ns</tt>.</t>
          </li>
          <li>
            <t>DeserializeScalar(buf): Attempts to map a byte array <tt>buf</tt> to a <tt>Scalar</tt>
              <tt>s</tt>.  This function raises an error if deserialization fails.</t>
          </li>
          <li>
            <t>ScalarFromBytes(buf): Maps a byte array <tt>buf</tt> to a <tt>Scalar</tt> by first
interpreting the contents of <tt>buf</tt> as an unsigned integer and then
reducing that integer modulo the group order; this ensures that the
resulting integer is always an element of the Scalar field.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="constructions">
      <name>Hybrid KEM Constructions</name>
      <!-- TODO: since NIST is OK'ing ML-KEM keygen from a NIST-approved KDF/PRF,
specify the generic seed-stretching KeyGen for all/both constructions,
here. -->

<t>During encapsulation and decapsulation, a hybrid KEM combines its component
KEM shared secrets and other info, such as the KEM ciphertexts and
encapsulation keys keys, to yield a shared secret.  The interface for this
function, often called a 'combiner' in the literature, is the <tt>SharedSecret</tt>
function for the constructions in this document. <tt>SharedSecret</tt> accepts the
following inputs:</t>
      <ul spacing="normal">
        <li>
          <t>pq_SS: The PQ KEM shared secret.</t>
        </li>
        <li>
          <t>trad_SS: The traditional KEM shared secret.</t>
        </li>
        <li>
          <t>pq_CT: The PQ KEM ciphertext.</t>
        </li>
        <li>
          <t>pq_PK: The PQ KEM public encapsulation key.</t>
        </li>
        <li>
          <t>trad_CT: The traditional KEM ciphertext.</t>
        </li>
        <li>
          <t>trad_PK: The traditional KEM public encapsulation key.</t>
        </li>
        <li>
          <t>label: A domain-separating label; see <xref target="domain-separation"/> for more
information on the role of the label.</t>
        </li>
      </ul>
      <t>The output of the <tt>SharedSecret</tt> function is a 32 byte shared secret that is,
ultimately, the output of the KEM. <!-- TODO: this doesn't hold generically,
right? If you instantiate with other components it can be more or less than
32 bytes. -->
      </t>
      <t>This section describes two generic constructions for hybrid KEMs: one called
the KitchenSink, specified in <xref target="KitchenSink"/>, and another called QSF,
specified in <xref target="QSF"/>.  The KitchenSink construction is maximally conservative
in design, opting for the least assumptions about the component KEMs. The QSF
construction is tailored to specific component KEMs and is not generally
reusable; specific requirements for component KEMs to be usable in the QSF
combiner are detailed in <xref target="QSF"/>.</t>
      <t>Both make use of the following requirements:</t>
      <ol spacing="normal" type="1"><li>
          <t>Both component KEMs have IND-CCA security.</t>
        </li>
        <li>
          <t>KDF as a secure PRF. A key derivation function (KDF) that is modeled as a
secure pseudorandom function (PRF) in the standard model <xref target="GHP2018"/> and
independent random oracle in the random oracle model (ROM).</t>
        </li>
        <li>
          <t>Fixed-length values. Every instantiation in concrete parameters of the
generic constructions is for fixed parameter sizes, KDF choice, and label,
allowing the lengths to not also be encoded into the generic
construction. The label/KDF/component algorithm parameter sets <bcp14>MUST</bcp14> be
disjoint and non-colliding. Moreover, the length of each each public
encapsulation key, ciphertext, and shared secret is fixed once the algorithm
is assumed to be fixed.</t>
        </li>
      </ol>
      <section anchor="generic-keygen">
        <name>Key generation and derivation</name>
        <t>For both constructions in this document we provide a common key generation
and derivation design. It relies on the following parameters that are
populated by concrete instantiations:</t>
        <ul spacing="normal">
          <li>
            <t><tt>XOF</tt>: the eXtended Output Function</t>
          </li>
          <li>
            <t><tt>PQKEM</tt>: the PQ KEM component scheme</t>
          </li>
          <li>
            <t><tt>G</tt>: the nomimal group used to construct the traditional KEM component
scheme as described in <xref target="group"/></t>
          </li>
          <li>
            <t>Nseed: length in bytes of the seed randomness sourced from the RNG</t>
          </li>
          <li>
            <t>Npqseed: length in bytes of the input to PQ.DeriveKey()</t>
          </li>
          <li>
            <t>Ntradseed: length in bytes of the input to NominalGroup.ScalarFromBytes()</t>
          </li>
        </ul>
        <artwork><![CDATA[
def expandDecapsulationKey(sk):
  expanded = XOF(sk, Npqseed + Ntradseed)
  (pq_PK, pq_SK) = PQKEM.DeriveKey(expanded[..Npqseed])
  trad_SK = G.ScalarFromBytes(expanded[Npqseed..])
  trad_PK = G.SerializeElement(NominalGroup.ScalarMultBase(trad_SK))
  return (pq_SK, trad_SK, pq_PK, trad_PK)

def KeyGen():
  sk = random(Nseed)
  (pq_SK, trad_SK, pq_PK, trad_PK) = expandDecapsulationKey(sk)
  return sk, concat(pq_PK, trad_PK)
]]></artwork>
        <t>Similarly, <tt>DeriveKey</tt> works as follows:</t>
        <artwork><![CDATA[
def DeriveKey(seed):
  (pq_SK, trad_SK, pq_PK, trad_PK) = expandDecapsulationKey(seed)
  return sk, concat(pq_PK, trad_PK)
]]></artwork>
      </section>
      <section anchor="KitchenSink">
        <name>'Kitchen Sink' construction</name>
        <t>As indicated by the name, the <tt>KitchenSink</tt> puts 'the whole transcript'
through the KDF. This relies on the minimum security properties of its
component algorithms at the cost of more bytes needing to be processed by the
KDF.</t>
        <artwork><![CDATA[
def KitchenSink-KEM.SharedSecret(pq_SS, trad_SS, pq_CT, pq_PK, trad_CT,
                                 trad_PK, label):
    input = concat(pq_SS, trad_SS, pq_CT, pq_PK,
                   trad_CT, trad_PK, label)
    return KDF(input)
]]></artwork>
        <section anchor="security-properties">
          <name>Security properties</name>
          <t>Because the entire hybrid KEM ciphertext and encapsulation key material are
included in the KDF preimage, the <tt>KitchenSink</tt> construction is resilient
against implementation errors in the component algorithms. <!-- TODO: cite
that thing -->
          </t>
        </section>
      </section>
      <section anchor="QSF">
        <name>'QSF' construction</name>
        <t>Inspired by the generic QSF (Quantum Superiority Fighter) framework in
<xref target="XWING"/>, which leverages the security properties of a KEM like ML-KEM and
an inlined instance of DH-KEM, to elide other public data like the PQ
ciphertext and encapsulation key from the KDF input:</t>
        <artwork><![CDATA[
def QSF-KEM.SharedSecret(pq_SS, trad_SS, pq_CT, pq_PK, trad_CT,
                         trad_PK, label):
    return KDF(concat(pq_SS, trad_SS, trad_CT, trad_PK, label))
]]></artwork>
        <t>Note that pq_CT and pq_PK are NOT included in the KDF. This is only possible
because the component KEMs adhere to the following requirements. The QSF
combiner <bcp14>MUST NOT</bcp14> be used in concrete KEM instances that do not satisfy these
requirements.</t>
        <ol spacing="normal" type="1"><li>
            <t>Nominal Diffie-Hellman Group with strong Diffie-Hellman security</t>
          </li>
        </ol>
        <t>A cryptographic group modelable as a nominal group where the strong
Diffie-Hellman assumption holds {XWING}. Specically regarding a nominal
group, this means that especially the QSF construction's security is
based on a computational-Diffie-Hellman-like problem, but no assumption is
made about the format of the generated group element - no assumption is made
that the shared group element is indistinguishable from random bytes.</t>
        <t>The concrete instantiations in this document use elliptic curve groups that
have been modeled as nominal groups in the literature.</t>
        <ol spacing="normal" type="1"><li>
            <t>Post-quantum IND-CCA KEM with ciphertext second preimage resistance</t>
          </li>
        </ol>
        <t>The QSF relies the post-quantum KEM component having IND-CCA security against
a post-quantum attacker, and ciphertext second preimage resistance (C2SPI,
also known as chosen ciphertext resistance, CCR). C2SPI/CCR is <xref target="CDM23">equivalent to
LEAK-BIND-K,PK-CT security</xref></t>
        <ol spacing="normal" type="1"><li>
            <t>KDF is a secure (post-quantum) PRF, modelable as a random oracle.</t>
          </li>
        </ol>
        <t>Indistinguishability of the final shared secret from a random key is
established by modeling the key-derivation function as a random
oracle <xref target="XWING"/>.</t>
      </section>
    </section>
    <section anchor="concrete-hybrid-kem-instances">
      <name>Concrete Hybrid KEM Instances</name>
      <t>This section instantiates three concrete KEMs:</t>
      <ol spacing="normal" type="1"><li>
          <t><tt>QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256)</tt> <xref target="qsf-p256"/>:
A hybrid KEM using the QSF combiner with SHA3-256 as the hash function
based on ML-KEM-768 and P-256, along with SHAKE256 as the key derivation XOF.</t>
        </li>
        <li>
          <t><tt>KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256)</tt> <xref target="ks-x25519"/>:
A hybrid KEM using the KitchenSink combiner based on ML-KEM-768 and X25519.</t>
        </li>
        <li>
          <t><tt>QSF-KEM(ML-KEM-1024,P-384)-XOF(SHAKE256)-KDF(SHA3-256)</tt> <xref target="qsf-p384"/>:
A hybrid KEM using the QSF combiner with SHA3-256 as the hash function
based on ML-KEM-1024 and P-384, along with SHAKE256 as the key derivation XOF.</t>
        </li>
      </ol>
      <t>Each instance specifies the PQ and traditional KEMs being combined, the
combiner construction from <xref target="constructions"/>, the <tt>label</tt> to use for domain
separation in the combiner function, as well as the XOF and KDF functions to
use throughout.</t>
      <section anchor="qsf-p256">
        <name><tt>QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256)</tt></name>
        <t>This hybrid KEM is heavily based on <xref target="XWING"/>. In particular, it has the same
exact design but uses P-256 instead of X25519 as the the traditional
component of the algorithm. It has the following parameters.</t>
        <ul spacing="normal">
          <li>
            <t><tt>label</tt>: <tt>QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256)</tt></t>
          </li>
          <li>
            <t><tt>XOF</tt>: SHAKE-256 <xref target="FIPS202"/></t>
          </li>
          <li>
            <t><tt>KDF</tt>: SHA3-256 <xref target="FIPS202"/></t>
          </li>
          <li>
            <t>Combiner: QSF-KEM.SharedSecret</t>
          </li>
          <li>
            <t>Nseed: 32</t>
          </li>
          <li>
            <t>Npqseed: 64</t>
          </li>
          <li>
            <t>Ntradseed: 48</t>
          </li>
          <li>
            <t>Npk: 1217</t>
          </li>
          <li>
            <t>Nsk: 32</t>
          </li>
          <li>
            <t>Nct: 1121</t>
          </li>
        </ul>
        <t><tt>QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256)</tt> depends on P-256 as a nominal prime-order
group <xref target="FIPS186"/> (secp256r1) <xref target="ANSIX9.62"/>, where Ne = 33 and Ns = 32, with
the following functions:</t>
        <ul spacing="normal">
          <li>
            <t>Order(): Return
0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551.</t>
          </li>
          <li>
            <t>Identity(): As defined in <xref target="ANSIX9.62"/>.</t>
          </li>
          <li>
            <t>RandomScalar(): Implemented by returning a uniformly random Scalar in the
range [0, <tt>G.Order()</tt> - 1]. Refer to <xref target="random-scalar"/> for
implementation guidance.</t>
          </li>
          <li>
            <t>SerializeElement(A): Implemented using the compressed
Elliptic-Curve-Point-to-Octet-String method according to <xref target="SEC1"/>,
yielding a 33-byte output. Additionally, this function validates that the
input element is not the group identity element.</t>
          </li>
          <li>
            <t>DeserializeElement(buf): Implemented by attempting to deserialize a
33-byte input string to a public key using the compressed
Octet-String-to-Elliptic-Curve-Point method according to <xref target="SEC1"/>, and
then performs public-key validation as defined in section 3.2.2.1 of
<xref target="SEC1"/>.  This includes checking that the coordinates of the resulting
point are in the correct range, that the point is on the curve, and that
the point is not the point at infinity. (As noted in the specification,
validation of the point order is not required since the cofactor is 1.)
If any of these checks fail, deserialization returns an error.</t>
          </li>
          <li>
            <t>SerializeElementAsSharedSecret(A): Implemented by encoding the X coordinate
of the elliptic curve point corresponding to A to a little-endian 32-byte string.</t>
          </li>
          <li>
            <t>SerializeScalar(s): Implemented using the Field-Element-to-Octet-String
conversion according to <xref target="SEC1"/>.</t>
          </li>
          <li>
            <t>DeserializeScalar(buf): Implemented by attempting to deserialize a Scalar
from a 32-byte string using Octet-String-to-Field-Element from
<xref target="SEC1"/>. This function can fail if the input does not represent a Scalar
in the range [0, <tt>G.Order()</tt> - 1].</t>
          </li>
          <li>
            <t>ScalarFromBytes(buf): Implemented by converting <tt>buf</tt> to an integer using
OS2IP, and then reducing the resulting integer modulo the group order.</t>
          </li>
        </ul>
        <t>The rest of this section specifies the key generation, encapsulation, and
decapsulation procedures for this hybrid KEM.</t>
        <section anchor="key-generation">
          <name>Key generation</name>
          <t><tt>QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256)</tt> KeyGen works as follows.</t>
          <!-- TODO: is this expanding from a decaps key seed, but maybe this should
just be 'expandKeyPair` -->

<!-- TODO: annotate with the byte sizes of the parameters in terms of Nseed,
Nsk, etc -->

<artwork><![CDATA[
def expandDecapsulationKey(sk):
  expanded = SHAKE256(sk, 112)
  (pq_PK, pq_SK) = ML-KEM-768.KeyGen_internal(expanded[0:32], expanded[32:64])
  trad_SK = P-256.ScalarFromBytes(expanded[64:112])
  trad_PK = P-256.SerializeElement(P-256.ScalarMultBase(trad_SK))
  return (pq_SK, trad_SK, pq_PK, trad_PK)

def KeyGen():
  sk = random(32)
  (pq_SK, trad_SK, pq_PK, trad_PK) = expandDecapsulationKey(sk)
  return sk, concat(pq_PK, trad_PK)
]]></artwork>
          <t>Similarly, <tt>QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256)</tt> DeriveKey works as follows:</t>
          <artwork><![CDATA[
def DeriveKey(seed):
  (pq_SK, trad_SK, pq_PK, trad_PK) = expandDecapsulationKey(seed)
  return sk, concat(pq_PK, trad_PK)
]]></artwork>
        </section>
        <section anchor="encapsulation">
          <name>Encapsulation</name>
          <t>Given an encapsulation key <tt>pk</tt>, <tt>QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256)</tt> Encaps
proceeds as follows.</t>
          <artwork><![CDATA[
def Encaps(pk):
  pq_PK = pk[0:1184]
  trad_PK = P-256.DeserializeElement(pk[1184:1217])
  (pq_SS, pq_CT) = ML-KEM-768.Encaps(pq_PK)
  ek = P-256.RandomScalar()
  trad_CT = P-256.SerializeElement(P-256.ScalarBaseMult(ek))
  trad_SS = P-256.SerializeElementAsSharedSecret(P-256.ScalarMult(trad_PK, ek))
  ss = SHA3-256(pq_SS, trad_SS, trad_CT, pk[1184:1217], label)
  ct = concat(pq_CT, trad_CT)
  return (ss, ct)
]]></artwork>
          <t><tt>pk</tt> is a 1217-byte encapsulation key resulting from KeyGen().</t>
          <t>Encaps() returns the 32-byte shared secret <tt>ss</tt> and the 1121-byte ciphertext
<tt>ct</tt>.</t>
          <t>Note that <tt>Encaps()</tt> may raise an error if ML-KEM-768.Encaps fails, e.g., if
it does not pass the check of <xref target="FIPS203"/> §7.2.</t>
        </section>
        <section anchor="derandomized">
          <name>Derandomized</name>
          <t>For testing, it is convenient to have a deterministic version of
encapsulation. In such cases, an implementation can provide the following
derandomized function.</t>
          <artwork><![CDATA[
def EncapsDerand(pk, randomness):
  pq_PK = pk[0:1184]
  trad_PK = P-256.DeserializeElement(pk[1184:1217])
  (pq_SS, pq_CT) = ML-KEM-768.EncapsDerand(pq_PK, randomness[0:32])
  ek = P-256.ScalarFromBytes(randomness[32:80])
  trad_CT = P-256.SerializeElement(P-256.ScalarMultBase(ek))
  trad_SS = P-256.SerializeElementAsSharedSecret(P-256.ScalarMult(ek, trad_PK))
  ss = SHA3-256(pq_SS, trad_SS, trad_CT, trad_PK, label)
  ct = concat(pq_CT, trad_CT)
  return (ss, ct)
]]></artwork>
          <t>Note that <tt>randomness</tt> <bcp14>MUST</bcp14> be 80 bytes.</t>
        </section>
        <section anchor="decapsulation">
          <name>Decapsulation</name>
          <t>Given a decapsulation key <tt>sk</tt> and ciphertext <tt>ct</tt>,
<tt>QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256)</tt> Decaps proceeds as follows.</t>
          <artwork><![CDATA[
def Decaps(sk, ct):
  (pq_SK, trad_SK, pq_PK, trad_PK) = expandDecapsulationKey(sk)
  pq_CT = ct[0:1088]
  trad_CT = P-256.DeserializeElement(ct[1088:1121])
  pq_SS = ML-KEM-768.Decapsulate(pq_SK, pq_CT)
  trad_SS = P-256.SerializeElementAsSharedSecret(P-256.ScalarMult(trad_SK, trad_CT))
  return SHA3-256(pq_SS, trad_SS, ct[1088:1121], trad_PK, label)
]]></artwork>
          <t><tt>ct</tt> is the 1121-byte ciphertext resulting from Encaps() and <tt>sk</tt> is a
32-byte decapsulation key resulting from KeyGen().</t>
          <t>Decaps() returns the 32 byte shared secret.</t>
        </section>
        <section anchor="security-properties-1">
          <name>Security properties</name>
          <t>The inlined DH-KEM is instantiated over the elliptic curve group P-256: as
shown in <xref target="CDM23"/>, this gives the traditional KEM maximum binding
properties (MAL-BIND-K-CT, MAL-BIND-K-PK).</t>
          <t>ML-KEM-768 as standardized in <xref target="FIPS203"/>, when using the 64-byte seed key
format as is here, provides MAL-BIND-K-CT security and LEAK-BIND-K-PK
security, as demonstrated in <xref target="SCHMIEG2024"/>.</t>
          <t>Therefore this concrete instance provides MAL-BIND-K-PK and MAL-BIND-K-CT
security. <!-- TODO: update XWING paper to show this -->
          </t>
          <t>This implies via <xref target="KSMW2024"/> that this instance also satisfies</t>
          <ul spacing="normal">
            <li>
              <t>MAL-BIND-K,CT-PK</t>
            </li>
            <li>
              <t>MAL-BIND-K,PK-CT</t>
            </li>
            <li>
              <t>LEAK-BIND-K-PK</t>
            </li>
            <li>
              <t>LEAK-BIND-K-CT</t>
            </li>
            <li>
              <t>LEAK-BIND-K,CT-PK</t>
            </li>
            <li>
              <t>LEAK-BIND-K,PK-CT</t>
            </li>
            <li>
              <t>HON-BIND-K-PK</t>
            </li>
            <li>
              <t>HON-BIND-K-CT</t>
            </li>
            <li>
              <t>HON-BIND-K,CT-PK</t>
            </li>
            <li>
              <t>HON-BIND-K,PK-CT</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="ks-x25519">
        <name><tt>KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256)</tt></name>
        <t>KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256) has the following parameters.</t>
        <ul spacing="normal">
          <li>
            <t><tt>label</tt>: <tt>KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256)</tt></t>
          </li>
          <li>
            <t><tt>XOF</tt>: SHAKE-256 <xref target="FIPS202"/></t>
          </li>
          <li>
            <t><tt>KDF</tt>: HKDF-SHA-256 <xref target="HKDF"/></t>
          </li>
          <li>
            <t>Combiner: KitchenSink-KEM.SharedSecret</t>
          </li>
          <li>
            <t>Nseed: 32</t>
          </li>
          <li>
            <t>Npqseed: 64</t>
          </li>
          <li>
            <t>Ntradseed: 32</t>
          </li>
          <li>
            <t>Npk: 1216</t>
          </li>
          <li>
            <t>Nsk: 32</t>
          </li>
          <li>
            <t>Nct: 1120</t>
          </li>
        </ul>
        <t><tt>KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256)</tt> depends on a prime-order group
implemented using Curve25519 and X25519 <xref target="RFC7748"/>. Additionally, it uses a
modified version of HKDF in the combiner, denoted LabeledHKDF, defined below.</t>
        <!-- TODO: double check on whether the public context should go in `*_info`
or if all concatted is fine; i think a separate label is ok? HKDF as a split
PRF seems extra?-->

<artwork><![CDATA[
def LabeledExtract(salt, label, ikm):
  labeled_ikm = concat(label, ikm)
  return HDKF-Extract(salt, labeled_ikm)

def LabeledExpand(prk, label, info, L):
  labeled_info = concat(I2OSP(L, 2), label, info)
  return HKDF-Expand(prk, labeled_info, L)

def LabeledHKDF(preimage):
  prk = LabeledExtract("", "hybrid_prk", preimage)
  shared_secret = LabeledExpand(prk, "shared_secret", "", 32)
  return shared_secret
]]></artwork>
        <t>The rest of this section specifies the key generation, encapsulation, and
decapsulation procedures for this hybrid KEM.</t>
        <section anchor="key-generation-1">
          <name>Key generation</name>
          <t><tt>KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256)</tt> KeyGen works as follows.</t>
          <artwork><![CDATA[
def expandDecapsulationKey(sk):
  expanded = SHAKE256(sk, 96)
  (pq_PK, pq_SK) = ML-KEM-768.KeyGen_internal(expanded[0:32], expanded[32:64])
  trad_SK = expanded[64:96]
  trad_PK = X25519(trad_SK, 9)
  return (pq_SK, trad_SK, pq_PK, trad_PK)

def KeyGen():
  sk = random(32)
  (pq_SK, trad_SK, pq_PK, trad_PK) = expandDecapsulationKey(sk)
  return sk, concat(pq_PK, trad_PK)
]]></artwork>
          <t>Similarly, <tt>KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256)</tt> DeriveKey works as
follows:</t>
          <artwork><![CDATA[
def DeriveKey(seed):
  (pq_SK, trad_SK, pq_PK, trad_PK) = expandDecapsulationKey(seed)
  return sk, concat(pq_PK, trad_PK)
]]></artwork>
        </section>
        <section anchor="encapsulation-1">
          <name>Encapsulation</name>
          <t>Given an encapsulation key <tt>pk</tt>, <tt>KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256)</tt>
Encaps proceeds as follows.</t>
          <artwork><![CDATA[
def Encaps(pk):
  pq_PK = pk[0:1184]
  trad_PK = pk[1184:1216]
  (pq_SS, pq_CT) = ML-KEM-768.Encaps(pq_PK)
  ek = random(32)
  trad_CT = X25519(ek, 9)
  trad_SS = X25519(ek, trad_PK)
  ss = LabeledHKDF(pq_SS, trad_SS, pq_CT, pq_PK, trad_CT, trad_PK, label)
  ct = concat(pq_CT, trad_CT)
  return (ss, ct)
]]></artwork>
          <t><tt>pk</tt> is a 1216-byte encapsulation key resulting from KeyGen().</t>
          <t>Encaps() returns the 32-byte shared secret ss and the 1120-byte ciphertext
ct.</t>
          <t>Note that <tt>Encaps()</tt> may raise an error if ML-KEM-768.Encaps fails, e.g., if
it does not pass the check of <xref target="FIPS203"/> §7.2.</t>
        </section>
        <section anchor="derandomized-1">
          <name>Derandomized</name>
          <t>For testing, it is convenient to have a deterministic version of
encapsulation. In such cases, an implementation can provide the following
derandomized function.</t>
          <artwork><![CDATA[
def EncapsDerand(pk, randomness):
  pq_PK = pk[0:1184]
  trad_PK = pk[1184:1216]
  (pq_SS, pq_CT) = PQ-KEM.EncapsDerand(pq_PK, randomness[0:32])
  ek = randomness[32:64]
  trad_CT = X25519(ek, 9)
  trad_SS = X25519(ek, trad_PK)
  ss = LabeledHKDF(pq_SS, trad_SS, pq_CT, pq_PK, trad_CT, trad_PK, label)
  ct = concat(pq_CT, trad_CT)
  return (ss, ct)
]]></artwork>
          <t>Note that <tt>randomness</tt> <bcp14>MUST</bcp14> be 64 bytes.</t>
        </section>
        <section anchor="decapsulation-1">
          <name>Decapsulation</name>
          <t>Given a decapsulation key <tt>sk</tt> and ciphertext <tt>ct</tt>,
<tt>KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256)</tt> Decaps proceeds as follows.</t>
          <artwork><![CDATA[
def Decaps(sk, ct):
  (pq_SK, trad_SK, pq_PK, trad_PK) = expandDecapsulationKey(sk)
  pq_CT = ct[0:1088]
  trad_CT = ct[1088:1120]
  pq_SS = ML-KEM-768.Decapsulate(pq_SK, pq_CT)
  trad_SS = X25519(trad_SK, trad_CT)
  return LabeledHKDF(pq_SS, trad_SS, pq_CT, pq_PK, trad_CT, trad_PK, label)
]]></artwork>
          <t><tt>ct</tt> is the 1120-byte ciphertext resulting from Encaps() and <tt>sk</tt> is a
32-byte decapsulation key resulting from KeyGen().</t>
          <t>Decaps() returns the 32 byte shared secret.</t>
        </section>
        <section anchor="security-properties-2">
          <name>Security properties</name>
          <t>The inlined DH-KEM instantiated over the elliptic curve group X25519: as
shown in <xref target="CDM23"/>, this gives the traditional KEM maximum binding
properties (MAL-BIND-K-CT, MAL-BIND-K-PK).</t>
          <t>ML-KEM-768 as standardized in <xref target="FIPS203"/>, when using the 64-byte seed key
format as is here, provides MAL-BIND-K-CT security and LEAK-BIND-K-PK
security, as demonstrated in <xref target="SCHMIEG2024"/>. Further, the ML-KEM ciphertext
and encapsulation key are included in the KDF preimage, giving
straightforward CT and PK binding for the entire bytes of the hybrid KEM
ciphertext and encapsulation key. Therefore this concrete instance provides
MAL-BIND-K-PK and MAL-BIND-K-CT security.</t>
          <t>This implies via <xref target="KSMW2024"/> that this instance also satisfies</t>
          <ul spacing="normal">
            <li>
              <t>MAL-BIND-K,CT-PK</t>
            </li>
            <li>
              <t>MAL-BIND-K,PK-CT</t>
            </li>
            <li>
              <t>LEAK-BIND-K-PK</t>
            </li>
            <li>
              <t>LEAK-BIND-K-CT</t>
            </li>
            <li>
              <t>LEAK-BIND-K,CT-PK</t>
            </li>
            <li>
              <t>LEAK-BIND-K,PK-CT</t>
            </li>
            <li>
              <t>HON-BIND-K-PK</t>
            </li>
            <li>
              <t>HON-BIND-K-CT</t>
            </li>
            <li>
              <t>HON-BIND-K,CT-PK</t>
            </li>
            <li>
              <t>HON-BIND-K,PK-CT</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="qsf-p384">
        <name><tt>QSF-KEM(ML-KEM-1024,P-384)-XOF(SHAKE256)-KDF(SHA3-256)</tt></name>
        <!-- TODO: include the XOF in the name?? -->

<t><tt>QSF-KEM(ML-KEM-1024,P-384)-XOF(SHAKE256)-KDF(SHA3-256)</tt> has the following parameters.</t>
        <ul spacing="normal">
          <li>
            <t><tt>label</tt>: <tt>QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256)</tt></t>
          </li>
          <li>
            <t><tt>XOF</tt>: SHAKE-256 <xref target="FIPS202"/></t>
          </li>
          <li>
            <t><tt>KDF</tt>: SHA3-256 <xref target="FIPS202"/></t>
          </li>
          <li>
            <t>Combiner: QSF-KEM.SharedSecret</t>
          </li>
          <li>
            <t>Nseed: 32</t>
          </li>
          <li>
            <t>Npqseed: 64</t>
          </li>
          <li>
            <t>Ntradseed: 72</t>
          </li>
          <li>
            <t>Npk: 1629</t>
          </li>
          <li>
            <t>Nsk: 32</t>
          </li>
          <li>
            <t>Nct: 1629</t>
          </li>
        </ul>
        <t><tt>QSF-KEM(ML-KEM-1024,P-384)-XOF(SHAKE256)-KDF(SHA3-256)</tt> depends on P-384 as a nominal prime-order
group <xref target="FIPS186"/> (secp256r1) <xref target="ANSIX9.62"/>, where Ne = 61 and Ns = 48, with
the following functions:</t>
        <ul spacing="normal">
          <li>
            <t>Order(): Return
0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf
581a0db248b0a77aecec196accc52973</t>
          </li>
          <li>
            <t>Identity(): As defined in <xref target="ANSIX9.62"/>.</t>
          </li>
          <li>
            <t>RandomScalar(): Implemented by returning a uniformly random Scalar in the
range [0, <tt>G.Order()</tt> - 1]. Refer to <xref target="random-scalar"/> for
implementation guidance.</t>
          </li>
          <li>
            <t>SerializeElement(A): Implemented using the compressed
Elliptic-Curve-Point-to-Octet-String method according to <xref target="SEC1"/>, yielding
a 61-byte output. Additionally, this function validates that the input
element is not the group identity element.</t>
          </li>
          <li>
            <t>DeserializeElement(buf): Implemented by attempting to deserialize a 61-byte
input string to a public key using the compressed
Octet-String-to-Elliptic-Curve-Point method according to <xref target="SEC1"/>, and then
performs public-key validation as defined in section 3.2.2.1 of <xref target="SEC1"/>.
This includes checking that the coordinates of the resulting point are in
the correct range, that the point is on the curve, and that the point is
not the point at infinity. (As noted in the specification, validation of
the point order is not required since the cofactor is 1.)  If any of these
checks fail, deserialization returns an error.</t>
          </li>
          <li>
            <t>SerializeElementAsSharedSecret(A): Implemented by encoding the X coordinate
of the elliptic curve point corresponding to A to a little-endian 48-byte
string.</t>
          </li>
          <li>
            <t>SerializeScalar(s): Implemented using the Field-Element-to-Octet-String
conversion according to <xref target="SEC1"/>.</t>
          </li>
          <li>
            <t>DeserializeScalar(buf): Implemented by attempting to deserialize a Scalar
from a 48-byte string using Octet-String-to-Field-Element from
<xref target="SEC1"/>. This function can fail if the input does not represent a Scalar
in the range [0, <tt>G.Order()</tt> - 1].</t>
          </li>
          <li>
            <t>ScalarFromBytes(buf): Implemented by converting <tt>buf</tt> to an integer using
OS2IP, and then reducing the resulting integer modulo the group order.</t>
          </li>
        </ul>
        <t>The rest of this section specifies the key generation, encapsulation, and
decapsulation procedures for this hybrid KEM.</t>
        <section anchor="key-generation-2">
          <name>Key generation</name>
          <t><tt>QSF-KEM(ML-KEM-1024,P-384)-XOF(SHAKE256)-KDF(SHA3-256)</tt> KeyGen works as follows.</t>
          <artwork><![CDATA[
def expandDecapsulationKey(sk):
  expanded = SHAKE256(sk, 136)
  (pq_PK, pq_SK) = ML-KEM-1024.KeyGen_internal(expanded[0:32], expanded[32:64])
  trad_SK = P-384.ScalarFromBytes(expanded[64:136])
  trad_PK = P-384.SerializeElement(P-384.ScalarMultBase(trad_SK))
  return (pq_SK, trad_SK, pq_PK, trad_PK)

def KeyGen():
  sk = random(32)
  (pq_SK, trad_SK, pq_PK, trad_PK) = expandDecapsulationKey(sk)
  return sk, concat(pq_PK, trad_PK)
]]></artwork>
          <t>Similarly, <tt>QSF-KEM(ML-KEM-1024,P-384)-XOF(SHAKE256)-KDF(SHA3-256)</tt> DeriveKey works as follows:</t>
          <artwork><![CDATA[
def DeriveKey(seed):
  (pq_SK, trad_SK, pq_PK, trad_PK) = expandDecapsulationKey(seed)
  return sk, concat(pq_PK, trad_PK)
]]></artwork>
        </section>
        <section anchor="encapsulation-2">
          <name>Encapsulation</name>
          <t>Given an encapsulation key <tt>pk</tt>, <tt>QSF-KEM(ML-KEM-1024,P-384)-XOF(SHAKE256)-KDF(SHA3-256)</tt> Encaps
proceeds as follows.</t>
          <artwork><![CDATA[
def Encaps(pk):
  pq_PK = pk[0:1568]
  trad_PK = P-384.DeserializeElement(pk[1568:1629])
  (pq_SS, pq_CT) = ML-KEM-1024.Encaps(pq_PK)
  ek = P-384.RandomScalar()
  trad_CT = P-384.SerializeElement(P-384.ScalarBaseMult(ek))
  trad_SS = P-384.SerializeElementAsSharedSecret(P-384.ScalarMult(trad_PK, ek))
  ss = SHA3-256(pq_SS, trad_SS, trad_CT, pk[1568:1629], label)
  ct = concat(pq_CT, trad_CT)
  return (ss, ct)
]]></artwork>
          <t><tt>pk</tt> is a 1629-byte encapsulation key resulting from KeyGen().</t>
          <t>Encaps() returns the 32-byte shared secret <tt>ss</tt> and the 1629-byte ciphertext
<tt>ct</tt>.</t>
          <t>Note that <tt>Encaps()</tt> may raise an error if ML-KEM-1024.Encaps fails, e.g., if
it does not pass the check of <xref target="FIPS203"/> §7.2.</t>
        </section>
        <section anchor="derandomized-2">
          <name>Derandomized</name>
          <t>For testing, it is convenient to have a deterministic version of
encapsulation. In such cases, an implementation can provide the following
derandomized function.</t>
          <artwork><![CDATA[
def EncapsDerand(pk, randomness):
  pq_PK = pk[0:1568]
  trad_PK = P-384.DeserializeElement(pk[1568:1629])
  (pq_SS, pq_CT) = ML-KEM-1024.EncapsDerand(pq_PK, randomness[0:32])
  ek = P-384.ScalarFromBytes(randomness[32:80])
  trad_CT = P-384.SerializeElement(P-384.ScalarMultBase(ek))
  trad_SS = P-384.SerializeElementAsSharedSecret(P-384.ScalarMult(ek, trad_PK))
  ss = SHA3-256(pq_SS, trad_SS, trad_CT, pk[1568:1629], label)
  ct = concat(pq_CT, trad_CT)
  return (ss, ct)
]]></artwork>
          <t>Note that <tt>randomness</tt> <bcp14>MUST</bcp14> be 80 bytes.</t>
        </section>
        <section anchor="decapsulation-2">
          <name>Decapsulation</name>
          <t>Given a decapsulation key <tt>sk</tt> and ciphertext <tt>ct</tt>,
<tt>QSF-KEM(ML-KEM-1024,P-384)-XOF(SHAKE256)-KDF(SHA3-256)</tt> Decaps proceeds as follows.</t>
          <artwork><![CDATA[
def Decaps(sk, ct):
  (pq_SK, trad_SK, pq_PK, trad_PK) = expandDecapsulationKey(sk)
  pq_CT = ct[0:1568]
  trad_CT = P-384.DeserializeElement(ct[1568:1629])
  pq_SS = ML-KEM-1024.Decapsulate(pq_SK, pq_CT)
  trad_SS = P-384.SerializeElementAsSharedSecret(P-384.ScalarMult(trad_SK, trad_CT))
  return SHA3-256(pq_SS, trad_SS, ct[1568:1629], trad_PK, label)
]]></artwork>
          <t><tt>ct</tt> is the 1629-byte ciphertext resulting from Encaps() and <tt>sk</tt> is a
32-byte decapsulation key resulting from KeyGen().</t>
          <t>Decaps() returns the 32-byte shared secret.</t>
        </section>
        <section anchor="security-properties-3">
          <name>Security properties</name>
          <t>The inlined DH-KEM is instantiated over the elliptic curve group P-384: as
shown in <xref target="CDM23"/>, this gives the traditional KEM maximum binding
properties (MAL-BIND-K-CT, MAL-BIND-K-PK).</t>
          <t>ML-KEM-1024 as standardized in <xref target="FIPS203"/>, when using the 64-byte seed key
format as is here, provides MAL-BIND-K-CT security and LEAK-BIND-K-PK
security, as demonstrated in <xref target="SCHMIEG2024"/>.</t>
          <t>Therefore this concrete instance provides MAL-BIND-K-PK and MAL-BIND-K-CT
security. <!-- TODO: update XWING paper to show this -->
          </t>
          <t>This implies via <xref target="KSMW2024"/> that this instance also satisfies</t>
          <ul spacing="normal">
            <li>
              <t>MAL-BIND-K,CT-PK</t>
            </li>
            <li>
              <t>MAL-BIND-K,PK-CT</t>
            </li>
            <li>
              <t>LEAK-BIND-K-PK</t>
            </li>
            <li>
              <t>LEAK-BIND-K-CT</t>
            </li>
            <li>
              <t>LEAK-BIND-K,CT-PK</t>
            </li>
            <li>
              <t>LEAK-BIND-K,PK-CT</t>
            </li>
            <li>
              <t>HON-BIND-K-PK</t>
            </li>
            <li>
              <t>HON-BIND-K-CT</t>
            </li>
            <li>
              <t>HON-BIND-K,CT-PK</t>
            </li>
            <li>
              <t>HON-BIND-K,PK-CT</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="random-scalar">
      <name>Random Scalar Generation</name>
      <t>Two popular algorithms for generating a random integer uniformly distributed in
the range [0, G.Order() -1] are as follows:</t>
      <section anchor="rejection-sampling">
        <name>Rejection Sampling</name>
        <t>Generate a random byte array with <tt>Ns</tt> bytes, and attempt to map to a Scalar
by calling <tt>DeserializeScalar</tt> in constant time. If it succeeds, return the
result. If it fails, try again with another random byte array, until the
procedure succeeds. Failure to implement <tt>DeserializeScalar</tt> in constant time
can leak information about the underlying corresponding Scalar.</t>
        <t>As an optimization, if the group order is very close to a power of
2, it is acceptable to omit the rejection test completely.  In
particular, if the group order is p, and there is an integer b
such that |p - 2<sup>b</sup>| is less than 2<sup>(b/2)</sup>, then
<tt>RandomScalar</tt> can simply return a uniformly random integer of at
most b bits.</t>
      </section>
      <section anchor="wide-reduction">
        <name>Wide Reduction</name>
        <t>Generate a random byte array with <tt>l = ceil(((3 * ceil(log2(G.Order()))) / 2)
/ 8)</tt> bytes, and interpret it as an integer; reduce the integer modulo
<tt>G.Order()</tt> and return the result. See <xref section="5" sectionFormat="of" target="HASH-TO-CURVE"/>
for the underlying derivation of <tt>l</tt>.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Hybrid KEM constructions aim to provide security by combining two or more
schemes so that security is preserved if all but one schemes are replaced by
an arbitrarily bad scheme. Informally, these hybrid KEMs are secure if the <tt>KDF</tt>
is secure, and either the elliptic curve is secure, or the post-quantum KEM is
secure: this is the 'hybrid' property.</t>
      <t>More precisely for the concrete instantiations in this document, if SHA3-256,
SHA3-512, and SHAKE-256 may be modelled as a random oracle, then the IND-CCA
security of <tt>QSF</tt> constructions is bounded by the IND-CCA security of ML-KEM,
and the gap-CDH security of secp256n1, see <xref target="XWING"/>.</t>
      <section anchor="ind-cca-security">
        <name>IND-CCA security</name>
        <t>Also known as IND-CCA2 security for general public key encryption, for KEMs
that encapsulate a new random 'message' each time.</t>
        <t>The notion of INDistinguishability against Chosen-Ciphertext Attacks
(IND-CCA) [RS92] is now widely accepted as the standard security notion for
asymmetric encryption schemes. IND-CCA security requires that no efficient
adversary can recognize which of two messages is encrypted in a given
ciphertext, even if the two candidate messages are chosen by the adversary
himself.</t>
      </section>
      <section anchor="ciphertext-second-preimage-resistant-c2pri-security-ciphertext-collision-resistance-ccr">
        <name>Ciphertext second preimage resistant (C2PRI) security / ciphertext collision resistance (CCR)</name>
        <t>The notion where, even if a KEM has broken IND-CCA security (either due to
construction, implementation, or other), its internal structure, based on the
Fujisaki-Okamoto transform, guarantees that it is impossible to find a second
ciphertext that decapsulates to the same shared secret <tt>K</tt>: this notion is
known as ciphertext second preimage resistance (C2SPI) for KEMs
<xref target="XWING"/>. The same notion has also been described as chosen ciphertext
resistance elsewhere <xref target="CDM23"/>.</t>
      </section>
      <section anchor="binding-properties">
        <name>Binding properties</name>
        <t>TODO</t>
        <section anchor="x-bind-k-pk-security">
          <name>X-BIND-K-PK security</name>
          <t>TODO</t>
        </section>
        <section anchor="x-bind-k-ct-security">
          <name>X-BIND-K-CT security</name>
          <t>Ciphertext second preimage resistance for KEMs ([C2PRI]<xref target="XWING"/>). Related to
the ciphertext collision-freeness of the underlying PKE scheme of a
FO-transform KEM. Also called ciphertext collision resistance.</t>
        </section>
      </section>
      <section anchor="domain-separation">
        <name>Domain Separation</name>
        <t>ASCII-encoded bytes provide oracle cloning <xref target="BDG2020"/> in the security
game via domain separation. The IND-CCA security of hybrid KEMs often
relies on the KDF function <tt>KDF</tt> to behave as an independent
random oracle, which the inclusion of the <tt>label</tt> achieves via domain
separation <xref target="GHP2018"/>.</t>
        <t>By design, the calls to <tt>KDF</tt> in these constructions and usage anywhere else
in higher level protoocl use separate input domains unless intentionally
duplicating the 'label' per concrete instance with fixed paramters. This
justifies modeling them as independent functions even if instantiated by the
same KDF. This domain separation is achieved by using prefix-free sets of
<tt>label</tt> values. Recall that a set is prefix-free if no element is a prefix of
another within the set.</t>
        <t>Length diffentiation is sometimes used to achieve domain separation but as a
technique it is [brittle and prone to misuse]<xref target="BDG2020"/> in practice so we
favor the use of an explicit post-fix label.</t>
      </section>
      <section anchor="fixed-length">
        <name>Fixed-length</name>
        <t>Variable-length secrets are generally dangerous. In particular, using key
material of variable length and processing it using hash functions may result
in a timing side channel. In broad terms, when the secret is longer, the hash
function may need to process more blocks internally. In some unfortunate
circumstances, this has led to timing attacks, e.g. the Lucky Thirteen
<xref target="LUCKY13"/> and Raccoon <xref target="RACCOON"/> attacks.</t>
        <t>Furthermore, <xref target="AVIRAM"/> identified a risk of using variable-length secrets when
the hash function used in the key derivation function is no longer
collision-resistant.</t>
        <t>If concatenation were to be used with values that are not fixed-length, a
length prefix or other unambiguous encoding would need to be used to ensure
that the composition of the two values is injective and requires a mechanism
different from that specified in this document.</t>
        <t>Therefore, this specification <bcp14>MUST</bcp14> only be used with algorithms which have
fixed-length shared secrets (after the variant has been fixed by the
algorithm identifier in the NamedGroup negotiation in Section 3.1).</t>
      </section>
    </section>
    <section anchor="out-of-scope">
      <name>Out of Scope</name>
      <t>Considerations that were considered and not included in these designs:</t>
      <section anchor="more-than-two-component-kems">
        <name>More than two component KEMs</name>
        <t>Design team decided to restrict the space to only two components, a
traditional and a post-quantum KEM.</t>
      </section>
      <section anchor="parameterized-output-length">
        <name>Parameterized output length</name>
        <t>Not analyzed as part of any security proofs in the literature, and a
complicatation deemed unnecessary.</t>
      </section>
      <section anchor="protocol-specific-labels-info">
        <name>Protocol-specific labels / info</name>
        <t>The concrete instantiations have specific labels, protocol-specific
information is out of scope.</t>
      </section>
      <section anchor="other-component-primitives">
        <name>Other Component Primitives</name>
        <t>There is demand for other hybrid variants that either use different
primitives (RSA, NTRU, Classic McEliece, FrodoKEM), parameters, or that use a
combiner optimized for a specific use case. Other use cases could be covered
in subsequent documents and not included here.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests three new entries to the "HPKE KEM Identifiers"
registry.  These entries are defined in the following subsections.</t>
      <section anchor="qsf-kemml-kem-768p-256-xofshake256-kdfsha3-256-kem-identifier">
        <name>QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256) KEM Identifier</name>
        <dl>
          <dt>Value:</dt>
          <dd>
            <t>0xc1fe (please)</t>
          </dd>
          <dt>KEM:</dt>
          <dd>
            <t>QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256)</t>
          </dd>
          <dt>Nsecret:</dt>
          <dd>
            <t>32</t>
          </dd>
          <dt>Nenc:</dt>
          <dd>
            <t>1121</t>
          </dd>
          <dt>Npk:</dt>
          <dd>
            <t>1217</t>
          </dd>
          <dt>Nsk:</dt>
          <dd>
            <t>32</t>
          </dd>
          <dt>Auth:</dt>
          <dd>
            <t>no</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
      </section>
      <section anchor="kitchensink-kemml-kem-768x25519-xofshake256-kdfhkdf-sha-256-kem-identifier">
        <name>KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256) KEM Identifier</name>
        <dl>
          <dt>Value:</dt>
          <dd>
            <t>0xbc48  (please)</t>
          </dd>
          <dt>KEM:</dt>
          <dd>
            <t>KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256)</t>
          </dd>
          <dt>Nsecret:</dt>
          <dd>
            <t>32</t>
          </dd>
          <dt>Nenc:</dt>
          <dd>
            <t>1120</t>
          </dd>
          <dt>Npk:</dt>
          <dd>
            <t>1216</t>
          </dd>
          <dt>Nsk:</dt>
          <dd>
            <t>32</t>
          </dd>
          <dt>Auth:</dt>
          <dd>
            <t>no</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
      </section>
      <section anchor="qsf-kemml-kem-1024p-384-xofshake256-kdfsha3-256-kem-identifier">
        <name>QSF-KEM(ML-KEM-1024,P-384)-XOF(SHAKE256)-KDF(SHA3-256) KEM Identifier</name>
        <dl>
          <dt>Value:</dt>
          <dd>
            <t>0x0a25 (please)</t>
          </dd>
          <dt>KEM:</dt>
          <dd>
            <t>QSF-KEM(ML-KEM-1024,P-384)-XOF(SHAKE256)-KDF(SHA3-256)</t>
          </dd>
          <dt>Nsecret:</dt>
          <dd>
            <t>32</t>
          </dd>
          <dt>Nenc:</dt>
          <dd>
            <t>1617</t>
          </dd>
          <dt>Npk:</dt>
          <dd>
            <t>1617</t>
          </dd>
          <dt>Nsk:</dt>
          <dd>
            <t>32</t>
          </dd>
          <dt>Auth:</dt>
          <dd>
            <t>no</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section describes test vectors for each of the concrete KEMs specified
in this document.</t>
      <section anchor="qsf-kemml-kem-768p-256-xofshake256-kdfsha3-256-test-vectors">
        <name>QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256) Test Vectors</name>
        <artwork><![CDATA[
seed     7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26
sk     7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26
pk
  e2236b35a8c24b39b10aa1323a96a919a2ced88400633a7b07131713fc14b2b5b19cfc3d
  a5fa1a92c49f25513e0fd30d6b1611c9ab9635d7086727a4b7d21d34244e66969cf15b3b
  2a785329f61b096b277ea037383479a6b556de7231fe4b7fa9c9ac24c0699a0018a52534
  01bacfa905ca816573e56a2d2e067e9b7287533ba13a937dedb31fa44baced4076992361
  0034ae31e619a170245199b3c5c39864859fe1b4c9717a07c30495bdfb98a0a002ccf56c
  1286cef5041dede3c44cf16bf562c7448518026b3d8b9940680abd38a1575fd27b58da06
  3bfac32c39c30869374c05c1aeb1898b6b303cc68be455346ee0af699636224a148ca2ae
  a10463111c709f69b69c70ce8538746698c4c60a9aef0030c7924ceec42a5d36816f545e
  ae13293460b3acb37ea0e13d70e4aa78686da398a8397c08eaf96882113fe4f7bad4da40
  b0501e1c753efe73053c87014e8661c33099afe8bede414a5b1aa27d8392b3e131e9a70c
  1055878240cad0f40d5fe3cdf85236ead97e2a97448363b2808caafd516cd25052c5c362
  543c2517e4acd0e60ec07163009b6425fc32277acee71c24bab53ed9f29e74c66a0a3564
  955998d76b96a9a8b50d1635a4d7a67eb42df5644d330457293a8042f53cc7a69288f17e
  d55827e82b28e82665a86a14fbd96645eca8172c044f83bc0d8c0b4c8626985631ca87af
  829068f1358963cb333664ca482763ba3b3bb208577f9ba6ac62c25f76592743b64be519
  317714cb4102cb7b2f9a25b2b4f0615de31decd9ca55026d6da0b65111b16fe52feed8a4
  87e144462a6dba93728f500b6ffc49e515569ef25fed17aff520507368253525860f58be
  3be61c964604a6ac814e6935596402a520a4670b3d284318866593d15a4bb01c35e3e587
  ee0c67d2880d6f2407fb7a70712b838deb96c5d7bf2b44bcf6038ccbe33fbcf51a54a584
  fe90083c91c7a6d43d4fb15f48c60c2fd66e0a8aad4ad64e5c42bb8877c0ebec2b5e387c
  8a988fdc23beb9e16c8757781e0a1499c61e138c21f216c29d076979871caa6942bafc09
  0544bee99b54b16cb9a9a364d6246d9f42cce53c66b59c45c8f9ae9299a75d15180c3c95
  2151a91b7a10772429dc4cbae6fcc622fa8018c63439f890630b9928db6bb7f9438ae406
  5ed34d73d486f3f52f90f0807dc88dfdd8c728e954f1ac35c06c000ce41a0582580e3bb5
  7b672972890ac5e7988e7850657116f1b57d0809aaedec0bede1ae148148311c6f7e3173
  46e5189fb8cd635b986f8c0bdd27641c584b778b3a911a80be1c9692ab8e1bbb12839573
  cce19df183b45835bbb55052f9fc66a1678ef2a36dea78411e6c8d60501b4e60592d1369
  8a943b509185db912e2ea10be06171236b327c71716094c964a68b03377f513a05bcd99c
  1f346583bb052977a10a12adfc758034e5617da4c1276585e5774e1f3b9978b09d0e9c44
  d3bc86151c43aad185712717340223ac381d21150a04294e97bb13bbda21b5a182b6da96
  9e19a7fd072737fa8e880a53c2428e3d049b7d2197405296ddb361912a7bcf4827ced611
  d0c7a7da104dde4322095339f64a61d5bb108ff0bf4d780cae509fb22c256914193ff734
  9042581237d522828824ee3bdfd07fb03f1f942d2ea179fe722f06cc03de5b6902bcdf09
  85839265106085c9e35f85c060dde6ede2fa819e793c13c76db2dd45ca
randomness
  3cb1eea988004b93103cfb0aeefd2a686e01fa4a58e8a3639ca8a1e3f9ae57e235b8cc87
  3c23dc62b8d260169afa2f75ab916a58d974918835d25e6a435085b2badfd6dfaac359a5
  efbb7bcc4b59d538
ct
  b83aa828d4d62b9a83ceffe1d3d3bb1ef31264643c070c5798927e41fb07914a273f8f96
  e7826cd5375a283d7da885304c5de0516a0f0654243dc5b97f8bfeb831f68251219aabdd
  723bc6512041acbaef8af44265524942b902e68ffd23221cda70b1b55d776a92d1143ea3
  a0c475f63ee6890157c7116dae3f62bf72f60acd2bb8cc31ce2ba0de364f52b8ed38c79d
  719715963a5dd3842d8e8b43ab704e4759b5327bf027c63c8fa857c4908d5a8a7b88ac7f
  2be394d93c3706ddd4e698cc6ce370101f4d0213254238b4a2e8821b6e414a1cf20f6c12
  44b699046f5a01caa0a1a55516300b40d2048c77cc73afba79afeea9d2c0118bdf2adb88
  70dc328c5516cc45b1a2058141039e2c90a110a9e16b318dfb53bd49a126d6b73f215787
  517b8917cc01cabd107d06859854ee8b4f9861c226d3764c87339ab16c3667d2f49384e5
  5456dd40414b70a6af841585f4c90c68725d57704ee8ee7ce6e2f9be582dbee985e038ff
  c346ebfb4e22158b6c84374a9ab4a44e1f91de5aac5197f89bc5e5442f51f9a5937b102b
  a3beaebf6e1c58380a4a5fedce4a4e5026f88f528f59ffd2db41752b3a3d90efabe46389
  9b7d40870c530c8841e8712b733668ed033adbfafb2d49d37a44d4064e5863eb0af0a08d
  47b3cc888373bc05f7a33b841bc2587c57eb69554e8a3767b7506917b6b70498727f16ea
  c1a36ec8d8cfaf751549f2277db277e8a55a9a5106b23a0206b4721fa9b3048552c5bd5b
  594d6e247f38c18c591aea7f56249c72ce7b117afcc3a8621582f9cf71787e183dee0936
  7976e98409ad9217a497df888042384d7707a6b78f5f7fb8409e3b535175373461b77600
  2d799cbad62860be70573ecbe13b246e0da7e93a52168e0fb6a9756b895ef7f0147a0dc8
  1bfa644b088a9228160c0f9acf1379a2941cd28c06ebc80e44e17aa2f8177010afd78a97
  ce0868d1629ebb294c5151812c583daeb88685220f4da9118112e07041fcc24d5564a99f
  dbde28869fe0722387d7a9a4d16e1cc8555917e09944aa5ebaaaec2cf62693afad42a3f5
  18fce67d273cc6c9fb5472b380e8573ec7de06a3ba2fd5f931d725b493026cb0acbd3fe6
  2d00e4c790d965d7a03a3c0b4222ba8c2a9a16e2ac658f572ae0e746eafc4feba023576f
  08942278a041fb82a70a595d5bacbf297ce2029898a71e5c3b0d1c6228b485b1ade509b3
  5fbca7eca97b2132e7cb6bc465375146b7dceac969308ac0c2ac89e7863eb8943015b243
  14cafb9c7c0e85fe543d56658c213632599efabfc1ec49dd8c88547bb2cc40c9d38cbd30
  99b4547840560531d0188cd1e9c23a0ebee0a03d5577d66b1d2bcb4baaf21cc7fef1e038
  06ca96299df0dfbc56e1b2b43e4fc20c37f834c4af62127e7dae86c3c25a2f696ac8b589
  dec71d595bfbe94b5ed4bc07d800b330796fda89edb77be0294136139354eb8cd3759157
  8f9c600dd9be8ec6219fdd507adf3397ed4d68707b8d13b24ce4cd8fb22851bfe9d63240
  7f31ed6f7cb1600d025fe300142bf6b8ca3bd4740054a10357688012c4103d274067f3fc
  18e8a4b908
ss     b88b984b48563068da8c1a9159542513c6ed73a77b4778f71a40677bb3e31c0f

seed     df9a04302e10c8bc1cbf1a0b3a5120ea17cda7cfad765f5623474d368ccca8af
sk     df9a04302e10c8bc1cbf1a0b3a5120ea17cda7cfad765f5623474d368ccca8af
pk
  40d5a55e91052ed1ab31c21876cb60690004c3cc24b41204908c44e95201246775aca29b
  9826b8b44467f7853a75fa40a0978d6a77ceebe80202c936c5e0363549affb279b246119
  4ca41337590ffe7b4f26b8b006235a7978134148c7bb038bb840132e47582bc1a9708899
  1737b009d5cff37815aa7ab8d16096967063d1b64e7af7998cabc8a0f77301f8b48aeb83
  e169bec4d49a95384625e32f22445911e08bc5567311f681a7276e69198af73082312307
  22664ccc2373a0b01c03660ba08c40d000a05f081ad920903dc38ee938bea16c7e6f5270
  dc59b3ffb55f93b98c331617f4506487ec9015a14282f50831361b4d45b4157cb04ad25e
  3491b34f66999e5a1982a0aad45ac78c053ce4371087bb3b82185f00bd240d14c716c70e
  b96bbc89b24e9b4aa2ddb9697bd577881a436b898b639c4f9d9c9180282ee2821aa6d705
  c3215e0b6909e670bc6cfc59cb659524545778ac3b2b8699d587af3c1294aee035f7a7a4
  7756cbacb1a1590470581c53980c382c2a609890a946b8ad08379754062c082ca1f63772
  8f59793ee7b87124b0d9ca1b9bf39d6a2a55d4ec36b897c91f54c8cf711739335aaba873
  b5cb68d352af070a2803c008c125bedda07923774defb8bc10c6bcf873026558373c9303
  e7d6890bf673cfd69c45d751da4ab9a2f69cf7226d5b2ac554136d3f04943334be9f0828
  32d15f3cf96856d3bb3c5abf39b55d82a16d0a199cad40ce426acec4d11061c9bd15bb05
  bab3cad442474e3377a4354cff2925b224615d976b4fd1b93eba0b448460891011d3d533
  a3069743d0055a786c401498b77aab40175a21f860ee842b0c004149151585fb11df1b20
  645a56a4d84789154aeec8573c4abe336017afc7b3498818a48166c5549a405570c7322b
  9c459c4093737d308ca3996c7e2b2ea100cdd605c47fbb3317f85bb6269d7650bac32c88
  35841f0c3988c4871db4b5a6ab1880912207b8bb64520748db264c8f60832d136a4ecb1e
  6b560b5216c56bf9133dcb7b99472b2af4ae872284de4a2173542bc67224a15059224b6b
  e35595200355a70007597645dc1b91b1e62edcf37b45806343716181103fee659d3048cc
  d803bb06f0507b12c3530a96967107c609ae60c0155ffc5ac26a6ea8337caa149b9e5151
  e526b87d2a1d79614b6f822cc995b70c3492724ab9af2357f5443a2ac05183cac4878868
  d04cc33bda26c9a131a98643320543749bc62374148d7946c10c9ec6264cbb46c607f92a
  baf97a8d30a23044bd65c25b27b13fedbc6f74883d1b45ca43396200c53711e1734498ad
  7ec443845ca311e7743e73b08dc3cadb622595593cf8e639c55b29dcb9aac669791a2037
  7ff326f07ab457e89229db0c6eb87b18490c87ca3b4ed05b1457567c53a0f411c181d80e
  59c46c4a2a0258ebc05f648e78bc9fb332cd4242a9c8bbcbe9228881c61f13592e3094cc
  183159555230a2c010ed4bac09275546d7815db0b636d6b6ba1a3d316a5ed3b74a1d7944
  8aa93aa88c52ecab9140273f3bf0b86fdaa15bbb31607c48d3b62775911d835416a254ab
  3fe431048663d315bec0e662128947f4f7658e4400dc4529dd2453ec219b6632aacd910d
  a5c438df2e43c93c9d0a5724263886e1ee67bef05cb40437aa3b3123118f00e00331ec5f
  e220abc577fd87e778a718603ce55aca0c467880e6aee113f800cda452
randomness
  0007cd9f5e4c849f167a580b14aabdefaee7eef47cb0fca9767be1fda69419dfb927e9df
  07348b196691abaeb580b32def58538b8d23f87732ea63b02b4fa0f4873360e2841928cd
  60dd4cee8cc0d4c9
ct
  d006d52b094e18fd1a636c5fe586ff67f319c8a1d137e37bee7da75e1f62042e5d567b2f
  53623358953348f1f6543ebfb88c9f51965913695c7bb17ff13acc72e32e8e7d2b7cbb2f
  5e0e8dd12096d68a7d491e08dbbeffae65aa854d298812f755b3918254a8be28d1f33459
  63062761da465ff3960c65c2ed2e3a2c68c38744e66fd728a4ada39ec6a29aeb7ed04a87
  94e24c3aa53311a25f674c7722dd8bb24ee0bd66686d67d2b0c45247c43b94823dfcb9f1
  8c27ea58417287c33add39d5fa5532acbd18559867a4243ce1af1b8012763fffc49c58b7
  695c544724965190036af7b0bf095949056e806018833f09508b0ac8ef8ec7e8c958d82e
  9520923c725d1f1363fdd77716e97fdf0c687d807fafb1ca872f3678f3a515059c9194b2
  6c8a6984ca68caf7fa341d991c50d6a5782797384369244c760693cb72bdb32e9a46ca2e
  74e11ad47db5f439ecdad70cf36ee8ee7e18e78ebc9b992b04233372bb572208881e52f3
  7aaad5c139566d302e125060ec2dc7e153a0041a28bdca04d7c9c1e8ae951d3f3ecb61b0
  e2075a52ed436994362330f089722b27925e2022349852da007bf9050ece59fda9a4e489
  1f1c8f675c1c85cc8456f1eb387ba36aa621c85e2a5073d5418d7a3a3d3de388d7be19c3
  42f9607eb09fd3d83bc0d3a7533bb1774b7ded2da7ef3e71832edeca22b9374f1937bd2e
  4f915f4316d4a5b31dfb842026b0a63d365194a0e44ec3b5db7e780b2220e62ceb293c78
  21a8f8ad0d608cea49ccab85457a82af99436b360875a6f3369359b686920bfdfcbd6115
  d29a287bba5f15fa8359897ea544b3066ed4bb8d865e6a05ef1168c0d5a933ef035103a7
  c0af7cb2ed100c1582b49da6897a0475eaea7e14991569387603251df80bbee5b8e822a2
  167080aebc03e16e67c65257a1f5b48462dba207e4d63288b46934314197d2c43eaf0b47
  30a47f1efe7d0587b8ba6e19fb2e5085d7bf1d4f86587a4f9f95131cf3c48e858ed8eb7f
  fe595a846ac55e3ef3a25c1488e1305b5c4f1dcc4aaac84baf108c5c35d44d1cf2833970
  30549e163ed08af66b76fd5e47892668b0b500bd4a7fc1664b233f90851fa2976c20c696
  8bc7f8a6deef0258624e4b6f543de25ff84dea079a0acc17bbd1fe3fcd5a784d90255d76
  b80d880bdae47ce8909882c38a5579fbb02914e27ebdc8517006f7d2b7bd3d81ad0be1ec
  0eaed9869256e933f22a61dd7c0c9ff5d5538e2898d0b24491b0d2f123adf059b45607dc
  8708a6e05be55eaab245c8d11e0c58ba8a2ac707cc4d2daf7c191e0feee613b779b286ab
  fa347c628b2d51d5fed921028d0dd7770d7cb0b590ee8a1e008681f7ad5651d099149bf4
  f1bcf82203a54844dac9e21c62bdfc28a984f161441c185d64a8507eb4ba4f405cb871e8
  e098b0ced40fdbedb14d40e1cf68545a90f5758a707f446fccfe0be393830fcdf373738a
  91aa9a9167391a44443aac7fb1b796e5c91d3d33bb45bf6f29dac3195252f9858816b219
  88ba7ba837044e5f033625ee1296b55cc31a7ffdd8d33e495bb09bb0d5f35231979c89c1
  c401396b17
ss     05b641ca0e134392312a1d2b3bb106c3dc23e19d7a9a384603f1fce497dc118a

seed     22a96188d032675c8ac850933c7aff1533b94c834adbb69c6115bad4692d8619
sk     22a96188d032675c8ac850933c7aff1533b94c834adbb69c6115bad4692d8619
pk
  fb81581265c1dbecb91b2c2a4d81b9515bcbb3748301311497a118f9f2446895af064570
  5acb2971d000c35ca4f8841bc4f2af022497f2c84c869567df9b9c0c04325c577189e84d
  371971c8532b5a056c29d46878dc7e7c84782ddc3fcd1b47a2e0a7e4d315ac2834e29142
  7eb57005695519b9834d8624ec732a1c1294fc718536f4500a9c78ae630958c09044489f
  8402ab8e0557ff055f1346cccb1013528b669b445941a8c71b3760be5298b5d237e3ebae
  babc80e998251d1940a50c0e21f7503d28c45d344937566d29e2b3deea1c1840a4ee4852
  cbb5cc8dfb3208d486ac8b29219176ec8a93ccdba3ff812645cb7953568a897070e6802c
  7558323ecc0f1a98209e078358498fdeb324c18a899e5c69c376198c030134ec89c4071e
  f19bc3655a9b2662ca9a0aa8c3fb4c561a1e04a6bd6474441e90102482c07e9ba9299cc0
  797ac9d067336793ce947cc335d41690d05227e04e58f6a1a58c6c53d79e4b54b4b3211d
  07e8248b4c209e2231cf00a72811075d0905d6d43ade236e8a2685fb4209100163290812
  004d84cf07b409955bc21559c08c06804368e29307a5d2c614171e640678d71a4e35e50a
  75a588e1e09ea014610d988207aa345609618d53040b2a64775c03cc8a5b39c214edc744
  230c12c8850846ec446d2cbd38ec38c2073803630870a72d5b03a192ab3e6aea77cf2ab4
  ed5b4a3959320bd526a960b234b9c87e8a0afb8bc263654fcdb41aad13c5836ac98cc57e
  78f2686570115e41cc3448a905165aac3c17b3924e8ad270e680a016f74ee4a9269b6610
  b3d577c49c1a66742dd95602de025522c55fa7ba533061065de16dde3039698b33985753
  ce4172ea6b41a6581a6df234ae3518ccc21771d19bed08951872c780b69d0c789f21b686
  64825a6cb7a9a32c08889902d8d86645ca333e65cc4a0667a38820b133b870711351ba5d
  9953b563b79ad9e4922e26b0537376e0265e49f0cae42c68bb99942c052de396be9df36d
  017ca0940ac1ba7293e7d6679594181a8a727e760c27163749978cdd62cf048cac359390
  03250241102c20b7bd46bb65c3743fbfd74e839b9aef5c6073d4b5fd788949b153ca435e
  767b1229620adee95218640d6802c602ec5b5af9a7a23a41363789dd9b2be6b96ded173b
  281610a359ce289b4d37da6895b4a1150c7ccdf9bfef513cb2fb731cb69b7b40495ec171
  1b9aacc50b3d0074a57218a101912c6ad14085d2b128d036df00af00841c13477f219078
  f8a61aae309bc81a646a231f6c14c3c7463d0fecb03f7733ab030a2866af9e509a859b0d
  521cc0a86765db8407951cc8b7c5521385215817712390a05c82c0c13c2b2c6c65ff9649
  e84184845aa705845f91eb08a9eb9a85d93f8e4aa086763e50fa06fd5b0eabd215a0e91a
  8c584d44691290665d282c6b41e92d1e202e00d3579c298feaa5bb86676133d4a8fa170a
  0f7ab5492765e4d67c2ed4b58a92a481c8393366a0d717649e0cbbd2a17a10908f029b13
  8be99b4835212ea025bd5cb3e6581c4027cb534449bb0611a2fb66df21a1fff9c575ec01
  0159bfde6ca8fd3c909e3483f9d893ff744fcf198bb7b40c593b6753050459132fa297c0
  b5f2cc3271405533eb0463da20784fee1b380d3a68f5a288a991d9b922aee55602ae1830
  e361409eca9dff000dc779df4dcb0a558c6fab0910100927ba5cf9d269
randomness
  f90b0cdf8a7b9c264029ac185b70b83f2801f2f4b3f70c593ea3aeeb613a7f1b1de33fd7
  5081f592305f2e4526edc09631b10958f464d889f31ba010250fda7f1368ec2967fc84ef
  2ae9aff268e0b170
ct
  fb02d7dc1a09690095bb8456eb2f0e9c605b80e1dbf11be1c6fec1f9c9796d73d4594419
  c515e75565eef3617b04438f8f23d64f17ba586b6f19ae4c4208207382b02dc7e681f0f5
  886acff404a6012ae075fc92317bc9e558fcf3173b182c6741e90e62235cb299b083f79d
  95740645c49fb3d88d66c01e6f42d689d6d94ae30a7d87256bb76bbe9445b0b083db5dab
  e2ce73d2bdb7e113dddadf9c1bb0a3166f46b57577a42eeb0bd1505e1b83ed4efa728bfb
  c9e462ec3d9873b50a215e2aae5f4dbea957f5b011ffb0928d0240724217182bc92656b5
  9b27ac99f14ce0100df887d08fa48a36eab2b43a6575eab521900b64f961340f77a23ad3
  077809c93de7f1021ae7de4d961e4805bf99989ec51211830542244c712969083157cf93
  97298b2624a410b92a9c4d403f831194a7615559148c4f1d3071c42409b3391ee1a78a40
  8e20ad96be4d4987aa88dc926a34559a41f86a142cc46e37150b0b24c74399e30b810860
  e6dface65ebc3e03af14921a77db1438bfcb203da82a939aca3758815532d7604e350402
  ac9b4ec1af32da35fc8ed6a1692901babc4290e01d0dc0aab3ca472ae79c3228caf5265b
  6c604ef15e97d13054932c6344cd1d845e96ef9210a46d4b4de41db84272b9e14c204dd2
  ed5104c24b9828619103342297a987f12f81c200792965d1de389cfe93c5d7c354f13fb1
  5762bcbcb0b2feba1cbf0b701ad5a4741443206c09e6627f445f8e62070127c3b97a7481
  d534395d5ca34d5b53a100b6958bac814427b5bf61adc7599c6a16bd7885444a2b91e1b1
  b486d3e3f0382e241f74f62d2402ba7a714af58c6b37a2cd6f1e24436a1237ba377cb47d
  e861ce06ad7c97e6a8878cde9a5cadea427a87d623e98bcd51f66df8e1609063ebcfc7c7
  501ed4a86aecc3333f2103e65f851ec35ed0c50f6c21916b3a82beff39de5f4be1d04dc3
  c7281307fa097028e6d5be98d819216ddebbff9680b70a83189e214058444ecbae446deb
  236c8dc09c510eeaf600adc8f422907fb9cdd25637faf82c686e30495b38f72de88f7217
  dc54e1e4929d8875ac43f6c8fc63b85db31dc10b49266900bdaf35e8ff9d059a64ea1a35
  a633b38de49ffbc53fd25891a1c3d0a890744e046b4f395d15424a1cb8bd76de738a0319
  10820e54b9cb899a2bd0ba37f8c1c1a3b6f09ba8fad8208a660efae32015905787a9403c
  f50c1dc311a94e85bab76e474149b7903cf7f3f19a50421f95e7228a16111abe4a7947e4
  bf9d86e30ae0c9c30641314480a6d1e10c4300ace4cbcf5b9346c7589199a9b75b878756
  d3440e6c89a256be0cd916a9ac255d780c50943fe07116a18f1b11660da53e01cf0fa6d4
  07afcba60c88d348c89d6a2ba4d177406a473db3351a3bcd3986aaafe417f2d29b1a9aa3
  d3b842cda46a545611f48298cb898f518ef2d8cc8f207c4ae812fc0c4f23c43c60c98c00
  1a2ded7314978a15024f7a6b032824901afacf7e0aed3d767cf2dcdaf68f1d803586d06b
  0061b3e1f9f677c803e958092bca5ae5d0bd7c581491a2ddd3726f8e4e535a0f991207b6
  ae712c9f5d
ss     a268ec471cf13f7ddb07b62c505e3dfd30dedfaec332376c7fd8827ea2919c05

]]></artwork>
      </section>
      <section anchor="kitchensink-kemml-kem-768x25519-xofshake256-kdfhkdf-sha-256-test-vectors">
        <name>KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256) Test Vectors</name>
        <artwork><![CDATA[
seed     7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26
sk     7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26
pk
  e2236b35a8c24b39b10aa1323a96a919a2ced88400633a7b07131713fc14b2b5b19cfc3d
  a5fa1a92c49f25513e0fd30d6b1611c9ab9635d7086727a4b7d21d34244e66969cf15b3b
  2a785329f61b096b277ea037383479a6b556de7231fe4b7fa9c9ac24c0699a0018a52534
  01bacfa905ca816573e56a2d2e067e9b7287533ba13a937dedb31fa44baced4076992361
  0034ae31e619a170245199b3c5c39864859fe1b4c9717a07c30495bdfb98a0a002ccf56c
  1286cef5041dede3c44cf16bf562c7448518026b3d8b9940680abd38a1575fd27b58da06
  3bfac32c39c30869374c05c1aeb1898b6b303cc68be455346ee0af699636224a148ca2ae
  a10463111c709f69b69c70ce8538746698c4c60a9aef0030c7924ceec42a5d36816f545e
  ae13293460b3acb37ea0e13d70e4aa78686da398a8397c08eaf96882113fe4f7bad4da40
  b0501e1c753efe73053c87014e8661c33099afe8bede414a5b1aa27d8392b3e131e9a70c
  1055878240cad0f40d5fe3cdf85236ead97e2a97448363b2808caafd516cd25052c5c362
  543c2517e4acd0e60ec07163009b6425fc32277acee71c24bab53ed9f29e74c66a0a3564
  955998d76b96a9a8b50d1635a4d7a67eb42df5644d330457293a8042f53cc7a69288f17e
  d55827e82b28e82665a86a14fbd96645eca8172c044f83bc0d8c0b4c8626985631ca87af
  829068f1358963cb333664ca482763ba3b3bb208577f9ba6ac62c25f76592743b64be519
  317714cb4102cb7b2f9a25b2b4f0615de31decd9ca55026d6da0b65111b16fe52feed8a4
  87e144462a6dba93728f500b6ffc49e515569ef25fed17aff520507368253525860f58be
  3be61c964604a6ac814e6935596402a520a4670b3d284318866593d15a4bb01c35e3e587
  ee0c67d2880d6f2407fb7a70712b838deb96c5d7bf2b44bcf6038ccbe33fbcf51a54a584
  fe90083c91c7a6d43d4fb15f48c60c2fd66e0a8aad4ad64e5c42bb8877c0ebec2b5e387c
  8a988fdc23beb9e16c8757781e0a1499c61e138c21f216c29d076979871caa6942bafc09
  0544bee99b54b16cb9a9a364d6246d9f42cce53c66b59c45c8f9ae9299a75d15180c3c95
  2151a91b7a10772429dc4cbae6fcc622fa8018c63439f890630b9928db6bb7f9438ae406
  5ed34d73d486f3f52f90f0807dc88dfdd8c728e954f1ac35c06c000ce41a0582580e3bb5
  7b672972890ac5e7988e7850657116f1b57d0809aaedec0bede1ae148148311c6f7e3173
  46e5189fb8cd635b986f8c0bdd27641c584b778b3a911a80be1c9692ab8e1bbb12839573
  cce19df183b45835bbb55052f9fc66a1678ef2a36dea78411e6c8d60501b4e60592d1369
  8a943b509185db912e2ea10be06171236b327c71716094c964a68b03377f513a05bcd99c
  1f346583bb052977a10a12adfc758034e5617da4c1276585e5774e1f3b9978b09d0e9c44
  d3bc86151c43aad185712717340223ac381d21150a04294e97bb13bbda21b5a182b6da96
  9e19a7fd072737fa8e880a53c2428e3d049b7d2197405296ddb361912a7bcf4827ced611
  d0c7a7da104dde4322095339f64a61d5bb108ff0bf4d780cae509fb22c256914193ff734
  9042581237d522828824ee3bdfd07fb03f1f942d2ea179fe722f06cc03de5b69859edb06
  eff389b27dce59844570216223593d4ba32d9abac8cd049040ef6534
randomness
  3cb1eea988004b93103cfb0aeefd2a686e01fa4a58e8a3639ca8a1e3f9ae57e235b8cc87
  3c23dc62b8d260169afa2f75ab916a58d974918835d25e6a435085b2
ct
  b83aa828d4d62b9a83ceffe1d3d3bb1ef31264643c070c5798927e41fb07914a273f8f96
  e7826cd5375a283d7da885304c5de0516a0f0654243dc5b97f8bfeb831f68251219aabdd
  723bc6512041acbaef8af44265524942b902e68ffd23221cda70b1b55d776a92d1143ea3
  a0c475f63ee6890157c7116dae3f62bf72f60acd2bb8cc31ce2ba0de364f52b8ed38c79d
  719715963a5dd3842d8e8b43ab704e4759b5327bf027c63c8fa857c4908d5a8a7b88ac7f
  2be394d93c3706ddd4e698cc6ce370101f4d0213254238b4a2e8821b6e414a1cf20f6c12
  44b699046f5a01caa0a1a55516300b40d2048c77cc73afba79afeea9d2c0118bdf2adb88
  70dc328c5516cc45b1a2058141039e2c90a110a9e16b318dfb53bd49a126d6b73f215787
  517b8917cc01cabd107d06859854ee8b4f9861c226d3764c87339ab16c3667d2f49384e5
  5456dd40414b70a6af841585f4c90c68725d57704ee8ee7ce6e2f9be582dbee985e038ff
  c346ebfb4e22158b6c84374a9ab4a44e1f91de5aac5197f89bc5e5442f51f9a5937b102b
  a3beaebf6e1c58380a4a5fedce4a4e5026f88f528f59ffd2db41752b3a3d90efabe46389
  9b7d40870c530c8841e8712b733668ed033adbfafb2d49d37a44d4064e5863eb0af0a08d
  47b3cc888373bc05f7a33b841bc2587c57eb69554e8a3767b7506917b6b70498727f16ea
  c1a36ec8d8cfaf751549f2277db277e8a55a9a5106b23a0206b4721fa9b3048552c5bd5b
  594d6e247f38c18c591aea7f56249c72ce7b117afcc3a8621582f9cf71787e183dee0936
  7976e98409ad9217a497df888042384d7707a6b78f5f7fb8409e3b535175373461b77600
  2d799cbad62860be70573ecbe13b246e0da7e93a52168e0fb6a9756b895ef7f0147a0dc8
  1bfa644b088a9228160c0f9acf1379a2941cd28c06ebc80e44e17aa2f8177010afd78a97
  ce0868d1629ebb294c5151812c583daeb88685220f4da9118112e07041fcc24d5564a99f
  dbde28869fe0722387d7a9a4d16e1cc8555917e09944aa5ebaaaec2cf62693afad42a3f5
  18fce67d273cc6c9fb5472b380e8573ec7de06a3ba2fd5f931d725b493026cb0acbd3fe6
  2d00e4c790d965d7a03a3c0b4222ba8c2a9a16e2ac658f572ae0e746eafc4feba023576f
  08942278a041fb82a70a595d5bacbf297ce2029898a71e5c3b0d1c6228b485b1ade509b3
  5fbca7eca97b2132e7cb6bc465375146b7dceac969308ac0c2ac89e7863eb8943015b243
  14cafb9c7c0e85fe543d56658c213632599efabfc1ec49dd8c88547bb2cc40c9d38cbd30
  99b4547840560531d0188cd1e9c23a0ebee0a03d5577d66b1d2bcb4baaf21cc7fef1e038
  06ca96299df0dfbc56e1b2b43e4fc20c37f834c4af62127e7dae86c3c25a2f696ac8b589
  dec71d595bfbe94b5ed4bc07d800b330796fda89edb77be0294136139354eb8cd3759157
  8f9c600dd9be8ec6219fdd507adf3397ed4d68707b8d13b24ce4cd8fb22851bfe9d63240
  7f31ed6f7cb1600de56f17576740ce2a32fc5145030145cfb97e63e0e41d354274a079d3
  e6fb2e15
ss     7638d1bbf82029472953eca0c539c7aa4929aef3ec8c6ff6d01e692e1efff79d

seed     badfd6dfaac359a5efbb7bcc4b59d538df9a04302e10c8bc1cbf1a0b3a5120ea
sk     badfd6dfaac359a5efbb7bcc4b59d538df9a04302e10c8bc1cbf1a0b3a5120ea
pk
  0333285fa253661508c9fb444852caa4061636cb060e69943b431400134ae1fbc0228724
  7cb38068bbb89e6714af10a3fcda6613acc4b5e4b0d6eb960c302a0253b1f507b596f088
  4d351da89b01c35543214c8e542390b2bc497967961ef10286879c34316e6483b644fc27
  e8019d73024ba1d1cc83650bb068a5431b33d1221b3d122dc1239010a55cb13782140893
  f30aca7c09380255a0c621602ffbb6a9db064c1406d12723ab3bbe2950a21fe521b160b3
  0b16724cc359754b4c88342651333ea9412d5137791cf75558ebc5c54c520dd6c622a059
  f6b332ccebb9f24103e59a297cd69e4a48a3bfe53a5958559e840db5c023f66c10ce2308
  1c2c8261d744799ba078285cfa71ac51f44708d0a6212c3993340724b3ac38f63e82a889
  a4fc581f6b8353cc6233ac8f5394b6cca292f892360570a3031c90c4da3f02a895677390
  e60c24684a405f69ccf1a7b95312a47c844a4f9c2c4a37696dc10072a87bf41a2717d45b
  2a99ce09a4898d5a3f6b67085f9a626646bcf369982d483972b9cd7d244c4f49970f766a
  22507925eca7df99a491d80c27723e84c7b49b633a46b46785a16a41e02c538251622117
  364615d9c2cdaa1687a860c18bfc9ce8690efb2a524cb97cdfd1a4ea661fa7d08817998a
  f838679b07c9db8455e2167a67c14d6a347522e89e8971270bec858364b1c1023b82c483
  cf8a8b76f040fe41c24dec2d49f6376170660605b80383391c4abad1136d874a77ef73b4
  40758b6e7059add20873192e6e372e069c22c5425188e5c240cb3a6e29197ad17e87ec41
  a813af68531f262a6db25bbdb8a15d2ed9c9f35b9f2063890bd26ef09426f225aa1e6008
  d31600a29bcdf3b10d0bc72788d35e25f4976b3ca6ac7cbf0b442ae399b225d9714d0638
  a864bda7018d3b7c793bd2ace6ac68f4284d10977cc029cf203c5698f15a06b162d6c8b4
  fd40c6af40824f9c6101bb94e9327869ab7efd835dfc805367160d6c8571e3643ac70cba
  d5b96a1ad99352793f5af71705f95126cb4787392e94d808491a2245064ba5a7a30c0663
  01392a6c315336e10dbc9c2177c7af382765b6c88eeab51588d01d6a95747f3652dc5b5c
  401a23863c7a0343737c737c99287a40a90896d4594730b552b910d23244684206f0eb84
  2fb9aa316ab182282a75fb72b6806cea4774b822169c386a58773c3edc8229d85905abb8
  7ac228f0f7a2ce9a497bb5325e17a6a82777a997c036c3b862d29c14682ad325a9600872
  f3913029a1588648ba590a7157809ff740b5138380015c40e9fb90f0311107946f28e596
  2e21666ad65092a3a60480cd16e61ff7fb5b44b70cf12201878428ef8067fceb1e1dcb49
  d66c773d312c7e53238cb620e126187009472d41036b702032411dc96cb750631df9d994
  52e495deb4300df660c8d35f32b424e98c7ed14b12d8ab11a289ac63c50a24d52925950e
  49ba6bf4c2c38953c92d60b6cd034e575c711ac41bfa66951f62b9392828d7b45aed377a
  c69c35f1c6b80f388f34e0bb9ce8167eb2bc630382825c396a407e905108081b444ac8a0
  7c2507376a750d18248ee0a81c4318d9a38fc44c3b41e8681f87c34138442659512c4127
  6e1cc8fc4eb66e12727bcb5a9e0e405cdea21538d6ea885ab169050e6b91e1b69f7ed34b
  cbb48fd4c562a576549f85b528c953926d96ea8a160b8843f1c89c62
randomness
  17cda7cfad765f5623474d368ccca8af0007cd9f5e4c849f167a580b14aabdefaee7eef4
  7cb0fca9767be1fda69419dfb927e9df07348b196691abaeb580b32d
ct
  c93beb22326705699bbc3d1d0aa6339be7a405debe61a7c337e1a91453c097a6f77c1306
  39d1aaeb193175f1a987aa1fd789a63c9cd487ebd6965f5d8389c8d7c8cfacbba4b44d2f
  be0ae84de9e96fb11215d9b76acd51887b752329c1a3e0468ccc49392c1e0f1aad61a73c
  10831e60a9798cb2e7ec07596b5803db3e243ecbb94166feade0c9197378700f8eb65a43
  502bbac4605992e2de2b906ab30ba401d7e1ff3c98f42cfc4b30b974d3316f331461ac05
  f43e0db7b41d3da702a4f567b6ee7295199c7be92f6b4a47e7307d34278e03c872fb4864
  7c446a64a3937dccd7c6d8de4d34b9dea45a0b065ef15b9e94d1b6df6dca7174d9bc9d14
  c6225e3a78a58785c3fe4e2fe6a0706f3365389e4258fbb61ecf1a1957715982b3f18444
  24e03acd83da7eee50573f6cd3ff396841e9a00ad679da92274129da277833d0524674fe
  ea09a98d25b888616f338412d8e65e151e65736c8c6fb448c9260fa20e7b2712148bcd3a
  0853865f50c1fc9e4f201aee3757120e034fd509d954b7a749ff776561382c4cb64cebcb
  b6aa82d04cd5c2b40395ecaf231bde8334ecfd955d09efa8c6e7935b1cb0298fb8b6740b
  e4593360eed5f129d59d98822a6cea37c57674e919e84d6b90f695fca58e7d29092bd70f
  7c97c6dfb021b9f87216a6271d8b144a364d03b6bf084f972dc59800b14a2c008bbd0992
  b5b82801020978f2bdddb3ca3367d876cffb3548dab695a29882cae2eb5ba7c847c3c71b
  d0150fa9c33aac8e6240e0c269b8e295ddb7b77e9c17bd310be65e28c0802136d086777b
  e5652d6f1ac879d3263e9c712d1af736eac048fe848a577d6afaea1428dc71db8c430edd
  7b584ae6e6aeaf7257aff0fd8fe25c30840e30ccfa1d95118ef0f6657367e9070f3d97a2
  e9a7bae19957bd707b00e31b6b0ebb9d7df4bd22e44c060830a194b5b8288353255b5295
  4ff5905ab2b126d9aa049e44599368c27d6cb033eae5182c2e1504ee4e3745f51488997b
  8f958f0209064f6f44a7e4de5226d5594d1ad9b42ac59a2d100a2f190df873a2e141552f
  33c923b4c927e8747c6f830c441a8bd3c5b371f6b3ab8103ebcfb18543aefc1beb6f776b
  bfd5344779f4aa23daaf395f69ec31dc046b491f0e5cc9c651dfc306bd8f2105be7bc7a4
  f4e21957f87278c771528a8740a92e2daefa76a3525f1fae17ec4362a2700988001d8600
  11d6ca3a95f79a0205bcf634cef373a8ea273ff0f4250eb8617d0fb92102a6aa09cf0c3e
  e2cad1ad96438c8e4dfd6ee0fcc85833c3103dd6c1600cd305bc2df4cda89b55ca237a3f
  9c3f82390074ff30825fc750130ebaf13d0cf7556d2c52a98a4bad39ca5d44aaadeaef77
  5c695e64d06e966acfcd552a14e2df6c63ae541f0fa88fc48263089685704506a21a0385
  6ce65d4f06d54f3157eeabd62491cb4ac7bf029e79f9fbd4c77e2a3588790c710e611da8
  b2040c76a61507a8020758dcc30894ad018fef98e401cc54106e20d94bd544a8f0e1fd05
  00342d123f618aa8c91bdf6e0e03200693c9651e469aee6f91c98bea4127ae66312f4ae3
  ea155b67
ss     aeda5ce2b33f7852f32dd1b364280489524ee564ca9adaa3e54d8926d94e4e98

seed     ef58538b8d23f87732ea63b02b4fa0f4873360e2841928cd60dd4cee8cc0d4c9
sk     ef58538b8d23f87732ea63b02b4fa0f4873360e2841928cd60dd4cee8cc0d4c9
pk
  36244278824f77c621c660892c1c3886a9560caa52a97c461fd3958a598e749bbc8c7798
  ac8870bac7318ac2b863000ca3b0bdcbbc1ccfcb1a30875df9a76976763247083e646ccb
  2499a4e4f0c9f4125378ba3da1999538b86f99f2328332c177d1192b849413e655101289
  73f679d23253850bb6c347ba7ca81b5e6ac4c574565c731740b3cd8c9756caac39fba7ac
  422acc60c6c1a645b94e3b6d21485ebad9c4fe5bb4ea0853670c5246652bff65ce8381cb
  473c40c1a0cd06b54dcec11872b351397c0eaf995bebdb6573000cbe2496600ba76c8cb0
  23ec260f0571e3ec12a9c82d9db3c57b3a99e8701f78db4fabc1cc58b1bae02745073a81
  fc8045439ba3b885581a283a1ba64e103610aabb4ddfe9959e7241011b2638b56ba6a982
  ef610c514a57212555db9a98fb6bcf0e91660ec15dfa66a67408596e9ccb97489a09a073
  ffd1a0a7ebbe71aa5ff793cb91964160703b4b6c9c5390842c2c905d4a9f88111fed5787
  4ba9b03cf611e70486edf539767c7485189d5f1b08e32a274dc24a39c918fd2a4dfa946a
  8c897486f2c974031b2804aabc81749db430b85311372a3b8478868200b40e043f7bf4a1
  c3a08b0771b431e342ee277410bca034a0c77086c8f702b3aed2b4108bbd3af471633373
  a1ac74b128b148d1b9412aa66948cac6dc6614681fda02ca86675d2a756003c49c50f06e
  13c63ce4bc9f321c860b202ee931834930011f485c9af86b9f642f0c353ad305c66996b9
  a136b753973929495f0d8048db75529edcb4935904797ac66605490f66329c3bb36b8573
  a3e00f817b3082162ff106674d11b261baae0506cde7e69fdce93c6c7b59b9d4c759758a
  cf287c2e4c4bfab5170a9236daf21bdb6005e92464ee8863f845cf37978ef19969264a51
  6fe992c93b5f7ae7cb6718ac69257d630379e4aac6029cb906f98d91c92d118c36a6d161
  15d4c8f16066078badd161a65ba51e0252bc358c67cd2c4beab2537e42956e08a39cfccf
  0cd875b5499ee952c83a162c68084f6d35cf92f71ec66baec74ab87e2243160b64df54af
  b5a07f78ec0f5c5759e5a4322bca2643425748a1a97c62108510c44fd9089c5a7c14e57b
  1b77532800013027cff91922d7c935b4202bb507aa47598a6a5a030117210d4c49c17470
  0550ad6f82ad40e965598b86bc575448eb19d70380d465c1f870824c026d74a2522a799b
  7b122d06c83aa64c0974635897261433914fdfb14106c230425a83dc8467ad8234f086c7
  2a47418be9cfb582b1dcfa3d9aa45299b79fff265356d8286a1ca2f3c2184b2a70d15289
  e5b202d03b64c735a867b1154c55533ff61d6c296277011848143bc85a4b823040ae025a
  29293ab77747d85310078682e0ba0ac236548d905a79494324574d417c7a3457bd5fb525
  3c4876679034ae844d0d05010fec722db5621e3a67a2d58e2ff33b432269169b51f9dcc0
  95b8406dc1864cf0aeb6a2132661a38d641877594b3c51892b9364d25c63d637140a2018
  d10931b0daa5a2f2a405017688c991e586b522f94b1132bc7e87a63246475816c8be9c62
  b731691ab912eb656ce2619225663364701a014b7d0337212caa2ecc731f34438289e0ca
  4590a276802d980056b5d0d316cae2ecfea6d86696a9f161aa90ad47eaad8cadd31ae3cb
  c1c013747dfee80fb35b5299f555dcc2b787ea4f6f16ffdf66952461
randomness
  22a96188d032675c8ac850933c7aff1533b94c834adbb69c6115bad4692d8619f90b0cdf
  8a7b9c264029ac185b70b83f2801f2f4b3f70c593ea3aeeb613a7f1b
ct
  0d2e38cbf17a2e2e4e0c87a94ca1e7701ae1552e02509b3b00f9c82c39e3fd435b05b912
  75f47abc9f1021429a26a346598cd6cd9efdc8adc1dbc35036d0290bf89733c835309202
  232f9bf652ea82f3d49280d6e8a3bd3135fb883445ab5b074d949c5350c7c7d6ac59905b
  dbfce6639da8a9d4b390ecc1dd05522d2956f2d37a05593996e5cb3fd8d5a9eb52417732
  e1ebf545588713b4760227115aab7ada178dadbca583b26cfedba2888a0c95b950bf07f7
  50d7aa8103798aa3470a042c0105c6a037de2f9ebc396021b2ba2c16aba696fbac3454dc
  8e053b8fa55edd45215eeb57a1eab9106fb426b375a9b9e5c3419efc7610977e72640f9f
  d1b2ec337de33c35e5a7581b2aae4d8ee86d2e0ebf82a1350714de50d2d788687878a196
  44ae4e3175e8d59dc90171b3badeff65aeaf600e5e5483a3595fdeb40cbafcbd040c29a2
  f6900533ae999d24f54dfcef748c30313ca447cdddfa57ad78eaa890e90f3f7bf8d11696
  8a5713cc75fd0408f36364fa265c5617039304eaeac4cbee6fc49b9fe2276768cdbec2d7
  3a507b543cc028dc1b154b7c2b0412254c466a94a8d6ea3a47e1743469bd45c08f54cf96
  5884be3696e961741ede16e3b1bc4feb93faaef31d911dc0cb3fa90bcda991959a9d2cbc
  817a5564c5c01177a59e9577589ea344d60cf5b0aa39f31863febd54603ca87ad2363c76
  6642a3f52557bcd9e4c05a87665842ba336b83156a677030f0bad531a8387a1486a599ca
  a748fcea7bdc1eb63f3cdb97173551ab7c1c36b69acbbdb2ff7a1e7bc70439632ddc67b9
  7f3da1f59b3c1588515957cb8a2f86ab635ce0a78b7cdf24eac3445e8fc8b79ba04da9e9
  03f49a7d912c197a84b4cfabc779b97d24788419bcf58035db99717edb9fd1c1df8c4005
  f700eabba528ddfcbaeda6dd30754f795948a34c9319ab653524b19931c7900c4167988a
  f52292fe902e746b524d20ceffb4339e8f5535f41cf35f0f8ea8b4a7b949c5d2381116b1
  46e9b913a83a3fa1c65ff9468c835fe4114554a6c66a80e1c9a6bb064b380be3c95e5595
  ec979bf1c85aa938938e3f10e72b0c87811969e8ab0d83de0b0604c4016ac3a015e19514
  089271bdc6ebf2ec56fab6018e44de749b4c36cc235e370da8466dbdc253542a2d704eb3
  316fd70d5d238cb7eaaf05966d973f62c7ef43b9a806f4ed213ac8099ea15d61a9024441
  60883f6bf441a3e1469945c9b79489ea18390f1ebc83caca10bdb8f2429877b52bd44c94
  a228ef91c392ef5398c5c83982701318ccedab92f7a279c4fddebaa7fe5e986c48b7d813
  5b3fe4cd15be2004ce73ff86b1e55f8ecd6ba5b8114315f8e716ef3ab0a64564a4644651
  166ebd68b1f783e2e443dbccadfe189368647629f1a12215840b7f1d026de2f665c2eb02
  3ff51a6df160912811ee03444ae4227fb941dc9ec4f31b445006fd384de5e60e0a5061b5
  0cb1202f863090fc05eb814e2d42a03586c0b56f533847ac7b8184ce9690bc8dece32a88
  ca934f541d4cc520fa64de6b6e1c3c8e03db5971a445992227c825590688d203523f5271
  61137334
ss     172835e85601f25be0beb40d7350e2f85117bf71c7d2ca55604401dbe4ab6f96

]]></artwork>
      </section>
      <section anchor="qsf-kemml-kem-1024p-384-xofshake256-kdfsha3-256-test-vectors">
        <name>QSF-KEM(ML-KEM-1024,P-384)-XOF(SHAKE256)-KDF(SHA3-256) Test Vectors</name>
        <artwork><![CDATA[
seed     7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26
sk     7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26
pk
  e41c6ffcd44a9d23ad5584b131877690e69f2067a33b86b4c917ac71940303a668aa331b
  a9075deb0511e5536c9a455b1be23ba39280b9a6c2a4bba17830a11e7532c2d425c1218f
  dffabdc5ba44e70456fce06e14b267db019548ccb9967cac7df908f5f880d67a6aa8383f
  70b599448bc240b25651c2a623f644cf480fb205b4a6a2435ed6cd5b4ca3f803c725528d
  42d018b0f3c6ed30746dc07b3ccc279ad831c111134073bac741c73c22c79f0927947830
  440673b8360b06f3078147b7c767435225aa4119892147a642174e8ae33e8ee8ac3809b4
  5f7c64e7244f3c46189f232e48d1368128bddd5b99594b9f3273b1e9a7ab7e2c1eeada5a
  0240104bf9c19d19275be3ae073839ff20c0128a2b1a722df8f7636198149cc06c410a14
  11dac2c8609714585cf9a9c86b01bb3847c25ee0c281605edf49049a953baed542a6c0cd
  9fe67216fab96c142e5a652409f941f85334b1c383dc24a52af2855de301150852d6ca60
  9ab060854ba755590dac5371ded9b032c14a9fb68e57da7ae7595cd3d24ee72c7a89d490
  8f3aaaf9a9ad43dc63d38186f6c3bbbc2712a1e34903a351dca26ed031aba99867179899
  9ee1139b4687f76686adc367c5a098766b9f21585841b3116a4c2e645605fb457850a896
  53ac20d063b4d6962363418c2a00ae74fa09955b8d9f1757c0528527303eae9aba1bfa21
  73693b44d6279620a0ac27874c5c48b5a7811aea6e5ee112d178b54484bcfdc253fdc286
  7f68c700416e6468522798b1482945aaa83dfc98599f4488acc6491e2044c5829abbc696
  c7c0562f20b73e8542e32b93fa13b87b1cbdd432660596439a6223c68136ebc0371e1382
  e5148a83a5050b611e6d3acf50d6265d7c7a72da88e13895b3386a1b906f520a73c283ba
  f4d9471577ad6a2618ae85b03090acc1b3301e59601121567491249764a54ab9c52848bb
  d8c7806c7c05a0f01bb3a9b3407b8a787a4b8dbb2c28e65cf909c8179b27eb0576517316
  ab41bceab21922fbc2cda587b66abd0f976f8e5994dcd1a6f5924263818f96c0299aac16
  c4f165dcd931096989330184404a62a3c07c35a494dc9922e38a3822f25747a5532c5083
  bf180fe144580df494ff68a38cd719e6836577f47ddd4036ee8875a1349cd4f1276bd056
  2c80aca80868fec36df663a357c9c9c9a364abf5212cdc99e3327e52962ab1122e8d736f
  99048fd6647006fc4e5c1174c3930b188946f8e6347ca88ee672ab4bfcbd2db9b730031b
  f72a010084580a144832134461212ba7e5b256da9aa62c9705134da7f38339acc043b826
  3d1142a288adccdb6d9176583f59288ec431339c5e7b1b4bd29021b8959e6f8a161af3ae
  72da158de77985db11ad810f5706442a0032edd48c143805e69188543931c320afc33236
  ee7090165c3daff9cc83f6c69b8b02ce22384cbb6da54c6df76b49925b25bd996cb2cc13
  b21c9312227761395f873011de4a37f2182e52e04cbfda9aa8ba777452743b3b9d02282f
  78eb167a07b9daf11de0d27f7531aa15ac7464042280c1154c405f00b9147c651e864628
  f7c493f7059af51cb4a3d08f29f243b030cf84404aede236fe9aa799531a87645c08f0cd
  da2a9e2c985f86e7abf9962915f465ed9bafad4080045a6c8cf83bdb8a5075984c3577ad
  a1ac687bb3374a645f5678bea23357cc6258d4a47e8d03aff7bb4482d98320f71a9819b0
  78166779ab59567a902548977a4c826eb657a5417af550883d943e3f9365449a67cd9450
  97824596cc05447805a2f31ca3ab0044739687f077be1c89074744cf6a2d484590a0511d
  90d40d557bb9886b5d7eb382784cc113eb8fb63755b055a5e775093dac8640b096e94478
  367617745b0c937c0f4dd7aca5a91001a680cc0bc2d6f9597ad1434e5a877d852e0a93cc
  38352c848a27eab620215435822145406a7f98f91e5e8b70a150c5e6a718d83000515348
  0b403ba20c24e558b344f877dfd98f4b8105ea53310bf75b6f4c08ba30565fc1784563a6
  16d1213886504b431ab8750b8ff623d3cc3116a07d31371d33292873670110f48550e777
  bef92c05703ac4a3a4d6fa67a660538cf05b5889c80cd5c2e686275f703dd1b604b7c45a
  b092a9f736ab1a430cacb73b9d7c6e07bcc0776a5656f99f6b526a3eceb6608dff53aa38
  6a9fe9d0935d9a65873ff402d9660e9abfd4b8fd039be5a4720770e8194b5fc31fb06cbd
  40db8065bd583226fa2eefc75c2e27697b307071d033a68d3c0c42b4fa9213264d
randomness
  3cb1eea988004b93103cfb0aeefd2a686e01fa4a58e8a3639ca8a1e3f9ae57e235b8cc87
  3c23dc62b8d260169afa2f75ab916a58d974918835d25e6a435085b2badfd6dfaac359a5
  efbb7bcc4b59d538df9a04302e10c8bc1cbf1a0b3a5120ea17cda7cfad765f56
ct
  d139c9744f82ef618112c84fa0f6e27c1daf5642261ff68f6714b1892fd48efa91209f27
  70f21f523e3632acf603f1c4e27331cb1fccc112f333821109314c7a905fe461fbe34184
  cf4f7280041e2611d2589e5faca10d5621e677683a8ea8981ebbc6f8f1ee864fb602a671
  bc95ee93ce9174eafe05b7092f163721b24c39a4d67c80f59e83994bf04ee6df7acc9e96
  940d81fccd8e88fad6bbf598bad917d228d46ab0a00f2c48541f64d9aeae1cacd1c7fc94
  8fed02002563c4ae256cabc08e5b8d9137501b221cbc1497ee23ed204b611be846fcfc60
  c1a6fb2dd1948ba458f45bd41492c78ebf81b9b9b948b446b046a55219dc6168c0b8f4ec
  e0b565a2dc96d004f5ed20afd28499904e8f987d2f6b72e2a3ad2a852546639fd4de356b
  cc1ad4bdc21a48086b87e711708b2946de77157da9a6854b3558ade1a77c75d249cae054
  cde643894e2d3688f487fc3b71a5713c20abc6e14eddc80d74d53445f5a9b3900ffea522
  55e85cb29740cb55d859331bf0fe6b61c01c1f4193afe3300174840ec8a91d8b423530ad
  892ef304db95cc43f05a859564ac382c4a0ae091d99afd943f78d32308f90b2695d17626
  470aaa70faabf4122f5f5faef5df37c65c1d35850d6c93fa3438f5c349888b867d5c4748
  c042348b7d2374ac78aaa24dabd2500de0325e98148ea46ecc4873aae6400aece8e799a7
  e256ab93cfd16320b19381e1f89290430f6a334efe58ab8de957bbda3a187bde3375751c
  6b9d4f9deaff9eed2e912bf78cbffbaa5f98c6d86ed9686cdd7200db8aae3c982f4de055
  7f5219cc7ee84f559155641c9cccc096d47c98b179ce6e947997c81296e6c0a1c77b4f33
  e0bb96e085f2b41d14214108fdff4e8f49cd7f8587624999329e8e1dd6522bf9f216dedf
  d88b29a5ef25babc9e2c0a0a2905ae27d8ae44e87bca70ec7d8cb0c139bffc156ae44761
  7df0c9e95dfea1903b147918779a99742eab38b55393cfa7da56568bbace05d02cda7405
  99219ff69e60039b9a60bad01efbcf36af7c3e11c8ac695241f5ad229f16521d7e1d0f39
  3df64207c3214ebdae12139b39211e60e7339647f15f63e910c68bb661ff372af203ddb2
  30836a3ccadba7a6349343e67725900843e5a165bc9e5a9cae481416e52a849d52c197cf
  3041d18958b02cd3fa5ddf1c67050f8550cdf52cfe52570dedfa20c164083ce26ceaebe8
  e5ce3ca5861a03976e230dbe0ae98ff8c569715aca7eb33fdc4750ffb89572143d5ed347
  a14155629ec75f43e1705e885e8e5a8812b10bd2fe85777888bcfa8d363ad3679375ec79
  76e5655084bdf1dae11699c384a0dc4cf0c658055e9ede8350bb05459612a20cebab22ed
  fb8815e1cf5c7e5b1fdd50a441db61fd47a9bb8d2269565db5aaccbc239ce6c47fbb44f0
  ca5441049eed74c3a1db38be13c792c1b5aa0c5658887c44dffec5eeeb22a725b5995711
  380d1f80a0f9e04a43d6009403e6f95191f8ec809916e44c3d37740468cdc977e33aaa79
  cf73d13db2bfd78b3cd491f507bc8c45bfc7ac1634f1a4306d6ed72fc123317076415c60
  d51cee12f9fc8c11c48cb827952da775112312d3712d79e97167241f08a4a4278b6dd1bd
  5c67809451ee43bcfa6f3d64371b8dc9f88ed3afb04f8815b6b5ca739f6c01c11a68282f
  4a9489bbb2adbc9134ea411bbd11d40a9ad6a79c21ace163465b302b34d8f45ef60136fd
  4910f3b78b68c2f2c23a7eeb57a6daa25122c16836b7c86a6a637f6e9603380a9999d19b
  8e5c3f3c9f410bebbdb1e65cb68bffa625aa5b157b70a42eb95a81a5a111ead4d0be0c77
  45885c2646a0e587cf08bb943245000f0720fb12a869ed1e012d2660aaa917ca7af84d52
  9b7387fd41d92293a45c617c3fde16f82209d1a1aff081c006c982aa4d758902fd28b00b
  5d9c10771c6f77e875759f27b998182a0cf753bf7cdeb1cec371261a6af05f2738f96d68
  29843d3a19e49e1abf5b8bd0fe604ce13272a330b4f1cfbfdba6b6df7096158eb3ac7adb
  952d6a81bb0f4dfbeda3f61cda98c1c06f34ac7cf67d17521f1205942edd8eab6abb60a0
  53dc782de23466e7f44df2e8c7bff556ecc542341784d7965e3a5d5695effbda1b8a5fb2
  149b442a5b9f3030cf682ade82408a3df715b3a23795afd7d358c75272afa0708a4ae247
  b2bb87fc65f7a4157ecf2c7bc5589331ec2c331a03520aaa94d64aba1da116f540bb2df0
  5a0dab190395a7226fb292f94cca3054ab2377cee81d9e58a4fbe1f95aa02d05a4
ss     fc8537e9ee77cc9f8cb925b9b6754654b6ea6f4a14b480a6ba91b83158e53b59

seed     23474d368ccca8af0007cd9f5e4c849f167a580b14aabdefaee7eef47cb0fca9
sk     23474d368ccca8af0007cd9f5e4c849f167a580b14aabdefaee7eef47cb0fca9
pk
  fb919074472b8012c870650da1c92b1f885455cc83dbe5b708213a83c401e9e408c63367
  f15507c266474c0a7512e08402d0bdf45c0183f42c5a96c6f4d1589784ad32f378bef259
  1a27bd43ebb7e847446fe257b0d3a338c26401203c916662880cac68db7f548848c69a61
  b0d570867459d0da534d8b858fa40816b48f6890bb06da38fb2c458f218965e2a94ca136
  7d8400d0a1271ed65114e636a5266879a51317628f54db15d698376f443b8fc41949560d
  fe1771bf6a57cf5254ce4597586cb202b9a3c7307d1ae0985eb66e0da38e2e247384349e
  aa0c8d3496250b713a96b01996f5c5bb5444e7e585d5d41297c319d367284708312c98a4
  45c77ed5135a3497c04cac330e8459008528679127de41c8ecf544e3a7793602ae29a0ad
  c47c858c7487f556adb88798441571e520273b469f52048d29e063eda4187e02305b3416
  372b8f0850350ac52f7875097e989de356b0d3d4074201c9f044355e58906f2b0e50b28c
  eb908ab75a22fcea243cd064a3eb051a825cb4e76a14f5504924748dfb5184e6248dba45
  fbc5ba109bc0ad5600c59bad7c239d5c538837b595d4b26d27d7a826310de09a99aa0a33
  4cc40c3f9099e788724dac165f82b96d704303b851de54a0f7b2ca655966626a711ab28c
  35e4aa3dba62e7d777a3008e315b350bc85b797252c16234ac3cc12f1b3ea2bb1b8b942e
  d07c2754879754b60eb4f39d62d679bde4a50644436964b3fe0b807a8477a4f0ab89aa92
  96098925d51b924b86dbdccc963acb3b975cdf02d07c3710b24c248c29275c9821b29a92
  9a850eb7a41f5bc2aed447b33d7a3cc0f25f1f4b5feed92528363caa520b06e82b22c39a
  4dc6b8ebcc1fe2d76aad319539eb5306d9b8710390a89c01c8890bfcc9716dcbb676645e
  42641748db3296ba9079988e6a2a45d2e25ab0d826d073824558272011709fc13a483397
  974181a75575a0163047c65daf1945eb731164c177ba379c0fd3b9244642712ba2ef4807
  804c4832f753e07496c9c971d2882d41a75b78f3c83130412fd2c6a2a9a4882435c816b4
  d2fb9c05c50d2eb347a294685a1a9470494c29a43f1b621762ebc4b4b45ef3d81f4ff083
  2cba113d9c0d4d7b437f0623f7b97f31ccbef9c251ac4522f5782dbe7988b77b3d2a3a04
  cc9572b159644341cdc8fc2a7b1a9895f3357e26cec3651e9dfa139869ca848ca1fb48b8
  5e10318d45bf8526916e13cedebb28cd5c6aaaf06d7001852855279116453d851c55f541
  9f678895f46d6e266a6571ba3d54676ee33145b07cd0537e02d8a93ffb5ce2c13093b3c5
  3935b49484701cc6994d810a4cc15cc6f50d6d3599f764b15417801430b32cf0acab2cce
  59c022ac777ca9f5b86ad1698b136b0e4cab6a145326a96dee693b34a7ad6a9010afec85
  8d02c2dcd2ba2f1805f38355f68022bd48c93d7c3b0264211651bf7c838ad4b5bc62998a
  6ce993a4f23bca243b73929f00f25c33458a1099c344a8868c635703b64167f25a6b6478
  1b0545be70c3fe0080b8c6260ea067d38310e921a929e95e8d6a89e6246525e697bd4702
  410b2407c87e882bc4b0b504a1d2498c989d4561a9443c1f3bd202ddc53bd7dc7723e06a
  92f5ca20e2086b0741bd069dfd149ce7497cde756f36a53713c648951054f58327dcf74b
  52240ffc6a3763019a103585df850f6fb99774974d589bb0996aaf6bfb78c1218d700810
  3bd6262031c9ed61c079b4aa6b615324b88b7c101b32c356874826466187ad62225bcb86
  b144896be9393a803380945608a4496c57887c181f430041548581fdbb0357614b981c3c
  e2514be0095b3f197c455340cdca25bc2acc62b47e50118d7c17b9c1f94edea5c3a9915d
  f945675ab67d9c840f73f553e5a7ad78e0c596e44fc8ca043df74d1ae253e5d9880bf48a
  70760473bbb581c8ae4e36c98ce76dd76334ea129e2b5c936fd2abdcc31aa14411f266c2
  53085a5f5714df4078c1d082047bc0046c2160ca39924618b8a97ca66a894a7a946d0159
  6111c9fe81892207b9fca949bc4143f58465844371e7cb7dced503dbc4068ed33521c840
  b1095af6dc0fde306df3d74785123563d421d696759a2892f5f6812079c28d6175be4020
  143b5667daa088cb7094a81267b870834898f6b6020c1aa4bfe13c79e71da495b42ca55a
  b21b54b0bb5a76d2e6a90872039b0c0f24cf92e50348ea6f9dab53c3b7c50a9ee2d7e6be
  97e950f88736ccca78f57434f78221057a061f93b96b0fc7b87aeff35a572fb027
randomness
  767be1fda69419dfb927e9df07348b196691abaeb580b32def58538b8d23f87732ea63b0
  2b4fa0f4873360e2841928cd60dd4cee8cc0d4c922a96188d032675c8ac850933c7aff15
  33b94c834adbb69c6115bad4692d8619f90b0cdf8a7b9c264029ac185b70b83f
ct
  a1509d5821b2decf0a882d513f3aa1624d1c6f774bd33b10c751d02879e60c66bef59fa2
  2991bcb6e0d91990ebedad967457308404370b0d9c30d9758e7879e1ec71c4ec18de6546
  4a3020b41093bb38145e4b5b253d9ea03bcac191239578a4be812ca7070d87afa341db03
  5072610544aca22ed3e01a88c7d717504b32404f95e889caa4cce81e6f9d1227c4e81968
  6386c6e9edefe0012cbe4b0c10cc14ee5d87c514431b909be0e33ff21bdf1be0e8e3e01c
  7aabcdffbbfce91fc2f4db690d8f743c2e0efcc45484b9c4f64e0072ef32993a574e0146
  ad129f7553755e4c81dce8c2afb2b093d0d3047468d39468ffacbdaaa03b5b71644822d9
  71cb2af5dfc2d0808950b9f36263707dfe4d5b53efd18b0ea38c4fcb9199fa40558943e5
  484e26a9b4b3515ef93d35faa0c98bece01e6dc2ed800ad74e5251bd90a1e66ac3c399be
  18884de6f9dc2eb8a7488775abbb07a355d95d4e0fc9b0d0ff65f7680e4ffc1b4bc06eaf
  cc4fe68032e4c7abb148c8b6632b86f432fe212856a5282248c4a9db3c3bf4aa7739b8ac
  631c6debd2c4df6d430bbba27d4d375922076d29307019f69d467ac30706d68509e009b6
  e924832915d385f2b3fcc08e36438bd066b6d72095df65786e203cde5ca4c84333e28249
  aecb360c7b42df325821a7abe2b54f8d9d7e6fed9dd18f872fd7270d129a993da5d625e4
  c3eb7a6e9ee49c1ef2e536a9572542a99cb21139f926b686aac631ed2fc1f17bab80ad64
  52d96990cc2d5d57f14331ed698acc68a50f9365113bb3a975fe1507eba9bbe3069be320
  e7733809e1f9fc21ba3a89a6093c4ca96e4eb2e4c9bbd2c191b4b4019c64e729a3fc65dc
  161716c5940f4e2d2555a9f79071c760b0574b2891ec2f74829ddae11c676ad4a6575dde
  f34adbd097ee049ed4a3da4c17361d838cf780659196ec6d817a6408d210f1a796e1cf61
  9eab616956304efa7f9f08b5460839e6d4f1220e238672619ede26da3c6516fa9719c65d
  5dc41b1a9e7817e60767986e6125aa71509dfcd282ff4adb3093fa32b46f993ff9dd5f6a
  2d521b24a86995f01fa746ece7584dad16ff192cc230b2b09226b48ee1ecaeba935f64e8
  1f5de2f51dce5234f7d558dd9c1e6ac7761a9c901f1b7cda4b1e3841dd752da03fab4573
  6116a409b5034f0e49b890e8d42697c9a88851ef1e9b413e70f936895cb2de4e4649a562
  3dbdddcfb9721af5c4991f9336bdde117a32215984b54e5653da7778becb6fe4c876a244
  6181062c4a446249abed8e2beae07d96343484fa2f70bfd9dc45845a03c1be75f8b794a9
  17fe67904fbcab8736d524032be1bf83d8439a75a8bda37a0c4543502112888654ce351d
  9c81bc0844a32927759c205f8c5dcc10e81fc04e7ca7a24c759c455265e266426c092403
  d50040fb840992d5afb3b3db4f608f22bcb1539daf30c919ef0507c8e70d1616c3e96ab4
  d6630c50d48785db947bc6da11eedf6889f5837112e1452c2b55ef4c0eb7e32346fbb96a
  9815aabcd6db97c77bc270517af31a6e3a6c1851e31d4ba115e56e81740ba212cb2af1f9
  a2540e6989b2882b44a2039b761c482e43b5d153f05fb01a218eecd32c9c4a6de54e2316
  f7b466d306b20ebb120d4d1185a01382934ad66f914d71ed6da0b34e0347d3d5d565d52e
  bc1ba68bb33d34abc9c8eb91cea27b6cf57db0162ef02e22f92ecf07203775c372cb6257
  a2e82a28baae7e9a8e8f32bc20c8a6b9434c6755846ad68113deb043b09f860419b2d6af
  2f64b1885db33bc3fe164842ec44b460261a977c44872cb92581f71a20a088a719fc3e46
  fae48da16fb79573ab0cf980df9a77b4f73e0f59463c11ee03487cdf7ca0c386050f41f3
  f2255e051bcea12765c8733d25350edabc61da85cc437fe6ad480bd25ce4daef91841236
  fb04f19cb8df9d6a6f7e24863076dd5b173da8518f3800a3a615d0a6a6ac4305f731f8a4
  945b4eb7c7ad72b63373f9baaac0eeafa45276b436ec760f7512e1e10328a320f7390d6e
  f5123d20b9b8c21342d94d63bc4bb1d58ad6fb5bc9a07f69201a5aa94ab7dd550389ff15
  d1df63c8268c87059c6142855e73c4c65e7d03c0d53f8e888a7f19cfe26f7c2aa3c9bbd6
  b020c35e51b8dff46fc2163131dd513693334ed43dd7a8c182bc6f520ecfc8a38a3e4610
  c9bfcf782cff1f87ede42bb56681db4542783d40039bbdd642492ef1fa5230eb8a6ee5b1
  34305b73f83147912980758b390070b7931117f97833a3d7fc92b7552ecf4765ec
ss     74d4556ed0a3709c07dd6044e15b676ead0056fda00c4adde241e7eb0eacb216

seed     2801f2f4b3f70c593ea3aeeb613a7f1b1de33fd75081f592305f2e4526edc096
sk     2801f2f4b3f70c593ea3aeeb613a7f1b1de33fd75081f592305f2e4526edc096
pk
  a10a07c7c72815b5281584a0cfaa22fee7386985592d051750b32443e16f31171bfe2677
  df7ba9ddec75c7182ad65ac06cbb614e97b1dca591c1ca3f52f46ce270a8cd7b794a9948
  5d4365bc901513d7000148ad30d085a4926be184853f61cc4b216cf3703743d6ac87c003
  ba153231a52dc2307f52c0361d9409220c205631952d202e2ce22872fb7b79b484afbb6f
  5b979c0c61978dda8a0d32294702270b43b494f9c30d11bdd504a098d662dd943a1b6890
  91b579e05897c53a4d61a2bb5ea2c4e975705b914b4be3bdac76b07d454e6d3087081480
  43ca4a0ab92f92265d2a757e868a0d7d400ddde468a8649c1e458a13b96aea338a6a242c
  1813ab3e3447c7d608e1a5beaf218f633201e096c11f6bbf038c8663c58914e021e8c788
  5deab1a95b6cc86692722c0af10092f03810bdd8b4176cb893761a0e740a28a54a1ee362
  0188b7e298bb83c95d57514cc0a2ae4cc562d4f61d27d71dead6184688086d964383131f
  76d9ba4671627db94c6d57795cc1b2e07c231efa2793c61bedbaa609a583c3c8ad6ac658
  faf43b89e78ec980c1dcea2b1ea836859097656accf3f8700a007cfda6859f21387e9467
  48c773700b63db1a159296126e782b3595913fa5ca0f13a00de5cdfed083893bbdc7db01
  9887738e1768706382af258caa145486622304eb1586f08b597bbb106b9433ac34458aa6
  835c72cab5635308233e6ab5c774b51e10339ab98093099da0730346dbcf74cc926ff3bb
  ef663ba7988ed99b55bd3163846755b1bbb263a675478a0e8bab2d538aae816c186f8b79
  3fd7c56966afe39435593b0603da78cd59b85671a428bacd9f2b80810042cf5ac8368747
  aa3565caa633c6976b806c551ab507d0da8dc2a42e226569f5c74b623441e5513d765b7f
  21ec5f39a3a78e102d61e86217916d39d5caa1712d106aa45c16b9d9350ceffac702b3aa
  74ccb828263082521ffa17807c07bdffa281798a178dda3ea8357fb0040cc9187e8d9259
  f719b5a317908916983a191f63c749cc8c1e74b94ee8c15526444e76521484399436ea1a
  f8a30f88572f1f2cc9c9d08c7f911219808437b89b54dc838867103fa32411e9612330c7
  6c87763b7aa3072918a3f69c2db38231419d616a480558c31336b349f18293aa7094f026
  d40243f5494fde85c858171c1dc024280a81edc99321d0bbf8253e150032919c58d4277f
  62e0cd5d8654cc721ed7b019e47b94898728595bbe929a139da12e8043779a4277528bcd
  35c800abe82adc8a0b0ea12c0b13bd2e6597ba2b82490b7c0c336eba761c90966167ca89
  29103d94543490dc688a43bb7910b35383705d8caf2d7590dfd75bbaa39f0e6761ad07c9
  440691ea527b3aa62194d397a81236538681ad74c201c1656c1a16ed7b1b4fac407bd828
  93139acb90b20ed106fd144d05b368f53bb6076a410ca454795679339b43d5d444545b82
  d5a0ce273787731109f619a256246a03b97a09c677eaa581a275bf98f505ca759e2fba6f
  e7a7060b77c7c55aa32d849ce1445449c3a951524ea9652ff24b572ed64e58320293a047
  dfe5005ff3131cd6976b139c342c93dacba8bf1b24ec567709186daea1b4f67736073c9c
  028451cae14348a380ca13c4be04154a2681dee5712a16c03bc54b6c61a6e0520cd9b464
  e8cc31eed3625e829f664a6aa076a70bf50b416c92bbe028adba36bd586280c47db94924
  26d0bfe7f81feea4925f2ba294752af024ca2a7bc1cf48b5a3110d9c553fd79b7c699716
  09049df265314a639b6b2a5adc895c22d952abbaacde1a1fafe7b00bb67e288546411c91
  9e86bae5232ee58002ffec7c92885c004542f79a85af78379d483df1206ce513ab93c681
  d5799dc1a3659460c3c17aa50bb306e7eca66c190e1468b1cfe83dbf473f26c003681604
  700483c447b0253c47d9d3ccb7d8c5ace9b5f6094310545cabd5cb88e9b09829024dc151
  1cd13ebe761e6b055e02a4000a434de6d7737cb8923477c82f2992a4d6918ee84537ea93
  e63b05e045a99f0cc8a561a1180c3be8361277bb9640486ee86261e74c205f8537b416c5
  b0c3b1d9609d47e3b04072b51d55347f3057ede1cded5716f60556c59a13c2d777e86b39
  0d3852a4a4ad10ec2bf9a31da640246beb771dc01ebf27c06344ada2cc800e3dd463ba92
  4aea3212ad21fac6ae410198933bec50d87b9bca037e4e76f20128a1336183fee431ec68
  4f797fa38543ed398e333afd342e95ec20f86224fba7f9815e5d7b65b09b3ea137
randomness
  31b10958f464d889f31ba010250fda7f1368ec2967fc84ef2ae9aff268e0b1700affc682
  0b523a3d917135f2dff2ee06bfe72b3124721d4a26c04e53a75e30e73a7a9c4a95d91c55
  d495e9f51dd0b5e9d83c6d5e8ce803aa62b8d654db53d09b8dcff273cdfeb573
ct
  58a5879901d77e89869c44f85798adde8b73edea452743e43b45728966d6b3d6f7274bb1
  c9539d62971baf46f2a445360efb97023a0138757e35fc004fde721e010f0a1b24e86d3f
  120c9127dc08da8e17000bb802ac39460a9eee609ba0a7e9b32230d4e7f79d2a3a319e1e
  de19255feeb3830ae7007f39c4bcc0db45191e55070893a7f4053433a256d711230a4e3d
  fdefeccc98b070329672b2bf403341694fe97ff52aaeb27a8f0a54e50efec5a92c9ff961
  ae8eec8c4e9b428bd459d2bbc2a562a8f86d8e77782f1fedb820b227a69920aa38ba2cc5
  cf54e524c489f6f445227d8df024ec1222396ff87e7802bcca9899a6c638315f61ec3cde
  4699877ae57c2bb74a0846cf0525b4c8e40936461173b14e9e356e439156670b0c7006c8
  75e02de388a2607d622555d0d96a75ee366a87a249ed20e6091372083ee75c097c939208
  63534f5a3b29c7d0e26b7cf79adabdc196461bd6f78db70edd4937b0a73042825d69ebc0
  7063c90d883c3c21131d9fff4d51495671c7d4eef039938b813199625c5a0831240ed0c9
  6d05bee0f14821ff3aa4765b794fa66fd3c0a14ae0bafa77f9daf4522496eb14370ec6a7
  7c86a599e402fe5eb3727eb7755c23c657ac4d1501ad28665ae8221ddae4e68aa810cd3e
  f922821777ee958256b72778478aec12e96cdd91e8da4ab801895402a29323d1820bf13a
  74696a508ce8c1a7581fe0902229cafde4381091bf99d1021d5ba5f58814da61ac8db9d1
  2ccb4686f69491cbf93a9da041dfae9b9046e70a904c4efb4c39f0b1ea4a6d16ba2032ef
  5b2a2d0745d6c0a9b9a1fb35f1fbeaa663c9a64f5781a83d86dedf747086c2d5dfc06a5f
  0dda25f577aec96db45233a4c472f164294f91c76d47d9fc45946a684956487e5d743978
  5d84ccdd7f483f82360a865475978014851cc976b37974df1c2fcfc58377d2a275ccdc21
  13553419554be3744133c64f8ca35b460fb361078e1f541cb8fa7b3645d3c7675162364b
  071d262c35a5cb7ebaa8a2bca379c212ec6cc6cf351e3dfe08b04b942b7e941be6162e11
  58ad6bea2c5c1e62ee8765cd52244f180e46b1b8b88b486964f486570ca8f0773bc0166d
  7c5d6663ccb6abfe43762d0caf8455fd2b7814aed54913b634c02fc2a35b4de94f2459dc
  6f5a5d34bfe3cbeadbbd2f1a61ce593033cc8c8fb8f8286dfda70a8d2e8040c0147e7cbd
  cfd644e08a710fb50fefdc386fbc3bbd7b9dc068df417ba5ee4a1457cff4e521ad557f6f
  0bba2f47107543927adec085ac66dd984a825447c580b86a0d94e70fe9b9154009715d43
  5a5bc02ba3a7841f4c0df7910030c21a5e30da73a5c655ede25fdba97757b3b0c726b00f
  fd7e6a13d4b266b984b9e88f9296f086ed246c347369022c5cc592d82b772db688f047c2
  28b84029c500c8c21bf576b2e71436b4151b85af002783e401cd870b15b7b524aba10472
  46479f32e0be01896b1d1652f08a48c1244b5b380550b5e9fc09d9a396f06ea5d59dcd8e
  33095fb03c3730ec32fcc2e3bba1b9148c0f18a61dcea1967737649a51ba8c3f6fd01f20
  f61b333507248d04b5dcfea03bfd95a4bd5bef6d2a3bed39a86dc1723a531efeac72cf3d
  4255378ac04ea915f0673a557cc39124ad0b24a4a8713bb8a45bcbe80d68bfe69353cf51
  413ac9b0587f35c3d007cab3d6614de4401f7f9aac0e39688874480b1452e053f33a3adb
  ca3c70a18d2669bfa9e10ceba9ecce421e1bbdefbe09b50340ea1f70dae50d6a8db4202e
  be68b6070ec40dcd6e49534454bd7d993c11efa5dc9d8da8039cbf2e0a93624331d2d7ef
  d590ef31a0d9735199578f21955ac64b9a4183eab783d2d15dc41315ec090e120147384b
  caaeffbc277b0a784e9ae2d70f2542fe77c90e25bb235767a2ce017d4019a8dbd8b8b204
  3743e65e0dcfad9811fc6e9e76dbdc11417363b109c7772744b93e6da0cabac3bc37394f
  f6a368e18d04214979ca4304359111217c65e82ee8b9da7d64ef81117247a99b6cfa6dac
  9f55614c796a14b5a221d51f3d7d42ffc6caaff631fef11ae6e89778a23c90e60023a0d3
  41487eb1aafcc4b9f9310bfad347779850c637727fbd45c3ec515517c8714b03d817c2ce
  dda99eaef4edea2612bbc3369290cfc1a02a322d5e8840756489b8efa2f12c237116b398
  f783f87fd191426a973f02b9e6f92eeec46871cb02db36dcbf513ff0b3c1ddf689f6f3f2
  75d6ebbadf14b9bb9da4dc455773ec8a9902f227313247cd7dcb0784049664d286
ss     ae2cfb0ea52f32a555a49b5f4107dfd0e459008538a2bac85a0e47c5dfa97645

]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="FIPS202">
          <front>
            <title>SHA-3 standard :: permutation-based hash and extendable-output functions</title>
            <author>
              <organization/>
            </author>
            <date year="2015"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.202"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="FIPS203">
          <front>
            <title>Module-lattice-based key-encapsulation mechanism standard</title>
            <author>
              <organization/>
            </author>
            <date month="August" year="2024"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.203"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="HASH-TO-CURVE">
          <front>
            <title>Hashing to Elliptic Curves</title>
            <author fullname="A. Faz-Hernandez" initials="A." surname="Faz-Hernandez"/>
            <author fullname="S. Scott" initials="S." surname="Scott"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="R. S. Wahby" initials="R. S." surname="Wahby"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="August" year="2023"/>
            <abstract>
              <t>This document specifies a number of algorithms for encoding or hashing an arbitrary string to a point on an elliptic curve. This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9380"/>
          <seriesInfo name="DOI" value="10.17487/RFC9380"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="ANSIX9.62">
          <front>
            <title>Public Key Cryptography for the Financial Services Industry: the Elliptic Curve Digital Signature Algorithm (ECDSA)</title>
            <author>
              <organization>ANS</organization>
            </author>
            <date year="2005" month="November"/>
          </front>
          <seriesInfo name="ANS" value="X9.62-2005"/>
        </reference>
        <reference anchor="AVIRAM" target="https://mailarchive.ietf.org/arch/msg/tls/F4SVeL2xbGPaPB2GW_GkBbD_a5M/">
          <front>
            <title>[TLS] Combining Secrets in Hybrid Key Exchange in TLS 1.3</title>
            <author initials="" surname="Nimrod Aviram">
              <organization/>
            </author>
            <author initials="" surname="Benjamin Dowling">
              <organization/>
            </author>
            <author initials="" surname="Ilan Komargodski">
              <organization/>
            </author>
            <author initials="" surname="Kenny Paterson">
              <organization/>
            </author>
            <author initials="" surname="Eyal Ronen">
              <organization/>
            </author>
            <author initials="" surname="Eylon Yogev">
              <organization/>
            </author>
            <date year="2021" month="September" day="01"/>
          </front>
        </reference>
        <reference anchor="BDG2020" target="https://eprint.iacr.org/2020/241.pdf">
          <front>
            <title>Separate Your Domains: NIST PQC KEMs, Oracle Cloning and Read-Only Indifferentiability</title>
            <author>
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="CDM23" target="https://eprint.iacr.org/2023/1933.pdf">
          <front>
            <title>Keeping Up with the KEMs: Stronger Security Notions for KEMs and automated analysis of KEM-based protocols</title>
            <author initials="C." surname="Cremers" fullname="Cas Cremers">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <author initials="A." surname="Dax" fullname="Alexander Dax">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <author initials="N." surname="Medinger" fullname="Niklas Medinger">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="FIPS186">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization/>
            </author>
            <date month="February" year="2023"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.186-5"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="GHP2018" target="https://eprint.iacr.org/2018/024.pdf">
          <front>
            <title>KEM Combiners</title>
            <author>
              <organization/>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="I-D.driscoll-pqt-hybrid-terminology">
          <front>
            <title>Terminology for Post-Quantum Traditional Hybrid Schemes</title>
            <author fullname="Florence D" initials="F." surname="D">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <date day="7" month="March" year="2023"/>
            <abstract>
              <t>   One aspect of the transition to post-quantum algorithms in
   cryptographic protocols is the development of hybrid schemes that
   incorporate both post-quantum and traditional asymmetric algorithms.
   This document defines terminology for such schemes.  It is intended
   to be used as a reference and, hopefully, to ensure consistency and
   clarity across different protocols, standards, and organisations.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-driscoll-pqt-hybrid-terminology-02"/>
        </reference>
        <reference anchor="KSMW2024" target="https://eprint.iacr.org/2024/1233">
          <front>
            <title>Binding Security of Implicitly-Rejecting KEMs and Application to BIKE and HQC</title>
            <author initials="J." surname="Kraemer">
              <organization/>
            </author>
            <author initials="P." surname="Struck">
              <organization/>
            </author>
            <author initials="M." surname="Weishaupl">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="LUCKY13" target="https://ieeexplore.ieee.org/iel7/6547086/6547088/06547131.pdf">
          <front>
            <title>Lucky Thirteen: Breaking the TLS and DTLS record protocols</title>
            <author initials="N. J." surname="Al Fardan">
              <organization/>
            </author>
            <author initials="K. G." surname="Paterson">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RACCOON" target="https://raccoon-attack.com/">
          <front>
            <title>Raccoon Attack: Finding and Exploiting Most-Significant-Bit-Oracles in TLS-DH(E)</title>
            <author initials="R." surname="Merget">
              <organization/>
            </author>
            <author initials="M." surname="Brinkmann">
              <organization/>
            </author>
            <author initials="N." surname="Aviram">
              <organization/>
            </author>
            <author initials="J." surname="Somorovsky">
              <organization/>
            </author>
            <author initials="J." surname="Mittmann">
              <organization/>
            </author>
            <author initials="J." surname="Schwenk">
              <organization/>
            </author>
            <date year="2020" month="September"/>
          </front>
        </reference>
        <reference anchor="HKDF">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="SCHMIEG2024" target="https://eprint.iacr.org/2024/523.pdf">
          <front>
            <title>Unbindable Kemmy Schmidt: ML-KEM is neither MAL-BIND-K-CT nor MAL-BIND-K-PK</title>
            <author initials="S." surname="Schmieg" fullname="Sophie Schmieg">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="SEC1" target="https://secg.org/sec1-v2.pdf">
          <front>
            <title>Elliptic Curve Cryptography, Standards for Efficient Cryptography Group, ver. 2</title>
            <author>
              <organization/>
            </author>
            <date year="2009"/>
          </front>
        </reference>
        <reference anchor="XWING" target="https://eprint.iacr.org/2024/039.pdf">
          <front>
            <title>X-Wing: The Hybrid KEM You’ve Been Looking For</title>
            <author>
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 2011?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+y92ZYbR5a1eY+nQEkXIrMCQZ8HZmVlByeJTXFIhnKopeLK
MHc3J5GMACIBBIfUr1r9Gn3Xd/0e/6P0k/S3zdwdDkRwEKWskcykGAG4m5sd
O8Pex46Zz2azyWa+ObU3p19887ZazZvpk9/d+G76wL6d3l3U5nx9cWo28+Vi
+tDWL8xivj5bfzExVbWyr25OX7g7Zi/t2XpSm419vly9vTmdL9rlZNIs64U5
o91mZdrNbL7atLO6XT2fjW6aBdFkfVGdzddrHrF5e87l959+d29SLxdru1hf
rG9OW3O6thMeFk9eL1cvn6+WF+d09vbq7flmOb23XF2cfTGZmIvNi+Xq5mQ6
m0z5016cnvqn37HzVbOy09vLxWJ5evrWfb1cPWcof3MDuzk9NoumWr45+p37
zp6Z+Sm9vqDhenWx3lycXpz9H8/16WG9PJtMFsvVGXe+sjxteu/+k+MoiHjO
4/uHYXCYBVFx49H94+8O9c0hXw0Xxe++KJ5MJLRRu0ePju//qTzMopuuU/0U
PbmoTue1mx0vgOcrc/7i7ZR7p5sXdnpvvjCLem5Op8d29Wpe2/X0/qJhEJoX
XXD39HR+vqGJ2xerV3Z6Z/58vtHV8+cLs7lATkenTOJ88+Jseu3u7TvHR9e/
cB1omN2b00fLVwfTKAhS99naruZ2rY77Tk6nX9DtL25OXcdnw3XD3Lg/s+5f
Nws3NVAN9w/3nx497MZqVs/tBuXabM7XN2/ckOTNqn6BZA7ndtMect8NfXDj
bP38xuZ0feNecvwH+230pvr6iXlyK/r6j3/++uWt6s6fTfrwxo74vv/u2+Nn
qMJZNV/MF88RUr2ymzUaO+2U3+n9G2n6c6uPuWEaHsZjITCn4SwoZ0H43tHN
Fyjvo/nZatlMj17NV+bs6ktu2cVfzBmPurN8fUqnrr7q/qlZTB8sz5DNslm/
nF991QO7WLydPqGbq/VycfU1d98y30+XC/vO70+x9n9ZPrev+OLWna8Zb7Cr
hcf23Kx4CFddrOg3M+QGi0bjPW5PH9x9uD6YPl6Z+hTDoznJGiObPrWmmT1e
nL6VVs7b1q7sYjM31fx0vnn7xZWzb89X88XmcG7qlZt49eZGlISH5027OykB
v96+8zCKdzv7wNpzPf/359PX6LWzAnUQu9+slkzzSmpwgc6/Rb/lEdbOnHSN
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
DPOuw/TlpktXTqfdCQeeXHZw1LU0ZPjctZNL+ce1+8+BdMrhon2f7NS6K8No
Td1Xn4Cqe0VX9mYjOOMJo5l+1Vf3fNWnMYBN8uHoyEFv/SfjGHMyNDYUt+yu
E+4XiBzu3T81dW3PfWQcLRz6FJhL857/9c/Hx74g7snvppckKSNUimS4aJwv
ufJqGrz93U6D42yq+/7Jg53v35UCHp7dt7f/7N2G3aV90/uXvu8Zp8rquOS/
28cwW/vNDQ5P6qtfS9WnP/yw9/Vy8eOPblrOlivrnMy2tLwLw6vl6UAvXVNd
RUeX5eu+2ZuyMTAw0zjq1rR2AEGXfjuYyJdoa4LS/ZtLLTPyw+nID3S6YteL
rzbTF8vTpjdmt14wWc2fv9j8dnq/nb5dXnQldJu5suqOUHh7GqUz59taOESg
SHaqzCedW0y6fq87c3choFu1HRJaa5cj6P3JrmZLsKNispuItM+9OCbyYI7b
sYvj+UJLlEPu2NVNjL5zpRMuEdz13hvj744HpzbcxWc//tiZ9aiF3XSg0hDm
zfzMZezcHrXVK08m5ouu4O3A1d6pSqEzWU88HOHti/IqX7Mzzt666kT3cDoy
2X+oyMeyzzj3NXS7N3vy6TGNx7La7LayF2stVfx6e9tqXADXLlf77fgCM39b
76l8n7z76lbn1aVd2U0mt+T0z8xLn5TrtHDrd8ZP9ssJt3yU2Hn+C/PKTlXu
fPv20VAneKjVAOLRONM8JTZpseWnp6onXQM/O1U9GaWqpz81VR1DxscswbPV
w+ndV3b1dmR/TgcW2+LWYSVvm4G40obmfno9yBtuAg38TZxYwvR1rd5EnIM6
mJih2MyprjrmVEJq5fK9Srcs6mXjUdJyjAl21NYrs2v1hoDEFcWc404partV
l8pOmvn6L8u5rqRfqpdSmdxcmY7D6UPMAHCyOhh1UGJwtQDuP97XXw7pB6OA
cXDForvE5US1XHTVR0NHJ+OMlROBu3K7sDJed3EgZtDGH77shDPzSAtkpgzM
ZXh0udrztR0tlyO+s25pfvuwyd7DvAdyObaVPdVa4HK/emakPH4NQis2y3PJ
SSsMb/drqDsFlL3+yi+E+n2k9k/dcuVe1ZCuevI7DLm7rgcBw+z7ihpd9nV3
yWJ5Jo/aAeieDA/C8Zna/dg/oL9p1+IVFXrdQs+v/GL2zWHhc9Et9nYOyq3H
jZbu/JJesy1we/roazVy/tf3NtOtcS4Z8uG2mOa67lTvP+7ebunKLVUd7tOf
65PJv/3bv00a23bLhnfGYNmV7ry8rh0Pw6Lib6bMmKsZ6Xo//cdtb65z5TWH
xw4cDnygdLabu1H/+6a+Pzzsmnim+zwofMANX1/q5nBLd8Ph4faWJ90t+xz/
inErvaM0z7XuWdevO/7kKlmvuf4e9N04mHbD6J6BoCSkvh5LIlm/5MFdTeyj
8ejf1wy3vFvQ2964mhxfsLrfD83X5NgX5QukbcusTlRq/tIlR711ysT66d0r
xrr58/rajfYjeyuf9lWHgKaCQF/tYqAfvhwDrMnkSK6rUabNOxBn0vgY76FP
RhefTF2a7it9/vqFwDFPXshkzzdfTbpyZo9c79zrciq7fkylOWcXZ1dtH3Dp
8s16cuXmE9PDLVe95/GqN8CFtb4Y1bl1mqutW173A5moI9tpGY1F5PlwJyHo
qFQ/P8cHngntThO/D1uq3vmnm40DHzuv+x1M3kH8ZjRx737WVY/oH7/furu2
UwzGes09p1OEL1GE4yv2aUxuoWF9RbGSVSu7w9K3ZUtu2eZSUZwIy8pVlqyE
m1UOvK3zFCw5X1kCwvMrNWgfGass5HTulv6eaxf6xi22Oqfin+iyTOu++au0
Y4cj1XDySb/oiF44+iKLAONeMgTh3snk/mJ97spBqt0MCd9Or/2u2yN1fIH4
5n5Pyj0RLa0etorFcgN+V4DbKCbK4pfSTt2upuddpdI7VN44mZ/OwdxdRset
sggxnnb1s34rlC72FQ4uq4FZgSs8K+rYcWM2xrfkA/fkgzM5REjNmlOdkQ9j
+L+8kVxpHCP9fYd9vEv9O03frjS7/vilbHXJcR1tIrlCTTsHpdMAtInmfLl2
xUeTamQd+xStcfvKOtR8NTEak8COcPU7azwv850YYJrbPjpsd3ODaDxcHxWK
rbXaNXqGI1/vLZNxlH/tDkjYv6DXRFUL7VZLewTnSI5jj46sLbrH+C9fewk4
ZqXGJ3uNb3myy1Csp51VHE6PRWBdqgJ5PYeS+Q13XfN+FfZgXCrgZOFWXufu
ro7I7hjxV+utYc3XE3+gw3LhAfe2vGy228uZsxJVDeNpDtx+vMVy3HWacvsD
t0zfJ4eGZH5XCt3srktPZ5facfsMe4c05IF275r7CKwCt+cX2uPutsPJNkc7
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
/wZpcAVJ+NGNOy1q3p9m5jfZuqoUl+t/95Edu7VWLgvjCq7doXsHDk/s0kWh
nvHu+u0xBs2oYwNKumRtVx/s8e9sf30nvJfa9sMHsj273A9Zo8uJc0Xw7Cfb
6hCzfiFbtS+3rvYn2OrleoJPsNKRRYzOQ+nrAadFMKxgeeW9yv3/hDNsDj4Z
+vlHT98fEXZP6vmZ0dHFf78qjVQ30uqgKJ5doS1XaDXX62qBovBZ15BTkZEy
bx9p+256nf+l/P/xdmF/jKveqVo7nb6sYN6t6zycbsvEVa5236MPbtxt6V13
MWHSO/LLqvPuiNDN7n5EuKJM//A9JTR+84iv0OjOnXDJkWHtqpmqyvUqDu4Z
lZP1TR245c/ldPlCtyDoU/86e0KHwV1ZPelq2C/OppU/znt8eMy1nfOnD3YP
n9b4xys566E82vlr14ch4Bz403G3pD5LurCpOkSdidStiZu1T+trG0wXFdZ7
x2Bv12uZv9GSKH0aDhHuDlE8c8sgZtP3Z3Qod3/c3Mq2y1VHty4dGXxlF1QJ
wpN3OjU8eKd+6OJceUR/5jMB+dynUTVH/nnb7RDuUAge82putGmhO5KfQL09
8mDok1tT9vUcTn1mo64c3P5OYtj5yK0U89GeqHY/2L9iaOjSmjOfffP40U5D
o9/3vh+aGX3kW3GrQr/IouSX20XJyeTnt/hTFm1+gf5/9ArO+Dau0K97Szjv
q0j82KWc7lu/lJNduZQT4HJ/iYkbH6czXsbpjoCYX0oGuqx1txw3rBt3Z6Pm
eVIoo7ab2J93q3pGx7n4/T2jAxW+8ZVqO+ud24NPvtUk20YXHQyZbX/qzk7S
pVleqIyig9k608u6QjqXbPEperfF9M1wUPXzpTsF51d/1jaxk4lH9+6IZQeU
nLfS/oOF/fV07koPX7piju49O077XEr75W/9GPw+GDzIZvLk6T351DMlm5jV
3+7kcboh3X3jTsS5tjanmy6UIqqXZw6enPpr/szvW+g2umYbtL+58+De7Iq2
/M1dLmR45LnDx6uX2we6zZjf7j6Uz7ZP9Qf4fnswja7v3DXug1TqUuNdS2p9
pxe6+lpfruMpwkqwfE8uX+hcbp8x/DMXfHEwlPhcH8447M7YG9+87cQXO9eo
Nf767E+f2Rhf4GHMf6506C9h4O/Ojf68xGKZ/V3ziuMMYpntckY/9i2WLf/r
Jwd/iZm+nCmc/DfIFP4S0b3L1PyCacNRdsIp509ODu4o3JY4dqot6l/u8r3R
N4NUu5zAjmP9qHLuXyZJsJPKy/6uqbz1epzICy4l8urN5zTef2Qa74P28OR3
Dg3/pETdbkouS5791zWVD+TTsuQXz6f9MhHlP2NybZSOCp79nBTaPo64PIm/
gLpclR275L/+S2bHPj415gX9OTf2U3Nj03sXK9FYXznc7SYbRb2r94D5gqz3
beJD1hKknqyNb4zstQ5U6PZZ4dA7UQ8nZnR7Cnd2SG/pywe3pbkdVB+X45t8
IMc3On/if3TS7pNr9L8cavR3q2O8wgxF5Z3eaNvwb3/rc6Sf/Mz/IQXY+TZr
l0XlFVk7ffrpUtypwObyX74COwu3FdhJ8TMrsD/2T51ncdIUYZvEedS49zWm
RWiCpoqSogpMnhtb2zosM1PXdRqVefy5RvuXrNEeKrQnehVKFv6cGm1fLTmZ
/rvXaPf9HorE/yNqtF0lpgDpz6vRHtXM/rwS7Z0C7a7I+hNLtHeuoalPL9He
LdDeKf3+iSXalyq0Rc3+q9doJ0Wvx/+NqrS7QX2u0v5vWaX90Qjm77UUEcbv
XYtQ/35ukTODe3+Rc5xdKnJ291wuGNs29d+/yPmjVeN/RJXzR0vjZ5c5p1mx
X2YptXtHmSVX3xQ5eW+ZpbOid9Q5q+331jl/0BTeV+d81c2X6tx2rern1DkP
0vjFFkdo7N+xznl42i9R5zya9c8rJD9lheTva4EfXel8Vdz6YKXzxweuX8ha
P7HS+Re01v/weuefECn/E6zJjLV7pDTvKHje0e691Rqn1B9b8fzJkeBTKp5H
mvXhNZ0rnO6//5rOFbHh71zxjKz/A1d1/CEw//WWdT6XPP+Hrp50GeE+ufv1
9qToH77czdsipNfLqT+MefxycUeWe0rsMsddvnjg/0MiWSd4rebVhVeFyV4C
Ysg/TGfhvz7zrwYeMx9M96n9S8f1j/WKMJnKpOuy3T549OoVt+1Yr47xIas7
bt9na/o3xbjEU5cYUTbDnLozwU4u5X5OupMNnU9wr6s7VNZNL9C9qF0AOuid
qTLk3mX1l3SAcbPqTnXzXetP/r/U8wPEtpmfuoaGxMTwnMPpPZq78Ic1DqDu
o7o8Eeg7teblzishticBXsDioa/+dKdxks43eOhO1KUJvUbgrEsmHvSZp/F7
KbEWd1J8fbpc2y73vHztXic2iXp8698AYrq34oI3N102qJ9n4WGXnj61G/d6
OlDtZOcQpSuffD7kmZTvXY/TUdVk+y7P/3U+nU2jf1pfnP9z9U839M//0tXD
iyK6765VN6Lr/vsDn9c+GTO8Ewek15qHfgnlqvWTvgM6FnUzOdNhv5Xe3Nu9
AfePQuFPlRPrgNSH9fpUGMTOT69duxZPf+V/PF0+j64NpsSf6Y1pdH1yY1pc
3zGC4a1DmgkzltCvfWbOdrnEcTZuMk4SqpWtuk97dT92ryM57uYv1XD/4Zuj
429m3z2e3f790z/c/c3Te7fLuAh+/HHSL6mPlG50Oplef3R64t4sNMRsvVdo
3vTvFptMvhm/f2d8Xr2Zn3UvLXP0ZohXLl+pFU4XBPFo/TtS/DntOl/d68bo
4M2pS6Cu9NKhri5epyLonR/9TXJWK3t+amqXEtUJt/3LHf1hYE13qViZM7tu
CUlnqYzeJOIa6g5J7DTbrdZO5t1JoN0yhJ0PFf17aGR0YSfcS+dOztfdGya6
d650uO0r34+velykqgK9z0Cjr6HEjGP0np+POqXTmWcPLA8m7qc0jPwYtsvT
Yt1V9/qJ4X3NOwdAerNzz+4OyRyCvVMTCMTJngLQDZyaS5F2Jx9fOl5z2VP7
g0mfMXhuzme373yzc023XrwID7p37WxPf8Ru91vFQe4csdl9H22b3AbM0/Fy
HOxdx9U6f6pLpA/+aNUtr5c30DvJO+F8he6tzXP7lX+3hAtJHssSVzoT4vmX
D87sT6O+7c7/nN3eAvUj/z71ybWu39en3z89LqNnfinqNZ6nkSZ4x+3nyq1r
9S8iGUbZ9UCLvWb99uzMblb+HUfdIHvbObw8L91yV7eUulhu36A6MY3yHXpl
qnwuirl8vtA6iz+TunuxbycVpwPdAz34NA6DLybjV23odfK9renmWgeiOMg4
NOPerOxPSu1UaejG5MX8TO+w9bpw+8NHsW50EuuTp/evb4d7Y0yU6v6V8ruH
t95+en1nYl97dN533p+zrdqSarV8yWeXZHqtcxnNhULtzrtQDvbyQs5zOFyi
d2vqVUrdQsHU3+Kcy3C+oRDKvYu/zNfm5Xz2+KU5W+oAaZ2cLz93MH1+Yfhl
Y/vp9IGfJ3YnUstLt/NF40+HRWbjCip/YPSWEa/706ndu2P3Mn8PTjqH1skI
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

-->

</rfc>
