<?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.17 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wussler-openpgp-pqc-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.3 -->
  <front>
    <title abbrev="PQC in OpenPGP">Post-Quantum Cryptography in OpenPGP</title>
    <seriesInfo name="Internet-Draft" value="draft-wussler-openpgp-pqc-00"/>
    <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="2022" month="December" day="21"/>
    <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>
    </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 the
combination of the two components forms a single atomic object.</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+ is a stateless hash-based signature scheme. It's security relies on
the hardness of finding pre-images 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 in
native format 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="NIST-SP800-186"/> and the
Brainpool curves brainpoolP256r1, brainpoolP384r1 defined in <xref target="RFC5639"/>.</t>
        </section>
        <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>
      <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="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">25</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">26</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">27</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">28</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">29</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">30</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">31</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">32</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">33</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">34</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">35</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">36</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">37</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">38</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.</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">25</td>
                <td align="left">26</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-x448-kem"/>)</td>
                <td align="left">x448Kem (<xref target="x25519-x448-kem"/>)</td>
              </tr>
              <tr>
                <td align="left">ECDH public key</td>
                <td align="left">32 octets of public point in native format</td>
                <td align="left">56 octets of public point in native format</td>
              </tr>
              <tr>
                <td align="left">ECDH secret key</td>
                <td align="left">32 octets of secret in native format</td>
                <td align="left">56 octets of secret in native format</td>
              </tr>
              <tr>
                <td align="left">ECDH ephemeral</td>
                <td align="left">32 octets of ephemeral in native format</td>
                <td align="left">56 octets of ephemeral in native format</td>
              </tr>
              <tr>
                <td align="left">Key share</td>
                <td align="left">32 octets in native format</td>
                <td align="left">56 octets in native format</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">27</td>
                <td align="left">28</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">Key share</td>
                <td align="left">32 octets of <tt>X</tt> coordinate decoded from SEC1 encoding</td>
                <td align="left">48 octets of <tt>X</tt> coordinate decoded from SEC1 encoding</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">29</td>
                <td align="left">30</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">Key share</td>
                <td align="left">32 octets of <tt>X</tt> coordinate decoded from SEC1 encoding</td>
                <td align="left">48 octets of <tt>X</tt> coordinate decoded from SEC1 encoding</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-x448-kem">
            <name>X25519-KEM and X448-KEM</name>
            <t>The operations <tt>x25519Kem.encap()</tt> and <tt>x448Kem.encap()</tt> are defined as
follows:</t>
            <ol spacing="normal" type="1"><li>Generate an ephemeral key pair {<tt>v</tt>, <tt>V=vG</tt>}, without any masking or
clamping as defined in <xref target="RFC7748"/></li>
              <li>Compute the shared point <tt>X = vR</tt> where <tt>R</tt> is the component public key
<tt>eccPublicKey</tt> according to <xref target="RFC7748"/></li>
              <li>Set the output <tt>eccCipherText</tt> to <tt>V</tt></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>X</tt> in native format</li>
            </ol>
            <t>The operations <tt>x25519Kem.decap()</tt> and <tt>x448Kem.decap()</tt> are defined as
follows:</t>
            <ol spacing="normal" type="1"><li>Compute the shared Point <tt>X = rV</tt> where <tt>r</tt> is the <tt>eccPrivateKey</tt> and <tt>V</tt>
