<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wussler-openpgp-pqc-03" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="PQC in OpenPGP">Post-Quantum Cryptography in OpenPGP</title>
    <seriesInfo name="Internet-Draft" value="draft-wussler-openpgp-pqc-03"/>
    <author initials="S." surname="Kousidis" fullname="Stavros Kousidis">
      <organization>BSI</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>stavros.kousidis@bsi.bund.de</email>
      </address>
    </author>
    <author initials="F." surname="Strenzke" fullname="Falko Strenzke">
      <organization>MTG AG</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>falko.strenzke@mtg.de</email>
      </address>
    </author>
    <author initials="A." surname="Wussler" fullname="Aron Wussler">
      <organization>Proton AG</organization>
      <address>
        <postal>
          <country>Switzerland</country>
        </postal>
        <email>aron@wussler.it</email>
      </address>
    </author>
    <date year="2023" month="October" day="19"/>
    <area>sec</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 279?>

<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 ML-KEM (formerly CRYSTALS-Kyber), composite
public-key signatures based on ML-DSA (formerly CRYSTALS-Dilithium), both in
combination with elliptic curve cryptography, and SLH-DSA (formerly SPHINCS+)
as a standalone public key signature scheme.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-wussler-openpgp-pqc/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WG Working Group mailing list (<eref target="mailto:openpgp@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/openpgp/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/openpgp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/openpgp-pqc/draft-openpgp-pqc"/>.</t>
    </note>
  </front>
  <middle>
    <?line 290?>

<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
ML-KEM (formerly CRYSTALS-Kyber) as a Key Encapsulation Mechanism (KEM), a KEM
being a modern building block for public-key encryption, and ML-DSA (formerly
CRYSTALS-Dilithium) as well as SLH-DSA (formerly SPHINCS+) as signature
schemes.</t>
      <t>For the two ML-* 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 stateless hash-based signature scheme SLH-DSA 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: SLH-DSA standalone and the two ML-* as composite with ECC-based KEM and
digital signature schemes. Here, the term "composite" indicates that any data
structure or algorithm pertaining to the combination of the two components
appears as single data structure or algorithm from the protocol perspective.</t>
      <t>The document specifies the conventions for interoperability between compliant
OpenPGP implementations that make use of this extension and the newly defined
algorithms or algorithm combinations.</t>
      <section anchor="conventions-used-in-this-document">
        <name>Conventions used in this Document</name>
        <section anchor="terminology-for-multi-algorithm-schemes">
          <name>Terminology for Multi-Algorithm Schemes</name>
          <t>The terminology in this document is oriented towards the definitions in
<xref target="draft-driscoll-pqt-hybrid-terminology"/>. Specifically, the terms
"multi-algorithm", "composite" and "non-composite" are used in correspondence
with the definitions therein. The abbreviation "PQ" is used for post-quantum
schemes. To denote the combination of post-quantum and traditional schemes, the
abbreviation "PQ/T" is used. The short form "PQ(/T)" stands for PQ or PQ/T.</t>
        </section>
      </section>
      <section anchor="post-quantum-cryptography">
        <name>Post-Quantum Cryptography</name>
        <t>This section describes the individual post-quantum cryptographic schemes. All
schemes listed here are believed to provide security in the presence of a
cryptographically relevant quantum computer. However, the mathematical problems
on which the two ML-* schemes and SLH-DSA 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 NIST PQC draft standards
FIPS 203, FIPS 204, and FIPS 205 as if they were a final specification. This is
a temporary solution until the final versions of these documents are 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. Furthermore, we want to
point out that, depending on possible future changes to the draft standards by
NIST, this specification may be updated as soon as corresponding information
becomes available.]</t>
        <section anchor="mlkem-intro">
          <name>ML-KEM</name>
          <t>ML-KEM <xref target="FIPS-203"/> 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 ML-KEM only in composite combination with ECC-based
encryption schemes in order to provide a pre-quantum security fallback.</t>
        </section>
        <section anchor="mldsa-intro">
          <name>ML-DSA</name>
          <t>ML-DSA <xref target="FIPS-204"/> is a signature scheme that, like ML-KEM, is based on the
hardness of solving the Learning With Errors problem and a variant of the Short
Integer Solution problem in module lattices (MLWE and SelfTargetMSIS).
Accordingly, this specification only defines ML-DSA in composite combination
with ECC-based signature schemes.</t>
        </section>
        <section anchor="slh-dsa">
          <name>SLH-DSA</name>
          <t>SLH-DSA <xref target="FIPS-205"/> is a stateless hash-based signature scheme. Its security
relies on the hardness of finding preimages for cryptographic hash functions.
This feature is generally considered to be a high security guarantee.
Therefore, this specification defines SLH-DSA as a standalone signature scheme.</t>
          <t>In deployments the performance characteristics of SLH-DSA should be taken into
account. We refer to <xref target="performance-considerations"/> for a discussion of the
performance characteristics of this scheme.</t>
        </section>
      </section>
      <section anchor="elliptic-curve-cryptography">
        <name>Elliptic Curve Cryptography</name>
        <t>The ECC-based encryption is defined here as a KEM. This is in contrast to
<xref target="I-D.ietf-openpgp-crypto-refresh"/> where the ECC-based encryption is defined
as a public-key encryption scheme.</t>
        <t>All elliptic curves for the use in the composite combinations are taken from
<xref target="I-D.ietf-openpgp-crypto-refresh"/>. However, as explained in the following, in
the case of Curve25519 encoding changes are applied to the new composite
schemes.</t>
        <section anchor="curve25519-and-curve448">
          <name>Curve25519 and Curve448</name>
          <t>Curve25519 and Curve448 are defined in <xref target="RFC7748"/> for use in a Diffie-Hellman
key agreement scheme and defined in <xref target="RFC8032"/> for use in a digital signature
scheme. For Curve25519 this specification adapts the encoding of objects as
defined in <xref target="RFC7748"/> in contrast to <xref target="I-D.ietf-openpgp-crypto-refresh"/>.</t>
        </section>
        <section anchor="generic-prime-curves">
          <name>Generic Prime Curves</name>
          <t>For interoperability this extension offers CRYSTALS-* in composite combinations
with the NIST curves P-256, P-384 defined in <xref target="SP800-186"/> and the
Brainpool curves brainpoolP256r1, brainpoolP384r1 defined in <xref target="RFC5639"/>.</t>
        </section>
      </section>
      <section anchor="multi-algo-schemes">
        <name>Standalone and Multi-Algorithm Schemes</name>
        <t>This section provides a categorization of the new algorithms and their
combinations.</t>
        <section anchor="composite-multi-alg">
          <name>Standalone and Composite Multi-Algorithm Schemes</name>
          <t>This specification introduces new cryptographic schemes, which can be
categorized as follows:</t>
          <ul spacing="normal">
            <li>
              <t>PQ/T multi-algorithm public-key encryption, namely a composite combination
of ML-KEM with an ECC-based KEM,</t>
            </li>
            <li>
              <t>PQ/T multi-algorithm digital signature, namely composite combinations of
ML-DSA with ECC-based signature schemes,</t>
            </li>
            <li>
              <t>PQ digital signature, namely SLH-DSA as a standalone cryptographic
algorithm.</t>
            </li>
          </ul>
          <t>For each of the composite schemes, this specification mandates that the
recipient has to successfully perform the cryptographic algorithms for each of
the component schemes used in a cryptrographic message, in order for the
message to be deciphered and considered as valid. This means that all component
signatures must be verified successfully in order to achieve a successful
verification of the composite signature. In the case of the composite
public-key decryption, each of the component KEM decapsulation operations must
succeed.</t>
        </section>
        <section anchor="non-composite-multi-alg">
          <name>Non-Composite Algorithm Combinations</name>
          <t>As the OpenPGP protocol <xref target="I-D.ietf-openpgp-crypto-refresh"/> allows for multiple
signatures to be applied to a single message, it is also possible to realize
non-composite combinations of signatures. Furthermore, multiple OpenPGP
signatures may be combined on the application layer. These latter two cases
realize non-composite combinations of signatures. <xref target="multiple-signatures"/>
specifies how implementations should handle the verification of such
combinations of signatures.</t>
          <t>Furthermore, the OpenPGP protocol also allows for parallel encryption to
different keys held by the same recipient. Accordingly, if the sender makes use
of this feature and sends an encrypted message with multiple PKESK packages for
different encryption keys held by the same recipient, a non-composite
multi-algorithm public-key encryption is realized where the recipient has to
decrypt only one of the PKESK packages in order to decrypt the message. See
<xref target="no-pq-t-parallel-encryption"/> for restrictions on parallel encryption
mandated by this specification.</t>
        </section>
      </section>
    </section>
    <section anchor="preliminaries">
      <name>Preliminaries</name>
      <t>This section provides some preliminaries for the definitions in the subsequent
sections.</t>
      <section anchor="elliptic-curves">
        <name>Elliptic curves</name>
        <section anchor="sec1-format">
          <name>SEC1 EC Point Wire Format</name>
          <t>Elliptic curve points of the generic prime curves are encoded using the SEC1
(uncompressed) format as the following octet string:</t>
          <artwork><![CDATA[
B = 04 || X || Y
]]></artwork>
          <t>where <tt>X</tt> and <tt>Y</tt> are coordinates of the elliptic curve point <tt>P = (X, Y)</tt>, and
each coordinate is encoded in the big-endian format and zero-padded to the
adjusted underlying field size. The adjusted underlying field size is the
underlying field size rounded up to the nearest 8-bit boundary, as noted in the
"Field size" column in <xref target="tab-ecdh-nist-artifacts"/>,
<xref target="tab-ecdh-brainpool-artifacts"/>, or <xref target="tab-ecdsa-artifacts"/>. This encoding is
compatible with the definition given in <xref target="SEC1"/>.</t>
        </section>
        <section anchor="measures-to-ensure-secure-implementations">
          <name>Measures to Ensure Secure Implementations</name>
          <t>In the following measures are described that ensure secure implementations
according to existing best practices and standards defining the operations of
Elliptic Curve Cryptography.</t>
          <t>Even though the zero point, also called the point at infinity, may occur as a
result of arithmetic operations on points of an elliptic curve, it MUST NOT
appear in any ECC data structure defined in this document.</t>
          <t>Furthermore, when performing the explicitly listed operations in
