<?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.6.26 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wussler-openpgp-pqc-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.0 -->
  <front>
    <title abbrev="PQC in OpenPGP">Post-Quantum Cryptography in OpenPGP</title>
    <seriesInfo name="Internet-Draft" value="draft-wussler-openpgp-pqc-01"/>
    <author initials="S." surname="Kousidis" fullname="Stavros Kousidis">
      <organization>BSI</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>stavros.kousidis@bsi.bund.de</email>
      </address>
    </author>
    <author initials="F." surname="Strenzke" fullname="Falko Strenzke">
      <organization>MTG AG</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>falko.strenzke@mtg.de</email>
      </address>
    </author>
    <author initials="A." surname="Wussler" fullname="Aron Wussler">
      <organization>Proton AG</organization>
      <address>
        <postal>
          <country>Switzerland</country>
        </postal>
        <email>aron@wussler.it</email>
      </address>
    </author>
    <date year="2023" month="March" day="25"/>
    <area>sec</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document defines a post-quantum public-key algorithm extension for the
OpenPGP protocol. Given the generally assumed threat of a cryptographically
relevant quantum computer, this extension provides a basis for long-term secure
OpenPGP signatures and ciphertexts. Specifically, it defines composite
public-key encryption based on CRYSTALS-Kyber, composite public-key signatures
based on CRYSTALS-Dilithium, both in combination with elliptic curve
cryptography, and SPHINCS+ as a standalone public key signature scheme.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-wussler-openpgp-pqc/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WG Working Group mailing list (<eref target="mailto:openpgp@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/openpgp/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/openpgp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/openpgp-pqc/draft-openpgp-pqc"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The OpenPGP protocol supports various traditional public-key algorithms based
on the factoring or discrete logarithm problem. As the security of algorithms
based on these mathematical problems is endangered by the advent of quantum
computers, there is a need to extend OpenPGP by algorithms that remain secure
in the presence of quantum computers.</t>
      <t>Such cryptographic algorithms are referred to as post-quantum cryptography.
The algorithms defined in this extension were chosen for standardization by the
National Institute of Standards and Technology (NIST) in mid 2022
<xref target="NISTIR-8413"/> as the result of the NIST Post-Quantum Cryptography
Standardization process initiated in 2016 <xref target="NIST-PQC"/>. Namely, these are
CRYSTALS-Kyber as a Key Encapsulation Mechanism (KEM), a KEM being a modern
building block for public-key encryption, and CRYSTALS-Dilithium as well as
SPHINCS+ as signature schemes.</t>
      <t>For the two CRYSTALS-* schemes, this document follows the conservative strategy
to deploy post-quantum in combination with traditional schemes such that the
security is retained even if all schemes but one in the combination are broken.
In contrast, the hashed-based signature scheme SPHINCS+ is considered to be
sufficiently well understood with respect to its security assumptions in order
to be used standalone. To this end, this document specifies the following new
set: SPHINCS+ standalone and CRYSTALS-* as composite with ECC-based KEM and
digital signature schemes. Here, the term "composite" indicates that any data
structure or algorithm pertaining to the
combination of the two components appears as single data structure or algorithm
from the protocol perspective.</t>
      <t>The document specifies the conventions for interoperability between compliant
OpenPGP implementations that make use of this extension and the newly defined
algorithms or algorithm combinations.</t>
      <section anchor="conventions-used-in-this-document">
        <name>Conventions used in this Document</name>
        <section anchor="terminology-for-multi-algorithm-schemes">
          <name>Terminology for Multi-Algorithm Schemes</name>
          <t>The terminology in this document is oriented towards the definitions in
<xref target="draft-driscoll-pqt-hybrid-terminology"/>. Specifically, the terms
"multi-algorithm", "composite" and "non-composite" are used in correspondence
with the definitions therein. The abbreviation "PQ" is used for post-quantum
schemes. To denote the combination of post-quantum and traditional schemes, the
abbreviation "PQ/T" is used. The short form "PQ(/T)" stands for PQ or PQ/T.</t>
        </section>
      </section>
      <section anchor="post-quantum-cryptography">
        <name>Post-Quantum Cryptography</name>
        <t>This section describes the individual post-quantum cryptographic schemes. All
schemes listed here are believed to provide security in the presence of a
cryptographically relevant quantum computer. However, the mathematical problems
on which the two CRYSTALS-* schemes and SPHINCS+ are based, are fundamentally
different, and accordingly the level of trust commonly placed in them as well
as their performance characteristics vary.</t>
        <t>[Note to the reader: This specification refers to the latest NIST submission
papers of each scheme as if it were a specification. This is a temporary
solution that is owed to the fact that currently no other specification is
available. The goal is to provide a sufficiently precise specification of the
algorithms already at the draft stage of this specification, so that it is
possible for implementers to create interoperable implementations. As soon as
standards by NIST or the IETF for the PQC schemes employed in this
specification are available, these will replace the references to the NIST
submission papers. Furthermore, we want to point out that, depending on
possible changes to the schemes standardized by NIST, this specification may be
updated substantially as soon as corresponding information becomes available.]</t>
        <section anchor="kyber-intro">
          <name>CRYSTALS-Kyber</name>
          <t>CRYSTALS-Kyber <xref target="KYBER-Subm"/> is based on the hardness of solving the
learning-with-errors problem in module lattices (MLWE). The scheme is believed
to provide security against cryptanalytic attacks by classical as well as
quantum computers. This specification defines CRYSTALS-Kyber only in composite
combination with ECC-based encryption schemes in order to provide a pre-quantum
security fallback.</t>
        </section>
        <section anchor="dilithium-intro">
          <name>CRYSTALS-Dilithium</name>
          <t>CRYSTALS-Dilithium, defined in <xref target="DILITHIUM-Subm"/>, is a signature scheme that,
like CRYSTALS-Kyber, is based on the hardness of solving lattice problems in
module lattices. Accordingly, this specification only defines
CRYSTALS-Dilithium in composite combination with ECC-based signature schemes.</t>
        </section>
        <section anchor="sphincs">
          <name>SPHINCS+</name>
          <t>SPHINCS+ <xref target="SPHINCS-Subm"/> is a stateless hash-based signature scheme. Its
security relies on the hardness of finding preimages for cryptographic hash
functions. This feature is generally considered to be a high security
guarantee. Therefore, this specification defines SPHINCS+ as a standalone
signature scheme.</t>
          <t>In deployments the performance characteristics of SPHINCS+ should be taken into
account. We refer to <xref target="performance-considerations"/> for a discussion of the
performance characteristics of this scheme.</t>
        </section>
      </section>
      <section anchor="elliptic-curve-cryptography">
        <name>Elliptic Curve Cryptography</name>
        <t>The ECC-based encryption is defined here as a KEM. This is in contrast to
<xref target="I-D.ietf-openpgp-crypto-refresh"/> where the ECC-based encryption is defined
as a public-key encryption scheme.</t>
        <t>All elliptic curves for the use in the composite combinations are taken from
<xref target="I-D.ietf-openpgp-crypto-refresh"/>. However, as explained in the following, in
the case of Curve25519 encoding changes are applied to the new composite
schemes.</t>
        <section anchor="curve25519-and-curve448">
          <name>Curve25519 and Curve448</name>
          <t>Curve25519 and Curve448 are defined in <xref target="RFC7748"/> for use in a Diffie-Hellman
key agreement scheme and defined in <xref target="RFC8032"/> for use in a digital signature
scheme. For Curve25519 this specification adapts the encoding of objects as
defined in <xref target="RFC7748"/> in contrast to <xref target="I-D.ietf-openpgp-crypto-refresh"/>.</t>
        </section>
        <section anchor="generic-prime-curves">
          <name>Generic Prime Curves</name>
          <t>For interoperability this extension offers CRYSTALS-* in composite combinations
with the NIST curves P-256, P-384 defined in <xref target="SP800-186"/> and the
Brainpool curves brainpoolP256r1, brainpoolP384r1 defined in <xref target="RFC5639"/>.</t>
        </section>
      </section>
      <section anchor="multi-algo-schemes">
        <name>Standalone and Multi-Algorithm Schemes</name>
        <t>This section provides a categorization of the new algorithms and their
combinations.</t>
        <section anchor="composite-multi-alg">
          <name>Standalone and Composite Multi-Algorithm Schemes</name>
          <t>This specification introduces new cryptographic schemes, which can be
categorized as follows:</t>
          <ul spacing="normal">
            <li>PQ/T multi-algorithm public-key encryption, namely a composite combination
of CRYSTALS-Kyber with an ECC-based KEM,</li>
            <li>PQ/T multi-algorithm digital signature, namely composite combinations of
CRYSTALS-Dilithium with ECC-based signature schemes,</li>
            <li>PQ digital signature, namely SPHINCS+ as a standalone cryptographic
algorithm.</li>
          </ul>
          <t>For each of the composite schemes, this specifications mandates that the
recipient has to successfully perform the cryptographic algorithms for each of
the component schemes used in a cryptrographic message, in order for the
message to be deciphered and considered as valid. This means that all component
signatures must be verified successfully in order to achieve a successful
verification of the composite signature. In the case of the composite
public-key decryption, each of the component KEM decapsulation operations must
succeed.</t>
        </section>
        <section anchor="non-composite-multi-alg">
          <name>Non-Composite Algorithm Combinations</name>
          <t>As the OpenPGP protocol <xref target="I-D.ietf-openpgp-crypto-refresh"/> allows for multiple
signatures to be applied to a single message, it is also possible to realize
non-composite combinations of signatures. Furthermore, multiple OpenPGP
signatures may be combined on the application layer. These latter two cases
realize non-composite combinations of signatures. <xref target="multiple-signatures"/>
specifies how implementations should handle the verification of such
combinations of signatures.</t>
          <t>Furthermore, the OpenPGP protocol also allows for parallel encryption to
different keys held by the same recipient. Accordingly, if the sender makes use
of this feature and sends an encrypted message with multiple PKESK packages for
different encryption keys held by the same recipient, a non-composite
multi-algorithm public-key encryption is realized where the recipient has to
decrypt only one of the PKESK packages in order to decrypt the message. See
<xref target="no-pq-t-parallel-encryption"/> for restrictions on parallel encryption
mandated by this specification.</t>
        </section>
      </section>
    </section>
    <section anchor="preliminaries">
      <name>Preliminaries</name>
      <t>This section provides some preliminaries for the definitions in the subsequent
sections.</t>
      <section anchor="elliptic-curves">
        <name>Elliptic curves</name>
        <section anchor="sec1-format">
          <name>SEC1 EC Point Wire Format</name>
          <t>Elliptic curve points of the generic prime curves are encoded using the SEC1
(uncompressed) format as the following octet string:</t>
          <artwork><![CDATA[
B = 04 || X || Y
]]></artwork>
          <t>where <tt>X</tt> and <tt>Y</tt> are coordinates of the elliptic curve point <tt>P = (X, Y)</tt>, and
each coordinate is encoded in the big-endian format and zero-padded to the
adjusted underlying field size. The adjusted underlying field size is the
underlying field size rounded up to the nearest 8-bit boundary, as noted in the
"Field size" column in <xref target="tab-ecdh-nist-artifacts"/>,
<xref target="tab-ecdh-brainpool-artifacts"/>, or <xref target="tab-ecdsa-artifacts"/>. This encoding is
compatible with the definition given in <xref target="SEC1"/>.</t>
        </section>
        <section anchor="measures-to-ensure-secure-implementations">
          <name>Measures to Ensure Secure Implementations</name>
          <t>The following paragraphs describe measures that ensure secure implementations
according to existing best practices and standards defining the operations of
Elliptic Curve Cryptography.</t>
          <t>Even though the zero point, also called the point at infinity, may occur as a
result of arithmetic operations on points of an elliptic curve, it MUST NOT
appear in any ECC data structure defined in this document.</t>
          <t>Furthermore, when performing the explicitly listed operations in
<xref target="x25519-kem"/>, <xref target="x448-kem"/> or <xref target="ecdh-kem"/> it is REQUIRED to follow the
specification and security advisory mandated from the relative elliptic curve specification.</t>
        </section>
      </section>
    </section>
    <section anchor="supported-public-key-algorithms">
      <name>Supported Public Key Algorithms</name>
      <t>This section specifies the composite Kyber + ECC and Dilithium + ECC schemes as
well as the standalone SPHINCS+ signature scheme. The composite schemes are
fully specified via their algorithm ID. The SPHINCS+ signature schemes are
fully specified by their algorithm ID and an additional parameter ID.</t>
      <section anchor="algorithm-specifications">
        <name>Algorithm Specifications</name>
        <t>For encryption, the following composite KEM schemes are specified:</t>
        <table anchor="kem-alg-specs">
          <name>KEM algorithm specifications</name>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Algorithm</th>
              <th align="left">Requirement</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">29</td>
              <td align="left">Kyber768  + X25519</td>
              <td align="left">MUST</td>
              <td align="left">
                <xref target="ecc-kyber"/></td>
            </tr>
            <tr>
              <td align="right">30</td>
              <td align="left">Kyber1024 + X448</td>
              <td align="left">SHOULD</td>
              <td align="left">
                <xref target="ecc-kyber"/></td>
            </tr>
            <tr>
              <td align="right">31</td>
              <td align="left">Kyber768  + ECDH-NIST-P-256</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-kyber"/></td>
            </tr>
            <tr>
              <td align="right">32</td>
              <td align="left">Kyber1024 + ECDH-NIST-P-384</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-kyber"/></td>
            </tr>
            <tr>
              <td align="right">33</td>
              <td align="left">Kyber768  + ECDH-brainpoolP256r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-kyber"/></td>
            </tr>
            <tr>
              <td align="right">34</td>
              <td align="left">Kyber1024 + ECDH-brainpoolP384r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-kyber"/></td>
            </tr>
          </tbody>
        </table>
        <t>For signatures, the following (composite) signature schemes are specified:</t>
        <table anchor="sig-alg-specs">
          <name>Signature algorithm specifications</name>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Algorithm</th>
              <th align="left">Requirement</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">35</td>
              <td align="left">Dilithium3 + Ed25519</td>
              <td align="left">MUST</td>
              <td align="left">
                <xref target="ecc-dilithium"/></td>
            </tr>
            <tr>
              <td align="right">36</td>
              <td align="left">Dilithium5 + Ed448</td>
              <td align="left">SHOULD</td>
              <td align="left">
                <xref target="ecc-dilithium"/></td>
            </tr>
            <tr>
              <td align="right">37</td>
              <td align="left">Dilithium3 + ECDSA-NIST-P-256</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-dilithium"/></td>
            </tr>
            <tr>
              <td align="right">38</td>
              <td align="left">Dilithium5 + ECDSA-NIST-P-384</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-dilithium"/></td>
            </tr>
            <tr>
              <td align="right">39</td>
              <td align="left">Dilithium3 + ECDSA-brainpoolP256r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-dilithium"/></td>
            </tr>
            <tr>
              <td align="right">40</td>
              <td align="left">Dilithium5 + ECDSA-brainpoolP384r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-dilithium"/></td>
            </tr>
            <tr>
              <td align="right">41</td>
              <td align="left">SPHINCS+-simple-SHA2</td>
              <td align="left">SHOULD</td>
              <td align="left">
                <xref target="sphincs"/></td>
            </tr>
            <tr>
              <td align="right">42</td>
              <td align="left">SPHINCS+-simple-SHAKE</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="sphincs"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="parameter-specification">
        <name>Parameter Specification</name>
        <section anchor="sphincs-simple-sha2">
          <name>SPHINCS+-simple-SHA2</name>
          <t>For the SPHINCS+-simple-SHA2 signature algorithm from <xref target="sig-alg-specs"/>, the
following parameters are specified:</t>
          <table anchor="sphincs-param-sha2">
            <name>SPHINCS+-simple-SHA2 security parameters</name>
            <thead>
              <tr>
                <th align="right">Parameter ID</th>
                <th align="left">Parameter</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">1</td>
                <td align="left">SPHINCS+-simple-SHA2-128s</td>
              </tr>
              <tr>
                <td align="right">2</td>
                <td align="left">SPHINCS+-simple-SHA2-128f</td>
              </tr>
              <tr>
                <td align="right">3</td>
                <td align="left">SPHINCS+-simple-SHA2-192s</td>
              </tr>
              <tr>
                <td align="right">4</td>
                <td align="left">SPHINCS+-simple-SHA2-192f</td>
              </tr>
              <tr>
                <td align="right">5</td>
                <td align="left">SPHINCS+-simple-SHA2-256s</td>
              </tr>
              <tr>
                <td align="right">6</td>
                <td align="left">SPHINCS+-simple-SHA2-256f</td>
              </tr>
            </tbody>
          </table>
          <t>All security parameters inherit the requirement of SPHINCS+-simple-SHA2 from
<xref target="sig-alg-specs"/>. That is, implementations SHOULD implement the parameters
specified in <xref target="sphincs-param-sha2"/>. The values <tt>0x00</tt> and <tt>0xFF</tt> are reserved
for future extensions.</t>
        </section>
        <section anchor="sphincs-simple-shake">
          <name>SPHINCS+-simple-SHAKE</name>
          <t>For the SPHINCS+-simple-SHAKE signature algorithm from <xref target="sig-alg-specs"/>, the
following parameters are specified:</t>
          <table anchor="sphincs-param-shake">
            <name>SPHINCS+-simple-SHAKE security parameters</name>
            <thead>
              <tr>
                <th align="right">Parameter ID</th>
                <th align="left">Parameter</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">1</td>
                <td align="left">SPHINCS+-simple-SHAKE-128s</td>
              </tr>
              <tr>
                <td align="right">2</td>
                <td align="left">SPHINCS+-simple-SHAKE-128f</td>
              </tr>
              <tr>
                <td align="right">3</td>
                <td align="left">SPHINCS+-simple-SHAKE-192s</td>
              </tr>
              <tr>
                <td align="right">4</td>
                <td align="left">SPHINCS+-simple-SHAKE-192f</td>
              </tr>
              <tr>
                <td align="right">5</td>
                <td align="left">SPHINCS+-simple-SHAKE-256s</td>
              </tr>
              <tr>
                <td align="right">6</td>
                <td align="left">SPHINCS+-simple-SHAKE-256f</td>
              </tr>
            </tbody>
          </table>
          <t>All security parameters inherit the requirement of SPHINCS+-simple-SHAKE from
<xref target="sig-alg-specs"/>. That is, implementations MAY implement the parameters
specified in <xref target="sphincs-param-shake"/>. The values <tt>0x00</tt> and <tt>0xFF</tt> are reserved
for future extensions.</t>
        </section>
      </section>
    </section>
    <section anchor="algorithm-combinations">
      <name>Algorithm Combinations</name>
      <section anchor="composite-kems">
        <name>Composite KEMs</name>
        <t>Kyber + ECC public-key encryption is meant to involve both the Kyber KEM and an
ECC-based KEM in an a priori non-separable manner. This is achieved via KEM
combination, i.e. both key encapsulations/decapsulations are performed in
parallel, and the resulting key shares are fed into a key combiner to produce a
single shared secret for message encryption.</t>
      </section>
      <section anchor="no-pq-t-parallel-encryption">
        <name>Parallel Public-Key Encryption</name>
        <t>As explained in <xref target="non-composite-multi-alg"/>, the OpenPGP protocol inherently
supports parallel encryption to different keys of the same recipient.
Implementations MUST NOT encrypt a message to a purely traditional public-key
encryption key of a recipient if it is encrypted to a PQ/T key of the same
recipient.</t>
      </section>
      <section anchor="composite-signatures">
        <name>Composite Signatures</name>
        <t>Dilithium + ECC signatures are meant to contain both the Dilithium and the ECC
signature data, and an implementation MUST validate both algorithms to state
that a signature is valid.</t>
      </section>
      <section anchor="multiple-signatures">
        <name>Multiple Signatures</name>
        <t>The OpenPGP message format allows multiple signatures of a message, i.e. the
attachment of multiple signature packets.</t>
        <t>An implementation MAY sign a message with a traditional key and a PQ(/T) key
from the same sender. This ensures backwards compatibility due to
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.5, since a legacy
implementation without PQ(/T) support can fall back on the traditional
signature.</t>
        <t>Newer implementations with PQ(/T) support MAY ignore the traditional
signature(s) during validation.</t>
        <t>Implementations SHOULD consider the message correctly signed if at least one of
the non-ignored signatures validates successfully.</t>
        <t>[Note to the reader: The last requirement, that one valid signature is
sufficient to identify a message as correctly signed, is an interpretation of
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.5.]</t>
      </section>
    </section>
    <section anchor="composite-kem-schemes">
      <name>Composite KEM schemes</name>
      <section anchor="building-blocks">
        <name>Building Blocks</name>
        <section anchor="ecc-kem">
          <name>ECC-Based KEMs</name>
          <t>In this section we define the encryption, decryption, and data formats for the
ECDH component of the composite algorithms.</t>
          <t><xref target="tab-ecdh-cfrg-artifacts"/>, <xref target="tab-ecdh-nist-artifacts"/>, and
<xref target="tab-ecdh-brainpool-artifacts"/> describe the ECC-KEM parameters and artifact
lengths. The artefacts in <xref target="tab-ecdh-cfrg-artifacts"/> follow the encodings
described in <xref target="RFC7748"/>.</t>
          <table anchor="tab-ecdh-cfrg-artifacts">
            <name>Montgomery curves parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">X25519</th>
                <th align="left">X448</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">29</td>
                <td align="left">30</td>
              </tr>
              <tr>
                <td align="left">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">56 octets</td>
              </tr>
              <tr>
                <td align="left">ECC-KEM</td>
                <td align="left">x25519Kem (<xref target="x25519-kem"/>)</td>
                <td align="left">x448Kem (<xref target="x448-kem"/>)</td>
              </tr>
              <tr>
                <td align="left">ECDH public key</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">ECDH secret key</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">ECDH ephemeral</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">ECDH share</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">Key share</td>
                <td align="left">32 octets</td>
                <td align="left">64 octets</td>
              </tr>
              <tr>
                <td align="left">Hash</td>
                <td align="left">SHA3-256</td>
                <td align="left">SHA3-512</td>
              </tr>
            </tbody>
          </table>
          <table anchor="tab-ecdh-nist-artifacts">
            <name>NIST curves parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">NIST P-256</th>
                <th align="left">NIST P-384</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">31</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="left">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="left">ECC-KEM</td>
                <td align="left">ecdhKem (<xref target="ecdh-kem"/>)</td>
                <td align="left">ecdhKem (<xref target="ecdh-kem"/>)</td>
              </tr>
              <tr>
                <td align="left">ECDH public key</td>
                <td align="left">65 octets of SEC1-encoded public point</td>
                <td align="left">97 octets of SEC1-encoded public point</td>
              </tr>
              <tr>
                <td align="left">ECDH secret key</td>
                <td align="left">32 octets big-endian encoded secret scalar</td>
                <td align="left">48 octets big-endian encoded secret scalar</td>
              </tr>
              <tr>
                <td align="left">ECDH ephemeral</td>
                <td align="left">65 octets of SEC1-encoded ephemeral point</td>
                <td align="left">97 octets of SEC1-encoded ephemeral point</td>
              </tr>
              <tr>
                <td align="left">ECDH share</td>
                <td align="left">65 octets of SEC1-encoded shared point</td>
                <td align="left">97 octets of SEC1-encoded shared point</td>
              </tr>
              <tr>
                <td align="left">Key share</td>
                <td align="left">32 octets</td>
                <td align="left">64 octets</td>
              </tr>
              <tr>
                <td align="left">Hash</td>
                <td align="left">SHA3-256</td>
                <td align="left">SHA3-512</td>
              </tr>
            </tbody>
          </table>
          <table anchor="tab-ecdh-brainpool-artifacts">
            <name>Brainpool curves parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">brainpoolP256r1</th>
                <th align="left">brainpoolP384r1</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">33</td>
                <td align="left">34</td>
              </tr>
              <tr>
                <td align="left">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="left">ECC-KEM</td>
                <td align="left">ecdhKem (<xref target="ecdh-kem"/>)</td>
                <td align="left">ecdhKem (<xref target="ecdh-kem"/>)</td>
              </tr>
              <tr>
                <td align="left">ECDH public key</td>
                <td align="left">65 octets of SEC1-encoded public point</td>
                <td align="left">97 octets of SEC1-encoded public point</td>
              </tr>
              <tr>
                <td align="left">ECDH secret key</td>
                <td align="left">32 octets big-endian encoded secret scalar</td>
                <td align="left">48 octets big-endian encoded secret scalar</td>
              </tr>
              <tr>
                <td align="left">ECDH ephemeral</td>
                <td align="left">65 octets of SEC1-encoded ephemeral point</td>
                <td align="left">97 octets of SEC1-encoded ephemeral point</td>
              </tr>
              <tr>
                <td align="left">ECDH share</td>
                <td align="left">65 octets of SEC1-encoded shared point</td>
                <td align="left">97 octets of SEC1-encoded shared point</td>
              </tr>
              <tr>
                <td align="left">Key share</td>
                <td align="left">32 octets</td>
                <td align="left">64 octets</td>
              </tr>
              <tr>
                <td align="left">Hash</td>
                <td align="left">SHA3-256</td>
                <td align="left">SHA3-512</td>
              </tr>
            </tbody>
          </table>
          <t>The SEC1 format for point encoding is defined in <xref target="sec1-format"/>.</t>
          <t>The various procedures to perform the operations of an ECC-based KEM are
defined in the following subsections. Specifically, each of these subsections
defines the instances of the following operations:</t>
          <artwork><![CDATA[
(eccCipherText, eccKeyShare) <- eccKem.encap(eccPublicKey)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(eccKeyShare) <- eccKem.decap(eccPrivateKey, eccCipherText)
]]></artwork>
          <t>The placeholder <tt>eccKem</tt> has to be replaced with the specific ECC-KEM from the
row "ECC-KEM" of <xref target="tab-ecdh-cfrg-artifacts"/>, <xref target="tab-ecdh-nist-artifacts"/>, and
<xref target="tab-ecdh-brainpool-artifacts"/>.</t>
          <section anchor="x25519-kem">
            <name>X25519-KEM</name>
            <t>The encapsulation and decapsulation operations of <tt>x25519kem</tt> are described
using the function <tt>X25519()</tt> and encodings defined in <xref target="RFC7748"/>. The
<tt>eccPrivateKey</tt> is denoted as <tt>r</tt>, the <tt>eccPublicKey</tt> as <tt>R</tt>, they are subject
to the equation <tt>R = X25519(r, U(P))</tt>. Here, <tt>U(P)</tt> denotes the u-coordinate of
the base point of Curve25519.</t>
            <t>The operation <tt>x25519Kem.encap()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>Generate an ephemeral key pair {<tt>v</tt>, <tt>V</tt>} via <tt>V = X25519(v,U(P))</tt></li>
              <li>Compute the shared coordinate <tt>X = X25519(v, R)</tt> where <tt>R</tt> is the public key
<tt>eccPublicKey</tt></li>
              <li>Set the output <tt>eccCipherText</tt> to <tt>V</tt></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>SHA3-256(X || eccCipherText)</tt></li>
            </ol>
            <t>The operation <tt>x25519Kem.decap()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>Compute the shared coordinate <tt>X = X25519(r, V)</tt>, where <tt>r</tt> is the
<tt>eccPrivateKey</tt> and <tt>V</tt> is the <tt>eccCipherText</tt></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>SHA3-256(X || eccCipherText)</tt></li>
            </ol>
          </section>
          <section anchor="x448-kem">
            <name>X448-KEM</name>
            <t>The encapsulation and decapsulation operations of <tt>x448kem</tt> are described using
the function <tt>X448()</tt> and encodings defined in <xref target="RFC7748"/>. The <tt>eccPrivateKey</tt>
is denoted as <tt>r</tt>, the <tt>eccPublicKey</tt> as <tt>R</tt>, they are subject to the equation
<tt>R = X25519(r, U(P))</tt>. Here, <tt>U(P)</tt> denotes the u-coordinate of the base point
of Curve448.</t>
            <t>The operation <tt>x448.encap()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>Generate an ephemeral key pair {<tt>v</tt>, <tt>V</tt>} via <tt>V = X448(v,U(P))</tt></li>
              <li>Compute the shared coordinate <tt>X = X448(v, R)</tt> where <tt>R</tt> is the public key
<tt>eccPublicKey</tt></li>
              <li>Set the output <tt>eccCipherText</tt> to <tt>V</tt></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>SHA3-512(X || eccCipherText)</tt></li>
            </ol>
            <t>The operation <tt>x448Kem.decap()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>Compute the shared coordinate <tt>X = X448(r, V)</tt>, where <tt>r</tt> is the
<tt>eccPrivateKey</tt> and <tt>V</tt> is the <tt>eccCipherText</tt></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>SHA3-512(X || eccCipherText)</tt></li>
            </ol>
          </section>
          <section anchor="ecdh-kem">
            <name>ECDH-KEM</name>
            <t>The operation <tt>ecdhKem.encap()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>Generate an ephemeral key pair {<tt>v</tt>, <tt>V=vG</tt>} as defined in
<xref target="SP800-186"/> or <xref target="RFC5639"/></li>
              <li>Compute the shared point <tt>S = vR</tt>, where <tt>R</tt> is the component public key
<tt>eccPublicKey</tt>, according to <xref target="SP800-186"/> or <xref target="RFC5639"/></li>
              <li>Extract the <tt>X</tt> coordinate from the SEC1 encoded point <tt>S = 04 || X || Y</tt>
as defined in section <xref target="sec1-format"/></li>
              <li>Set the output <tt>eccCipherText</tt> to the SEC1 encoding of <tt>V</tt></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>Hash(X || eccCipherText)</tt>, with <tt>Hash</tt>
chosen according to <xref target="tab-ecdh-nist-artifacts"/> or
<xref target="tab-ecdh-brainpool-artifacts"/></li>
            </ol>
            <t>The operation <tt>ecdhKem.decap()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>Compute the shared Point <tt>S</tt> as <tt>rV</tt>, where <tt>r</tt> is the <tt>eccPrivateKey</tt> and
<tt>V</tt> is the <tt>eccCipherText</tt>, according to <xref target="SP800-186"/> or <xref target="RFC5639"/></li>
              <li>Extract the <tt>X</tt> coordinate from the SEC1 encoded point <tt>S = 04 || X || Y</tt>
as defined in section <xref target="sec1-format"/></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>Hash(X || eccCipherText)</tt>, with <tt>Hash</tt>
chosen according to <xref target="tab-ecdh-nist-artifacts"/> or
<xref target="tab-ecdh-brainpool-artifacts"/></li>
            </ol>
          </section>
        </section>
        <section anchor="kyber-kem">
          <name>Kyber-KEM</name>
          <t>Kyber-KEM features the following operations:</t>
          <artwork><![CDATA[
(kyberCipherText, kyberKeyShare) <- kyberKem.encap(kyberPublicKey)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(kyberKeyShare) <- kyberKem.decap(kyberCipherText, kyberPrivateKey)
]]></artwork>
          <t>The above are the operations Kyber.CCAKEM.Enc() and Kyber.CCAKEM.Dec() defined
in <xref target="KYBER-Subm"/>.</t>
          <t>Kyber-KEM has the parameterization with the corresponding artifact lengths in
octets as given in <xref target="tab-kyber-artifacts"/>. All artifacts are encoded as
defined in <xref target="KYBER-Subm"/>.</t>
          <table anchor="tab-kyber-artifacts">
            <name>Kyber-KEM parameters artifact lengths in octets</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Kyber-KEM</th>
                <th align="left">Public key</th>
                <th align="left">Secret key</th>
                <th align="left">Ciphertext</th>
                <th align="left">Key share</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">29, 31, 33</td>
                <td align="left">kyberKem768</td>
                <td align="left">1184</td>
                <td align="left">2400</td>
                <td align="left">1088</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="right">30, 32, 34</td>
                <td align="left">kyberKem1024</td>
                <td align="left">1568</td>
                <td align="left">3186</td>
                <td align="left">1568</td>
                <td align="left">32</td>
              </tr>
            </tbody>
          </table>
          <t>The placeholder <tt>kyberKem</tt> has to be replaced with the specific Kyber-KEM from
the column "Kyber-KEM" of <xref target="tab-kyber-artifacts"/>.</t>
          <t>The procedure to perform <tt>kyberKem.encap()</tt> is as follows:</t>
          <ol spacing="normal" type="1"><li>Extract the component public key <tt>kyberPublicKey</tt> that is part of the
recipient's composite public key</li>
            <li>Invoke <tt>(kyberCipherText, keyShare) &lt;- kyberKem.encap(kyberPublicKey)</tt></li>
            <li>Set <tt>kyberCipherText</tt> as the Kyber ciphertext</li>
            <li>Set <tt>keyShare</tt> as the Kyber symmetric key share</li>
          </ol>
          <t>The procedure to perform <tt>kyberKem.decap()</tt> is as follows:</t>
          <ol spacing="normal" type="1"><li>Invoke <tt>keyShare &lt;-  kyberKem.decap(kyberCipherText, kyberPrivateKey)</tt></li>
            <li>Set <tt>keyShare</tt> as the Kyber symmetric key</li>
          </ol>
        </section>
      </section>
      <section anchor="ecc-kyber">
        <name>Composite Encryption Schemes with Kyber</name>
        <t><xref target="kem-alg-specs"/> specifies the following Kyber + ECC composite public-key
encryption schemes:</t>
        <table anchor="tab-kyber-ecc-composite">
          <name>Kyber-ECC-composite Schemes</name>
          <thead>
            <tr>
              <th align="right">Algorithm ID reference</th>
              <th align="left">Kyber-KEM</th>
              <th align="left">ECC-KEM</th>
              <th align="left">ECDH-KEM curve</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">29</td>
              <td align="left">kyberKem768</td>
              <td align="left">x25519Kem</td>
              <td align="left">X25519</td>
            </tr>
            <tr>
              <td align="right">30</td>
              <td align="left">kyberKem1024</td>
              <td align="left">x448Kem</td>
              <td align="left">X448</td>
            </tr>
            <tr>
              <td align="right">31</td>
              <td align="left">kyberKem768</td>
              <td align="left">ecdhKem</td>
              <td align="left">NIST P-256</td>
            </tr>
            <tr>
              <td align="right">32</td>
              <td align="left">kyberKem1024</td>
              <td align="left">ecdhKem</td>
              <td align="left">NIST P-384</td>
            </tr>
            <tr>
              <td align="right">33</td>
              <td align="left">kyberKem768</td>
              <td align="left">ecdhKem</td>
              <td align="left">brainpoolP256r1</td>
            </tr>
            <tr>
              <td align="right">34</td>
              <td align="left">kyberKem1024</td>
              <td align="left">ecdhKem</td>
              <td align="left">brainpoolP384r1</td>
            </tr>
          </tbody>
        </table>
        <t>The Kyber + ECC composite public-key encryption schemes are built according to
the following principal design:</t>
        <ul spacing="normal">
          <li>The Kyber-KEM encapsulation algorithm is invoked to create a Kyber
ciphertext together with a Kyber symmetric key share.</li>
          <li>The encapsulation algorithm of an ECC-based KEM, namely one out of
X25519-KEM, X448-KEM, or ECDH-KEM is invoked to create an ECC ciphertext
together with an ECC symmetric key share.</li>
          <li>A Key-Encryption-Key (KEK) is computed as the output of a key combiner that
receives as input both of the above created symmetric key shares and the
protocol binding information.</li>
          <li>The session key for content encryption is then wrapped as described in
<xref target="RFC3394"/> using AES-256 as algorithm and the KEK as key.</li>
          <li>The v6 PKESK package's algorithm specific parts are made up of the Kyber
ciphertext, the ECC ciphertext, and the wrapped session key</li>
        </ul>
        <section anchor="kem-fixed-info">
          <name>Fixed information</name>
          <t>For the composite KEM schemes defined in <xref target="kem-alg-specs"/> the following
procedure, justified in <xref target="sec-fixed-info"/>, MUST be used to derive a string to
use as binding between the KEK and the communication parties.</t>
          <artwork><![CDATA[
//   Input:
//   algID     - the algorithm ID encoded as octet
//   publicKey - the recipient's encryption sub-key packet
//               serialized as octet string

fixedInfo = algID || SHA3-256(publicKey)
]]></artwork>
          <t>SHA3-256 MUST be used to hash the <tt>publicKey</tt> of the recipient.</t>
        </section>
        <section anchor="kem-key-combiner">
          <name>Key combiner</name>
          <t>For the composite KEM schemes defined in <xref target="kem-alg-specs"/> the following
procedure MUST be used to compute the KEK that wraps a session key. The
construction is a one-step key derivation function compliant to <xref target="SP800-56C"/>
Section 4, based on KMAC256 <xref target="SP800-185"/>. It is given by the following
algorithm.</t>
          <artwork><![CDATA[
//   multiKeyCombine(eccKeyShare, eccCipherText,
//                   kyberKeyShare, kyberCipherText,
//                   fixedInfo, oBits)
//
//   Input:
//   eccKeyShare     - the ECC key share encoded as an octet string
//   eccCipherText   - the ECC ciphertext encoded as an octet string
//   kyberKeyShare   - the Kyber key share encoded as an octet string
//   kyberCipherText - the Kyber ciphertext encoded as an octet string
//   fixedInfo       - the fixed information octet string
//   oBits           - the size of the output keying material in bits
//
//   Constants:
//   domSeparation       - the UTF-8 encoding of the string
//                         "OpenPGPCompositeKeyDerivationFunction"
//   counter             - the fixed 4 byte value 0x00000001
//   customizationString - the UTF-8 encoding of the string "KDF"

eccKemData = eccKeyShare || eccCipherText
kyberKemData = kyberKeyShare || kyberCipherText
encData = counter || eccKemData || kyberKemData || fixedInfo

MB = KMAC256(domSeparation, encData, oBits, customizationString)
]]></artwork>
          <t>Note that the values <tt>eccKeyShare</tt> defined in <xref target="ecc-kem"/> and <tt>kyberKeyShare</tt>
defined in <xref target="kyber-kem"/> already use the relative ciphertext in the
derivation. The ciphertext is by design included again in the key combiner to
provide a robust security proof.</t>
          <t>The value of <tt>domSeparation</tt> is the UTF-8 encoding of the string
"OpenPGPCompositeKeyDerivationFunction" and MUST be the following octet sequence:</t>
          <artwork><![CDATA[
domSeparation := 4F 70 65 6E 50 47 50 43 6F 6D 70 6F 73 69 74 65
                 4B 65 79 44 65 72 69 76 61 74 69 6F 6E 46 75 6E
                 63 74 69 6F 6E
]]></artwork>
          <t>The value of <tt>counter</tt> MUST be set to the following octet sequence:</t>
          <artwork><![CDATA[
counter :=  00 00 00 01
]]></artwork>
          <t>The value of <tt>fixedInfo</tt> MUST be set according to <xref target="kem-fixed-info"/>.</t>
          <t>The value of <tt>customizationString</tt> is the UTF-8 encoding of the string "KDF"
and MUST be set to the following octet sequence:</t>
          <artwork><![CDATA[
customizationString := 4B 44 46
]]></artwork>
        </section>
        <section anchor="ecc-kyber-generation">
          <name>Key generation procedure</name>
          <t>The implementation MUST independently generate the Kyber and the ECC component
keys. Kyber key generation follows the specification <xref target="KYBER-Subm"/> and the
artifacts are encoded as fixed-length octet strings. For ECC this is done
following the relative specification in <xref target="RFC7748"/>, <xref target="SP800-186"/>, or
<xref target="RFC5639"/>, and encoding the outputs as fixed-length octet strings in the
format specified in table <xref target="tab-ecdh-cfrg-artifacts"/>,
<xref target="tab-ecdh-nist-artifacts"/>, or <xref target="tab-ecdh-brainpool-artifacts"/>.</t>
        </section>
        <section anchor="ecc-kyber-encryption">
          <name>Encryption procedure</name>
          <t>The procedure to perform public-key encryption with a Kyber + ECC composite
scheme is as follows:</t>
          <ol spacing="normal" type="1"><li>Take the recipient's authenticated public-key packet <tt>pkComposite</tt> and
<tt>sessionKey</tt> as input</li>
            <li>Parse the algorithm ID from <tt>pkComposite</tt></li>
            <li>Extract the <tt>eccPublicKey</tt> and <tt>kyberPublicKey</tt> component from the
algorithm specific data encoded in <tt>pkComposite</tt> with the format specified
in <xref target="kyber-ecc-key"/>.</li>
            <li>Instantiate the ECC-KEM <tt>eccKem.encap()</tt> and the Kyber-KEM
<tt>kyberKem.encap()</tt> depending on the algorithm ID according to
<xref target="tab-kyber-ecc-composite"/></li>
            <li>Compute <tt>(eccCipherText, eccKeyShare) := eccKem.encap(eccPublicKey)</tt></li>
            <li>Compute <tt>(kyberCipherText, kyberKeyShare) :=
kyberKem.encap(kyberPublicKey)</tt></li>
            <li>Compute <tt>fixedInfo</tt> as specified in <xref target="kem-fixed-info"/></li>
            <li>Compute <tt>KEK := multiKeyCombine(eccKeyShare, eccCipherText, kyberKeyShare, kyberCipherText, fixedInfo, oBits=256)</tt> as
defined in <xref target="kem-key-combiner"/></li>
            <li>Compute <tt>C := AESKeyWrap(KEK, sessionKey)</tt> with AES-256 as per <xref target="RFC3394"/>
that includes a 64 bit integrity check</li>
            <li>Output <tt>eccCipherText || kyberCipherText || len(C) || C</tt> as specified in
<xref target="ecc-kyber-pkesk"/></li>
          </ol>
        </section>
        <section anchor="decryption-procedure">
          <name>Decryption procedure</name>
          <t>The procedure to perform public-key decryption with a Kyber + ECC composite
scheme is as follows:</t>
          <ol spacing="normal" type="1"><li>Take the matching PKESK and own secret key packet as input</li>
            <li>From the PKESK extract the algorithm ID and the <tt>encryptedKey</tt></li>
            <li>Check that the own and the extracted algorithm ID match</li>
            <li>Parse the <tt>eccSecretKey</tt> and <tt>kyberSecretKey</tt> from the algorithm specific
data of the own secret key encoded in the format specified in
<xref target="kyber-ecc-key"/></li>
            <li>Instantiate the ECC-KEM <tt>eccKem.decap()</tt> and the Kyber-KEM
<tt>kyberKem.decap()</tt> depending on the algorithm ID according to
<xref target="tab-kyber-ecc-composite"/></li>
            <li>Parse <tt>eccCipherText</tt>, <tt>kyberCipherText</tt>, and <tt>C</tt> from <tt>encryptedKey</tt>
encoded as <tt>eccCipherText || kyberCipherText || len(C) || C</tt> as specified
in <xref target="ecc-kyber-pkesk"/></li>
            <li>Compute <tt>(eccKeyShare) := eccKem.decap(eccCipherText, eccPrivateKey)</tt></li>
            <li>Compute <tt>(kyberKeyShare) := kyberKem.decap(kyberCipherText,
kyberPrivateKey)</tt></li>
            <li>Compute <tt>fixedInfo</tt> as specified in <xref target="kem-fixed-info"/></li>
            <li>Compute <tt>KEK := multiKeyCombine(eccKeyShare, eccCipherText, kyberKeyShare, kyberCipherText, fixedInfo, oBits=256)</tt>
as defined in <xref target="kem-key-combiner"/></li>
            <li>Compute <tt>sessionKey := AESKeyUnwrap(KEK, C)</tt>  with AES-256 as per
<xref target="RFC3394"/>, aborting if the 64 bit integrity check fails</li>
            <li>Output <tt>sessionKey</tt></li>
          </ol>
        </section>
      </section>
      <section anchor="packet-specifications">
        <name>Packet specifications</name>
        <section anchor="ecc-kyber-pkesk">
          <name>Public-Key Encrypted Session Key Packets (Tag 1)</name>
          <t>The composite Kyber algorithms MUST be used only with v6 PKESK, as defined in
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.1.2.</t>
          <t>The algorithm-specific v6 PKESK parameters consists of:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing an ECC ephemeral public key in the
format associated with the curve as specified in <xref target="ecc-kem"/>.</li>
            <li>A fixed-length octet string of the Kyber ciphertext, whose length depends on
the algorithm ID as specified in <xref target="tab-kyber-artifacts"/>.</li>
            <li>
              <t>A variable-length field containing the symmetric key:  </t>
              <ul spacing="normal">
                <li>A one-octet size of the following field;</li>
                <li>Octet string of the wrapped symmetric key as described in
<xref target="ecc-kyber-encryption"/>.</li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="kyber-ecc-key">
          <name>Key Material Packets</name>
          <t>The algorithm-specific public key is this series of values:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing an EC point public key, in the
point format associated with the curve specified in <xref target="ecc-kem"/>.</li>
            <li>A fixed-length octet string containing the Kyber public key, whose length
depends on the algorithm ID as specified in <xref target="tab-kyber-artifacts"/>.</li>
          </ul>
          <t>The algorithm-specific secret key is these two values:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string of the encoded secret scalar, whose encoding and
length depend on the algorithm ID as specified in <xref target="ecc-kem"/>.</li>
            <li>A fixed-length octet string containing the Kyber secret key, whose length
depends on the algorithm ID as specified in <xref target="tab-kyber-artifacts"/>.</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="composite-signature-schemes">
      <name>Composite Signature Schemes</name>
      <section anchor="building-blocks-1">
        <name>Building blocks</name>
        <section anchor="eddsa-signature">
          <name>EdDSA-Based signatures</name>
          <t>To sign and verify with EdDSA the following operations are defined:</t>
          <artwork><![CDATA[
(eddsaSignature) <- eddsa.sign(eddsaPrivateKey, dataDigest)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(verified) <- eddsa.verify(eddsaPublicKey, eddsaSignature, dataDigest)
]]></artwork>
          <t>The public and private keys, as well as the signature MUST be encoded according
to <xref target="RFC8032"/> as fixed-length octet strings. The following table describes the
EdDSA parameters and artifact lengths:</t>
          <table anchor="tab-eddsa-artifacts">
            <name>EdDSA parameters and artifact lengths in octets</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Curve</th>
                <th align="left">Field size</th>
                <th align="left">Public key</th>
                <th align="left">Secret key</th>
                <th align="left">Signature</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">35</td>
                <td align="left">Ed25519</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">64</td>
              </tr>
              <tr>
                <td align="right">36</td>
                <td align="left">Ed448</td>
                <td align="left">57</td>
                <td align="left">57</td>
                <td align="left">57</td>
                <td align="left">114</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="ecdsa-signature">
          <name>ECDSA-Based signatures</name>
          <t>To sign and verify with ECDSA the following operations are defined:</t>
          <artwork><![CDATA[
(ecdsaSignatureR, ecdsaSignatureS) <- ecdsa.sign(ecdsaPrivateKey,
                                                 dataDigest)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(verified) <- ecdsa.verify(ecdsaPublicKey, ecdsaSignatureR,
                           ecdsaSignatureS, dataDigest)
]]></artwork>
          <t>The public keys MUST be encoded in SEC1 format as defined in section
<xref target="sec1-format"/>. The secret key, as well as both values <tt>R</tt> and <tt>S</tt> of the
signature MUST each be encoded as a big-endian integer in a fixed-length octet
string of the specified size.</t>
          <t>The following table describes the ECDSA parameters and artifact lengths:</t>
          <table anchor="tab-ecdsa-artifacts">
            <name>ECDSA parameters and artifact lengths in octets</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Curve</th>
                <th align="left">Field size</th>
                <th align="left">Public key</th>
                <th align="left">Secret key</th>
                <th align="left">Signature value R</th>
                <th align="left">Signature value S</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">37</td>
                <td align="left">NIST P-256</td>
                <td align="left">32</td>
                <td align="left">65</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="right">38</td>
                <td align="left">NIST P-384</td>
                <td align="left">48</td>
                <td align="left">97</td>
                <td align="left">48</td>
                <td align="left">48</td>
                <td align="left">48</td>
              </tr>
              <tr>
                <td align="right">39</td>
                <td align="left">brainpoolP256r1</td>
                <td align="left">32</td>
                <td align="left">65</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="right">40</td>
                <td align="left">brainpoolP384r1</td>
                <td align="left">48</td>
                <td align="left">97</td>
                <td align="left">48</td>
                <td align="left">48</td>
                <td align="left">48</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="dilithium-signature">
          <name>Dilithium signatures</name>
          <t>The procedure for Dilithium signature generation is the function <tt>Sign(sk, M)</tt>
given in Figure 4 in <xref target="DILITHIUM-Subm"/>, where <tt>sk</tt> is the Dilithium private key
and <tt>M</tt> is the data to be signed. OpenPGP does not use the optional randomized
signing given as a variant in the definition of this function, i.e. <tt>rho' :=
H(K || mu)</tt> is used. The signing function returns the Dilithium signature. That
is, to sign with Dilithium the following operation is defined:</t>
          <artwork><![CDATA[
(dilithiumSignature) <- dilithium.sign(dilithiumPrivateKey,
                                       dataDigest)
]]></artwork>
          <t>The procedure for Dilithium signature verification is the function <tt>Verify(pk,
M, sigma)</tt> given in Figure 4 in <xref target="DILITHIUM-Subm"/>, where <tt>pk</tt> is the Dilithium
public key, <tt>M</tt> is the data to be signed and <tt>sigma</tt> is the Dilithium
signature. That is, to verify with Dilithium the following operation is
defined:</t>
          <artwork><![CDATA[
(verified) <- dilithium.verify(dilithiumPublicKey, dataDigest,
                               dilithiumSignature)
]]></artwork>
          <t>Dilithium has the parameterization with the corresponding artifact lengths in
octets as given in <xref target="tab-dilithium-artifacts"/>. All artifacts are encoded as
defined in <xref target="DILITHIUM-Subm"/>.</t>
          <table anchor="tab-dilithium-artifacts">
            <name>Dilithium parameters and artifact lengths in octets</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Dilithium instance</th>
                <th align="left">Public key</th>
                <th align="left">Secret key</th>
                <th align="left">Signature value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">35, 37, 39</td>
                <td align="left">Dilithium3</td>
                <td align="left">1952</td>
                <td align="left">4000</td>
                <td align="left">3293</td>
              </tr>
              <tr>
                <td align="right">36, 38, 40</td>
                <td align="left">Dilithium5</td>
                <td align="left">2592</td>
                <td align="left">4864</td>
                <td align="left">4595</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="ecc-dilithium">
        <name>Composite Signature Schemes with Dilithium</name>
        <section anchor="binding-hashes">
          <name>Binding hashes</name>
          <t>Composite Dilithium + ECC signatures MUST use SHA3-256 (hash algorithm ID 12)
or SHA3-512 (hash algorithm ID 14) as hashing algorithm. Signatures using other
hash algorithms MUST be considered invalid.</t>
          <t>An implementation MUST support SHA3-256 and SHOULD support SHA3-512, in
order to support the hash binding with Dilithium + ECC signatures.</t>
        </section>
        <section anchor="ecc-dilithium-generation">
          <name>Key generation procedure</name>
          <t>The implementation MUST independently generate the Dilithium and the ECC
component keys. Dilithium key generation follows the specification in
<xref target="DILITHIUM-Subm"/> and the artifacts are encoded as fixed-length octet strings as
defined in <xref target="dilithium-signature"/>. For ECC this is done following the relative
specification in <xref target="RFC7748"/>, <xref target="SP800-186"/>, or <xref target="RFC5639"/>, and encoding the
artifacts as specified in <xref target="eddsa-signature"/> or <xref target="ecdsa-signature"/> as
fixed-length octet strings.</t>
        </section>
        <section anchor="signature-generation">
          <name>Signature Generation</name>
          <t>To sign a message <tt>M</tt> with Dilithium + EdDSA the following sequence of
operations has to be performed:</t>
          <ol spacing="normal" type="1"><li>Generate <tt>dataDigest</tt> according to <xref target="I-D.ietf-openpgp-crypto-refresh"/>
Section 5.2.4</li>
            <li>Create the EdDSA signature over <tt>dataDigest</tt> with <tt>eddsa.sign()</tt> from
<xref target="eddsa-signature"/></li>
            <li>Create the Dilithium signature over <tt>dataDigest</tt> with <tt>dilithium.sign()</tt>
from <xref target="dilithium-signature"/></li>
            <li>Encode the EdDSA and Dilithium signatures according to the packet
structure given in <xref target="ecc-dilithium-sig-packet"/>.</li>
          </ol>
          <t>To sign a message <tt>M</tt> with Dilithium + ECDSA the following sequence of
operations has to be performed:</t>
          <ol spacing="normal" type="1"><li>Generate <tt>dataDigest</tt> according to <xref target="I-D.ietf-openpgp-crypto-refresh"/>
Section 5.2.4</li>
            <li>Create the ECDSA signature over <tt>dataDigest</tt> with <tt>ecdsa.sign()</tt> from
<xref target="ecdsa-signature"/></li>
            <li>Create the Dilithium signature over <tt>dataDigest</tt> with <tt>dilithium.sign()</tt>
from <xref target="dilithium-signature"/></li>
            <li>Encode the ECDSA and Dilithium signatures according to the packet
structure given in <xref target="ecc-dilithium-sig-packet"/>.</li>
          </ol>
        </section>
        <section anchor="signature-verification">
          <name>Signature Verification</name>
          <t>To verify a Dilithium + EdDSA signature the following sequence of operations
has to be performed:</t>
          <ol spacing="normal" type="1"><li>Verify the EdDSA signature with <tt>eddsa.verify()</tt> from <xref target="eddsa-signature"/></li>
            <li>Verify the Dilithium signature with <tt>dilithium.verify()</tt> from
<xref target="dilithium-signature"/></li>
          </ol>
          <t>To verify a Dilithium + ECDSA signature the following sequence of operations
has to be performed:</t>
          <ol spacing="normal" type="1"><li>Verify the ECDSA signature with <tt>ecdsa.verify()</tt> from <xref target="ecdsa-signature"/></li>
            <li>Verify the Dilithium signature with <tt>dilithium.verify()</tt> from
<xref target="dilithium-signature"/></li>
          </ol>
          <t>As specified in <xref target="composite-signatures"/> an implementation MUST validate both
signatures, i.e. EdDSA/ECDSA and Dilithium, to state that a composite Dilithium
+ ECC signature is valid.</t>
        </section>
      </section>
      <section anchor="packet-specifications-1">
        <name>Packet Specifications</name>
        <section anchor="ecc-dilithium-sig-packet">
          <name>Signature Packet (Tag 2)</name>
          <t>The composite Dilithium + ECC schemes MUST be used only with v6 signatures, as
defined in <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.3.</t>
          <t>The algorithm-specific v6 signature parameters for Dilithium + EdDSA signatures
consists of:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing the EdDSA signature, whose length
depends on the algorithm ID as specified in <xref target="tab-eddsa-artifacts"/>.</li>
            <li>A fixed-length octet string of the Dilithium signature value, whose length
depends on the algorithm ID as specified in <xref target="tab-dilithium-artifacts"/>.</li>
          </ul>
          <t>The algorithm-specific v6 signature parameters for Dilithium + ECDSA signatures
consists of:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string of the big-endian encoded ECDSA value <tt>R</tt>, whose
length depends on the algorithm ID as specified in <xref target="tab-ecdsa-artifacts"/>.</li>
            <li>A fixed-length octet string of the big-endian encoded ECDSA value <tt>S</tt>, whose
length depends on the algorithm ID as specified in <xref target="tab-ecdsa-artifacts"/>.</li>
            <li>A fixed-length octet string of the Dilithium signature value, whose length
depends on the algorithm ID as specified in <xref target="tab-dilithium-artifacts"/>.</li>
          </ul>
        </section>
        <section anchor="key-material-packets">
          <name>Key Material Packets</name>
          <t>The composite Dilithium + ECC schemes MUST be used only with v6 keys, as
defined in <xref target="I-D.ietf-openpgp-crypto-refresh"/>.</t>
          <t>The algorithm-specific public key for Dilithium + EdDSA keys is this series of
values:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing the EdDSA public key, whose length
depends on the algorithm ID as specified in <xref target="tab-eddsa-artifacts"/>.</li>
            <li>A fixed-length octet string containing the Dilithium public key, whose
length depends on the algorithm ID as specified in
<xref target="tab-dilithium-artifacts"/>.</li>
          </ul>
          <t>The algorithm-specific private key for Dilithium + EdDSA keys is this series of
values:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing the EdDSA secret key, whose length
depends on the algorithm ID as specified in <xref target="tab-eddsa-artifacts"/>.</li>
            <li>A fixed-length octet string containing the Dilithium secret key, whose
length depends on the algorithm ID as specified in
<xref target="tab-dilithium-artifacts"/>.</li>
          </ul>
          <t>The algorithm-specific public key for Dilithium + ECDSA keys is this
series of values:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing the ECDSA public key in SEC1
format, as specified in section <xref target="sec1-format"/> and with length specified in
<xref target="tab-ecdsa-artifacts"/>.</li>
            <li>A fixed-length octet string containing the Dilithium public key, whose
length depends on the algorithm ID as specified in
<xref target="tab-dilithium-artifacts"/>.</li>
          </ul>
          <t>The algorithm-specific private key for Dilithium + ECDSA keys is this series of
values:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing the ECDSA secret key as a
big-endian encoded integer, whose length depends on the algorithm used as
specified in <xref target="tab-ecdsa-artifacts"/>.</li>
            <li>A fixed-length octet string containing the Dilithium secret key, whose
length depends on the algorithm ID as specified in
<xref target="tab-dilithium-artifacts"/>.</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="sphincs-1">
      <name>SPHINCS+</name>
      <section anchor="algo-sphincs">
        <name>The SPHINCS+ Algorithms</name>
        <t>The following table describes the SPHINCS+ parameters and artifact lengths:</t>
        <table anchor="sphincs-artifact-lengths">
          <name>SPHINCS+ parameters and artifact lengths in octets. The values equally apply to the parameter IDs of SPHINCS+-simple-SHA2 and SPHINCS+-simple-SHAKE.</name>
          <thead>
            <tr>
              <th align="right">Parameter ID reference</th>
              <th align="right">Parameter name suffix</th>
              <th align="left">SPHINCS+ public key</th>
              <th align="left">SPHINCS+ secret key</th>
              <th align="left">SPHINCS+ signature</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">1</td>
              <td align="right">128s</td>
              <td align="left">32</td>
              <td align="left">64</td>
              <td align="left">7856</td>
            </tr>
            <tr>
              <td align="right">2</td>
              <td align="right">128f</td>
              <td align="left">32</td>
              <td align="left">64</td>
              <td align="left">17088</td>
            </tr>
            <tr>
              <td align="right">3</td>
              <td align="right">192s</td>
              <td align="left">48</td>
              <td align="left">96</td>
              <td align="left">16224</td>
            </tr>
            <tr>
              <td align="right">4</td>
              <td align="right">192f</td>
              <td align="left">48</td>
              <td align="left">96</td>
              <td align="left">35664</td>
            </tr>
            <tr>
              <td align="right">5</td>
              <td align="right">256s</td>
              <td align="left">64</td>
              <td align="left">128</td>
              <td align="left">29792</td>
            </tr>
            <tr>
              <td align="right">6</td>
              <td align="right">256f</td>
              <td align="left">64</td>
              <td align="left">128</td>
              <td align="left">49856</td>
            </tr>
          </tbody>
        </table>
        <section anchor="binding-hashes-1">
          <name>Binding hashes</name>
          <t>SPHINCS+ signature packets MUST use the associated hash as specified in
<xref target="tab-sphincs-hash"/>. Signature packets using other hashes MUST be considered
invalid.</t>
          <table anchor="tab-sphincs-hash">
            <name>Binding between SPHINCS+ and signature hashes</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Parameter ID reference</th>
                <th align="left">Hash function</th>
                <th align="left">Hash function ID reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">41</td>
                <td align="left">1, 2</td>
                <td align="left">SHA-256</td>
                <td align="left">8</td>
              </tr>
              <tr>
                <td align="right">41</td>
                <td align="left">3, 4, 5, 6</td>
                <td align="left">SHA-512</td>
                <td align="left">10</td>
              </tr>
              <tr>
                <td align="right">42</td>
                <td align="left">1, 2</td>
                <td align="left">SHA3-256</td>
                <td align="left">12</td>
              </tr>
              <tr>
                <td align="right">42</td>
                <td align="left">3, 4, 5, 6</td>
                <td align="left">SHA3-512</td>
                <td align="left">14</td>
              </tr>
            </tbody>
          </table>
          <t>An implementation supporting a specific SPHINCS+ algorithm and parameter MUST
also support the matching hash algorithm.</t>
        </section>
        <section anchor="key-generation">
          <name>Key generation</name>
          <t>The SPHINCS+ key generation is performed according to the function
<tt>spx_keygen()</tt> specified in <xref target="SPHINCS-Subm"/>, Sec. 6.2 as Alg. 19. The private
and public key are encoded as defined in <xref target="SPHINCS-Subm"/>.</t>
        </section>
        <section anchor="signature-generation-1">
          <name>Signature Generation</name>
          <t>The procedure for SPHINCS+ signature generation is the function <tt>spx_sign(M,
SK)</tt> specified in <xref target="SPHINCS-Subm"/>, Sec. 6.4 as Alg. 20.  Here, <tt>M</tt> is the
<tt>dataDigest</tt> generated according to <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section
5.2.4 and <tt>SK</tt> is the SPHINCS+ private key. The global variable <tt>RANDOMIZE</tt>
specified in Alg. 20 is to be considered as not set, i.e. the variable <tt>opt</tt>
shall be initialized with <tt>PK.seed</tt>. See also <xref target="sphincs-sec-cons"/>.</t>
          <t>An implementation MUST set the Parameter ID in the signature equal to the
issuing private key Parameter ID.</t>
        </section>
        <section anchor="signature-verification-1">
          <name>Signature Verification</name>
          <t>The procedure for SPHINCS+ signature verification is the function
<tt>spx_verify(M, SIG, PK)</tt> specified in <xref target="SPHINCS-Subm"/>, Sec. 6.5 as Alg. 21.
Here, <tt>M</tt> is the <tt>dataDigest</tt> generated according to
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.4, <tt>SIG</tt> is the signature, and
<tt>PK</tt> is the SPHINCS+ public key.</t>
          <t>An implementation MUST check that the Parameter ID in the signature and in the
key match when verifying.</t>
        </section>
      </section>
      <section anchor="packet-specifications-2">
        <name>Packet specifications</name>
        <section anchor="signature-packet-tag-2">
          <name>Signature Packet (Tag 2)</name>
          <t>The SPHINCS+ algorithms MUST be used only with v6 signatures, as defined in
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.3.</t>
          <t>The algorithm-specific v6 Signature parameters consists of:</t>
          <ul spacing="normal">
            <li>A one-octet value specifying the SPHINCS+ parameter ID defined in
<xref target="sphincs-param-sha2"/> and <xref target="sphincs-param-shake"/>. The values <tt>0x00</tt> and
<tt>0xFF</tt> are reserved for future extensions.</li>
            <li>A fixed-length octet string of the SPHINCS+ signature value, whose length
depends on the parameter ID in the format specified in
<xref target="sphincs-artifact-lengths"/>.</li>
          </ul>
        </section>
        <section anchor="key-material-packets-1">
          <name>Key Material Packets</name>
          <t>The SPHINCS+ algorithms MUST be used only with v6 keys, as defined in
<xref target="I-D.ietf-openpgp-crypto-refresh"/>.</t>
          <t>The algorithm-specific public key is this series of values:</t>
          <ul spacing="normal">
            <li>A one-octet value specifying the SPHINCS+ parameter ID defined in
<xref target="sphincs-param-sha2"/> and <xref target="sphincs-param-shake"/>. The values <tt>0x00</tt> and
<tt>0xFF</tt> are reserved for future extensions.</li>
            <li>A fixed-length octet string containing the SPHINCS+ public key, whose length
depends on the parameter ID as specified in <xref target="sphincs-artifact-lengths"/>.</li>
          </ul>
          <t>The algorithm-specific private key is this value:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string containing the SPHINCS+ secret key, whose length
depends on the parameter ID as specified in <xref target="tab-ecdsa-artifacts"/>.</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="migration-considerations">
      <name>Migration Considerations</name>
      <t>The post-quantum KEM algorithms defined in <xref target="kem-alg-specs"/> and the signature
algorithms defined in <xref target="sig-alg-specs"/> are a set of new public key algorithms
that extend the algorithm selection of <xref target="I-D.ietf-openpgp-crypto-refresh"/>.
During the transition period, the post-quantum algorithms will not be supported
by all clients. Therefore various migration considerations must be taken into
account, in particular backwards compatibility to existing implementations that
have not yet been updated to support the post-quantum algorithms.</t>
      <section anchor="key-preference">
        <name>Key preference</name>
        <t>Implementations SHOULD prefer PQ(/T) keys when multiple options are available.</t>
        <t>For instance, if encrypting for a recipient for which both a valid PQ/T and a
valid ECC certificate are available, the implementation SHOULD choose the PQ/T
certificate. In case a certificate has both a PQ/T and an ECC
encryption-capable valid subkey, the PQ/T subkey SHOULD be preferred.</t>
        <t>An implementation MAY sign with both a PQ(/T) and an ECC key using multiple
signatures over the same data as described in <xref target="multiple-signatures"/>.
Signing only with PQ(/T) key material is not backwards compatible.</t>
        <t>Note that the confidentiality of a message is not post-quantum secure when
encrypting to multiple recipients if at least one recipient does not support
PQ/T encryption schemes. An implementation SHOULD NOT abort the encryption
process in this case to allow for a smooth transition to post-quantum
cryptography.</t>
      </section>
      <section anchor="key-generation-strategies">
        <name>Key generation strategies</name>
        <t>It is REQUIRED to generate fresh secrets when generating PQ(/T) keys. Reusing
key material from existing ECC keys in PQ(/T) keys does not provide backwards
compatibility, and the fingerprint will differ.</t>
        <t>An OpenPGP (v6) certificate is composed of a certification-capable primary key
and one or more subkeys for signature, encryption, and authentication.
Two migration strategies are recommended:</t>
        <ol spacing="normal" type="1"><li>Generate two independent certificates, one for PQ(/T)-capable
implementations, and one for legacy implementations. Implementations not
understanding PQ(/T) certificates can use the legacy certificate, while
PQ(/T)-capable implementations will prefer the newer certificate. This allows
having an older v4 or v6 ECC certificate for compatibility and a v6 PQ(/T)
certificate, at a greater complexity in key distribution.</li>
          <li>Attach PQ(/T) encryption and signature subkeys to an existing v6 ECC
certificate. Implementations understanding PQ(/T) will be able to parse and use
the subkeys, while PQ(/T)-incapable implementations can gracefully ignore them.
This simplifies key distribution, as only one certificate needs to be
communicated and verified, but leaves the primary key vulnerable to quantum
computer attacks.</li>
        </ol>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="hashing-in-ecc-kem">
        <name>Hashing in ECC-KEM</name>
        <t>Our construction of the ECC-KEMs, in particular the final hashing step in
encapsulation and decapsulation that produces the <tt>eccKeyShare</tt>, is standard
and known as hashed ElGamal key encapsulation, a hashed variant of ElGamal
encryption. It ensures IND-CCA2 security in the random oracle model under some
Diffie-Hellman intractability assumptions <xref target="CS03"/>.</t>
      </section>
      <section anchor="sec-key-combiner">
        <name>Key combiner</name>
        <t>For the key combination in <xref target="kem-key-combiner"/> this specification limits
itself to the use of KMAC. The sponge construction used by KMAC was proven to
be indifferentiable from a random oracle <xref target="BDPA08"/>. This means, that in
contrast to SHA2, which uses a Merkle-Damgard construction, no HMAC-based
construction is required for key combination. Except for a domain separation it
is sufficient to simply process the concatenation of any number of key shares
when using a sponge-based construction like KMAC. The construction using KMAC
ensures a standardized domain separation. In this case, the processed message
is then the concatenation of any number of key shares.</t>
        <t>More precisely, for a given capacity <tt>c</tt> the indifferentiability proof shows
that assuming there are no weaknesses found in the Keccak permutation, an
attacker has to make an expected number of <tt>2^(c/2)</tt> calls to the permutation
to tell KMAC from a random oracle. For a random oracle, a difference in only a
single bit gives an unrelated, uniformly random output. Hence, to be able to
distinguish a key <tt>K</tt>, derived from shared keys <tt>K1</tt> and <tt>K2</tt> (and ciphertexts
<tt>C1</tt> and <tt>C2</tt>) as</t>
        <artwork><![CDATA[
K = KMAC(domainSeparation, counter || K1 || C1 || K2 || C2 || fixedInfo,
         outputBits, customization)
]]></artwork>
        <t>from a random bit string, an adversary has to know (or correctly guess) both
key shares <tt>K1</tt> and <tt>K2</tt>, entirely.</t>
        <t>The proposed construction in <xref target="kem-key-combiner"/> preserves IND-CCA2 of any of
its ingredient KEMs, i.e. the newly formed combined KEM is IND-CCA2 secure as
long as at least one of the ingredient KEMs is. Indeed, the above stated
indifferentiability from a random oracle qualifies Keccak as a split-key
pseudorandom function as defined in <xref target="GHP18"/>. That is, Keccak behaves like a
random function if at least one input shared secret is picked uniformly at
random. Our construction can thus be seen as an instantiation of the IND-CCA2
preserving Example 3 in Figure 1 of <xref target="GHP18"/>, up to some reordering of input
shared secrets and ciphertexts. In the random oracle setting, the reordering
does not influence the arguments in <xref target="GHP18"/>.</t>
      </section>
      <section anchor="sec-fixed-info">
        <name>Domain separation and binding</name>
        <t>The <tt>domSeparation</tt> information defined in <xref target="kem-key-combiner"/> provides the
domain separation for the key combiner construction. This ensures that the
input keying material is used to generate a KEK for a specific purpose or
context.</t>
        <t>The <tt>fixedInfo</tt> defined in <xref target="kem-fixed-info"/> binds the derived KEK to the
chosen algorithm and communication parties. The algorithm ID identifies
univocally the algorithm, the parameters for its instantiation, and the length
of all artifacts, including the derived key. The hash of the recipient's
public key identifies the subkey used to encrypt the message, binding the KEK
to both the Kyber and the ECC key. Given that both algorithms allow a degree of
ciphertext malleability, this prevents transformations onto the ciphertext
without the final recipient's knowledge.</t>
        <t>This is in line with the Recommendation for ECC in section 5.5 of
<xref target="SP800-56A"/>. Other fields included in the recommendation are not relevant
for the OpenPGP protocol, since the sender is not required to have a key on
their own, there are no pre-shared secrets, and all the other parameters are
univocally defined by the algorithm ID.</t>
      </section>
      <section anchor="sphincs-sec-cons">
        <name>SPHINCS+</name>
        <t>The original specification of SPHINCS+ <xref target="SPHINCS-Subm"/> prescribes an optional
randomized hashing. This is not used in this specification, as OpenPGP v6
signatures already provide a salted hash of the appropriate size.</t>
      </section>
      <section anchor="binding-hashes-in-signatures-with-signature-algorithms">
        <name>Binding hashes in signatures with signature algorithms</name>
        <t>In order not to extend the attack surface, we bind the hash algorithm used for
message digestion to the hash algorithm used internally by the signature
algorithm. Dilithium internally uses a SHAKE256 digest, therefore we require
SHA3 in the Dilithium + ECC signature packet. In the case of SPHINCS+ the
internal hash algorithm varies based on the algorithm and parameter ID.</t>
      </section>
    </section>
    <section anchor="additional-considerations">
      <name>Additional considerations</name>
      <section anchor="performance-considerations">
        <name>Performance Considerations for SPHINCS+</name>
        <t>This specification introduces both Dilithium + ECC as well as SPHINCS+ as
PQ(/T) signature schemes.</t>
        <t>Generally, it can be said that Dilithium + ECC provides a performance in terms
of execution time and space requirements that is close to that of traditional
ECC signature schemes. Implementers may want to offer SPHINCS+ for applications
where a higher degree of trust in the signature scheme is required. However,
SPHINCS+ has performance characteristics in terms of execution time of the
signature generation as well as space requirements for the signature that can
be, depending on the parameter choice, far greater than those of traditional or
Dilithium + ECC signature schemes.</t>
        <t>Pertaining to the execution time, the particularly costly operation in SPHINCS+
is the signature generation. In order to achieve short signature generation
times, one of the parameter sets with the name ending in the letter "f" for
"fast" should be chosen. This comes at the expense of a larger signature size.</t>
        <t>In order to minimize the space requirements of a SPHINCS+ signature, a
parameter set ending in "s" for "small" should be chosen. This comes at the
expense of a larger signature generation time.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA will add the following registries to the <tt>Pretty Good Privacy (PGP)</tt>
registry group at https://www.iana.org/assignments/pgp-parameters:</t>
      <ul spacing="normal">
        <li>
          <t>Registry name: <tt>SPHINCS+-simple-SHA2 parameters</tt>  </t>
          <t>
Registration procedure: SPECIFICATION REQUIRED <xref target="RFC8126"/>  </t>
          <t>
Values defined in this document, <xref target="sphincs-param-sha2"/>.</t>
        </li>
        <li>
          <t>Registry name: <tt>SPHINCS+-simple-SHAKE parameters</tt>  </t>
          <t>
Registration procedure: SPECIFICATION REQUIRED <xref target="RFC8126"/>  </t>
          <t>
Values defined in this document, <xref target="sphincs-param-shake"/>.</t>
        </li>
      </ul>
      <t>Furthermore IANA will add the algorithm IDs defined in <xref target="kem-alg-specs"/> and
<xref target="sig-alg-specs"/> to the  registry <tt>Public Key Algorithms</tt>.</t>
    </section>
    <section anchor="contributors">
      <name>Contributors</name>
      <t>Stephan Ehlen (BSI)<br/>
Carl-Daniel Hailfinger (BSI)<br/>
Andreas Huelsing (TU Eindhoven)<br/>
Johannes Roth (MTG AG)</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley">
              <organization/>
            </author>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg">
              <organization/>
            </author>
            <author fullname="S. Turner" initials="S." surname="Turner">
              <organization/>
            </author>
            <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="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson">
              <organization/>
            </author>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara">
              <organization/>
            </author>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA).  The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves.  An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC3394">
          <front>
            <title>Advanced Encryption Standard (AES) Key Wrap Algorithm</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad">
              <organization/>
            </author>
            <author fullname="R. Housley" initials="R." surname="Housley">
              <organization/>
            </author>
            <date month="September" year="2002"/>
          </front>
          <seriesInfo name="RFC" value="3394"/>
          <seriesInfo name="DOI" value="10.17487/RFC3394"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton">
              <organization/>
            </author>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <author fullname="T. Narten" initials="T." surname="Narten">
              <organization/>
            </author>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="I-D.ietf-openpgp-crypto-refresh">
          <front>
            <title>OpenPGP</title>
            <author fullname="Paul Wouters" initials="P." surname="Wouters">
              <organization>Aiven</organization>
            </author>
            <author fullname="Daniel Huigens" initials="D." surname="Huigens">
              <organization>Proton AG</organization>
            </author>
            <author fullname="Justus Winter" initials="J." surname="Winter">
              <organization>Sequoia-PGP</organization>
            </author>
            <author fullname="Niibe Yutaka" initials="N." surname="Yutaka">
              <organization>FSIJ</organization>
            </author>
            <date day="13" month="March" year="2023"/>
            <abstract>
              <t>   This document specifies the message formats used in OpenPGP.  OpenPGP
   provides encryption with public-key or symmetric cryptographic
   algorithms, digital signatures, compression and key management.

   This document is maintained in order to publish all necessary
   information needed to develop interoperable applications based on the
   OpenPGP format.  It is not a step-by-step cookbook for writing an
   application.  It describes only the format and methods needed to
   read, check, generate, and write conforming packets crossing any
   network.  It does not deal with storage and implementation questions.
   It does, however, discuss implementation issues necessary to avoid
   security flaws.

   This document obsoletes: RFC 4880 (OpenPGP), RFC 5581 (Camellia in
   OpenPGP) and RFC 6637 (Elliptic Curves in OpenPGP).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-openpgp-crypto-refresh-08"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC5639">
          <front>
            <title>Elliptic Curve Cryptography (ECC) Brainpool Standard Curves and Curve Generation</title>
            <author fullname="M. Lochter" initials="M." surname="Lochter">
              <organization/>
            </author>
            <author fullname="J. Merkle" initials="J." surname="Merkle">
              <organization/>
            </author>
            <date month="March" year="2010"/>
            <abstract>
              <t>This memo proposes several elliptic curve domain parameters over finite prime fields for use in cryptographic applications.  The domain parameters are consistent with the relevant international standards, and can be used in X.509 certificates and certificate revocation lists (CRLs), for Internet Key Exchange (IKE), Transport Layer Security (TLS), XML signatures, and all applications or protocols based on the cryptographic message syntax (CMS).  This document is  not an Internet Standards Track specification; it is published for  informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5639"/>
          <seriesInfo name="DOI" value="10.17487/RFC5639"/>
        </reference>
        <reference anchor="NIST-PQC" target="https://csrc.nist.gov/projects/post-quantum-cryptography/post-quantum-cryptography-standardization">
          <front>
            <title>Post-Quantum Cryptography Standardization</title>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="D." surname="Moody" fullname="Dustin Moody">
              <organization/>
            </author>
            <author initials="Y." surname="Liu" fullname="Yi-Kai Liu">
              <organization/>
            </author>
            <date year="2016" month="December"/>
          </front>
        </reference>
        <reference anchor="NISTIR-8413" target="https://doi.org/10.6028/NIST.IR.8413-upd1">
          <front>
            <title>Status Report on the Third Round of the NIST Post-Quantum Cryptography Standardization Process</title>
            <author initials="G." surname="Alagic" fullname="Gorjan Alagic">
              <organization/>
            </author>
            <author initials="D." surname="Apon" fullname="Daniel Apon">
              <organization/>
            </author>
            <author initials="D." surname="Cooper" fullname="David Cooper">
              <organization/>
            </author>
            <author initials="Q." surname="Dang" fullname="Quynh Dang">
              <organization/>
            </author>
            <author initials="T." surname="Dang" fullname="Thinh Dang">
              <organization/>
            </author>
            <author initials="J." surname="Kelsey" fullname="John Kelsay">
              <organization/>
            </author>
            <author initials="J." surname="Lichtinger" fullname="Jacob Lichtinger">
              <organization/>
            </author>
            <author initials="C." surname="Miller" fullname="Carl Miller">
              <organization/>
            </author>
            <author initials="D." surname="Moody" fullname="Dustin Moody">
              <organization/>
            </author>
            <author initials="R." surname="Peralta" fullname="Rene Peralta">
              <organization/>
            </author>
            <author initials="R." surname="Perlner" fullname="Ray Perlner">
              <organization/>
            </author>
            <author initials="A." surname="Robinson" fullname="Angela Robinson">
              <organization/>
            </author>
            <author initials="D." surname="Smith-Tone" fullname="Daniel Smith-Tone">
              <organization/>
            </author>
            <author initials="Y." surname="Liu" fullname="Yi-Kai Liu">
              <organization/>
            </author>
            <date year="2022" month="September"/>
          </front>
          <seriesInfo name="NIST IR 8413" value=""/>
        </reference>
        <reference anchor="SP800-56C" target="https://doi.org/10.6028/NIST.SP.800-56Cr2">
          <front>
            <title>Recommendation for Key-Derivation Methods in Key-Establishment Schemes</title>
            <author initials="E." surname="Barker" fullname="Elaine Barker">
              <organization/>
            </author>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="R." surname="Davis" fullname="Richard Davis">
              <organization/>
            </author>
            <date year="2020" month="August"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-56C Rev. 2" value=""/>
        </reference>
        <reference anchor="SP800-185" target="https://doi.org/10.6028/NIST.SP.800-185">
          <front>
            <title>SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, and ParallelHash</title>
            <author initials="J." surname="Kelsey" fullname="John Kelsey">
              <organization/>
            </author>
            <author initials="S." surname="Chang" fullname="Shu-jen Chang">
              <organization/>
            </author>
            <author initials="R." surname="Perlner" fullname="Ray Perlner">
              <organization/>
            </author>
            <date year="2016" month="December"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-185" value=""/>
        </reference>
        <reference anchor="SP800-56A" target="https://doi.org/10.6028/NIST.SP.800-56Ar3">
          <front>
            <title>Recommendation for Pair-Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography</title>
            <author initials="E." surname="Barker" fullname="Elaine Barker">
              <organization/>
            </author>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="A." surname="Roginsky" fullname="Allen Roginsky">
              <organization/>
            </author>
            <author initials="A." surname="Vassilev" fullname="Apostol Vassilev">
              <organization/>
            </author>
            <author initials="R." surname="Davis" fullname="Richard Davis">
              <organization/>
            </author>
            <date year="2018" month="April"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-56A Rev. 3" value=""/>
        </reference>
        <reference anchor="SP800-186" target="https://doi.org/10.6028/NIST.SP.800-186">
          <front>
            <title>Recommendations for Discrete Logarithm-Based Cryptography:  Elliptic Curve Domain Parameters</title>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="D." surname="Moody" fullname="Dustin Moody">
              <organization/>
            </author>
            <author initials="A." surname="Regenscheid" fullname="Andrew Regenscheid">
              <organization/>
            </author>
            <author initials="K." surname="Randall" fullname="Karen Randall">
              <organization/>
            </author>
            <date year="2023" month="February"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-186" value=""/>
        </reference>
        <reference anchor="SEC1" target="https://secg.org/sec1-v2.pdf">
          <front>
            <title>Standards for Efficient Cryptography 1 (SEC 1)</title>
            <author>
              <organization>Standards for Efficient Cryptography Group</organization>
            </author>
            <date year="2009" month="May"/>
          </front>
        </reference>
        <reference anchor="KYBER-Subm">
          <front>
            <title>CRYSTALS-Kyber (version 3.02) - Submission to round 3 of the NIST post-quantum project</title>
            <author initials="R." surname="Avanzi">
              <organization/>
            </author>
            <author initials="J." surname="Bos">
              <organization/>
            </author>
            <author initials="L." surname="Ducas">
              <organization/>
            </author>
            <author initials="E." surname="Kiltz">
              <organization/>
            </author>
            <author initials="T." surname="Lepoint">
              <organization/>
            </author>
            <author initials="V." surname="Lyubashevsky">
              <organization/>
            </author>
            <author initials="J. M." surname="Schanck">
              <organization/>
            </author>
            <author initials="P." surname="Schwabe">
              <organization/>
            </author>
            <author initials="G." surname="Seiler">
              <organization/>
            </author>
            <author initials="D." surname="Stehle">
              <organization/>
            </author>
            <date year="2021" month="August" day="04"/>
          </front>
        </reference>
        <reference anchor="DILITHIUM-Subm">
          <front>
            <title>CRYSTALS-Dilithium - Algorithm Specifications and Supporting Documentation (Version 3.1)</title>
            <author initials="L." surname="Ducas">
              <organization/>
            </author>
            <author initials="E." surname="Kiltz">
              <organization/>
            </author>
            <author initials="T." surname="Lepoint">
              <organization/>
            </author>
            <author initials="V." surname="Lyubashevsky">
              <organization/>
            </author>
            <author initials="P." surname="Schwabe">
              <organization/>
            </author>
            <author initials="G." surname="Seiler">
              <organization/>
            </author>
            <author initials="D." surname="Stehle">
              <organization/>
            </author>
            <date year="2021" month="February" day="08"/>
          </front>
        </reference>
        <reference anchor="SPHINCS-Subm">
          <front>
            <title>SPHINCS+ - Submission to the 3rd round of the NIST post-quantum project. v3.1</title>
            <author initials="J." surname="Aumasson">
              <organization/>
            </author>
            <author initials="D. J." surname="Bernstein">
              <organization/>
            </author>
            <author initials="W." surname="Beullens">
              <organization/>
            </author>
            <author initials="C." surname="Dobraunig">
              <organization/>
            </author>
            <author initials="M." surname="Eichlseder">
              <organization/>
            </author>
            <author initials="S." surname="Fluhrer">
              <organization/>
            </author>
            <author initials="S." surname="Gazdag">
              <organization/>
            </author>
            <author initials="A." surname="Huelsing">
              <organization/>
            </author>
            <author initials="P." surname="Kampanakis">
              <organization/>
            </author>
            <author initials="S." surname="Koelb">
              <organization/>
            </author>
            <author initials="T." surname="Lange">
              <organization/>
            </author>
            <author initials="M. M." surname="Lauridsen">
              <organization/>
            </author>
            <author initials="F." surname="Mendel">
              <organization/>
            </author>
            <author initials="R." surname="Niederhagen">
              <organization/>
            </author>
            <author initials="C." surname="Rechberger">
              <organization/>
            </author>
            <author initials="J." surname="Rijneveld">
              <organization/>
            </author>
            <author initials="P." surname="Schwabe">
              <organization/>
            </author>
            <author initials="B." surname="Westerbaan">
              <organization/>
            </author>
            <date year="2021" month="June" day="10"/>
          </front>
        </reference>
        <reference anchor="draft-driscoll-pqt-hybrid-terminology" target="https://datatracker.ietf.org/doc/html/draft-driscoll-pqt-hybrid-terminology">
          <front>
            <title>Terminology for Post-Quantum Traditional Hybrid Schemes</title>
            <author initials="F." surname="Driscoll" fullname="Florence Driscoll">
              <organization/>
            </author>
            <date year="2023" month="March"/>
          </front>
        </reference>
        <reference anchor="GHP18" target="https://doi.org/10.1007/978-3-319-76578-5_7">
          <front>
            <title>KEM Combiners</title>
            <author initials="F." surname="Giacon" fullname="Federico Giacon">
              <organization/>
            </author>
            <author initials="F." surname="Heuer" fullname="Felix Heuer">
              <organization/>
            </author>
            <author initials="B." surname="Poettering" fullname="Bertram Poettering">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="BDPA08" target="https://doi.org/10.1007/978-3-540-78967-3_11">
          <front>
            <title>On the Indifferentiability of the Sponge Construction</title>
            <author initials="G." surname="Bertoni" fullname="Guido Bertoni">
              <organization/>
            </author>
            <author initials="J." surname="Daemen" fullname="Joan Daemen">
              <organization/>
            </author>
            <author initials="M." surname="Peters" fullname="Michael Peters">
              <organization/>
            </author>
            <author initials="G." surname="Assche" fullname="Gilles van Assche">
              <organization/>
            </author>
            <date year="2008"/>
          </front>
        </reference>
        <reference anchor="CS03" target="https://doi.org/10.1137/S0097539702403773">
          <front>
            <title>Design and Analysis of Practical Public-Key Encryption Schemes Secure against Adaptive Chosen Ciphertext Attack</title>
            <author initials="R." surname="Cramer" fullname="Ronald Cramer">
              <organization/>
            </author>
            <author initials="V." surname="Shoup" fullname="Victor Shoup">
              <organization/>
            </author>
            <date year="2003"/>
          </front>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Daniel Huigens and Evangelos Karatsiolis for the early review and