is the <tt>eccCipherText</tt> according to <xref target="RFC7748"/></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>X</tt> in native format</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="NIST-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="NIST-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 <tt>V</tt></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>X</tt></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="NIST-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>X</tt></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 in the native
format 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">25, 27, 29</td>
                <td align="left">kyberKem768</td>
                <td align="left">1184</td>
                <td align="left">2400</td>
                <td align="left">1088</td>
                <td align="left">24</td>
              </tr>
              <tr>
                <td align="right">26, 28, 30</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">25</td>
              <td align="left">kyberKem768</td>
              <td align="left">x25519Kem</td>
              <td align="left">X25519</td>
            </tr>
            <tr>
              <td align="right">26</td>
              <td align="left">kyberKem1024</td>
              <td align="left">x448Kem</td>
              <td align="left">X448</td>
            </tr>
            <tr>
              <td align="right">27</td>
              <td align="left">kyberKem768</td>
              <td align="left">ecdhKem</td>
              <td align="left">NIST P-256</td>
            </tr>
            <tr>
              <td align="right">28</td>
              <td align="left">kyberKem1024</td>
              <td align="left">ecdhKem</td>
              <td align="left">NIST P-384</td>
            </tr>
            <tr>
              <td align="right">29</td>
              <td align="left">kyberKem768</td>
              <td align="left">ecdhKem</td>
              <td align="left">brainpoolP256r1</td>
            </tr>
            <tr>
              <td align="right">30</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 v5 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="NIST-SP800-56C"/> Section 4.</t>
          <artwork><![CDATA[
//   multiKeyCombine(eccKeyShare, kyberKeyShare, fixedInfo)
//   Input:
//   domSeparation - the UTF-8 encoding of the string
                     "OpenPGPV5CompositeKDF"
//   counter - a 4 byte counter set to the value 1
//   eccKeyShare - the ECC key share encoded as an octet string
//   kyberKeyShare - the Kyber key share encoded as an octet string
//   fixedInfo - the fixed information octet string
//   oBits - the size of the output keying material in bits
//   customizationString - the UTF-8 encoding of the string "KDF"

encKeyShares = counter || eccKeyShare || kyberKeyShare || fixedInfo
MB = KMAC256(domSeparation, encKeyShares, oBits, customizationString)
]]></artwork>
          <t>The value of <tt>domSeparation</tt> is the UTF-8 encoding of the string
"OpenPGPV5CompositeKDF" and MUST be the following octet sequence:</t>
          <artwork><![CDATA[
domSeparation := 4F 70 65 6E 50 47 50 56 35 43 6F
                 6D 70 6F 73 69 74 65 4B 44 46
]]></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-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, kyberKeyShare, fixedInfo)</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, kyberKeyShare, fixedInfo)</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 v5 PKESK, as defined in
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.1.2.</t>
          <t>The algorithm-specific v5 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 in native format, 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 in native
format, 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 in native
format, 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 in native
format according to <xref target="RFC8032"/> in 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">31</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">32</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">33</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">34</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">35</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">36</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
in native format 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 in native format. 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 in native format, <tt>M</tt> is the data to be signed and <tt>sigma</tt> is the
Dilithium signature in native format. 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 in the native
format 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">31, 33, 35</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">32, 34, 36</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. Given that Dilithium + ECC
signature support is mandatory, an implementation MUST support SHA3-256 and
SHOULD support SHA3-512.</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>Sign <tt>dataDigest</tt> with <tt>eddsa.sign()</tt> from <xref target="eddsa-signature"/></li>
            <li>Sign <tt>dataDigest</tt> with <tt>dilithium.sign()</tt> from <xref target="dilithium-signature"/></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>Sign <tt>dataDigest</tt> with <tt>ecdsa.sign()</tt> from <xref target="ecdsa-signature"/></li>
            <li>Sign <tt>dataDigest</tt> with <tt>dilithium.sign()</tt> from <xref target="dilithium-signature"/></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="eddsa-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="signature-packet-tag-2">
          <name>Signature Packet (Tag 2)</name>
          <t>The composite Dilithium + ECC schemes MUST be used only with v5 signatures, as
defined in <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.3.</t>
          <t>The algorithm-specific v5 signature parameters for Dilithium + EdDSA signatures
consists of:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing the EdDSA signature in native
format, 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 in native
format, whose length depends on the algorithm ID as specified in
<xref target="tab-dilithium-artifacts"/>.</li>
          </ul>
          <t>The algorithm-specific v5 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 in native
format, 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 v5 keys, as
defined in <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.2.</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 in native
format, 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 in native
format, 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 in native
format, 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 in native
format, 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">37</td>
                <td align="left">1, 2</td>
                <td align="left">SHA-256</td>
                <td align="left">8</td>
              </tr>
              <tr>
                <td align="right">37</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">38</td>
                <td align="left">1, 2</td>
                <td align="left">SHA3-256</td>
                <td align="left">12</td>
              </tr>
              <tr>
                <td align="right">38</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="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>
        </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>
        </section>
      </section>
      <section anchor="packet-specifications-2">
        <name>Packet specifications</name>
        <section anchor="signature-packet-tag-2-1">
          <name>Signature Packet (Tag 2)</name>
          <t>The SPHINCS+ algorithms MUST be used only with v5 signatures, as defined in
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.3.</t>
          <t>The algorithm-specific v5 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 in native