<xref target="x25519-kem"/>, <xref target="x448-kem"/> or <xref target="ecdh-kem"/> it is REQUIRED to follow the
specification and security advisory mandated from the respective elliptic curve
specification.</t>
        </section>
      </section>
    </section>
    <section anchor="supported-public-key-algorithms">
      <name>Supported Public Key Algorithms</name>
      <t>This section specifies the composite ML-KEM + ECC and ML-DSA + ECC schemes as
well as the standalone SLH-DSA signature scheme. The composite schemes are
fully specified via their algorithm ID. The SLH-DSA signature schemes are
fully specified by their algorithm ID and an additional parameter ID.</t>
      <section anchor="algorithm-specifications">
        <name>Algorithm Specifications</name>
        <t>For encryption, the following composite KEM schemes are specified:</t>
        <table anchor="kem-alg-specs">
          <name>KEM algorithm specifications</name>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Algorithm</th>
              <th align="left">Requirement</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">29</td>
              <td align="left">ML-KEM-768  + X25519</td>
              <td align="left">MUST</td>
              <td align="left">
                <xref target="ecc-mlkem"/></td>
            </tr>
            <tr>
              <td align="right">30</td>
              <td align="left">ML-KEM-1024 + X448</td>
              <td align="left">SHOULD</td>
              <td align="left">
                <xref target="ecc-mlkem"/></td>
            </tr>
            <tr>
              <td align="right">31</td>
              <td align="left">ML-KEM-768  + ECDH-NIST-P-256</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mlkem"/></td>
            </tr>
            <tr>
              <td align="right">32</td>
              <td align="left">ML-KEM-1024 + ECDH-NIST-P-384</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mlkem"/></td>
            </tr>
            <tr>
              <td align="right">33</td>
              <td align="left">ML-KEM-768  + ECDH-brainpoolP256r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mlkem"/></td>
            </tr>
            <tr>
              <td align="right">34</td>
              <td align="left">ML-KEM-1024 + ECDH-brainpoolP384r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mlkem"/></td>
            </tr>
          </tbody>
        </table>
        <t>For signatures, the following (composite) signature schemes are specified:</t>
        <table anchor="sig-alg-specs">
          <name>Signature algorithm specifications</name>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Algorithm</th>
              <th align="left">Requirement</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">35</td>
              <td align="left">ML-DSA-65 + Ed25519</td>
              <td align="left">MUST</td>
              <td align="left">
                <xref target="ecc-mldsa"/></td>
            </tr>
            <tr>
              <td align="right">36</td>
              <td align="left">ML-DSA-87 + Ed448</td>
              <td align="left">SHOULD</td>
              <td align="left">
                <xref target="ecc-mldsa"/></td>
            </tr>
            <tr>
              <td align="right">37</td>
              <td align="left">ML-DSA-65 + ECDSA-NIST-P-256</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mldsa"/></td>
            </tr>
            <tr>
              <td align="right">38</td>
              <td align="left">ML-DSA-87 + ECDSA-NIST-P-384</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mldsa"/></td>
            </tr>
            <tr>
              <td align="right">39</td>
              <td align="left">ML-DSA-65 + ECDSA-brainpoolP256r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mldsa"/></td>
            </tr>
            <tr>
              <td align="right">40</td>
              <td align="left">ML-DSA-87 + ECDSA-brainpoolP384r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mldsa"/></td>
            </tr>
            <tr>
              <td align="right">41</td>
              <td align="left">SLH-DSA-SHA2</td>
              <td align="left">SHOULD</td>
              <td align="left">
                <xref target="slhdsa"/></td>
            </tr>
            <tr>
              <td align="right">42</td>
              <td align="left">SLH-DSA-SHAKE</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="slhdsa"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="parameter-specification">
        <name>Parameter Specification</name>
        <section anchor="slh-dsa-sha2">
          <name>SLH-DSA-SHA2</name>
          <t>For the SLH-DSA-SHA2 signature algorithm from <xref target="sig-alg-specs"/>, the following
parameters are specified:</t>
          <table anchor="slhdsa-param-sha2">
            <name>SLH-DSA-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">SLH-DSA-SHA2-128s</td>
              </tr>
              <tr>
                <td align="right">2</td>
                <td align="left">SLH-DSA-SHA2-128f</td>
              </tr>
              <tr>
                <td align="right">3</td>
                <td align="left">SLH-DSA-SHA2-192s</td>
              </tr>
              <tr>
                <td align="right">4</td>
                <td align="left">SLH-DSA-SHA2-192f</td>
              </tr>
              <tr>
                <td align="right">5</td>
                <td align="left">SLH-DSA-SHA2-256s</td>
              </tr>
              <tr>
                <td align="right">6</td>
                <td align="left">SLH-DSA-SHA2-256f</td>
              </tr>
            </tbody>
          </table>
          <t>All security parameters inherit the requirement of SLH-DSA-SHA2 from
<xref target="sig-alg-specs"/>. That is, implementations SHOULD implement the parameters
specified in <xref target="slhdsa-param-sha2"/>. The values <tt>0x00</tt> and <tt>0xFF</tt> are reserved
for future extensions.</t>
        </section>
        <section anchor="slh-dsa-shake">
          <name>SLH-DSA-SHAKE</name>
          <t>For the SLH-DSA-SHAKE signature algorithm from <xref target="sig-alg-specs"/>, the
following parameters are specified:</t>
          <table anchor="slhdsa-param-shake">
            <name>SLH-DSA-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">SLH-DSA-SHAKE-128s</td>
              </tr>
              <tr>
                <td align="right">2</td>
                <td align="left">SLH-DSA-SHAKE-128f</td>
              </tr>
              <tr>
                <td align="right">3</td>
                <td align="left">SLH-DSA-SHAKE-192s</td>
              </tr>
              <tr>
                <td align="right">4</td>
                <td align="left">SLH-DSA-SHAKE-192f</td>
              </tr>
              <tr>
                <td align="right">5</td>
                <td align="left">SLH-DSA-SHAKE-256s</td>
              </tr>
              <tr>
                <td align="right">6</td>
                <td align="left">SLH-DSA-SHAKE-256f</td>
              </tr>
            </tbody>
          </table>
          <t>All security parameters inherit the requirement of SLH-DSA-SHAKE from
<xref target="sig-alg-specs"/>. That is, implementations MAY implement the parameters
specified in <xref target="slhdsa-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>The ML-KEM + ECC public-key encryption involves both the ML-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 with a purely traditional public-key
encryption key of a recipient if it is encrypted with a PQ/T key of the same
recipient.</t>
      </section>
      <section anchor="composite-signatures">
        <name>Composite Signatures</name>
        <t>The ML-DSA + ECC signature consists of independent ML-DSA and ECC signatures,
and an implementation MUST successfully validate both signatures to state that
the ML-DSA + ECC signature is valid.</t>
      </section>
      <section anchor="multiple-signatures">
        <name>Multiple Signatures</name>
        <t>The OpenPGP message format allows multiple signatures of a message, i.e. the
attachment of multiple signature packets.</t>
        <t>An implementation MAY sign a message with a traditional key and a PQ(/T) key
from the same sender. This ensures backwards compatibility due to
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.5, since a legacy
implementation without PQ(/T) support can fall back on the traditional
signature.</t>
        <t>Newer implementations with PQ(/T) support MAY ignore the traditional
signature(s) during validation.</t>
        <t>Implementations SHOULD consider the message correctly signed if at least one of
the non-ignored signatures validates successfully.</t>
        <t>[Note to the reader: The last requirement, that one valid signature is
sufficient to identify a message as correctly signed, is an interpretation of
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.5.]</t>
      </section>
    </section>
    <section anchor="composite-kem-schemes">
      <name>Composite KEM schemes</name>
      <section anchor="building-blocks">
        <name>Building Blocks</name>
        <section anchor="ecc-kem">
          <name>ECC-Based KEMs</name>
          <t>In this section we define the encryption, decryption, and data formats for the
ECDH component of the composite algorithms.</t>
          <t><xref target="tab-ecdh-cfrg-artifacts"/>, <xref target="tab-ecdh-nist-artifacts"/>, and