feedback on this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19a3fbRrLg9/4VOPaHke4laYl6WPbe7BlZkm2N4kSRlGSy
udkhCLZIjECAA4BSFNv/fevRbwAUZTuZuXtGZyaWAPSrut5VXd3v90Wd1pl8
GT05L6q6/90yzuvlPDoq7xd1MS3jxew+SvPo24XMz9+cPxHxeFzKW/z8uyPv
RRLXclqU9y/h6XUhxKRI8ngOHU/K+Lru3y2rKpNlv4DvF9NFf/GPpL+1Larl
eJ5WVVrk9f0CPj49uXotoPsdEZcyfhlVMhF3RXkzLYvl4mX0jazxr+hH+E+a
T6M3+FjcyHt4OoHWeS3LXNb9YxxT3Mp8KV+KKFKtf3wDv/M4fgdRNI/T7GWk
JvfnVNbXg6Kcwou4TGaw2lldL6qXz57hd/govZUD/dUzfPBsXBZ3lXymunj2
BNqWclE4badpPVuOB0kxf+ZA4RnDx3nyRIh4Wc+KEqbeh24igGj1MrocRGfF
skonaUUPGbqXdXxbFpX/Cib1Mnp1eUp/JMUyr3Ff3shyHuf39FDygituPbhR
rf88rtLBeJlPBhPpDf56ACOVMv/tRjqDv46zm8J/QUO/u3oTHb55cPRrbD6o
VPM/z+tpOOzhIPqREccZ9bAscu8xjXleFjU8D4e9vEvr32SZxfnEHTqGPv6s
cHKQ1kLkBUyvhm19KeC7i9dHz5/vHujfD7Z2hvr3nZ0Xu+b59nCffj/tHxM6
mG1MiH76pbwuZTWDb5AoghH29nde0O/fnF5e9YGeXtIM67icyvplpNEmqcpk
kKdVPZgWt88WZfF3mdTVswWS6z+YXNVwTK7db/qw3fkkLifpbzCRIufhmPy7
qf+ypZHBT/rpq3/Vpn09iI5mMjcPede+TrN793nQ6HgQvSuKyX3Q6nhZ1cBl
3FdBw58G0PUyaPZT2j+LU/NiArwJ+pKJnI9lGQ23tvc13E8v+ge72zvtoJ8U
KRH49tZgf2t48AwbDE4vBtiiv1xMtl0IApzqZRVdANGXdQSoWM9kdDVLy0l0
Adg4iYpreoSdrA9uxOtEVtXDYH8ziA6zeJomASzeFOXf49x/1wT+4aIId+w4
zlOZuW+azY4KwPiy0fA2nfivgpbfDbD3adDuu+V9PnNfBK2uWlsBiFe2+gvw
TZlVMkStvxSznN7EHZj1F8SsZAb4N20s8S9xUoybr4MejgCp0yxrtD6Ky8x/
86Wo4WIQncsyzuo4aHohcxm8am2a5Y3ZXsT3wZugJXDpi2IMvzZQ6BBgk8Xh
2+ZiL+cgG/tXRS7bcbDx/pOZwKVc1JoLDIf0opJlKitk0JqyiERPLyKkc2QU
l+cHW1v9vf0ODt3KJi7PB6pROXTZxIUEBWAugcaJvEEqABLe949hErf86J0E
Kp9UqF3hmxPg2uMsrWbQqI4uk5mcyzXYwckgehWXN43dPMniFFDBe/clGPjF
gOi+CpEHSAS4mfOO9+FwOQVkxk3YWrUJlwuZpHEWnS8BBAnDR4EVIHk7iIZ2
f7YP9h6/P9DI3Z0/Xb497O9EtBtyEr1e5gmOCetL4M3ZSS86e3d41IuulotM
vo2rWS8Cdh2dx0BYmczwyZ8e3psHWZLsIO9L3JkmC7ycLft/l7n37lOpu01W
fsIGIVwdyjn8FMo5LHceoJzzOC37P6aV7KaU6PsKFf3jtEpKWcvo62Ial8BN
fLH7r0dPxFSn8OtNiCWHgGl5+LLZ+ocY7KpM3oatUT0ssvD1Z1LzokwzxJWD
TyPmQybmHZeY9z+FmPc9YvYxpiKUaSJC/1VcAa276PAygn3N0kWdJtHRsryV
0XEBhkNOhD6H1mW1Bpn/sYowIoycyrwCvE8nDUE8KeVdywdBJ2fQCeqfWRZ0
cAb2eO69451/LcflMi7vkZPvfBqjIF388uRou33DK5lMacfhl+3+7XCwmFy7
u/xEa8y8vyfX12mSIgPw1OrtaAOGiLY3n7TtG5uQa3WkPQYaAO9iXPvWC1zE
2U+vTi76l8vxXPes5nh08dPl1eHXl/2ze2SqG7eAQAiAncHWcBOGvzRukKgu
opLMhR3PYHCNukgZgWoMfy3ullpiPryN89/S7k9AIr0qqu73gMrHyyRe8QXw
x7M0q3/r/gLU96/BOErzuvubH+Cb++UYxKi8dTlf24TfDZDHx3ly0/3ZOX1z
F49l9zdgOF3K1NXSG5+gilrLWaZ74a0HlN/ubx30t3Zx849Pvz69env6/buV
CHCcZsBzUtjEPjDyacGiiIjjWpFFRSrF5XKBhiTJriJZokhjotn4wSDP9ua6
KPAvt39/wMYMYW9YoLw9/ebosm1b1Kv/bJAg0t0OCLqyYbm3EeIguoXNWHcv
AHUPl3MQv4651LYwpElZ5lUt0xUf/ohfLVElWLG5YIgeF+MyXubptPsrIKgT
EPCgfk5WwRyU0NfZclY+8M2b+LdJvGI0kFdvl6DrpvmKjwBNzuL5Is7jm3TF
+sg3KrPxauQF5XgFtr0jjvJ1vCzTSSVXQPw1fAg6hcy6PwGO+02KUJzF01Vd
HaHMTmYgE6aroAmYcJH+PZe3MpushNWDJPVqEP0oAaPKcRzrebk0s9/f3kKa
Yaf0pARlqciy/uIfdX92PwbI9KHtPM2LrJjedyhoMTCqMk5u0LOqXeSTInk2
q+fZs7U6dsX7lX3MKr/rObsq40mKXBEUi7fUzfoGMmzjsZpGoOu8zgpQdhLp
v9fivkxmrOzA0zdvz7cPHtRTt7e2nj978fygv9Pf2X7Rf76/B7/v/e25u8yz
k3fRUTEfgy1Rupq10akfWsubNE4a/pfXiINpUvhvm43fymXDsHkts/RX703Q
DnDpvJA17FvasEiBcQEOzN0P4ItXx+eHW4+C197uVv/5wYv95/2dv2177tZv
2cF6mk/S62sJ+1Wn8RiF671m15eLAggeoAostFwm6zmv3xDTrYs8DVb0ZplO
iuBd06w/jgH5wl34SxHn/pug4Ts0zmu98bbhOzS3ZOa/bHH7VqjSh/NF92IV
3aLr177XSMWS8ehy62HP9/b2zvNnl6DhPt/befF8a7i7tfP8uWeYH4O6P81J
azkESryv0gr34ByYABhQRufvg40eneQUkUAxqw30S5ksSxnFUzCwqjo6nMQL
DJOAjVRU6NRIFzOAuvwVXtV1rLS9lZsI7PcI7bSGrwMZxcR/FzQFBeZypjV8
2/KHNKmB+dhXBpDAB/r9fhSPK2R6tRBXM1j+RKls0UReA0mDShcoDgyRG4BI
bLRAWCJIce3bABQWKrqKekZdACdCMr+VjPkgWNCdC8YkqBIw2ASeljKuEfRx
5MR9cAuye1FKsPZh9EjPAWzjxRIQqwcNYcp2dBjtNp3QpEGTS9kcyoCYiEdj
TBb2y8wN9z6u4QnrrYnZrmpg9VqYQC9KLThw7KJKaykcSEiLG2MyyeEX33Lq
2YYuCO0URLOh0bh70bioZ+hWTYjRsjp9By8jqY39BI194QbN2MFnFMUYocJx
NICInkXkzSKqCLMHjBnzdDIB/VQ8xfB0WUwUJwI8kVG4v1HFWj/SbZkWyyqq
HQnXhjQVg0qoeNN1jHiKRgNs2US7OjLj84KBxpmcI8+g72kvFc+0fVoowjeV
jOYx/IvBSyRm1UUVIc4AGDD8AR+P76nDeHKLaA/dKTQTGs0qxDP4FNvFUS4R
YQvGuokBxNhbWj0DdC4leV4U1qW8zgXsNYloO5DB5woAf7kEKe3RgNtvDLMo
JUiNkicBm+pRp7v/A9oopzGj8CSimXh0c4erS5hrIckE4VYFIvFNrPbzFNhd
WsOUcRXW+YD4dgVaoVJ6NtDs2MThAJM4avH+vRO6/PgR549AAZgss3q9OKMI
44wLjjPCOIBuwNxogej9jXg0DFB//Ah6LfBDJGbGDICkCJwbRCGK1ccLmJGO
aqCtnlbzaAN0nc0efgQ6z1gissbRvABNJRfjZZpN8Mk4K5IbgmIrg2CqbLGq
YfQ7oGb4V7g0G9Im4shrZrJRfVfYnv5Df6C4omHk16AHFncMaFClKlneUjQ/
Qr5fS1BaAZEmcpEV9z4ytfEbl6rVeED6gLKE8YgkhjBhDkDDMaGcRN6fIqXa
ZuMlBptlpAjDHQrRfFwWNzIfiFOcBfCfuKpp76IZ2uiTPlN6CB7L79KKVgvi
QNEKWBfVUrvGQPgQtMFIBrqri2LC6wNMBM5f4/cpMDOzGJJUC3ZywISLEg1N
6jRa0jwMYx1EV4Wir3wS7kXFYkXybvDOINLk8g4AVzt2vcOpPYT5D0QKK0to
0idHRwociJiYMDJJp2mNW9TAHtCLS8mAJJn4xPT1BBY2QU+OVPwrzu9RW4gF
a6HYCyCelfoLkJawvTh/djwIdw8VMSOO0hA5rB8IbLGQcVkxZufTTNIIUfsI
4ros5oprKjEDY9IGYRoTS6IO2MLeIz833vMUM6wwrq917bGs76QkFF9kKWC8
0QtSeCCN20oBYx7f0FbzujzuifuDQ8ImAlopLiscxutBzYER0vLTp6jnm6kS
MmkGrd1n+NXThj35Dlhm2ndcccp+JKg4NqnpzkAKtdwSqYAI4454Ny6App5q
JBc/r2Xy/hIqSxq1KvFkTlM0a3/S89AN4fYkL/K++6yUBgZJUSI5FkCiIDAF
859gmiSY0xyIDmUdpfiljH9Pzr97giul3ogdO7xNGHK4Qt6XF0BKIROCjfbY
IW1zk/3RgkU49LMrMzjPrZphcg2mUuHrjWdXm0+Yxhk9z7+L6L/PrhgnusUf
q+mVJGUM5g6aUjpWSI8EDArwEpWdDrUA9Amz9sMs04CIsrRCdCA9h9gvGNHy
ljmnUqstN2zRZWLRUNyjTsUduFBxB72XjC2tWhoqhnfQ02yFqAs0XJw2ssEe
/XoNvD0mMkYjwhjbLIDjBLAL5XXG2l+GLiqi7RKj+xh9K3J4t8jiRFOkNEJa
sN6SlsiPKD0OoYARRtBiJdALLIU0YVDCxH///A2hV6FUnRhEByX/VJplqaAS
KXaV/jBDRlyzMmSTTcUiRhaIM5UxwEZJPZgPSFcwU0iTi/2OBzwYaa+1BFIr
YWKiKrIlDUvsDVnCHe+21sb5Bex4yfIyL6ICyS2YdVqJ+BaTS2HXGNWnBWxj
WrmYAzNyRS8gToKxb78nlhgu44wzBBdI35oJH/kRUs3UsmGvi15UFWo9uCQB
RFClMC+WAJqtKyAnaHNKVzDAhwHvJ3OjKpDJV6Iyii7ow7QvSg/D3F9t+UaY
XqzRE4ANWpXl6MJfMGKpgZ1WTO9SUEtKSYinMIYQN5EGNXBsJwE5YpwYRK+X
JW7QvEAJfwddIe3hLmDoIyqWvKU9VPZANyFbK7cwQi13agcx2p1Rt9lWwsF7
LbAHKkahKpaLCSnhMD9sCio5W/oajA5bxxmY9FI0MzDqjVRt8Om/f2HZF2jq
75/e4L/9FO3SjyJU5H+mfyhs8gsiomsURpgGkKO9ABgENHBL6gugXQZ6Ceoy
fZQzfbCwCkATxYzIhgEDOCOyBOKGSW68+/rHk03F3JkKcSjFNkUb29SOIuKU
MTqc0HKPyTdESJVkmNuAXNCxBppWYhvz0P6JABTExFiRV26LhkpvtUfHjaF3
X+u6PjED/VpJqld3DRs9hpUMgi2zJs77pxP9e3PrHG+HY6j+7Acnf+kxG2uo
/YTYIktBSQsdL+sggNpVx0WQi2DDgRVYmdFKAARrtQ8t6/K2oWlZ2W1oM/kQ
olrQCWsg/uyGCH9RsAHeBYIXFoiWUkefg+i0ruzelYi2VRuErlOmU9jydB4j
f0BG5ysUOI641hlnCj2vJY8Hv1qHX2iRwXRn6XRmSERMlyBDgSOzKAHWV7C1
0onvXf4t0eLUOs2VnTsnW4RUmBXyG30bxhybFctsgjOuwRDIUWoUApWIZV5j
ZIq5NC7q/Xunz75eMIuTjx8JejE5uJbMvJXUe2AiDAG9EECGIMsnVBFlO1mn
1gvEml7F3gyrIqTW3IbViPfvHzghAEu6o67qh8cUNFy739SsDZTSwKtZGdmK
9pd1FzQpiR1kvENoO64zfUcXjdGqW2Sx9ZI5NnoPeQKNHLMVSIAf7u1tv8B1
FEQlWoaSZF+AXWlVKrAOHS7sU7bTFRn7+Ofu7gFwx/YX1L/LJdWxj18IUgpK
cXQMOm8q+28BnIBYgtyv01JKNpeV5gjdBj3hoZGgp4Y/QWg2gr4oZ5YtlBpj
WISpzcAJwFeM6TgISrjWlfiIGP38wEb+okD5BnkNYM55mcLqaGYVe8waHoDA
jC+uSf12rIwuhl1ZW5TUQIWl5/3h3n4P/tk52HVh+v69yQxElyd7C8SrEvBs
URSZbj7WD86hm3K75zyADsttv0t1DAfwVxA/uPT9RR3OARDB1ibvKyT8GNiU
ThRFnY3Trlbl00FUdrV0XlFaioZvozGvIwPP7hkamPfNXM0UfdNDhSWgFVFX
m5XbU0ZkEqN+KcyCAI5xpX2jeJipT9Z3FLgsupy4OTmTEUJtCIKBNuQQvi5G
SAPT8Nx1ve6hG0Rnhu1gfgWlF7ZoHg8pGHoSK4bsjCN5UMfxzQKUp5rsVIU5
duK+s7ry08jm2LvxQyK1oMG4oJzGWUwmSrVM0Ot/vUS1QglPHqIrdnJt5yLM
XHLLCq3zTQUhS9MLvKxA9+lZdVjHOdUbpc1MJAcREbkwomi1nRjdAVk6UYJ2
LmPtWESXuJmKcGKSc3REQKcgmtCtOfGX7CrmsCg0OsjK1p8IbuaZ1i749Tig
CCqBGmvnpvOdG+SExRn0b+wpwRG9z/CVEzshdqv2FJYjaH5yonjDN0XetwzB
soIjF6nfP/VchB5PULHARjDyQWGBUMeYCG4jdQhWvwt7pZxaCR5rd7VFBXKa
xFmF9rUyoTEFVsI2/yaFN+mQTJ24b2C168noNXkIQQa26svaMzRLtc9ZfI/e
tSvyJKDlggiCHnjY3EqouUXrz+39ez2hvn388aOwvvZZcddwmCtlGXShScaK
YYiMGDISKwYGzuFCpXWTCfTOPi7UURZXqwQN1jj+MNQN85WZCflWwNoiw1kC
Ay+9VnFmjBCR+58YhNDKuLZvkNDxI5SDemjYHM0YiPWaXT0/O7k8g5kmN9qU
cubnzPuBqWIM0ttEsZbY4pAc4cDE0dpD3ioUpbNBizxeUXowe5cF6SbkzuWl
Yw6sBA08L/qLf/Trvt6fvp2Qsodgx2vQ2RQi5G07KZRIUAAJRQYyFFD5wIqd
A0ZhGn+XTlMVc3Jc2y+NdeGHPxjsy3El/7EkziwTJ2Zz4lsoStc5OdoGMRud
k7/txxTg+5qcW8DE6AwAu7qAcfnN2UFXaTBPlQq7IBVWaYeo8ZP6DCBYVspp
RSOKDbC8AREAiiC/NiMeRIfWbYyxAIsSvaeYZEGnt6PoVfRVtLUbffgQ/RX/
85MQjBWjv44Ir0c/jWjgpCC6IJGsJilbVhCNzqHDjb/2op82R+RnFyQobHNO
veBVKBCP02kfvZFxbmYOI/8GqjpgzGRiDCgRT/6+pBgFxWyze1wTsKAM9Znf
lOt59TfklIae2l9SxjQ2XViTLUbUjA76Y+D2Y3wfl/dkJ2LESC9BPHltenkC
i82W85yV9Doe92UymfXxFHw/LusUHevAQHvCeWn0fO8LdC6bj6rYfaeUCGNN
pRXlqgAloBBqiZNFU0q+QvsKMUbbSu9kXGlxd5Ljrzql7dTn6OxRsKiEBEq6
UWUCUKjSqM5Qq5HcHee+hAJCmOgLJ9KgmwMzJxDWC869U7Ed63LnxSi0d9QK
UOZWuEJgoSecdlYspwwVxCxG1x6LEIxVSY7gMhZj+CAn0MFeo9AtElgFKb7C
ZqpwXpLEcd3p5A4xo0DwyIS0hnffg8n4zbdXgmPhpHDm96ieh7HwMGFHB3BD
8QhEm2sdWIMIHRlpkmK0RYX2nFmmOeDfr2Sxg4iYI7bB37u7B/wXox7hJv/N
us7FyXffn16cHOOmMS5wwodv7ZM41A7vyW1aFeV9ZLi3iegDB+YslICRhGwd
+Lo6UAKtOR2TcnQObc6Xz+nDNACt5rAN9p8EZ5yktY74mQkpgnXPnneWANbS
sc7AhjP1qs22oRwj1tb1pCbRbRqr0KEV1qfH3EPnAO1dsWoQ9MTRTfS62Ow7
ffQPByLp1XV+Rxlsjp3rixAHmqDqO3OzswLJ8v4l59d+9YTSUcxYvpH3JHoK
yIUqSx9fVB8FTP6DM7WOnw/RBUhkkK3kxfoQHRsuJ/r9lx+i/gM/kfdJ1N5A
DF/AG0KZ5/sHEaDIX9m/Fc6FiNn8hUQDShc2AyV5Z0v3sb013MU+0HXXXM/l
22+///q4o4/tYB4nR8dv+5zWhu4mM4/Dn6LOeQyDebh9oK9qnT522uYRuKwe
6mO3bR6hl2t1H4Sg1lAIEXTDYOhmOxF1IOql+XYFukKHj0fXz0fYdVF2Zw87
11xtB+E7WR9pTWQON2rf7WmPelofdb2enjfmdHR8ebgmAns9HTTm5Pb0ABp7
Pb1on9N6yOz2tLvVPqf1UNrrCT/S7B9MbdSX+pdvD4cPQrxazNI8QZt8d9je
x9lJY/+D2dg+KPXIiAtPOPgxSHeONiG1dQVVC22RGgADexT1kVOpfDWTz6yv
It3WMbUGYrtAAuZ1kiU671ezePhRnDvCEYBh/hQuba2iUrEdbFDLfPrbw4NK
DNf78FrsrPPhi2Eldtf78FrsrfEhYH0l9tf78JrjdC1gBt0S9NK0VkqeZXxO
NNXbKhWnC1ABFSJKS+o1vEuKAsxj1tzNBIRVkMgGa9n0j6xu3cbZEqTCaOvX
rS1l7279+vr1SGXZY6K0nAj0DlwvCX9NrCiMyHvUtpIcgBj/eHrAQdcjiBv5
BShiHZI4O1mXJvjLdYgCv1yPKvjLdcgCvlyTLvjLL0YYsGePpgzk659MFrD1
X4YuOhz5KtXZMSDgkWuUdbosMVjCGfn5bZGBjUinoXB53FwlvcP/hZ8JT5Y1
pSulMCHymFYSF4xuEjBJc/aVq9xIDqKwhQatXfc0gHoAVh6Nq+ZngxzVMy/m
wbSprHGCttD+zJ5JFWc3AtI0nb+axaVST6+pBQUc8I3y9ev0K4x1RrFQoQhq
RtZ2KWsOZSins4XfwIh0cqi2n2fEEEu3j5bCLF5eBPp020MyHzt89YT7lPsp
zEGxdn99FPjrlbsxcNWL0xD1lVNFd4YHc2xoDpNOSoxith9KE77nnc8hWq84
Z9ayw01596lPCtqq7/UchTNHH+Ev7VE/0fA9OCcRS2kRHhMg8AiZQXjnuJDC
JGjupDqhA6mnXQA+e2AQURASHbHUpXtireDEMcFBSUdKpTp0SQt6p0MZdj06
qSCIEvkHBfVuaB8vx21MYMSBAEHfhtmQ8Mj9i2mSM80xmw0pLiFrZEGHzbUD
Z+Sjvn5gJvYwghJkEHYRZ+jjA3sGhVCQw0HGAcseT8x65FMU2g3LCSaTpVw3
h+pSea/2BsPBXg+DjUjpUSancXIvgtXg1DGbV81SURSlOGASJs1HRwed9Vk8
ARh9I+9k2ZAgBJSgW5Iq07xQ0aLWDjeqTVgtHd9UGMa8JyRTpbvpwLgbLuK8
4AQdltgtcpprdMVmEjOAOApFcXvkPTyfiYs2GrMrL06+Iv8eA6RV7YriHvuu
cSzqzSMC5/AYyaIJHtm5vncwSuc2O2vgdNWcc48WeBxORUAfjxScC+1LUO3Z
IMp8pU8gvsITiCokhQLxlRaISKnkTJHzj5QNWbuO0zvtcNapWsYJ6Eb+KV8M
3dRMyCZ6JtCZ4+QCNDIOLK+BPXGiH8l1OfUDH6viJhRUeih2YoMSOikRYeVq
z0jk6nuRyXxazyoVQCprSb0EAZxwlo4D3MRhMJGNx/VT2Qauev4OWPq0mMvy
Xkf2OuYVqXmBmt41C/Eh6vj50O6v7Py4zbvT8bH40KX2d774/I+F62kDs8Sc
iYDJD9dbJa90Z2v9j2FQG9gL+xlyPLVaZ9C9/fU/hkE1wjb64YjNmZxHG374
ZrNlUAzn6E9NZKf5oR0UyNepCdCyUpubucZKH/5YD6r01z92ULlAxgkKqNPP
779SVNiDfn7PQc+0bRH28yjs3d99FPZiJdnWfsCo3bEe3wcGpY/3tkP/Z/ug
Dnt183EfwVgDObOKsXJ1gjUX0tLQeKrXbfiFGO6XabiKEe9sP7yaVsjsrLPN
rZD5IgzabwiS8JMarmLciGOKF9uoejsv/jINVzH0/T29QPQ8nRxt93VGjvqa
syCak3nx/NMarsfonTwg3a1qUCVxFpfBZOw2Pa7hKgHQDRn7dcsaV0FmdcNV
gqF7Msrv8/htWt3wCwmMYBXrC49wMl9CkLQ0XE+o+JNxBEzj2MYjpEybsbJK
1IQRybUXGgYg117o/xhRs/Pwalohs/M44etA5t+iZsVk/i1q/i1q/i1qwoaf
JGquVFq39pRz6ZqUzwfofF//LKCbW/5RlUXSZfioOtpEZ/m6B6W8JNrGuTTK
OPQSUN08K8qL18e9/fI/ztGgSrofCn1ku6ZKNZhYmdh8cidP3cxLZalvyCTh
WppX8tcaRkgSwJ5LRJ7N6L/6/Pd8QEE5/JaDXPDJphDoLjSdtLWi2B21omts
JHxDI9gBNxmgVJBjVmToth5x45E+jDaWumLHxKZf6/wxw6t1JEGUxV30RD19
ggD4fd2hnKzwVLkEaSrvnzruI16fF9NUx4I7jnLBjEfc/gaBwIeRledT2MMJ
uiJANOKRNzY5mmz8pa1HmMkPK0bejowY5TnpHkA+KkccaBy52z2iVxf86p5T
JJZ0ylgo57/8x5IXM7qIvlLw2Ch70fcb55ubI10bbYR/jtR4jK7LvnOGQcUh
kFR0aRX3NLgiQAMvDSuLo5sjl4T9Y6jbAz7CjAOhmDFMHWXZIk7L6P3oFpY4
+mH0kULVox/sUm57vBLoZzigUMFSFbZS/NhZxeivbrvoAialDn9cjNRBCUem
Ew350IZBdvCMD2caFMsaBqNPLOmMkDhgpvDpbuunmiL5Q81tN+g0ik+EoxVQ
ZRp+AKrrQwMQ4gc8v6LAUWpwWBg4iEnpET8YiAXr54343IUz9aITV9Gu9ud+
GuVC6ybd8qEiEdAtfPoIqg2BIz6PaqOAasVnUm3kU63QVAuLbKFZfPq7kSvC
9fHEyq3+dUgV9Js1SZVjEV+OUBES/yQy7V70Uw64Hr9VZGrMqAY8lK31RfHr
q9s3Iyqoa8mTIOFXn6CTPaZ2RCfqqeN8lwDr2wsLY4tuNtC7EvF6kXfU64G5
AI6e/ErFyHmT/jpyd94kYpB2bOxBO1P3JOOIa617zEoHugOFuRPjA+Lwh1ZV
TJhi9tZAHrQxWhGnxyojfcDTVpWYA9B1aoEASLXTq/XATjT8VLI8V7BnFl7+
0EKMbYTIeNJJjI/DmeE/C2faGeq/3p4jU+J6eMyVuHIesyX7XJ1mb5wZbthi
1Ny1xuiBZ1mpJ5q90Z/tNtmKtoyT7aNZfFK2WTwubrlsaWDY0gIHR0eHWOPq
JE82NkkSeI+PJT7WJapQqXHKBw5cIM3UmUDj8tV1cYzN59c2DH3ByJKViwJ6
MmdyeQ95X7xTvphJbB54J8CDokn+hJ3zd2bqXup4Y1bKcaJ81eFMRKcb1vZP
To9z6wL8gMlL2gX3wb0Kw3H9iHbPb5Bb7p13Wu8PMXzRi3a2e6Gf+IPBLzrF
9iHa3jbR2A/RcHdry/yxvXVwYP7YGYqdLeht2AsdyLZHOtMG7fb2nXbAtGyP
3pthi1dBd7WmX8GhXswUZ/yjw+d24x33QhPB1BS0h8h1EI0CImbh0BAKLutt
UwlUP46yr6vNAkLqJDHiBSZv9k9ueXNHuSBWf5rfFjfA5VsYw/ocyFGHR0E/
I33slzPL7ZUgVkkY3RgW731b3c+BwEp9pQbh9zrwdYVvA756vXpMXNyjeaSj
3q41+SBxueXiG8JFXYrVHs/EvD7/TO/Hzor3buZ/29Uobk62ynJ82WRt6ESz
rdX0PDaGszNfrM/KbHzlg1Xp+Y6VRzOtxoFN0ZGy1mBPNuFLJ/SJjgS2Bh/S
6V86vU90ZGc0xtRxID/XRXTkaDTGbWm+c7ArOgJ2K0cPwp+iI3a3cgpBJJQp
8iHcayuES8XFl2lWeyqa8JF6UaY58AwwzyZ0sxTXlTNDEhIF3hqDj1R7E6l9
4hSnjrkhckjLi+D9VGL1B53D3smABmb8rlFbPP+m5BvlXOMlHVRWznqPe8YX
RUVKDHm0ryBnMFtOCn0FC+BPOud/yHdkmz2h4ysbZydnm3zJB9klE83QlDJO
pwj8IzQgeQRLGplSSR2cL35LZyGUf4hVSZ78pG1Opt4h9mUOuIzTRjlrC/xK
cqlX7IOq5xZ5HRR8YlMINMkSq4JM2AqxycQ4Ftk9OzsvdoGrspP98OSSglNY
mcTsqD4YAvDBFzCmncjtvl/D6U9Vy3l3Es3qIEo8kVgPR8GmBRd7OsXae6bn
oFfjAIANktfpr7QuW/v7PVWDuMbnfXz+0R6jbK864UXAQqnjkaUwErgXYXkg
9xScTNwxP/b4lIy+1YUKW5Upl9ajwklI81gVNa7MluuLRAzQ1eLxDoFlruui
IFBTqmyGPOvZM/jPKSLfS/s3LOCUT3b3GRVdWWU1f1bWbbOFVmxUM1eTchnZ
ctxnpxEek7HN3R+8AVuVB9PjqHXztAlUpwApsJx5th9sjHRj4dh4JnAawhNr
RbOlvrBKocIv/+zUUzIUDPkygsAK+vrR74IijQknjt8Dt5cUWERsqoNpEZvj
VolzZyOX4wYu2q9quYi4hiKpZfjSeNnNBTSut2Nv/wiMd30AZLdnS5ifvTs8
QsBav8ge2oqnpFWzTalqxtnVuSU5zcbTESoAsbq80w2QBhHQXju24I9nwSvV
c62GBpVAhrxK62pTfdpNHs78HCJB1mN4s0slce4jsNuPnaHXjyNi1+nIW7vp
iIXx46YUgM3r6ZGTsiQaOVC6bvDb9ta0Fc4ucWvKeVI0qsQrrA95H3RGLANJ
bAxNG5tId5gCblfORk6K+SUdw6WJuAN9f/W6f+D5V2n4YJLtP0/USUNjuMDO
HBtye62o7Ynthmq3Sz9nx4XWLtBRrU5DR3gWmn62nQ5AlhRz5QO6ZPHw8DrA
OD9+/YTpkNMIjvE41VcefoceQ+HQmv7eR78PH0Is4hHyRH2ul8td624+fPC7
hb8NBvEc32GRQMV0Nryt6+neFQn32iACsoCP36lKvuZ0uecs9Ti1PqLGtbJH
3jpHwmfqxpn50VwWg+KZpYmqMOZQkCrYZ9mwKt3lfEEXcbD6Dp8n2ZIoDm/u
0GkwwcFsYe/FKIsxFu21p//Lorg2CTmIRxgy8IBovOArcX9N5ObS30qABZ5c
pncqZplI5c31KfHlV9Hu6+j5FuaD7Z9Ee1vR7nP67060/zraP6ZX8AH8+SJ6
vgufiajtZ/cV9vD8RbS7S78M6fv9aH+bWr2g3k6i3f3oOQ7U3sn+jvtxCEKF
zCOz2EqacPEDa9Z0AKuNtrb0/7bDEQwV+GME/vlAZ/3Y2OsWilhrxxWXcPfz
EUtsYUy4ua9wR3b3rXLFF3PoAqlKAXI8On37gYoetZ0pBz2YLhTiu52mOlxp
RZhzVt0pdY3H+weOuHQm415Z6ZcX/Pnsp1cnF+q6E22IdfnImZX12c/tSbyK
Ly7ACdWq/sMELw2xgPU4SFh2nm0xTHzgBC0nQoUmsXBCVD0vecIRodXqCWpW
pbIAveodNRWwWJU0JlYmjbmVRVfmjLm+v3YE8epEdHo7210rnvci8MYIe6VS
wyl6hVcxhpYOXquNJ7ITstudAdneAXPjxjBPJwqpFHidh0L+AHaXnselEiSe
HUYRRa+zlsB1kN9ipJjz0HrLTVogTqjFHKfT1k7RXH8lJiwQIgp15whJlqr3
tLXoyz7N1fVctX9MeuSlU6rkH0PL+AlDrhkgcK8VawLOc5thD25UwvfSfuSQ
uo44j1YmgL78akUCKG7OvtvTQ+HLl195qlZ3AOG506sjK+IqCgrthCIC2h44
bdGkhCU8whh7yOZqmFZfgeaG+8jaecMo9kxqnN4LZ3pHOLnDk0sY7kewedHr
1oss0WwqBHQ8UQtZuq4qGpODPqxMoU28v4vWAlVFmJKiBMSe3CB1bw2ib9sy
MFr0W3wEnHPjaBN/O2rAnvUKp3xkf3EjqxsdEz+WTda2Hguz5RA+n4UBySYz
JAr2yyGtFXe5e35B8S+fOb3WeQ3cTDrMp1EMljmSLl1j08GOEOZWL8dh9eeq
PxSibm80WeYeljviPnGsN2B2zkOThtFkb4yTyOK0gekvP6gW3iIOFTMJuByz
kIeYnAm+PcTkzIdflMnta0A2UmAagUnWI0ZHCpjBhipTT+s9n0c7VnK0kI7H
+DY6OLFJqg+4dhCUPGhwZq+zB+KcllEH3b74DNaMDOiP583MquIWj2WDOW87
qViO9mLZ9Pf5nWHUR4CwbQxas0bDpXsY9yipIJm696KdRUfXcZpVOI2hZdSO
DqWqjRHH8uvnMtNt1h+DxV4qJyo+5bZVtHEVT6PtTU/XZBxkHh3W9XYqWXkO
XLrCgiCgYx+9IEfy4btibBme7cFQWXhmvL7R05zgism1oUJHFZ2PeqliWZ0q
P6Z60IXKtA0qKOYc6rJJFco0gC00dz1URZKS5mtTkaicehPpjXdl8OCE3LCP
F9+5w2Q1lT+kOCKWvqfQXoMlNmbQlYxCs8FzS2je6AnxBQ2qEJq2oLywHBu9
2BZd7WoBjsfS2nTU1/9Sn3/bslITr/LCfi2xOF+vcC80cUIX77RzVCO1Tr7T
QqoTldy9riJVpYnuKoGJsgPtU9BJJT7a3nsOKvG7BxHq07Ep2EPGKncuLlYJ
0lQ1Yn0OVnWA2FEx2B1T8SXj60JXX4PSdgxUL8VY/crc9AhmzWV9LoDtOn8v
ALcWOdS5OH5lsrFbmWyCpbJf+RfSUYWyCV53Yh4hlRSqeB9AjW6SUiyduujM
WHUvyTQnCbFvM0k+B4iPBtg/v3XPAaJeepxOZVV7aav6RjanPU9L9aANxV7k
jxd0SLYG4z+ubMEDU9nLnnMBtArBaMBq8WbUPa1y4iE3e33nA96vKw9o7FDS
TI5PUTBwH6hu4KVkrdWikW3K271Otilf74JZPc5R/FVZpwbwD+ZsfUqO6Y5X
Pdj8fDBl973CNqv+2N/FkvtdnXFttg/R3nPncfcf29u7uvRfF4ElaxPY0aMJ
LHER/gL1Y/fBpTp6a0ku8UmuPRjw0M9adJq4dJoEdBpM+6FpBKvqJmwk5gbJ
Agm4J7xbTxyI8Fi3yiSy3NzhEJTApANrF8oIv9R5FSJgHnRCe+xHpt3SBqTz
S76YqIWJCF8CWilB13CFV0W1sBaFVo9iLeu0aLKW5LGsxZLRY1mMivlctDy7
XC9l9NPY0KpneP1G20+ziFnIkPacP7r4lvMMb+dYOZBzPYdTaZIKSNg/vDfN
gpT4DC/vaB+oeXvH561otyvPtnm5x+etiJ2Rpq6zx6nNFSE+t/Z8lJhQ2NLc
DaepeKM914sYulHd9KJ3myNhzqG8TqfYcJeOlByffn169fb0+3ccazMnu6ob
E7+0ozqqC4UsR+/MR+Ta46MMXBJ3YEpCTwpJF+mZiH2xUIWYS+gEA5hyQrwL
+QjPklgVmYi5Dua719yZuznVSlX56FE5K/6Erv23G2fo75ovOd0ePQSKr6pR
DIiAwpdlHq7TuTUXi/ALLMJfK9lJAtN+2iE0nSN2WmSaTfb1UvOYBaX58xOF
ZVNAPYhB3qWtDRz6gSXp4qYn3mHB6uk8Bqg+DpkWLcgkXJNwFSKxlKOBW3oJ
tipSW+VqN+tslgg2y1Mp7BYptcJuklUtLODX2q8WbHDrxf+uR9Asu/m0Y2hm
mi1H0Rxm8Ugp3jarbklux9ElZh4jv9eW1A2Ju1o+g7HQi3aew/99+eVdRGUf
br/YG5o/drecY2k7wxc7YCxARwe9KJBR3l1U9uFw74XT2cG+PfC2u/dir+uW
Av+sj4UqO2Tt3VUsv16pXGjM7kWj33a44qoDUkaR95tk4Q3KDvb8ENvDTQH8
ydRTavtkdxORGV8QyptkV/eOAs6YBz1ZlsLvwurnzn3taa7vPGi5TAA/19Xx
zdwRl1V5e+8dTLpHVKevStZvkVhpJjqRPIB0CK/BWnk7llo+N3en/a4Jm7fA
+Tv2q7VzeNDpHkgEM8QnpPIEXOj9+zat6WN7wk/UnvAjHpnwE61M+HHzk5r+
vcDbZS9fDR7DKlc4dNR9VIZ635iNcKx7c1MBitUmtrV403RiGZ4Bcgx/ezzV
3HMTFqsYWbk3CrPmHrz5gASle/vBrqpUwWeKCBdptlZZKW7xBK07KJ+wd9x7
mxw7VXHZBuBVVNwO0aYTdQ0TaGsqpKeu9WpFSI6jnxCGOyvyr6Z1L4ZxYcgq
gDnIYa8MdiS6zw3wFiluwV7xNXGixQH0L4wTR2viRNKFEyHV/dNx4ugPxAmf
g/zgaP+EL0p1jluYhoVFJ6o4fkPRjSpsVLQSuEvOSt1Wm9dBzEOvu7aNC7fJ
71bhRMdGdQLk6HcDyFErQJJ2gLRg8u8LkMOGaLMXhDm3Qn1c62Yqa75VyoYn
dHjWQg89c3VVpK6uSprKpwiUqeBSK5WxEF6G7ROE+ogyE4abDXXLIaYwRaHr
qvHuTAV3+YGR9Yh0heFgZ2W6gnt3lrHJfG9Ag8Ir8ek5DS1k/SWCkmEEaf3M
hlavB9qBX2Ja7db05+/H0efsh66C1yxkzP2yx3rENb8AAo2w9aM2JvnUjXlo
fpf/5Pn9UxCnK6/k89mNDjk/itF0o7KTvtLOTSgq1shsEZ+U2WKZypfNJfkE
rhIkYDgur3Bmn4a2XAXgE3iL45//Q3fkyyaffMkdaczsj96RFSRyFG6I+Mzk
Lyfm6iURYhDaZhH2GmDvKH5H+hexDjVyO0Q+gbv+zySgxn59EQI68gmIQl84
/xbRqAL2nXmZAVyI//NpkC8jFP/5VGavYid9HndRP7CXiGBEFYfpq7uvP66T
q2C6eUy6wrqNbKzDu3kbCx5nIJ7jxQLvLNamvb2Wveq4NHzIXui228QHznXv
ehpqM6vgznc3nGJf5HT9Ld6B+mv0wQGLF1rRTysvxmKerp2Ptc7ztoyHjqei
4wqcDxFeQt/2vK3cFV0x0fL0+cHevui46YFGuP7cEbafbx0ciI47bzBcNGxd
RNulnh+iFy2pZtDH/nC4Kzpux6EhWlfxmCF29vb3d0V71hzFqfZbV9EBkmFz
ZLwL9PmLoei4roOGaF3FY4bYfYHb3Rr1aiK6vpTaxrqI19nsag5FBeyOeZ2m
VvwE4xeXjU6dmJaaQ0soS9hQlnOLVVC7yMwc+YedPXeq4rDefLoDsJ2shC5Z
MfkD4d/ux49kDw2ab+cMmhfsdhXC2+5FbVRMFY6cS2A+RAfdfez0sFjPXi/a
D15gH/Y+GKwvKna7SuqtmsiOm7S1PezuZNVMnKtpoJPdtiCnilJSQNWeRbZ4
4tUbs7IJ8U/EWeWHOc0pRz/y2hrRVDfg6IGCqGJaWRdp0/2tsUmMqsWvf4Om
0BK9l4Gaozqn0CMG7C5lMoj2B0MkRMDrAXA7lsdK7aOcJkfQBaFJL/jo9706
LtfIwmlhIKvSuHCRFFp41xOXZ2uvc9esc7g1iPT1CSbTRnihDB0Snjw6YKMd
kYKCNSon9cyk6lgNwurWDPVpVozjzJwEikYXh98cf/vu9P+cjIS3QrUG6rEI
Avgxp5ZVslYO5HomnS6LRQ2dzUDNwnaUP6YKn7EP/PxsUEk5GWHZVFROK1yy
5oBYNQ6Hov3tyg9QtcE9dqgy1uzukqansFekVbVUVSSNseE2fyhEsw46rcrp
YqpRPv93gC6nb3rR+fp4tWfxansgQrSK1kAr8Qi04hggjADTNGM4fmVMA4dt
bME3Q8jdu5f4Z6NXbyJitjpHhVtGzA4z3HIVIYK1DR46GNkZZwjY4VrnHP3o
wacednwoenDZ5q1ucUbbU3nsvOU+7rW12LSVEMj+JRaW9OijPhDuUPkhWl7d
SJ0ur1PisXqXKfoBf71+zbffoMld3sIwSC3XSybJX2uZV3Sz2bre4DY6W8sZ
vGjBq44T7nadDevtYd/w49DHHEB6DOKs5ep66DDj/8eoEvhIWrjR47Cl6SJd
iR9r+LX05hAkHvZYdS3oET7fBxbU5Y16Gr1Lp0onOlISX/NSEoJFVfdBsOb1
cs5XGVqsX1kSVCehWT9FV0sM9notSyoRK6nucC7vPG3R9CFIoBDWTAKnVyUz
xXipXv+DUnAgjpelhn1dxgAFTgcEyiomXJXXg4OzkrsUtB5UjjCVmrV0MBPH
ONMsSjIsqMT+KBitKO1VknMD9cSDejTHondYcQ7oiY4PFQKl+jKv6YAxlb5N
lng/6hi40l1cTrhsMzQfo0OPfFzyV5AbVIDAk8cVSWExi28lzfle4lAwzHIx
If0hyKjsWDQLYOSQC2tmitNgKJW/yZ9E599tPLvaZM8uiXMqBAEt1EEFzlGM
b+M0Q6VywOVoddpxDysp6JPheLQA3sW2ZBX9fTdL8ShWQUVkyEqHQZ9dsa9Q
8AOqKSORAKi2lT8mb3SgwahVJLOiUA4H7FQ4nWBhlCjBm9Bir++ZPksWO/Og
QgROOf5+Ei9Iieb5Vcsx0boeRz3Qs8CcFgInKOXt+tbhT84BCjM6gd6OT5TE
/g69C06OCKdgEemil5KOCgSn9oGodEMvHWUgLtXZDysD7cY7BU7ZnmgiMG28
X+ISyOM6xZRatCkAu6kWuc6zUx15eEoFIyUhmXBQBlDboJxBnArxKkYXcgxU
hzmsFqfMiRpFEYI2pFnNfhA190Ht1zffXnEtEH28XTXlCsmVqkuHddcRfWCG
MXrPFXZX8wL3z+FHWEHJWalgPgZ8ZDG7tzTpGLkgXQDk0xT9aVzT+OLku+9P
L06OsS+ToExsUMkaRZ26EyymZCl3EF1IvtrQ205KkzIsRyEYLc6legNPXeLT
bL/w+JeteA4yYipLvAegZj47Sa8B+Rnz9cGnjdv9TY/uUn3nCapi1x5RugQH
3c7j8t4cs6IC/WU0L/jORJoyboRjBdkN5Dk6ZfKoRP3VXeHwdQt8pfNgDXPM
Dsd0NDeTEyslOKnj7mJAdeTEas1A9fRFwNh5QvrbTE7j5D5k/sCoAhYNuyGW
MGiJXHbibLY7BUDO3HhbVc/Oe1RMUpiQP7+G4KH9U7IAOwK5jnVQXDZ6hZRA
FIBJfLeq0gZf53O7i5sD+nTIwfkKAFf80c5QARmakfDmSjltU0pB5XYZ4G1N
AVyqRpaiQjZeqisHhkDbdY0nfBVcHOr3nbsaY5CGc0sLPOFAWgSQad0AAtcY
b1DIuHIaVbbCMWEn6KIMNaICv0aPNO/aANxFQM1EXi8xHAYzLzijcg6IS3YE
tuDbZUJQkAFDLB0xzAV/LuVEOYyErdGvzpPp8129CLpBHnur4oAO7UW3ywzp
QK3TsDauygR8EOF/U3FYUpcCDhVV4Hxv1YGVNNd1yYT4dknXQ9ga8srEVB9U
oUKleA5wNH38hWrNpyRHVt4KS9IK+NpkmUh7D5+ps9xDpkRbDOyOuM1NTiXi
+KANJmRlb+K5uonSGwxAr7/RRzVhFepzR5GgovVgQJEEP/3muH90dDi0xZOV
PcxnQYGU4gTgPS8mMmP8i6piLsUx8NdU9t/KLJvz2XWsXBdrwqqq5Vwpaz8f
XW7t/GKFjnOzADr0btpvFrgxXzpnQZqVuZRd6x0bydI5lkSH/8vsWruokSsB
NLCgtjp6uihAZPibTjY5KOT4VXQX0y3umMMNijV5K1mokIKBSEjCLA4g9f79
q+Pzw60DNnBhcnMZI9NVtRgxbRBAVVFNYQwd95Q2CmPjIdt3srwBVek4nk8B
Abzp9YAJR29hanxnTOPOg1L+Y5mWylQO4IeFUhO5qJXCAPONKdHEFKFO8VQt
x5kT0mnofO0cA+FaA1EqFhKt2hS6xeY+ypdzLHkDf92Y21oE6QasOcYK2Oqu
G2/eWXojnV0JtgNb40uh0TU2tEFO48Y6SMM2epKyx3j+8LnSBYW+9eVRKwIM
fod8cIF6H6AWaB8MTM7zR2aaIO6PkhFbBx66MF1QYXLoD+UWZ00joSh7smQj
Azb5TsY3OU4Z9YqlcXMC+SRJfIPG5nxZa5rPBTM+DkaS8opVLkm2AF0gh7XL
GQ3/70bybLg5gvlmWWWSHGyPdGc71rcgImhDcT7SFTxE5qPXm0hKsEAhEAvc
w0xSUbspX/8DG5vTiS9k9yAF0PMGn+ruqLod3i5NxhwHGBTPFxMWlssUw1l8
0d0ZsEy+LGbCs1WXpJKMHZ1tq6ocZ8NRtIG/2XpqlRgd6ddHwxEeZuTTxmeq
8v4Go5dbed+p5n+2TTUc6b9nQ/p96NXxD84d88JaCvZvCuGDGWHF3h7c3iie
gHSsUAiq/UWJEG2QNgPmXUInCJeALpucw29R1l8/aqU1MIjs3t5AyLqvz0k6
OO1CueIcmaGopbhGZgsNQVuaEPNQIlPHf0CDyyiBa06DUZd05xWyLV8CYZRe
ZAVyjco3t5REDkaBHpDmJ1Iq7wtfJEUHEzAG36TBVq6N8SBWaBSNUcWDCrSc
mm7FW1RyOSlUGxMJDIOQb96ebyvGr46+q97GckYaDXG7WIT9hJYlX4+lEFk5
9jACmyZ4yZclmbhWXWFRyECBQSWuni0rLmGvajjkyk2ClVkdLUdvgVB7TLbZ
rzGqhdGOU1Vgm71kapk9vKIKxQToAyB86KCt8s5zyVxvAZyJ5VCfYtWhplHJ
uibMp1emV2FswjS/zvgwD213OV3O2Tx3d4C0jeOGlMMp6GO/rH54N19dUbgs
uCbCubzlgTKh2lzlcG5Txl43dBvpb5rSGLSw044NwfhwE979UpnLkox9HtNd
ScorYCMBJdI5VsinK9B+rRUDcMu0NtbmVmgloKl6EIrX0p1MHEDVdyh7uQnt
13BFnkOcwi/ksEHSA/syvS0SSsHzvLQ932vNxjZzHAeZrTNAOb6RO7klFHqq
FLZ23+qVmAA4ZUmEd2L9qRJuJMXMNrKWldkGpWNz7gXrGj2DbyTAT85QvpK3
jf5u3NNAk3lDGgVtPzvmrBOZ3T4gayWwQToL6lyiAno+MBHtGyE1CCj6lsiD
nEMGldFGU7LfuSIQvXB486C1btxS/yh2MjmZcrEpPsydogaXS1sG40L7LizK
47KcrOa9wR5O+2d94dbhL8C9KJeK6oRWkbn9RVsifpesI9V4aFzewu4LTVba
zaMvB8TqKJpNVJJMF+UENJoyXYxG18zhNqLyM5NpibWwe75GBmDs++xM+XUA
wbB/TgbzbnuWLj5r6hoHqK3TC2wc5/3TRrqDukC+TKe0J76142SkNlIESGar
pFr0j6g6P8LW+dHmq+I8qSkMNDEOR284Mu81oG/3XV+wvgfIXstTxZnJtdPX
PC5Q6SipMLiqW9ZI6CNksf0SajlRfxvWESBAuLwDTppiGTbEQzoxEGgJtI+e
J0mESO+CUha0WkAioV3FE0qWUG7UrgaY/F3mtLlqU1vCV26dBqeBsvUoQRjT
ynhAhXIU+7mTGknpSj9NCp1VKlRuopGp5CV2UYPFCM8gXA96C2BC5qo7H0P9
RDPCV/E0OpxMUlU1Kmm6WM45V4zKwPgeGD9B5v3Thf2y73f0UXGZsCZErX0n
xBpDiDjV+Wz0vVIuR9cLpzzyQrBzNUN7DvRuVJtQY4rTCTPgcAAj4+PImTtt
EBhRFUod+Stosow/6ZxdcRXsj9lS1lf0jdxJVrBHnx4gnZSxhq3wN9mEEYxj
EFnNPL6P7tQ9hgVqu3blpAgsQIvVSS9cACqOZukUGZaRIjAoBhMbOTb2LgXN
M8EyK+5AppQ9m3c7iysPGAlwSrzHoERzLakMcKImcBqlEp2YhLOXLfDTbN89
8x3TBooxlnwNLwywOAz6Soo84ToujYMX2uJnRSWDLUCtqZvsLBoBypu4PHMN
f6VGiVEuxAx1wAptN6fulc0IFmFmlQMYonJT1yZOZqlEk2eG0aO27wWOr+ID
ig9bYFQUyNHim04bSH2nrtKmavzuyfUTYpJPrsFKeYKjLbMJJf+R9qcECEhq
SXYbAwC2gAEaR7BkLG7pgI7Zv7uUOcAPxRKvvLnl1FEz6weEkvAW5KzgSUXT
hn9ROVpr3mL1vB0ERbiSu/n08JvDhquZHpJ3Pp6oKJU58lLKKTnNpXHBjM5B
qwDz9E1RTCIqNpfcRxsgZjdHQn0NZn5ZgM0F05zV9aJ6+ezZ3d3dII3zeFCU
02dxhbMkUD3D5AWrjrwUog+qmeoFN/llNGo9yGLb4JUOuk1Q8+glbMLJ0enr
06PDq9Nvv7GhQqqDvD3c/wXb/sCpPY5hQfrEpEjIYut15AwN1pzr2ck/e7KU
xSTE62WJgpvCgc09d1W9h/NgRDPHReFHZJBgpMqqoTPdHrIaqZLgOYdiihIP
RtRygXztZAYmUbTx6vJ087/G5f8WR8B++sdxDvp29DZOM46eOh8c5hPgi1X0
dikzcsJuXH0fnYD+NEN/OH/zlwK6zgFmFyiHN95dvYkO32wKPERA8VrSEhJt
NBBWivcv2RUpJ18BH8kq+YSkfJzfEB3oKS1BH8rZYXACKv5UgoiMztCMrtIi
Sy3vl8RHwcRJ5R2B71rKCQ7OTN/ZwIH4f4r4kc27BAEA

-->

</rfc>