format, 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 v5 keys, as defined in
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.2.</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 (v5) 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 v5 ECC certificate for compatibility and a v5 PQ(/T)
certificate, at a greater complexity in key distribution.</li>
          <li>Attach PQ(/T) encryption and signature subkeys to an existing v5 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="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="SPONGE"/>. 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 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> as</t>
        <artwork><![CDATA[
K = KMAC(domainSeparation, counter || K1 || K2 || 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>
      </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="NIST-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 v5
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 to the
hash internally used into 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 anchor="elliptic-curves">
        <name>Elliptic curves</name>
        <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 multiplications in
<xref target="x25519-x448-kem"/> or <xref target="ecdh-kem"/> it is REQUIRED to perform all checks,
clamping, or masking mandated from the relative elliptic curve specification.</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 is requested to add the algorithm IDs defined in <xref target="kem-alg-specs"/> and
<xref target="sig-alg-specs"/>. Furthermore, two additional registers are needed for the
SPHINCS+-simple-SHA2 and SPHINCS+-simple-SHAKE parameters defined in
<xref target="sphincs-param-sha2"/> and <xref target="sphincs-param-shake"/>.</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="I-D.ietf-openpgp-crypto-refresh">
          <front>
            <title>OpenPGP Message Format</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="23" month="October" year="2022"/>
            <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-07"/>
        </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>
        </reference>
        <reference anchor="NIST-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>
        </reference>
        <reference anchor="NIST-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>
        </reference>
        <reference anchor="NIST-SP800-186" target="https://doi.org/10.6028/NIST.SP.800-186-draft">
          <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="2019" month="October"/>
          </front>
        </reference>
        <reference anchor="SPONGE" target="https://keccak.team/files/CSF-0.1.pdf">
          <front>
            <title>Cryptographic sponge functions</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="2011" month="January"/>
          </front>
        </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-01">
          <front>
            <title>Terminology for Post-Quantum Traditional Hybrid Schemes</title>
            <author initials="F." surname="Driscoll">
              <organization/>
            </author>
            <date year="2022" month="October"/>
          </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:
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
nQxoqqeD1D52aszF/CFySMuL4P1E4hlSncLVyYAGZvyuUVscTuZkPKUcYTlc
On1vnRY947Gg8g+GPNpXkDOYLSeFvoIFcJPO+R/wvVtmTyh7c+30+HSdy+mS
kTDWDE2pxZRE52eQguSJWNLIlIqV4HyxLaUCKvcXK5U8+XHbnExZCOzL5HeO
0kZVOgv8SnL5JuyDKmIVeR2ci2XDBHTKMp7PeTE6h0dbsmSB4N2gwFW5tsrB
8QWFsrFygdlRnRcJ8MEXMKadyM2uf9T1T1XLcS8SzSoPMx5LrDSiYNOCiz2d
YeQ903PQq3EAwKbJ6/QDrcuW8PtIhyGv8Hkfn3+2pwjaD116jtdQ6nhkGRkJ
3BNYeMVNApeJO+bnHieJ6vrJdP63TLkCAZWkQZrHSkdxZbZc1wM2QFeLx1Kg
i1yfDUegpnQAHHnWs2fw1wki30v7OywAhFKf0dCVU9qChEFJUbefzLVSoz5z
tSiXiS1GfXaYYIao/dz9U8FC1QlqPY5aM0+ZwHQCUAL7lWf6CQ9jHWwjCq7N
HUtPP2zAkmq/kb08twqhwi0/bfgpGQmGdBk5YAV9/eiboEdjwonjgMCtJeUV
kZpKhVikpmMDESZ11iXfR8AF9oCD9qtazgWXmTA3Ner6d7aGNKfJ+pdGOgmQ
Oy7eUOovwIcPF0jXoR4Y5j27a+vdeDcuZhd0KoCGYkT6+fJ1f9+rwcVnwUv3
7pjGnycq2fmXXaM+nh69fmKHohp4sKF9AM6OGN1RlQZ+VMlap6jS+QuxaT9z
VqjmhxzHsGSXQOLcx13ThwcY1QsLzof1Y+mA+7hqsLL274pXWLqdv6EIrYKp
klcwCQQ0dEF0iHg7gg8c0AHnKmbK93DBzOj+vQJTEDeAuoEWev0VELEG/KdP
Hnw/fQpABQ/MmqmfMyzIdXp2cIiE7yFPzxujx2vutU19XQfHcKcxMuf1Yxx1
S9GwA9u4TJSi5MCxxTsj/7FArV85t3z0f/md2Hktnm9g+HPvWOxuiJ3n+Dew
s+1dsbMt9l634//eEX0F30KbF+L5Dvaw80rs7IidvXC1CvZDM08H+++Zrt42
mKjY2ND/bYYjmC3zxwg8nYHMtTFLM9Hm1q20OQrv3K14wBJbUB33xQCTAg1W
vFkG7lij/gmeTkO8Xev3FOvAUIhs0d6GvX6Jxf5DQYwXImGufEIqpTMgi2OQ
htcGgR13tZIv7MNWqipb8u/jspJNNYHczl5nLbGEIDSBcaLQRWMdOSZQKoRo
0xQpD96plOevxHislMfSHMDjsBQJZmOjAzwI/dDNcpKrAtC1n8A+9ALMKrhm
+Dg2Ycg1fVdu4eom4DyLTpCq3eVA+MyhDx2ZGC4NiQPOdofEcXP23J7u87G/
/I7mdr9v67nTq8MG4koERyBD6odv951vUeOBJTxO3cDxmL2GipinxuGYL5wx
D3FEsGugy19Bz0IrrycsJawrrHIsn7ksXdOIbzEjJ2OeZAuu9re3g8KUDqFM
6FQqUHByjSS7MRA/tkW6jBj0H2UyXztcx58OGwBlseBU6+jPr2V1zUUFnooj
2eRXq/Ele/rky/kS0GEyRUxnOxAJqLjN3WQkxZR8jvNaR7T4M+lwlEbtHWYz
+qQgchRmQ4cIc6EL39GwurnqDzUvtzeaLLMEy/Jwnzi2EHAw56EJwDV5lr51
Ljb6l7/8oO5nyLpsVDlgXcwX7uNcXlrAMs5lGn5VzrWnARkEQHtNRzgb8cND
BcxgQ5U6qZXlL6MdKw5aSMfjZmsd7NXkDgWsOHCC7zfYrdfZPX51y32Dbl98
Ab9FBvSVGC7zn7jF9G1w3E0nuO7oGZb3/pzfGu57CFjYxnU1vzOst4fOM74/
V9WYa+e74ipOswqnsWW5r6PtqBPbxIaqoDwXctLmGW5Y7IWyxvEpf1uJtct4
IjbXPa2QEYsZb1gbzTkN7HkCqFwcQUA70HpBosn9dRntUcbNwZZSs814faNR
OR46E7Clw6IVZTC+VA5RxiIO4Hr2JsYL6XId2gblWXXSLm1kTlUFRotWl2Ku
ioSvqrORbSqb3MRkfYjy8+DeCbm+Q9eJHeYPYT3boqIJqW6Y9VXtjK8xpa4Q
J00PkzCx6IGeIRdUVqfLdZlqz9nLpgh+i04ctSLHbLcmDPX1v1TzH1uWbryg
njO5xcPraw9uNUHHKXamPQQay3VyhxZFnbjlbn6lj76WKad+cs2Lx+CXSmyx
vfcc3OJ392LY49Er2ENGMx/NVd6EwXSFaY9AsyiQsM1gegvYHeWCDeeKb6Va
FeK6lHlbNrdeijHClfXoLW1FAvpSoLvr/OcBvbXChL3Szj0WPnKPhY+xTtkr
v2o0HQ8fYxlz8wipqVCVEwCSVO5VyQLqojNzyk3xNOnT2LeZJCc/46MB9s9v
3eRn1FKP0omsai99SpdNdr7naaketC3YE/54QYdkeTCd4MrmPDDVHOk5twgp
f6UGrJaLjprspyU10kr5hgho14lOFVfdsQ75murT+DfUMbTvOcnkZQis9EUj
+Yn3f5XkJ75MBYPMzrGbZUlQZifuTSF4TMrTdvsZqk+mCCIdorCPu3/Z24m2
w7p7tjM+g/9J7D53Hnf/srm5owsxdFFcsjLFHT6Y4hKXAs7RKHAfXKgDCJYG
E58Gu0Mdy/6sRLiJS7hJQLjBtO+bRrCqbkpH6m6jYfecS2sqahQeblGBbY3e
HsugeLouonWubPQLHeqLAm5C51RGfvDFPcZE1gOWasHiNU0mEvli0koOum+D
V2/RpZW1HD6YtazyRZO1JA9lLZaMHspilAv/vOXZxWoZTI9jQ8ueYTHUtj/N
Y/khQ9p1funiW84zrJW6dCCnWKpTUYROrtlfvDfNwiP4DEuptg/UrKX6hSvq
Svtqllr9shUpZ6Ups+WxansLn8euPR8mJri0fK4udnOSXWwUfIgoulZd98TZ
+jAyGdKv0wl+uNN+nZ/K+6+uTTzKjuooM1GjBAVxozPzFfkCOdeWSxYNTMmu
cSHpDh262wo5VzFXhbJK6AQjVEqWIWfhaRPzImuTi4nQCPaGG1VjP9JLV+W9
huW0+BN6X96unaKDbLbgfFDnFmA1ioEZ0Pyi5HuMozZwh8t2qibWSrySTLXf
1l6pTXtmw57Q0FLVoIGvy5rHLEvNr4+Up00Zdi+OebcxNLDsFxa28+tedIYV
xiazGMD8MHSbt6Bb1GZuGrNnGaoxLtJMdKNHbKarIj1mOz29xG6i0k3sNlr9
xG7NSjvagi9uCcBvesDCsqwvPWRhJtxy0MJhPQ9UCtrm160YuHeC8rndh6gD
Kwv+hgBfLu7B9uiJ7e2eCMShV2XcPtx8sbtlftnZcA5dbG+92AbbAzragf/3
ujpzhefW7guns/09e5xjZ/fFblcJSj+T3b1o1i9MztLwlcr0w/w1dCrYDpfU
sSTdFgWHSYdbo/w3z9WxubUeAS+jJrubW61NdtYRrfEFIb+5hMotQMn5oHTL
duR3YdV959KmNFd3Nr0hYqGYXLAUR0vXdRBTfX9VQdfLtdfX1I3NqtH+UVUP
vXewXF1E2oz0xugIjhFoygsiJw3268+tXhidToKZy459aA/VmOK04RHToeVs
jVOB95YrJFbolizcUQcvcBlez7SKoeP7WR/qCtih/0kf+uvoI5C5tp82Ve3z
6lBtsbT/u0A1aYNq8k2h6mPxL44WQhBXAjpuQVxLZZ3AdlwcUTewWblxXGW2
ZxfblFBfjm9bXndtCkkIJr9bFYnuRsF2gBx+M4ActgIk+RcByEHDFW8rS7uX
k61U0ti5V00ZF4QOzxgG3r1PPVPzWKiax0lTsEWBYAuqIaswbXiLkk8QqhGF
Y7fWw9hr1z1U3SFYd4lx5RZHeUgcdmuwvTQO6xZWNjqdb3k0qLiKHh+sbSPd
bxRICZ3cq4dxW60ucit9o6m26+9fvm+HX7JvChgttZa4X4bI8Hz4NYLazYt1
v9b8Lv6L5/cvg0xdsfUvZ1U6nPZ4JrUkWcTxO7TzJXL3N2L90aNi/U4Q7ptH
1x/Bn4KQtGOQf/PZPpBFOc7Jf+q2ffv4/Nfctm8/24du2xJiOwx3LfrCxBon
LOWhL8bpXCiEHLmjcAzpfcSS1Mgd+/dwTr4C2X2RjPk2VNbYr69CZYcBlWEs
AOffIoZVTHNVNCa5wvn0X0cAr0B233jb7N1hZEfgLprbX+3VtuLjUxymry/o
WyWca7p5SER31Y+s/9a7KgqMUyy6SFdW3+lTTu61s1Xn9W84Suv1VwPnfjI9
DbWZVXBJmesiti9yuq8FL+34ID45YPHcxebGXc9v3LiH9yGu487nbUHhjqdR
R0XgTwJvTWt73paygrksbU+f72NFiyUjXH3pCJvPN/b3o/Z4N7nAt1oX0Xa/
xSfxoiX4C33sbW3tRB316GmI1lU8ZIjt3b29najj4gr0ve+1rqIDJC0lRLBM
8vMXW1FHOX4aonUVDxli5wVud6snv+XCaXWLkvXfE6+zmavsXg/YHfM6Ta3Y
BINMF41OHT+9mkOLez7S7nmvqHdQbcDMnK5pNwNxpyq25M2nO6jUyUre4lJN
/DT83W38QPbQoPl2zqB5wXZX6ZrNnmijYqpL4Fzy8Ensd/ex3RM7PbHbE2G4
CfvAmIwZbANvmH34RLbdvJbNre5Ols1k204FOtlpu+JLRVcoSGSPaFo88SqE
WNmE+BfFWVWY8Ix3TsyPJi2P2DRi9C3ktSwNpJp/+H/kcD/rRRen68NQ2VHd
UfwVj5uAmTwQe4MdJEfA7oHY2hgI8VZirqsNu0eeg1+Nj/rUAwMR2iqPKAih
ktpOTXDfylerebKOMMmKUZyZMwhieH7w7ujHs5P/czz0L6VUa6AeiyBkF3Mm
SiVreyWc02Uxr6GzKV1+hu6TtNbFPNgz/f50UEk5HmIZMFTdqsK5AhOroOBQ
xhfSGctYZYeXJWFEtMfKOX4GO3jypifer77Vu3arNwdRuNNihZ1+8L1jQJJD
mKYZwyyUaz4DZFtQwKhYg/sOM93jJm+S7+qO8cceULrPMX7R5mBt8Z/agzPs
1OM+7rTR0VS5UaT41Xvbby8m2nvYDa7YWcslrqLrEtfVHJht2P84/6UHg+Vn
T+3CG1bB/b7Mh+GTOQzwaExazXt533Gk/48xKbDEW1iIjzg4/DLcafrol2LL
Ct4TvTkEifv9Il0LangWHr2gLp/HU3GWTpRucagkp2a1JLmKqu6DoZ7Xixnf
rGBpYGm5KH1Y21rDXV8GV1UThsRU+QRwOpe3LtLbPvjKWcKacXhsXWaKmqiO
672iaxAd8S2k2E1dxgAFLjkAlFWMuVqbBwdnJbcpaA+oZIxMzg8YIyOcaSaS
DKuZsNcDRitKe7PFzEA98aAuZouKOquBniiPv4hQFC/wotFUlURLFngpSdcF
sqAGyQ8gVuhMcXCVKtXzm8Y3kuZ8J3EoGGYxH8fqhmJXoe1YNMtn5Jdza8x0
3drKTZy7cStMC83tXbycH8z5hPFNnGaonA24VJlO2Ovh4Wh9thMzeuGde9ky
/n47TfFMBN1QrG5ipbuWySMV8QOq/SCRAKiwjD8mb3RgIOi7Z6dFocxa7DRy
OsECBiKJsb6d1/dUH+qInXnQ2WKnTGs/ieekjKqrYxcjonU9jnqgZ4EZGwRO
UG6X31hMwsiMTqC34xMlsVWtd8HJgBDFjbpjl+4upvzb4NwtEFXb3c1ASBcq
5dpKRLvxTp0u1subCEwbzxfv6pIXQB5XfG1uTNjtXvSsO/LwFHgmJZcAkkUO
ygBqG5QziFM1rgu2OGUS2RVFRLQhzSqnA9HcB7VfeLU4He/Xh1HVp1w9r6pY
acF6nIg+eD04+mgVdlezgi7wtvwIK504K42YjwEfmU/vLE06xiJIFwD5JEWv
zQnlIp4f//TzyfnxEfaldX1BbFDJGkWduhMsemIpdyDOJeFN5G0nJQEZlqMQ
jBbnUr2BJyz+BnbUbn/k8S9bCRNkxAQvQMbT0MRn+ZZ3xnx93mDtZnfdo7tU
18JGxezKI0qX4KDbWVze0XEHquiChVtLMSsoeXNEU8aNcEwX93ZjoiZbo4pK
l17eFg5ft8BXOg/WtsSLwDHZys30w3PNac7iHBHPWQyWg8vZaGRQ6ukHl3tX
PCHdli8AD5k/MKqARcNuRAu8mhy57NjZbHcKdEO49umpnp33qJikMCF/fi13
hMP+KVlAKeN0k7jHRul2dL7iHUWUOivPZd5vdnBzQLsOOTiXhnXFH9/FjjUh
aEaRN1fK2JpQoVr+LgO8rSlMSFWDUlTIRgtVinYLaJsukNdwcajfdyFqjEEa
zi0t8IQDaRFApnUDCFwjrKybcYUjqkCDY8JOUAFlNaICv0aPNO/aANxFQM1E
0g3nzt3sM0BcsiPwC646HoKCzBli6YhhLvhzKcfK8RLZ2q3qkIY+I9ET0A3y
2BsVbXJoT9wsMqQDtU7D2rjQCvBBhP91xcEv5Oy4W6Gi2ix9it6ZjtKn16al
8ra0V3xRxpXrfRBZOsPykvC/zK50xApJA/gM1nZUx47mRT5hP5SpbEpmImiF
2ErcxnSzGWWRFxG5npizkZRDSBBHjdWJKcD8OIGH6OD58d2bY7ayMLFcxkj5
qnAXZmMBy6moYCBGyXpKJYKx8YDVmSyvQV4fxbMJMF1vej3gBOItTI0LWjeK
sqrb7tleC+CHpfISOa+V1IL5xhRTN8Uh0zpCQGJILSHBSkepZhjz02JQyXnE
nFzfdU8XZ+WLGVZJgN9MvdEqIgHF6kusgK0KcXvzztJr6exKsB1UTh9egopQ
kdaDxYoxUb8ckwewsQ5S84ywVkYBzx+aK4Uk0iWpH7QiQO4zJMY5Kh+AWiAC
EZh8KAfpOUGkHyZDVlA9ZGGeBxPB+7GnwDpZxY+rajFTJk3Jei5s8a2Mr3Oc
MIo24DvaaXIqkyS+RntntqhjLeAU7fHpCNKfsCAasTegCiRyu5jh1v9dS55t
rQ8FXqRXmWiu7ZEeySyLiATaEHwgXrNa7z7sIU6p9SbkIyI+BLsFqwOxg6WS
JlyZHLY1L2WG7KcHP6boCoKmujuqmTQQbyXZE+wrVmwnGjO/XqTot+c7OE6H
PVXHWt11qC5TIjY/PN1UJ7RPt6hoHyUrn6oSr2uMPG6JV6du7Okm/b3l1YgN
joTxZFsKwa5HkQ86XD87EXjLxsB0K+Stas+uc1Ao10hIgtWQ1ACQyQJQYJ0T
ny0S+mtCZacGks+UYnnUIGtsqat5M7/16pBfkmc5qE/r1Pu9p96WVhI5GNFk
KlcNZk7y3JK4YpGaurU5EXHx+kbh4MqUrzZacUzVq5Uubv1vJWqWeJMfFaT/
UCt/kFvErLE2t34ZAU0dbVToRVWyiWCiBJ08eRB3ai+KLjw3FLlAyUxCCQ5a
XXpT0J2Wvm+k5/uKWMVN6dJ5XYTPqLes75G7CZmXe/ivpwpFaqeJXokJ31AE
LKxS/qfKO/VpZiusPmO2QWlaHFdj5toz+EY86/g0QiIu1HFHVY1MzVsZId5h
LTaHreuGjS1gLxIUQjqh41TamsFbGWuLhPg+sOcbshnJJDOojJqRYnfOhQ36
+kdlx+DxZ6e6LVJlJscTrrWQVnwNBIisXNoDnOfaYrAoj8tyMtZ2B7s47b95
JdAPfh+IHylYTkW2Kl3T03D70u+XZUMNjzN5AygQadrSFpa+rwGP/yIPpt1C
W6XU9rfRD6hePVX+x70EQxfapiWWi+z5kghg2VcMVdmdyqQCLMP+OdrvXcAl
XaTWJDYK8BvIgBmWcaF+fNqI2KkL9sp0Qhvj63hOylEjpIbT1llTaJqok+2R
c7JdHTlU7Cc1R+HHxtb3hiPNWgP6Ztd1w8QZmCnjO2MuAxeKM5NMoW/emMNr
UKeRYanaHY2MDcIY2y/hl7VcHI9qBBpOUeK+4qTJjWi9q6QLAJWWwADQ6JNE
jfQuOH+pWBk9xZy9MqctU0BQpNIygYF3Utf9DnMCKb0LkwLGfIaa8Yl8qrdS
YyBF/TWed54zjTizRGl0kr0v7r6zmsUzCFeHDlyYECucjOGdaQIaGY+zLAVc
SdTd8lF0zEypWEyY1P+QZcFl33ocZ0Ysl2PlhEX/B6n4VBIB2NEsBuJKoDNO
l4RdXWR8ewvNQuJQ7gXJOXeir0qW3nSAl9ccznr342WEVfdirhsD2iqCjRyA
LFcXzg2sGp3HRbKY8RUUrxclbgq6UHrsRlLnyzTPBsURuH+KSkgGGhfqzeyS
0+FdTgsKL/RVd0na68txxoEzS5cAJrc7FsysepG+Z5du3NF38PJpXK3UMT/M
uE6ADxefUMkAPRiPU1XMImmaoO95CnTA3LdQ/aj/x6dz27Lvd/RZyQOfJ8He
lcV4gRdOkxALMdspI2RjlZVyybheCuWxjCJ2PtGV1wBL9A1g/CJOx6LtXLPV
xmLhzJ1wAPa7Qv1AfgDrnBX9dMauigrozJDmjEWnuskuyQr2eNIDZGZlrGEb
+WfnjJvVOE5QHiAJ3PIdIPA5epXMykllm1ukirgMRSym6QSlipH3MCgGWxS7
CEd0DV8wG4pbkP5lz2a/TbmiqwFGAuIM6zGXaEsklQGOaAKnUdPJ8dk6e9kC
Py2b3ROfMW1gNMJidWHhY8uLQLNMkXFfAXVrBxh8S2yoksEWoH7byT4dNAKU
N3HLQpG4u1KjbqqYVYbaeoX079TWsHl5UZgu4gCGuDVLJ3SyJdNUIo1O0bve
1j7C8ZX/VAlLC4yKHN1a0aKcX6nvolJ6b43tnlw9QZBHT67iqn6Coy2yMSUZ
kZ6upDyoU0gateZxYHRIdj3DkrEKlwM6ltHuUoA7pqg78MqbW04dNZMmQFBE
3oKcFTypaNrwL6qxK807Wj5vB0ERrsQNTw7eHTRccfRQUY6sVEwxHochWkzu
vi98HDVCwwPhiRh0nMeWJZdygkKFlUXyTCqPFS7vYWnkrubppEQ8Ih+Ci23m
7EotSkyfreUc6e54CsaVWHt1cbL+76Pyf0eHQB79ozgHpV28jdOMox9Og4N8
DHRbibcLmZH/au3yZ3EMStgUXYnc5vsCus5hV89RTqydXb4RB2/WI0w1pXgL
SbFEmx+EYNHHl+zHkePvAM+zSj4hKRTn1+RB0FNagN6Vc4L/MdgJEwksXJyi
QV6lBYhzw5sk0TkYS6m8pX28gq3AwZkpeTrDfwL7vziec+QAAA==

-->

</rfc>