<xref target="tab-ecdh-brainpool-artifacts"/> describe the ECC-KEM parameters and artifact
lengths. The artefacts in <xref target="tab-ecdh-cfrg-artifacts"/> follow the encodings
described in <xref target="RFC7748"/>.</t>
          <table anchor="tab-ecdh-cfrg-artifacts">
            <name>Montgomery curves parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">X25519</th>
                <th align="left">X448</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">29</td>
                <td align="left">30</td>
              </tr>
              <tr>
                <td align="left">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">56 octets</td>
              </tr>
              <tr>
                <td align="left">ECC-KEM</td>
                <td align="left">x25519Kem (<xref target="x25519-kem"/>)</td>
                <td align="left">x448Kem (<xref target="x448-kem"/>)</td>
              </tr>
              <tr>
                <td align="left">ECDH public key</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">ECDH secret key</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">ECDH ephemeral</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">ECDH share</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">Key share</td>
                <td align="left">32 octets</td>
                <td align="left">64 octets</td>
              </tr>
              <tr>
                <td align="left">Hash</td>
                <td align="left">SHA3-256</td>
                <td align="left">SHA3-512</td>
              </tr>
            </tbody>
          </table>
          <table anchor="tab-ecdh-nist-artifacts">
            <name>NIST curves parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">NIST P-256</th>
                <th align="left">NIST P-384</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">31</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="left">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="left">ECC-KEM</td>
                <td align="left">ecdhKem (<xref target="ecdh-kem"/>)</td>
                <td align="left">ecdhKem (<xref target="ecdh-kem"/>)</td>
              </tr>
              <tr>
                <td align="left">ECDH public key</td>
                <td align="left">65 octets of SEC1-encoded public point</td>
                <td align="left">97 octets of SEC1-encoded public point</td>
              </tr>
              <tr>
                <td align="left">ECDH secret key</td>
                <td align="left">32 octets big-endian encoded secret scalar</td>
                <td align="left">48 octets big-endian encoded secret scalar</td>
              </tr>
              <tr>
                <td align="left">ECDH ephemeral</td>
                <td align="left">65 octets of SEC1-encoded ephemeral point</td>
                <td align="left">97 octets of SEC1-encoded ephemeral point</td>
              </tr>
              <tr>
                <td align="left">ECDH share</td>
                <td align="left">65 octets of SEC1-encoded shared point</td>
                <td align="left">97 octets of SEC1-encoded shared point</td>
              </tr>
              <tr>
                <td align="left">Key share</td>
                <td align="left">32 octets</td>
                <td align="left">64 octets</td>
              </tr>
              <tr>
                <td align="left">Hash</td>
                <td align="left">SHA3-256</td>
                <td align="left">SHA3-512</td>
              </tr>
            </tbody>
          </table>
          <table anchor="tab-ecdh-brainpool-artifacts">
            <name>Brainpool curves parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">brainpoolP256r1</th>
                <th align="left">brainpoolP384r1</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">33</td>
                <td align="left">34</td>
              </tr>
              <tr>
                <td align="left">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="left">ECC-KEM</td>
                <td align="left">ecdhKem (<xref target="ecdh-kem"/>)</td>
                <td align="left">ecdhKem (<xref target="ecdh-kem"/>)</td>
              </tr>
              <tr>
                <td align="left">ECDH public key</td>
                <td align="left">65 octets of SEC1-encoded public point</td>
                <td align="left">97 octets of SEC1-encoded public point</td>
              </tr>
              <tr>
                <td align="left">ECDH secret key</td>
                <td align="left">32 octets big-endian encoded secret scalar</td>
                <td align="left">48 octets big-endian encoded secret scalar</td>
              </tr>
              <tr>
                <td align="left">ECDH ephemeral</td>
                <td align="left">65 octets of SEC1-encoded ephemeral point</td>
                <td align="left">97 octets of SEC1-encoded ephemeral point</td>
              </tr>
              <tr>
                <td align="left">ECDH share</td>
                <td align="left">65 octets of SEC1-encoded shared point</td>
                <td align="left">97 octets of SEC1-encoded shared point</td>
              </tr>
              <tr>
                <td align="left">Key share</td>
                <td align="left">32 octets</td>
                <td align="left">64 octets</td>
              </tr>
              <tr>
                <td align="left">Hash</td>
                <td align="left">SHA3-256</td>
                <td align="left">SHA3-512</td>
              </tr>
            </tbody>
          </table>
          <t>The SEC1 format for point encoding is defined in <xref target="sec1-format"/>.</t>
          <t>The various procedures to perform the operations of an ECC-based KEM are
defined in the following subsections. Specifically, each of these subsections
defines the instances of the following operations:</t>
          <artwork><![CDATA[
(eccCipherText, eccKeyShare) <- ECC-KEM.Encaps(eccPublicKey)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(eccKeyShare) <- ECC-KEM.Decaps(eccSecretKey, eccCipherText)
]]></artwork>
          <t>To instantiate <tt>ECC-KEM</tt>, one must select a parameter set from
<xref target="tab-ecdh-cfrg-artifacts"/>, <xref target="tab-ecdh-nist-artifacts"/>, or
<xref target="tab-ecdh-brainpool-artifacts"/>.</t>
          <section anchor="x25519-kem">
            <name>X25519-KEM</name>
            <t>The encapsulation and decapsulation operations of <tt>x25519kem</tt> are described
using the function <tt>X25519()</tt> and encodings defined in <xref target="RFC7748"/>. The
<tt>eccSecretKey</tt> is denoted as <tt>r</tt>, the <tt>eccPublicKey</tt> as <tt>R</tt>, they are subject
to the equation <tt>R = X25519(r, U(P))</tt>. Here, <tt>U(P)</tt> denotes the u-coordinate of
the base point of Curve25519.</t>
            <t>The operation <tt>x25519Kem.Encaps()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>
                <t>Generate an ephemeral key pair {<tt>v</tt>, <tt>V</tt>} via <tt>V = X25519(v,U(P))</tt> where <tt>v</tt>
is a random scalar</t>
              </li>
              <li>
                <t>Compute the shared coordinate <tt>X = X25519(v, R)</tt> where <tt>R</tt> is the public key
<tt>eccPublicKey</tt></t>
              </li>
              <li>
                <t>Set the output <tt>eccCipherText</tt> to <tt>V</tt></t>
              </li>
              <li>
                <t>Set the output <tt>eccKeyShare</tt> to <tt>SHA3-256(X || eccCipherText || eccPublicKey)</tt></t>
              </li>
            </ol>
            <t>The operation <tt>x25519Kem.Decaps()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>
                <t>Compute the shared coordinate <tt>X = X25519(r, V)</tt>, where <tt>r</tt> is the
<tt>eccSecretKey</tt> and <tt>V</tt> is the <tt>eccCipherText</tt></t>
              </li>
              <li>
                <t>Set the output <tt>eccKeyShare</tt> to <tt>SHA3-256(X || eccCipherText || eccPublicKey)</tt></t>
              </li>
            </ol>
          </section>
          <section anchor="x448-kem">
            <name>X448-KEM</name>
            <t>The encapsulation and decapsulation operations of <tt>x448kem</tt> are described using
the function <tt>X448()</tt> and encodings defined in <xref target="RFC7748"/>. The <tt>eccSecretKey</tt>
is denoted as <tt>r</tt>, the <tt>eccPublicKey</tt> as <tt>R</tt>, they are subject to the equation
<tt>R = X25519(r, U(P))</tt>. Here, <tt>U(P)</tt> denotes the u-coordinate of the base point
of Curve448.</t>
            <t>The operation <tt>x448.Encaps()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>
                <t>Generate an ephemeral key pair {<tt>v</tt>, <tt>V</tt>} via <tt>V = X448(v,U(P))</tt> where <tt>v</tt>
is a random scalar</t>
              </li>
              <li>
                <t>Compute the shared coordinate <tt>X = X448(v, R)</tt> where <tt>R</tt> is the public key
<tt>eccPublicKey</tt></t>
              </li>
              <li>
                <t>Set the output <tt>eccCipherText</tt> to <tt>V</tt></t>
              </li>
              <li>
                <t>Set the output <tt>eccKeyShare</tt> to <tt>SHA3-512(X || eccCipherText || eccPublicKey)</tt></t>
              </li>
            </ol>
            <t>The operation <tt>x448Kem.Decaps()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>
                <t>Compute the shared coordinate <tt>X = X448(r, V)</tt>, where <tt>r</tt> is the
<tt>eccSecretKey</tt> and <tt>V</tt> is the <tt>eccCipherText</tt></t>
              </li>
              <li>
                <t>Set the output <tt>eccKeyShare</tt> to <tt>SHA3-512(X || eccCipherText || eccPublicKey)</tt></t>
              </li>
            </ol>
          </section>
          <section anchor="ecdh-kem">
            <name>ECDH-KEM</name>
            <t>The operation <tt>ecdhKem.Encaps()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>
                <t>Generate an ephemeral key pair {<tt>v</tt>, <tt>V=vG</tt>} as defined in
<xref target="SP800-186"/> or <xref target="RFC5639"/> where <tt>v</tt> is a random scalar</t>
              </li>
              <li>
                <t>Compute the shared point <tt>S = vR</tt>, where <tt>R</tt> is the component public key
<tt>eccPublicKey</tt>, according to <xref target="SP800-186"/> or <xref target="RFC5639"/></t>
              </li>
              <li>
                <t>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"/></t>
              </li>
              <li>
                <t>Set the output <tt>eccCipherText</tt> to the SEC1 encoding of <tt>V</tt></t>
              </li>
              <li>
                <t>Set the output <tt>eccKeyShare</tt> to <tt>Hash(X || eccCipherText || eccPublicKey)</tt>,
with <tt>Hash</tt> chosen according to <xref target="tab-ecdh-nist-artifacts"/> or
<xref target="tab-ecdh-brainpool-artifacts"/></t>
              </li>
            </ol>
            <t>The operation <tt>ecdhKem.Decaps()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>
                <t>Compute the shared Point <tt>S</tt> as <tt>rV</tt>, where <tt>r</tt> is the <tt>eccSecretKey</tt> and
<tt>V</tt> is the <tt>eccCipherText</tt>, according to <xref target="SP800-186"/> or <xref target="RFC5639"/></t>
              </li>
              <li>
                <t>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"/></t>
              </li>
              <li>
                <t>Set the output <tt>eccKeyShare</tt> to <tt>Hash(X || eccCipherText || eccPublicKey)</tt>,
with <tt>Hash</tt> chosen according to <xref target="tab-ecdh-nist-artifacts"/> or
<xref target="tab-ecdh-brainpool-artifacts"/></t>
              </li>
            </ol>
          </section>
        </section>
        <section anchor="mlkem-ops">
          <name>ML-KEM</name>
          <t>ML-KEM features the following operations:</t>
          <artwork><![CDATA[
(mlkemCipherText, mlkemKeyShare) <- ML-KEM.Encaps(mlkemPublicKey)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(mlkemKeyShare) <- ML-KEM.Decaps(mlkemCipherText, mlkemSecretKey)
]]></artwork>
          <t>The above are the operations <tt>ML-KEM.Encaps</tt> and <tt>ML-KEM.Decaps</tt> defined in
<xref target="FIPS-203"/>. Note that <tt>mlkemPublicKey</tt> is the encapsulation and
<tt>mlkemSecretKey</tt> is the decapsulation key.</t>
          <t>ML-KEM has the parameterization with the corresponding artifact lengths in
octets as given in <xref target="tab-mlkem-artifacts"/>. All artifacts are encoded as
defined in <xref target="FIPS-203"/>.</t>
          <table anchor="tab-mlkem-artifacts">
            <name>ML-KEM parameters artifact lengths in octets</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">ML-KEM</th>
                <th align="left">Public key</th>
                <th align="left">Secret key</th>
                <th align="left">Ciphertext</th>
                <th align="left">Key share</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">29, 31, 33</td>
                <td align="left">ML-KEM-768</td>
                <td align="left">1184</td>
                <td align="left">2400</td>
                <td align="left">1088</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="right">30, 32, 34</td>
                <td align="left">ML-KEM-1024</td>
                <td align="left">1568</td>
                <td align="left">3168</td>
                <td align="left">1568</td>
                <td align="left">32</td>
              </tr>
            </tbody>
          </table>
          <t>To instantiate <tt>ML-KEM</tt>, one must select a parameter set from the column
"ML-KEM" of <xref target="tab-mlkem-artifacts"/>.</t>
          <t>The procedure to perform <tt>ML-KEM.Encaps()</tt> is as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Extract the encapsulation key <tt>mlkemPublicKey</tt> that is part of the
recipient's composite public key</t>
            </li>
            <li>
              <t>Invoke <tt>(mlkemCipherText, mlkemKeyShare) &lt;- ML-KEM.Encaps(mlkemPublicKey)</tt></t>
            </li>
            <li>
              <t>Set <tt>mlkemCipherText</tt> as the ML-KEM ciphertext</t>
            </li>
            <li>
              <t>Set <tt>mlkemKeyShare</tt> as the ML-KEM symmetric key share</t>
            </li>
          </ol>
          <t>The procedure to perform <tt>ML-KEM.Decaps()</tt> is as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Invoke <tt>mlkemKeyShare &lt;-  ML-KEM.Decaps(mlkemCipherText, mlkemSecretKey)</tt></t>
            </li>
            <li>
              <t>Set <tt>mlkemKeyShare</tt> as the ML-KEM symmetric key share</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="ecc-mlkem">
        <name>Composite Encryption Schemes with ML-KEM</name>
        <t><xref target="kem-alg-specs"/> specifies the following ML-KEM + ECC composite public-key
encryption schemes:</t>
        <table anchor="tab-mlkem-ecc-composite">
          <name>ML-KEM + ECC composite schemes</name>
          <thead>
            <tr>
              <th align="right">Algorithm ID reference</th>
              <th align="left">ML-KEM</th>
              <th align="left">ECC-KEM</th>
              <th align="left">ECC-KEM curve</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">29</td>
              <td align="left">ML-KEM-768</td>
              <td align="left">x25519Kem</td>
              <td align="left">Curve25519</td>
            </tr>
            <tr>
              <td align="right">30</td>
              <td align="left">ML-KEM-1024</td>
              <td align="left">x448Kem</td>
              <td align="left">Curve448</td>
            </tr>
            <tr>
              <td align="right">31</td>
              <td align="left">ML-KEM-768</td>
              <td align="left">ecdhKem</td>
              <td align="left">NIST P-256</td>
            </tr>
            <tr>
              <td align="right">32</td>
              <td align="left">ML-KEM-1024</td>
              <td align="left">ecdhKem</td>
              <td align="left">NIST P-384</td>
            </tr>
            <tr>
              <td align="right">33</td>
              <td align="left">ML-KEM-768</td>
              <td align="left">ecdhKem</td>
              <td align="left">brainpoolP256r1</td>
            </tr>
            <tr>
              <td align="right">34</td>
              <td align="left">ML-KEM-1024</td>
              <td align="left">ecdhKem</td>
              <td align="left">brainpoolP384r1</td>
            </tr>
          </tbody>
        </table>
        <t>The ML-KEM + ECC composite public-key encryption schemes are built according to
the following principal design:</t>
        <ul spacing="normal">
          <li>
            <t>The ML-KEM encapsulation algorithm is invoked to create a ML-KEM ciphertext
together with a ML-KEM symmetric key share.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>The PKESK package's algorithm-specific parts are made up of the ML-KEM
ciphertext, the ECC ciphertext, and the wrapped session key.</t>
          </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

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

eccData = eccKeyShare || eccCipherText
mlkemData = mlkemKeyShare || mlkemCipherText
encData = counter || eccData || mlkemData || fixedInfo

MB = KMAC256(domSeparation, encData, oBits, customizationString)
]]></artwork>
          <t>Note that the values <tt>eccKeyShare</tt> defined in <xref target="ecc-kem"/> and <tt>mlkemKeyShare</tt>
defined in <xref target="mlkem-ops"/> already use the relative ciphertext in the
derivation. The ciphertext is by design included again in the key combiner to
provide a robust security proof.</t>
          <t>The value of <tt>domSeparation</tt> is the UTF-8 encoding of the string
"OpenPGPCompositeKeyDerivationFunction" and MUST be the following octet sequence:</t>
          <artwork><![CDATA[
domSeparation := 4F 70 65 6E 50 47 50 43 6F 6D 70 6F 73 69 74 65
                 4B 65 79 44 65 72 69 76 61 74 69 6F 6E 46 75 6E
                 63 74 69 6F 6E
]]></artwork>
          <t>The value of <tt>counter</tt> MUST be set to the following octet sequence:</t>
          <artwork><![CDATA[
counter :=  00 00 00 01
]]></artwork>
          <t>The value of <tt>fixedInfo</tt> MUST be set according to <xref target="kem-fixed-info"/>.</t>
          <t>The value of <tt>customizationString</tt> is the UTF-8 encoding of the string "KDF"
and MUST be set to the following octet sequence:</t>
          <artwork><![CDATA[
customizationString := 4B 44 46
]]></artwork>
        </section>
        <section anchor="ecc-mlkem-generation">
          <name>Key generation procedure</name>
          <t>The implementation MUST independently generate the ML-KEM and the ECC component
keys. ML-KEM key generation follows the specification <xref target="FIPS-203"/> and the
artifacts are encoded as fixed-length octet strings as defined in
<xref target="mlkem-ops"/>. For ECC this is done following the relative specification in
<xref target="RFC7748"/>, <xref target="SP800-186"/>, or <xref target="RFC5639"/>, and encoding the outputs as
fixed-length octet strings in the format specified in
<xref target="tab-ecdh-cfrg-artifacts"/>, <xref target="tab-ecdh-nist-artifacts"/>, or
<xref target="tab-ecdh-brainpool-artifacts"/>.</t>
        </section>
        <section anchor="ecc-mlkem-encryption">
          <name>Encryption procedure</name>
          <t>The procedure to perform public-key encryption with a ML-KEM + ECC composite
scheme is as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Take the recipient's authenticated public-key packet <tt>pkComposite</tt> and
   <tt>sessionKey</tt> as input</t>
            </li>
            <li>
              <t>Parse the algorithm ID from <tt>pkComposite</tt></t>
            </li>
            <li>
              <t>Extract the <tt>eccPublicKey</tt> and <tt>mlkemPublicKey</tt> component from the
algorithm specific data encoded in <tt>pkComposite</tt> with the format specified
in <xref target="mlkem-ecc-key"/>.</t>
            </li>
            <li>
              <t>Instantiate the ECC-KEM and the ML-KEM depending on the algorithm ID
according to <xref target="tab-mlkem-ecc-composite"/></t>
            </li>
            <li>
              <t>Compute <tt>(eccCipherText, eccKeyShare) := ECC-KEM.Encaps(eccPublicKey)</tt></t>
            </li>
            <li>
              <t>Compute <tt>(mlkemCipherText, mlkemKeyShare) := ML-KEM.Encaps(mlkemPublicKey)</tt></t>
            </li>
            <li>
              <t>Compute <tt>fixedInfo</tt> as specified in <xref target="kem-fixed-info"/></t>
            </li>
            <li>
              <t>Compute <tt>KEK := multiKeyCombine(eccKeyShare, eccCipherText, mlkemKeyShare,
mlkemCipherText, fixedInfo, oBits=256)</tt> as defined in <xref target="kem-key-combiner"/></t>
            </li>
            <li>
              <t>Compute <tt>C := AESKeyWrap(KEK, sessionKey)</tt> with AES-256 as per <xref target="RFC3394"/>
that includes a 64 bit integrity check</t>
            </li>
            <li>
              <t>Output <tt>eccCipherText || mlkemCipherText || len(C) || C</tt></t>
            </li>
          </ol>
        </section>
        <section anchor="decryption-procedure">
          <name>Decryption procedure</name>
          <t>The procedure to perform public-key decryption with a ML-KEM + ECC composite
scheme is as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Take the matching PKESK and own secret key packet as input</t>
            </li>
            <li>
              <t>From the PKESK extract the algorithm ID and the <tt>encryptedKey</tt></t>
            </li>
            <li>
              <t>Check that the own and the extracted algorithm ID match</t>
            </li>
            <li>
              <t>Parse the <tt>eccSecretKey</tt> and <tt>mlkemSecretKey</tt> from the algorithm specific
data of the own secret key encoded in the format specified in
<xref target="mlkem-ecc-key"/></t>
            </li>
            <li>
              <t>Instantiate the ECC-KEM and the ML-KEM depending on the algorithm ID
according to <xref target="tab-mlkem-ecc-composite"/></t>
            </li>
            <li>
              <t>Parse <tt>eccCipherText</tt>, <tt>mlkemCipherText</tt>, and <tt>C</tt> from <tt>encryptedKey</tt>
encoded as <tt>eccCipherText || mlkemCipherText || len(C) || C</tt> as specified
in <xref target="ecc-mlkem-pkesk"/></t>
            </li>
            <li>
              <t>Compute <tt>(eccKeyShare) := ECC-KEM.Decaps(eccCipherText, eccSecretKey)</tt></t>
            </li>
            <li>
              <t>Compute <tt>(mlkemKeyShare) := ML-KEM.Decaps(mlkemCipherText, mlkemSecretKey)</tt></t>
            </li>
            <li>
              <t>Compute <tt>fixedInfo</tt> as specified in <xref target="kem-fixed-info"/></t>
            </li>
            <li>
              <t>Compute <tt>KEK := multiKeyCombine(eccKeyShare, eccCipherText, mlkemKeyShare,
mlkemCipherText, fixedInfo, oBits=256)</tt> as defined in <xref target="kem-key-combiner"/></t>
            </li>
            <li>
              <t>Compute <tt>sessionKey := AESKeyUnwrap(KEK, C)</tt>  with AES-256 as per
<xref target="RFC3394"/>, aborting if the 64 bit integrity check fails</t>
            </li>
            <li>
              <t>Output <tt>sessionKey</tt></t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="packet-specifications">
        <name>Packet specifications</name>
        <section anchor="ecc-mlkem-pkesk">
          <name>Public-Key Encrypted Session Key Packets (Tag 1)</name>
          <t>The algorithm-specific fields consists of:</t>
          <ul spacing="normal">
            <li>
              <t>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"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string of the ML-KEM ciphertext, whose length depends
on the algorithm ID as specified in <xref target="tab-mlkem-artifacts"/>.</t>
            </li>
            <li>
              <t>The one-octet algorithm identifier, if it is passed (in the case of a v3
PKESK packet).</t>
            </li>
            <li>
              <t>A variable-length field containing the wrapped session key:  </t>
              <ul spacing="normal">
                <li>
                  <t>A one-octet size of the following field;</t>
                </li>
                <li>
                  <t>The wrapped session key represented as an octet string, i.e., the output
of the encryption procedure described in <xref target="ecc-mlkem-encryption"/>.</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>Note that unlike most public-key algorithms, in the case of a v3 PKESK packet,
the symmetric algorithm identifier is not encrypted.  Instead, it is prepended
to the encrypted session key in plaintext.  In this case, the symmetric
algorithm used MUST be AES-128, AES-192 or AES-256 (algorithm ID 7, 8 or 9).</t>
        </section>
        <section anchor="mlkem-ecc-key">
          <name>Key Material Packets</name>
          <t>The algorithm-specific public key is this series of values:</t>
          <ul spacing="normal">
            <li>
              <t>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"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string containing the ML-KEM public key, whose
length depends on the algorithm ID as specified in <xref target="tab-mlkem-artifacts"/>.</t>
            </li>
          </ul>
          <t>The algorithm-specific secret key is these two values:</t>
          <ul spacing="normal">
            <li>
              <t>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"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string containing the ML-KEM secret key, whose
length depends on the algorithm ID as specified in <xref target="tab-mlkem-artifacts"/>.</t>
            </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(eddsaSecretKey, dataDigest)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(verified) <- EdDSA.Verify(eddsaPublicKey, eddsaSignature, dataDigest)
]]></artwork>
          <t>The public and secret key, as well as the signature MUST be encoded according
to <xref target="RFC8032"/> as fixed-length octet strings. The following table describes the
EdDSA parameters and artifact lengths:</t>
          <table anchor="tab-eddsa-artifacts">
            <name>EdDSA parameters and artifact lengths in octets</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Curve</th>
                <th align="left">Field size</th>
                <th align="left">Public key</th>
                <th align="left">Secret key</th>
                <th align="left">Signature</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">35</td>
                <td align="left">Ed25519</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">64</td>
              </tr>
              <tr>
                <td align="right">36</td>
                <td align="left">Ed448</td>
                <td align="left">57</td>
                <td align="left">57</td>
                <td align="left">57</td>
                <td align="left">114</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="ecdsa-signature">
          <name>ECDSA-Based signatures</name>
          <t>To sign and verify with ECDSA the following operations are defined:</t>
          <artwork><![CDATA[
(ecdsaSignatureR, ecdsaSignatureS) <- ECDSA.Sign(ecdsaSecretKey,
                                                 dataDigest)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(verified) <- ECDSA.Verify(ecdsaPublicKey, ecdsaSignatureR,
                           ecdsaSignatureS, dataDigest)
]]></artwork>
          <t>The public keys MUST be encoded in SEC1 format as defined in section
<xref target="sec1-format"/>. The secret key, as well as both values <tt>R</tt> and <tt>S</tt> of the
signature MUST each be encoded as a big-endian integer in a fixed-length octet
string of the specified size.</t>
          <t>The following table describes the ECDSA parameters and artifact lengths:</t>
          <table anchor="tab-ecdsa-artifacts">
            <name>ECDSA parameters and artifact lengths in octets</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Curve</th>
                <th align="left">Field size</th>
                <th align="left">Public key</th>
                <th align="left">Secret key</th>
                <th align="left">Signature value R</th>
                <th align="left">Signature value S</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">37</td>
                <td align="left">NIST P-256</td>
                <td align="left">32</td>
                <td align="left">65</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="right">38</td>
                <td align="left">NIST P-384</td>
                <td align="left">48</td>
                <td align="left">97</td>
                <td align="left">48</td>
                <td align="left">48</td>
                <td align="left">48</td>
              </tr>
              <tr>
                <td align="right">39</td>
                <td align="left">brainpoolP256r1</td>
                <td align="left">32</td>
                <td align="left">65</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="right">40</td>
                <td align="left">brainpoolP384r1</td>
                <td align="left">48</td>
                <td align="left">97</td>
                <td align="left">48</td>
                <td align="left">48</td>
                <td align="left">48</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="mldsa-signature">
          <name>ML-DSA signatures</name>
          <t>For ML-DSA signature generation the default hedged version of <tt>ML-DSA.Sign</tt>
given in <xref target="FIPS-204"/> is used. That is, to sign with ML-DSA the following
operation is defined:</t>
          <artwork><![CDATA[
(mldsaSignature) <- ML-DSA.Sign(mldsaSecretKey, dataDigest)
]]></artwork>
          <t>For ML-DSA signature verification the algorithm ML-DSA.Verify given in
<xref target="FIPS-204"/> is used. That is, to verify with ML-DSA the following operation is
defined:</t>
          <artwork><![CDATA[
(verified) <- ML-DSA.Verify(mldsaPublicKey, dataDigest, mldsaSignature)
]]></artwork>
          <t>ML-DSA has the parameterization with the corresponding artifact lengths in
octets as given in <xref target="tab-mldsa-artifacts"/>. All artifacts are encoded as
defined in <xref target="FIPS-204"/>.</t>
          <table anchor="tab-mldsa-artifacts">
            <name>ML-DSA parameters and artifact lengths in octets</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">ML-DSA</th>
                <th align="left">Public key</th>
                <th align="left">Secret key</th>
                <th align="left">Signature value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">35, 37, 39</td>
                <td align="left">ML-DSA-65</td>
                <td align="left">1952</td>
                <td align="left">4000</td>
                <td align="left">3293</td>
              </tr>
              <tr>
                <td align="right">36, 38, 40</td>
                <td align="left">ML-DSA-87</td>
                <td align="left">2592</td>
                <td align="left">4864</td>
                <td align="left">4595</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="ecc-mldsa">
        <name>Composite Signature Schemes with ML-DSA</name>
        <section anchor="mldsa-sig-data-digest">
          <name>Signature data digest</name>
          <t>Signature data (i.e. the data to be signed) is digested prior to signing
operations, see <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.4. Composite
ML-DSA + ECC signatures MUST use the associated hash algorithm as specified in
<xref target="tab-mldsa-hash"/> for the signature data digest. Signatures using other hash
algorithms MUST be considered invalid.</t>
          <t>An implementation supporting a specific ML-DSA + ECC algorithm MUST also
support the matching hash algorithm.</t>
          <table anchor="tab-mldsa-hash">
            <name>Binding between ML-DSA and signature data digest</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Hash function</th>
                <th align="left">Hash function ID reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">35, 37, 39</td>
                <td align="left">SHA3-256</td>
                <td align="left">12</td>
              </tr>
              <tr>
                <td align="right">36, 38, 40</td>
                <td align="left">SHA3-512</td>
                <td align="left">14</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="ecc-mldsa-generation">
          <name>Key generation procedure</name>
          <t>The implementation MUST independently generate the ML-DSA and the ECC
component keys. ML-DSA key generation follows the specification
<xref target="FIPS-204"/> and the artifacts are encoded as fixed-length octet strings as
defined in <xref target="mldsa-signature"/>. For ECC this is done following the relative
specification in <xref target="RFC7748"/>, <xref target="SP800-186"/>, or <xref target="RFC5639"/>, and encoding the
artifacts as specified in <xref target="eddsa-signature"/> or <xref target="ecdsa-signature"/> as
fixed-length octet strings.</t>
        </section>
        <section anchor="signature-generation">
          <name>Signature Generation</name>
          <t>To sign a message <tt>M</tt> with ML-DSA + EdDSA the following sequence of
operations has to be performed:</t>
          <ol spacing="normal" type="1"><li>
              <t>Generate <tt>dataDigest</tt> according to <xref target="I-D.ietf-openpgp-crypto-refresh"/>
Section 5.2.4</t>
            </li>
            <li>
              <t>Create the EdDSA signature over <tt>dataDigest</tt> with <tt>EdDSA.Sign()</tt> from
<xref target="eddsa-signature"/></t>
            </li>
            <li>
              <t>Create the ML-DSA signature over <tt>dataDigest</tt> with <tt>ML-DSA.Sign()</tt> from
<xref target="mldsa-signature"/></t>
            </li>
            <li>
              <t>Encode the EdDSA and ML-DSA signatures according to the packet structure
given in <xref target="ecc-mldsa-sig-packet"/>.</t>
            </li>
          </ol>
          <t>To sign a message <tt>M</tt> with ML-DSA + ECDSA the following sequence of
operations has to be performed:</t>
          <ol spacing="normal" type="1"><li>
              <t>Generate <tt>dataDigest</tt> according to <xref target="I-D.ietf-openpgp-crypto-refresh"/>
Section 5.2.4</t>
            </li>
            <li>
              <t>Create the ECDSA signature over <tt>dataDigest</tt> with <tt>ECDSA.Sign()</tt> from
<xref target="ecdsa-signature"/></t>
            </li>
            <li>
              <t>Create the ML-DSA signature over <tt>dataDigest</tt> with <tt>ML-DSA.Sign()</tt> from
<xref target="mldsa-signature"/></t>
            </li>
            <li>
              <t>Encode the ECDSA and ML-DSA signatures according to the packet structure
given in <xref target="ecc-mldsa-sig-packet"/>.</t>
            </li>
          </ol>
        </section>
        <section anchor="signature-verification">
          <name>Signature Verification</name>
          <t>To verify a ML-DSA + EdDSA signature the following sequence of operations
has to be performed:</t>
          <ol spacing="normal" type="1"><li>
              <t>Verify the EdDSA signature with <tt>EdDSA.Verify()</tt> from <xref target="eddsa-signature"/></t>
            </li>
            <li>
              <t>Verify the ML-DSA signature with <tt>ML-DSA.Verify()</tt> from <xref target="mldsa-signature"/></t>
            </li>
          </ol>
          <t>To verify a ML-DSA + ECDSA signature the following sequence of operations has
to be performed:</t>
          <ol spacing="normal" type="1"><li>
              <t>Verify the ECDSA signature with <tt>ECDSA.Verify()</tt> from <xref target="ecdsa-signature"/></t>
            </li>
            <li>
              <t>Verify the ML-DSA signature with <tt>ML-DSA.Verify()</tt> from <xref target="mldsa-signature"/></t>
            </li>
          </ol>
          <t>As specified in <xref target="composite-signatures"/> an implementation MUST validate both
signatures, i.e. EdDSA/ECDSA and ML-DSA, to state that a composite ML-DSA + ECC
signature is valid.</t>
        </section>
      </section>
      <section anchor="packet-specifications-1">
        <name>Packet Specifications</name>
        <section anchor="ecc-mldsa-sig-packet">
          <name>Signature Packet (Tag 2)</name>
          <t>The composite ML-DSA + ECC schemes MUST be used only with v6 signatures, as
defined in <xref target="I-D.ietf-openpgp-crypto-refresh"/>.</t>
          <t>The algorithm-specific v6 signature parameters for ML-DSA + EdDSA signatures
consists of:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string representing the EdDSA signature, whose length
depends on the algorithm ID as specified in <xref target="tab-eddsa-artifacts"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string of the ML-DSA signature value, whose length
depends on the algorithm ID as specified in <xref target="tab-mldsa-artifacts"/>.</t>
            </li>
          </ul>
          <t>The algorithm-specific v6 signature parameters for ML-DSA + ECDSA signatures
consists of:</t>
          <ul spacing="normal">
            <li>
              <t>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"/>.</t>
            </li>
            <li>
              <t>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"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string of the ML-DSA signature value, whose length
depends on the algorithm ID as specified in <xref target="tab-mldsa-artifacts"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="key-material-packets">
          <name>Key Material Packets</name>
          <t>The composite ML-DSA + ECC schemes MUST be used only with v6 keys, as defined
in <xref target="I-D.ietf-openpgp-crypto-refresh"/>.</t>
          <t>The algorithm-specific public key for ML-DSA + EdDSA keys is this series of
values:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string representing the EdDSA public key, whose length
depends on the algorithm ID as specified in <xref target="tab-eddsa-artifacts"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string containing the ML-DSA public key, whose length
depends on the algorithm ID as specified in <xref target="tab-mldsa-artifacts"/>.</t>
            </li>
          </ul>
          <t>The algorithm-specific secret key for ML-DSA + EdDSA keys is this series of
values:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string representing the EdDSA secret key, whose length
depends on the algorithm ID as specified in <xref target="tab-eddsa-artifacts"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string containing the ML-DSA secret key, whose length
depends on the algorithm ID as specified in <xref target="tab-mldsa-artifacts"/>.</t>
            </li>
          </ul>
          <t>The algorithm-specific public key for ML-DSA + ECDSA keys is this series of
values:</t>
          <ul spacing="normal">
            <li>
              <t>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"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string containing the ML-DSA public key, whose length
depends on the algorithm ID as specified in <xref target="tab-mldsa-artifacts"/>.</t>
            </li>
          </ul>
          <t>The algorithm-specific secret key for ML-DSA + ECDSA keys is this series of
values:</t>
          <ul spacing="normal">
            <li>
              <t>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"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string containing the ML-DSA secret key, whose length
depends on the algorithm ID as specified in <xref target="tab-mldsa-artifacts"/>.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="slh-dsa-1">
      <name>SLH-DSA</name>
      <section anchor="slhdsa">
        <name>The SLH-DSA Algorithms</name>
        <t>The following table describes the SLH-DSA parameters and artifact lengths:</t>
        <table anchor="slhdsa-artifact-lengths">
          <name>SLH-DSA parameters and artifact lengths in octets. The values equally apply to the parameter IDs of SLH-DSA-SHA2 and SLH-DSA-SHAKE.</name>
          <thead>
            <tr>
              <th align="right">Parameter ID reference</th>
              <th align="right">Parameter name suffix</th>
              <th align="left">SLH-DSA public key</th>
              <th align="left">SLH-DSA secret key</th>
              <th align="left">SLH-DSA 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="slhdsa-sig-data-digest">
          <name>Signature Data Digest</name>
          <t>Signature data (i.e. the data to be signed) is digested prior to signing
operations, see <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.4. SLH-DSA
signatures MUST use the associated hash algorithm as specified in
<xref target="tab-slhdsa-hash"/> for the signature data digest. Signatures using other hash
algorithms MUST be considered invalid.</t>
          <t>An implementation supporting a specific SLH-DSA algorithm and parameter MUST
also support the matching hash algorithm.</t>
          <table anchor="tab-slhdsa-hash">
            <name>Binding between SLH-DSA and signature data digest</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Parameter ID reference</th>
                <th align="left">Hash function</th>
                <th align="left">Hash function ID reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">41</td>
                <td align="left">1, 2</td>
                <td align="left">SHA-256</td>
                <td align="left">8</td>
              </tr>
              <tr>
                <td align="right">41</td>
                <td align="left">3, 4, 5, 6</td>
                <td align="left">SHA-512</td>
                <td align="left">10</td>
              </tr>
              <tr>
                <td align="right">42</td>
                <td align="left">1, 2</td>
                <td align="left">SHA3-256</td>
                <td align="left">12</td>
              </tr>
              <tr>
                <td align="right">42</td>
                <td align="left">3, 4, 5, 6</td>
                <td align="left">SHA3-512</td>
                <td align="left">14</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="key-generation">
          <name>Key generation</name>
          <t>SLH-DSA key generation is performed via the algorithm <tt>SLH-DSA.KeyGen</tt> as
specified in <xref target="FIPS-205"/>, and the artifacts are encoded as fixed-length octet
strings as defined in <xref target="slhdsa"/>.</t>
        </section>
        <section anchor="signature-generation-1">
          <name>Signature Generation</name>
          <t>SLH-DSA signature generation is performed via the algorithm <tt>SLH-DSA.Sign</tt> as
specified in <xref target="FIPS-205"/>. The variable <tt>opt_rand</tt> is set to <tt>PK.seed</tt>. See
also <xref target="slhdsa-sec-cons"/>.</t>
          <t>An implementation MUST set the Parameter ID in the signature equal to the
issuing secret key Parameter ID.</t>
        </section>
        <section anchor="signature-verification-1">
          <name>Signature Verification</name>
          <t>SLH-DSA signature verification is performed via the algorithm <tt>SLH-DSA.Verify</tt>
as specified in <xref target="FIPS-205"/>.</t>
          <t>An implementation MUST check that the Parameter ID in the signature and in the
key match when verifying.</t>
        </section>
      </section>
      <section anchor="packet-specifications-2">
        <name>Packet specifications</name>
        <section anchor="signature-packet-tag-2">
          <name>Signature Packet (Tag 2)</name>
          <t>The SLH-DSA scheme MUST be used only with v6 signatures, as defined in
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.3.</t>
          <t>The algorithm-specific v6 Signature parameters consists of:</t>
          <ul spacing="normal">
            <li>
              <t>A one-octet value specifying the SLH-DSA parameter ID defined in
<xref target="slhdsa-param-sha2"/> and <xref target="slhdsa-param-shake"/>. The values <tt>0x00</tt> and
<tt>0xFF</tt> are reserved for future extensions.</t>
            </li>
            <li>
              <t>A fixed-length octet string of the SLH-DSA signature value, whose length
depends on the parameter ID in the format specified in
<xref target="slhdsa-artifact-lengths"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="key-material-packets-1">
          <name>Key Material Packets</name>
          <t>The SLH-DSA scheme MUST be used only with v6 keys, as defined in
<xref target="I-D.ietf-openpgp-crypto-refresh"/>.</t>
          <t>The algorithm-specific public key is this series of values:</t>
          <ul spacing="normal">
            <li>
              <t>A one-octet value specifying the SLH-DSA parameter ID defined in
<xref target="slhdsa-param-sha2"/> and <xref target="slhdsa-param-shake"/>. The values <tt>0x00</tt> and
<tt>0xFF</tt> are reserved for future extensions.</t>
            </li>
            <li>
              <t>A fixed-length octet string containing the SLH-DSA public key, whose length
depends on the parameter ID as specified in <xref target="slhdsa-artifact-lengths"/>.</t>
            </li>
          </ul>
          <t>The algorithm-specific secret key is this value:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string containing the SLH-DSA secret key, whose length
depends on the parameter ID as specified in <xref target="tab-ecdsa-artifacts"/>.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="migration-considerations">
      <name>Migration Considerations</name>
      <t>The post-quantum KEM algorithms defined in <xref target="kem-alg-specs"/> and the signature
algorithms defined in <xref target="sig-alg-specs"/> are a set of new public key algorithms
that extend the algorithm selection of <xref target="I-D.ietf-openpgp-crypto-refresh"/>.
During the transition period, the post-quantum algorithms will not be supported
by all clients. Therefore various migration considerations must be taken into
account, in particular backwards compatibility to existing implementations that
have not yet been updated to support the post-quantum algorithms.</t>
      <section anchor="key-preference">
        <name>Key preference</name>
        <t>Implementations SHOULD prefer PQ(/T) keys when multiple options are available.</t>
        <t>For instance, if encrypting for a recipient for which both a valid PQ/T and a
valid ECC certificate are available, the implementation SHOULD choose the PQ/T
certificate. In case a certificate has both a PQ/T and an ECC
encryption-capable valid subkey, the PQ/T subkey SHOULD be preferred.</t>
        <t>An implementation MAY sign with both a PQ(/T) and an ECC key using multiple
signatures over the same data as described in <xref target="multiple-signatures"/>.
Signing only with PQ(/T) key material is not backwards compatible.</t>
        <t>Note that the confidentiality of a message is not post-quantum secure when
encrypting to multiple recipients if at least one recipient does not support
PQ/T encryption schemes. An implementation SHOULD NOT abort the encryption
process in this case to allow for a smooth transition to post-quantum
cryptography.</t>
      </section>
      <section anchor="key-generation-strategies">
        <name>Key generation strategies</name>
        <t>It is REQUIRED to generate fresh secrets when generating PQ(/T) keys. Reusing
key material from existing ECC keys in PQ(/T) keys does not provide backwards
compatibility, and the fingerprint will differ.</t>
        <t>An OpenPGP (v6) certificate is composed of a certification-capable primary key
and one or more subkeys for signature, encryption, and authentication.
Two migration strategies are recommended:</t>
        <ol spacing="normal" type="1"><li>
            <t>Generate two independent certificates, one for PQ(/T)-capable
implementations, and one for legacy implementations. Implementations not
understanding PQ(/T) certificates can use the legacy certificate, while
PQ(/T)-capable implementations will prefer the newer certificate. This allows
having an older v4 or v6 ECC certificate for compatibility and a v6 PQ(/T)
certificate, at a greater complexity in key distribution.</t>
          </li>
          <li>
            <t>Attach PQ(/T) encryption and signature subkeys to an existing v6 ECC
certificate. Implementations understanding PQ(/T) will be able to parse and use
the subkeys, while PQ(/T)-incapable implementations can gracefully ignore them.
This simplifies key distribution, as only one certificate needs to be
communicated and verified, but leaves the primary key vulnerable to quantum
computer attacks.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="hashing-in-ecc-kem">
        <name>Hashing in ECC-KEM</name>
        <t>Our construction of the ECC-KEMs, in particular the inclusion of
<tt>eccCipherText</tt> in the final hashing step in encapsulation and decapsulation
that produces the <tt>eccKeyShare</tt>, is standard and known as hashed ElGamal key
encapsulation, a hashed variant of ElGamal encryption. It ensures IND-CCA2
security in the random oracle model under some Diffie-Hellman intractability
assumptions <xref target="CS03"/>. The additional inclusion of <tt>eccPublicKey</tt> follows the
security advice in Section 6.1 of <xref target="RFC7748"/>.</t>
      </section>
      <section anchor="sec-key-combiner">
        <name>Key combiner</name>
        <t>For the key combination in <xref target="kem-key-combiner"/> this specification limits
itself to the use of KMAC. The sponge construction used by KMAC was proven to
be indifferentiable from a random oracle <xref target="BDPA08"/>. This means, that in
contrast to SHA2, which uses a Merkle-Damgard construction, no HMAC-based
construction is required for key combination. Except for a domain separation it
is sufficient to simply process the concatenation of any number of key shares
when using a sponge-based construction like KMAC. The construction using KMAC
ensures a standardized domain separation. In this case, the processed message
is then the concatenation of any number of key shares.</t>
        <t>More precisely, for a given capacity <tt>c</tt> the indifferentiability proof shows
that assuming there are no weaknesses found in the Keccak permutation, an
attacker has to make an expected number of <tt>2^(c/2)</tt> calls to the permutation
to tell KMAC from a random oracle. For a random oracle, a difference in only a
single bit gives an unrelated, uniformly random output. Hence, to be able to
distinguish a key <tt>K</tt>, derived from shared keys <tt>K1</tt> and <tt>K2</tt> (and ciphertexts
<tt>C1</tt> and <tt>C2</tt>) as</t>
        <artwork><![CDATA[
K = KMAC(domainSeparation, counter || K1 || C1 || K2 || C2 || fixedInfo,
         outputBits, customization)
]]></artwork>
        <t>from a random bit string, an adversary has to know (or correctly guess) both
key shares <tt>K1</tt> and <tt>K2</tt>, entirely.</t>
        <t>The proposed construction in <xref target="kem-key-combiner"/> preserves IND-CCA2 of any of
its ingredient KEMs, i.e. the newly formed combined KEM is IND-CCA2 secure as
long as at least one of the ingredient KEMs is. Indeed, the above stated
indifferentiability from a random oracle qualifies Keccak as a split-key
pseudorandom function as defined in <xref target="GHP18"/>. That is, Keccak behaves like a
random function if at least one input shared secret is picked uniformly at
random. Our construction can thus be seen as an instantiation of the IND-CCA2
preserving Example 3 in Figure 1 of <xref target="GHP18"/>, up to some reordering of input
shared secrets and ciphertexts. In the random oracle setting, the reordering
does not influence the arguments in <xref target="GHP18"/>.</t>
      </section>
      <section anchor="sec-fixed-info">
        <name>Domain separation and binding</name>
        <t>The <tt>domSeparation</tt> information defined in <xref target="kem-key-combiner"/> provides the
domain separation for the key combiner construction. This ensures that the
input keying material is used to generate a KEK for a specific purpose or
context.</t>
        <t>The <tt>fixedInfo</tt> defined in <xref target="kem-fixed-info"/> binds the derived KEK to the
chosen algorithm and communication parties. The algorithm ID identifies
univocally the algorithm, the parameters for its instantiation, and the length
of all artifacts, including the derived key.</t>
        <t>This is in line with the Recommendation for ECC in section 5.5 of
<xref target="SP800-56A"/>. Other fields included in the recommendation are not relevant
for the OpenPGP protocol, since the sender is not required to have a key of
their own, there are no pre-shared secrets, and all the other parameters are
univocally defined by the algorithm ID.</t>
        <t>Furthermore, we do not require the recipients public key into the key combiner
as the public key material is already included in the component key derivation
functions.
Given two KEMs which we assume to be multi-user secure, we combine their outputs
using a KEM-combiner:</t>
        <artwork><![CDATA[
K = H(K1, C1, K2, C2), C = (C1, C2)
]]></artwork>
        <t>Our aim is to preserve multi-user security. A common approach to this is to add
the public key into the key derivation for K. However, it turns out that this is
not necessary here. To break security of the combined scheme in the multi-user
setting, the adversary has to distinguish a set of challenge keys</t>
        <t>K<em>_u = H(K1</em>_u, C1<em>_u, K2</em>_u, C2*_u)</t>
        <t>for users u in some set from random, also given ciphertexts <tt>C*_u = (C1*_u,
C2*_u)</tt>. For each of these K* it holds that if the adversary never makes a
query</t>
        <artwork><![CDATA[
H(K1*_u, C1*_u, K2*_u, C2*_u)
]]></artwork>
        <t>they have a zero advantage over guessing.</t>
        <t>The only multi-user advantage that the adversary could gain therefore consists
of queries to H that are meaningful for two different users u1 != u2 and their
associated public keys. This is only the case if</t>
        <artwork><![CDATA[
(c1*_u1, c2*_u1) = (c1*_u2, c2*_u2)
]]></artwork>
        <t>as the ciphertext values decide for which challenge the query is meaningful.
This means that a ciphertext collision is needed between challenges. Assuming
that the randomness used in the generation of the two challenges is
uncorrelated, this is negligible.</t>
        <t>In consequence, the ciphertexts already work sufficiently well as
domain-separator.</t>
      </section>
      <section anchor="slhdsa-sec-cons">
        <name>SLH-DSA Message Randomizer</name>
        <t>The specification of SLH-DSA <xref target="FIPS-205"/> prescribes an optional
non-deterministic message randomizer. This is not used in this specification,
as OpenPGP v6 signatures already provide a salted signature data digest of the
appropriate size.</t>
      </section>
      <section anchor="binding-hashes-in-signatures-with-signature-algorithms">
        <name>Binding hashes in signatures with signature algorithms</name>
        <t>In order not to extend the attack surface, we bind the hash algorithm used for
signature data digestion to the hash algorithm used internally by the signature
algorithm.</t>
        <t>ML-DSA internally uses a SHAKE256 digest, therefore we require SHA3 in the
ML-DSA + ECC signature packet, see <xref target="mldsa-sig-data-digest"/>. Note that we bind
a NIST security category 2 hash function to a signature algorithm that falls
into NIST security category 3. This does not constitute a security bottleneck:
because of the unpredictable random salt that is prepended to the digested data
in v6 signatures, the hardness assumption is not collision resistance but
second-preimage resistance.</t>
        <t>In the case of SLH-DSA the internal hash algorithm varies based on the
algorithm and parameter ID, see <xref target="slhdsa-sig-data-digest"/>.</t>
      </section>
    </section>
    <section anchor="additional-considerations">
      <name>Additional considerations</name>
      <section anchor="performance-considerations">
        <name>Performance Considerations for SLH-DSA</name>
        <t>This specification introduces both ML-DSA + ECC as well as SLH-DSA as PQ(/T)
signature schemes.</t>
        <t>Generally, it can be said that ML-DSA + ECC provides a performance in terms of
execution time requirements that is close to that of traditional ECC signature
schemes.
Regarding the size of signatures and public keys, though, ML-DSA has far greater
requirements than traditional schemes like EC-based or even RSA
signature schemes. Implementers may want to offer SLH-DSA for applications
where a higher degree of trust in the signature scheme is required. However,
SLH-DSA has performance characteristics in terms of execution time of the
signature generation as well as space requirements for the signature that are
even greater than those of
ML-DSA + ECC signature schemes.</t>
        <t>Pertaining to the execution time, the particularly costly operation in SLH-DSA
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 SLH-DSA signature, a parameter
set ending in "s" for "small" should be chosen. This comes at the expense of a
longer signature generation time.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA will add the following registries to the <tt>Pretty Good Privacy (PGP)</tt>
registry group at https://www.iana.org/assignments/pgp-parameters:</t>
      <ul spacing="normal">
        <li>
          <t>Registry name: <tt>SLH-DSA-SHA2 parameters</tt>  </t>
          <t>
Registration procedure: SPECIFICATION REQUIRED <xref target="RFC8126"/>  </t>
          <t>
Values defined in this document, <xref target="slhdsa-param-sha2"/>.</t>
        </li>
        <li>
          <t>Registry name: <tt>SLH-DSA-SHAKE parameters</tt>  </t>
          <t>
Registration procedure: SPECIFICATION REQUIRED <xref target="RFC8126"/>  </t>
          <t>
Values defined in this document, <xref target="slhdsa-param-shake"/>.</t>
        </li>
      </ul>
      <t>Furthermore IANA will add the algorithm IDs defined in <xref target="kem-alg-specs"/> and
<xref target="sig-alg-specs"/> to the  registry <tt>Public Key Algorithms</tt>.</t>
    </section>
    <section anchor="changelog">
      <name>Changelog</name>
      <section anchor="draft-wussler-openpgp-pqc-01">
        <name>draft-wussler-openpgp-pqc-01</name>
        <ul spacing="normal">
          <li>
            <t>Shifted the algorithm IDs by 4 to align with the crypto-refresh.</t>
          </li>
          <li>
            <t>Renamed v5 packets into v6 to align with the crypto-refresh.</t>
          </li>
          <li>
            <t>Defined IND-CCA2 security for KDF and key combination.</t>
          </li>
          <li>
            <t>Added explicit key generation procedures.</t>
          </li>
          <li>
            <t>Changed the key combination KMAC salt.</t>
          </li>
          <li>
            <t>Mandated Parameter ID check in SPHINCS+ signature verification.</t>
          </li>
          <li>
            <t>Fixed key share size for Kyber-768.</t>
          </li>
          <li>
            <t>Added "Preliminaries" section.</t>
          </li>
          <li>
            <t>Fixed IANA considerations.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-wussler-openpgp-pqc-02">
        <name>draft-wussler-openpgp-pqc-02</name>
        <ul spacing="normal">
          <li>
            <t>Added the ephemeral and public key in the ECC key derivation function.</t>
          </li>
          <li>
            <t>Removed public key hash from key combiner.</t>
          </li>
          <li>
            <t>Allowed v3 PKESKs and v4 keys with PQ algorithms, limiting them to AES
symmetric ciphers.
for encryption with SEIPDv1, in line with the crypto-refresh.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-wussler-openpgp-pqc-03">
        <name>draft-wussler-openpgp-pqc-03</name>
        <ul spacing="normal">
          <li>
            <t>Replaced round 3 submission with NIST PQC Draft Standards FIPS 203, 204, 205.</t>
          </li>
          <li>
            <t>Added consideration about security level for hashes.</t>
          </li>
        </ul>
      </section>
    </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 anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <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"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="September" year="2002"/>
          </front>
          <seriesInfo name="RFC" value="3394"/>
          <seriesInfo name="DOI" value="10.17487/RFC3394"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="I-D.ietf-openpgp-crypto-refresh">
          <front>
            <title>OpenPGP</title>
            <author fullname="Paul Wouters" initials="P." surname="Wouters">
              <organization>Aiven</organization>
            </author>
            <author fullname="Daniel Huigens" initials="D." surname="Huigens">
              <organization>Proton AG</organization>
            </author>
            <author fullname="Justus Winter" initials="J." surname="Winter">
              <organization>Sequoia-PGP</organization>
            </author>
            <author fullname="Niibe Yutaka" initials="N." surname="Yutaka">
              <organization>FSIJ</organization>
            </author>
            <date day="17" month="October" year="2023"/>
            <abstract>
              <t>   This document specifies the message formats used in OpenPGP.  OpenPGP
   provides encryption with public-key or symmetric cryptographic
   algorithms, digital signatures, compression and key management.

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-openpgp-crypto-refresh-12"/>
        </reference>
      </references>
      <references anchor="sec-informative-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"/>
            <author fullname="J. Merkle" initials="J." surname="Merkle"/>
            <date month="March" year="2010"/>
            <abstract>
              <t>This memo proposes several elliptic curve domain parameters over finite prime fields for use in cryptographic applications. The domain parameters are consistent with the relevant international standards, and can be used in X.509 certificates and certificate revocation lists (CRLs), for Internet Key Exchange (IKE), Transport Layer Security (TLS), XML signatures, and all applications or protocols based on the cryptographic message syntax (CMS). This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5639"/>
          <seriesInfo name="DOI" value="10.17487/RFC5639"/>
        </reference>
        <reference anchor="NIST-PQC" target="https://csrc.nist.gov/projects/post-quantum-cryptography/post-quantum-cryptography-standardization">
          <front>
            <title>Post-Quantum Cryptography Standardization</title>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="D." surname="Moody" fullname="Dustin Moody">
              <organization/>
            </author>
            <author initials="Y." surname="Liu" fullname="Yi-Kai Liu">
              <organization/>
            </author>
            <date year="2016" month="December"/>
          </front>
        </reference>
        <reference anchor="NISTIR-8413" target="https://doi.org/10.6028/NIST.IR.8413-upd1">
          <front>
            <title>Status Report on the Third Round of the NIST Post-Quantum Cryptography Standardization Process</title>
            <author initials="G." surname="Alagic" fullname="Gorjan Alagic">
              <organization/>
            </author>
            <author initials="D." surname="Apon" fullname="Daniel Apon">
              <organization/>
            </author>
            <author initials="D." surname="Cooper" fullname="David Cooper">
              <organization/>
            </author>
            <author initials="Q." surname="Dang" fullname="Quynh Dang">
              <organization/>
            </author>
            <author initials="T." surname="Dang" fullname="Thinh Dang">
              <organization/>
            </author>
            <author initials="J." surname="Kelsey" fullname="John Kelsay">
              <organization/>
            </author>
            <author initials="J." surname="Lichtinger" fullname="Jacob Lichtinger">
              <organization/>
            </author>
            <author initials="C." surname="Miller" fullname="Carl Miller">
              <organization/>
            </author>
            <author initials="D." surname="Moody" fullname="Dustin Moody">
              <organization/>
            </author>
            <author initials="R." surname="Peralta" fullname="Rene Peralta">
              <organization/>
            </author>
            <author initials="R." surname="Perlner" fullname="Ray Perlner">
              <organization/>
            </author>
            <author initials="A." surname="Robinson" fullname="Angela Robinson">
              <organization/>
            </author>
            <author initials="D." surname="Smith-Tone" fullname="Daniel Smith-Tone">
              <organization/>
            </author>
            <author initials="Y." surname="Liu" fullname="Yi-Kai Liu">
              <organization/>
            </author>
            <date year="2022" month="September"/>
          </front>
          <seriesInfo name="NIST IR 8413" value=""/>
        </reference>
        <reference anchor="SP800-56C" target="https://doi.org/10.6028/NIST.SP.800-56Cr2">
          <front>
            <title>Recommendation for Key-Derivation Methods in Key-Establishment Schemes</title>
            <author initials="E." surname="Barker" fullname="Elaine Barker">
              <organization/>
            </author>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="R." surname="Davis" fullname="Richard Davis">
              <organization/>
            </author>
            <date year="2020" month="August"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-56C Rev. 2" value=""/>
        </reference>
        <reference anchor="SP800-185" target="https://doi.org/10.6028/NIST.SP.800-185">
          <front>
            <title>SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, and ParallelHash</title>
            <author initials="J." surname="Kelsey" fullname="John Kelsey">
              <organization/>
            </author>
            <author initials="S." surname="Chang" fullname="Shu-jen Chang">
              <organization/>
            </author>
            <author initials="R." surname="Perlner" fullname="Ray Perlner">
              <organization/>
            </author>
            <date year="2016" month="December"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-185" value=""/>
        </reference>
        <reference anchor="SP800-56A" target="https://doi.org/10.6028/NIST.SP.800-56Ar3">
          <front>
            <title>Recommendation for Pair-Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography</title>
            <author initials="E." surname="Barker" fullname="Elaine Barker">
              <organization/>
            </author>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="A." surname="Roginsky" fullname="Allen Roginsky">
              <organization/>
            </author>
            <author initials="A." surname="Vassilev" fullname="Apostol Vassilev">
              <organization/>
            </author>
            <author initials="R." surname="Davis" fullname="Richard Davis">
              <organization/>
            </author>
            <date year="2018" month="April"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-56A Rev. 3" value=""/>
        </reference>
        <reference anchor="SP800-186" target="https://doi.org/10.6028/NIST.SP.800-186">
          <front>
            <title>Recommendations for Discrete Logarithm-Based Cryptography:  Elliptic Curve Domain Parameters</title>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="D." surname="Moody" fullname="Dustin Moody">
              <organization/>
            </author>
            <author initials="A." surname="Regenscheid" fullname="Andrew Regenscheid">
              <organization/>
            </author>
            <author initials="K." surname="Randall" fullname="Karen Randall">
              <organization/>
            </author>
            <date year="2023" month="February"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-186" value=""/>
        </reference>
        <reference anchor="SEC1" target="https://secg.org/sec1-v2.pdf">
          <front>
            <title>Standards for Efficient Cryptography 1 (SEC 1)</title>
            <author>
              <organization>Standards for Efficient Cryptography Group</organization>
            </author>
            <date year="2009" month="May"/>
          </front>
        </reference>
        <reference anchor="FIPS-203" target="https://doi.org/10.6028/NIST.FIPS.203.ipd">
          <front>
            <title>Module-Lattice-Based Key-Encapsulation Mechanism Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2023" month="August"/>
          </front>
        </reference>
        <reference anchor="FIPS-204" target="https://doi.org/10.6028/NIST.FIPS.204.ipd">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2023" month="August"/>
          </front>
        </reference>
        <reference anchor="FIPS-205" target="https://doi.org/10.6028/NIST.FIPS.205.ipd">
          <front>
            <title>Stateless Hash-Based Digital Signature Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2023" month="August"/>
          </front>
        </reference>
        <reference anchor="draft-driscoll-pqt-hybrid-terminology" target="https://datatracker.ietf.org/doc/html/draft-driscoll-pqt-hybrid-terminology">
          <front>
            <title>Terminology for Post-Quantum Traditional Hybrid Schemes</title>
            <author initials="F." surname="Driscoll" fullname="Florence Driscoll">
              <organization/>
            </author>
            <date year="2023" month="March"/>
          </front>
        </reference>
        <reference anchor="GHP18" target="https://doi.org/10.1007/978-3-319-76578-5_7">
          <front>
            <title>KEM Combiners</title>
            <author initials="F." surname="Giacon" fullname="Federico Giacon">
              <organization/>
            </author>
            <author initials="F." surname="Heuer" fullname="Felix Heuer">
              <organization/>
            </author>
            <author initials="B." surname="Poettering" fullname="Bertram Poettering">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="BDPA08" target="https://doi.org/10.1007/978-3-540-78967-3_11">
          <front>
            <title>On the Indifferentiability of the Sponge Construction</title>
            <author initials="G." surname="Bertoni" fullname="Guido Bertoni">
              <organization/>
            </author>
            <author initials="J." surname="Daemen" fullname="Joan Daemen">
              <organization/>
            </author>
            <author initials="M." surname="Peters" fullname="Michael Peters">
              <organization/>
            </author>
            <author initials="G." surname="Assche" fullname="Gilles van Assche">
              <organization/>
            </author>
            <date year="2008"/>
          </front>
        </reference>
        <reference anchor="CS03" target="https://doi.org/10.1137/S0097539702403773">
          <front>
            <title>Design and Analysis of Practical Public-Key Encryption Schemes Secure against Adaptive Chosen Ciphertext Attack</title>
            <author initials="R." surname="Cramer" fullname="Ronald Cramer">
              <organization/>
            </author>
            <author initials="V." surname="Shoup" fullname="Victor Shoup">
              <organization/>
            </author>
            <date year="2003"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1620?>

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

-->

</rfc>
