<?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.7 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-openpgp-pqc-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <front>
    <title abbrev="PQC in OpenPGP">Post-Quantum Cryptography in OpenPGP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-openpgp-pqc-01"/>
    <author initials="S." surname="Kousidis" fullname="Stavros Kousidis">
      <organization>BSI</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>stavros.kousidis@bsi.bund.de</email>
      </address>
    </author>
    <author initials="J." surname="Roth" fullname="Johannes Roth">
      <organization>MTG AG</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>johannes.roth@mtg.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="2024" month="March" day="04"/>
    <area>sec</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 285?>

<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-ietf-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 296?>

<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
<xref target="FIPS-203"/> as a Key Encapsulation Mechanism (KEM), a KEM being a modern
building block for public-key encryption, and ML-DSA <xref target="FIPS-204"/> as well as
SLH-DSA <xref target="FIPS-205"/> 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 adopts the encoding of objects as
defined in <xref target="RFC7748"/>.</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 cryptographic 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">TBD (105 for testing)</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">TBD (106 for testing)</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">TBD</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">TBD</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">TBD</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">TBD</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">TBD (107 for testing)</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">TBD (108 for testing)</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">TBD</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">TBD</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">TBD</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">TBD</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">TBD (109 for testing)</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">TBD</td>
              <td align="left">SLH-DSA-SHAKE</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="slhdsa"/></td>
            </tr>
          </tbody>
        </table>
        <section anchor="experimental-codepoints-for-interop-testing">
          <name>Experimental Codepoints for Interop Testing</name>
          <t>[ Note: this section to be removed before publication ]</t>
          <t>Algorithms indicated as MAY are not assigned a codepoint in the current state of the draft
since there are not enough private/experimental code points available
to cover all newly introduced public-key algorithm identifiers.</t>
          <t>The use of private/experimental codepoints during development are intended to be used in non-released software only, for experimentation and interop testing purposes only.
An OpenPGP implementation MUST NOT produce a formal release using these experimental codepoints.
This draft will not be sent to IANA without every listed algorithm having a non-experimental codepoint.</t>
        </section>
      </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 artifacts 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">TBD (105 for testing)</td>
                <td align="left">TBD (106 for testing)</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">TBD (ML-KEM-768 + ECDH-NIST-P-256)</td>
                <td align="left">TBD (ML-KEM-1024 + ECDH-NIST-P-384)</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">TBD (ML-KEM-768 + ECDH-brainpoolP256r1)</td>
                <td align="left">TBD (ML-KEM-1024 + ECDH-brainpoolP384r1)</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, eccPublicKey)
]]></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 randomly generated octet string with a length of 32 octets</t>
              </li>
              <li>
                <t>Compute the shared coordinate <tt>X = X25519(v, R)</tt> where <tt>R</tt> is the recipient's 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 randomly generated octet string with a length of 56 octets</t>
              </li>
              <li>
                <t>Compute the shared coordinate <tt>X = X448(v, R)</tt> where <tt>R</tt> is the recipient's 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 with <tt>0 &lt; v &lt; n</tt>, <tt>n</tt> being the
base point order of the elliptic curve domain parameters</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 parametrization 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">TBD</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">TBD</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>Invoke <tt>(mlkemCipherText, mlkemKeyShare) &lt;- ML-KEM.Encaps(mlkemPublicKey)</tt>, where <tt>mlkemPublicKey</tt> is the recipient's public key</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">TBD (105 for testing)</td>
              <td align="left">ML-KEM-768</td>
              <td align="left">x25519Kem</td>
              <td align="left">Curve25519</td>
            </tr>
            <tr>
              <td align="right">TBD (106 for testing)</td>
              <td align="left">ML-KEM-1024</td>
              <td align="left">x448Kem</td>
              <td align="left">Curve448</td>
            </tr>
            <tr>
              <td align="right">TBD (ML-KEM-768 + ECDH-NIST-P-256)</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">TBD (ML-KEM-1024 + ECDH-NIST-P-384)</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">TBD (ML-KEM-768 + ECDH-brainpoolP256r1)</td>
              <td align="left">ML-KEM-768</td>
              <td align="left">ecdhKem</td>
              <td align="left">brainpoolP256r1</td>
            </tr>
            <tr>
              <td align="right">TBD (ML-KEM-1024 + ECDH-brainpoolP384r1)</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, which computes the key encryption key <tt>KEK</tt> that is used to wrap,
i.e., encrypt, the session key.</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 4 byte value 00 00 00 01
//   customizationString - the UTF-8 encoding of the string "KDF"

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

KEK = KMAC256(domSeparation, encData, oBits, customizationString)
return KEK
]]></artwork>
          <t>Here, the parameters to KMAC256 appear in the order as specified in
<xref target="SP800-186"/>, Section 4, i.e., the key <tt>K</tt>, main input data <tt>X</tt>, requested
output length <tt>L</tt>, and optional customization string <tt>S</tt> in that order.</t>
          <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 the algorithm specific part of the PKESK as
<tt>eccCipherText || mlkemCipherText (|| symAlgId) || len(C) || C</tt>, where
both <tt>symAlgId</tt> and <tt>len(C)</tt> are single octet fields and <tt>symAlgId</tt>
denotes the symmetric algorithm ID used and is present only for a v3 PKESK</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>, i.e., the
wrapped session key</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 (|| symAlgId) || len(C) || C</tt> as specified
in <xref target="ecc-mlkem-pkesk"/>, where <tt>symAlgId</tt> is present only in the case of a v3
PKESK.</t>
            </li>
            <li>
              <t>Compute <tt>(eccKeyShare) := ECC-KEM.Decaps(eccCipherText, eccSecretKey,
eccPublicKey)</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 the output
     of the encryption procedure described in <xref target="ecc-mlkem-encryption"/>:</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>A one-octet size of the following fields.</t>
            </li>
            <li>
              <t>Only in the case of a v3 PKESK packet: a one-octet symmetric algorithm identifier.</t>
            </li>
            <li>
              <t>The wrapped session key represented as an octet string.</t>
            </li>
          </ul>
          <t>Note that like in the case of the algorithms X25519 and X448 specified in
<xref target="I-D.ietf-openpgp-crypto-refresh"/>, for the ML-KEM composite schemes, in the
case of a v3 PKESK packet, the symmetric algorithm identifier is not encrypted.
Instead, it is placed in plaintext after the <tt>mlkemCipherText</tt> and before the
length octet preceding the wrapped session key.  In the case of v3 PKESK packets
for ML-KEM composite schemes, the symmetric algorithm used MUST be AES-128,
AES-192 or AES-256 (algorithm ID 7, 8 or 9).</t>
          <t>In the case of a v3 PKESK, a receiving implementation MUST check if the length of
the unwrapped symmetric key matches the symmetric algorithm identifier, and abort
if this is not the case.</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">TBD (107 for testing)</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">TBD (108 for testing)</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">TBD (ML-DSA-65 + ECDSA-NIST-P-256)</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">TBD (ML-DSA-87 + ECDSA-NIST-P-384)</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">TBD (ML-DSA-65 + ECDSA-brainpoolP256r1)</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">TBD (ML-DSA-87 + ECDSA-brainpoolP384r1)</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 parametrization 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">TBD</td>
                <td align="left">ML-DSA-65</td>
                <td align="left">1952</td>
                <td align="left">4032</td>
                <td align="left">3293</td>
              </tr>
              <tr>
                <td align="right">TBD</td>
                <td align="left">ML-DSA-87</td>
                <td align="left">2592</td>
                <td align="left">4896</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">TBD (ML-DSA-65 IDs)</td>
                <td align="left">SHA3-256</td>
                <td align="left">12</td>
              </tr>
              <tr>
                <td align="right">TBD (ML-DSA-87 IDs)</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, successfully 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">TBD (109 for testing)</td>
                <td align="left">1, 2</td>
                <td align="left">SHA-256</td>
                <td align="left">8</td>
              </tr>
              <tr>
                <td align="right">TBD (109 for testing)</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">TBD (SLH-DSA-SHAKE)</td>
                <td align="left">1, 2</td>
                <td align="left">SHA3-256</td>
                <td align="left">12</td>
              </tr>
              <tr>
                <td align="right">TBD (SLH-DSA-SHAKE)</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="notes-on-algorithms">
      <name>Notes on Algorithms</name>
      <section anchor="symmetric-algorithms-for-seipd-packets">
        <name>Symmetric Algorithms for SEIPD Packets</name>
        <t>Implementations MUST implement <tt>AES-256</tt>.
An implementation SHOULD use <tt>AES-256</tt> in the case of a v1 SEIPD packet,
or <tt>AES-256</tt> with any available AEAD mode in the case of a v2 SEIPD packet,
if all recipients indicate support for it (explicitly or implicitly).</t>
        <t>A v4 or v6 certificate that contains a PQ(/T) key SHOULD include
<tt>AES-256</tt> in the "Preferred Symmetric Ciphers for v1 SEIPD" subpacket.
A v6 certificate that contains a PQ(/T) key SHOULD include
the pair <tt>AES-256</tt> with <tt>OCB</tt> in the "Preferred AEAD Ciphersuites" subpacket.</t>
        <t>If <tt>AES-256</tt> is not explicitly in the list
of the "Preferred Symmetric Ciphers for v1 SEIPD" subpacket,
and if the certificate contains a PQ/T key, it is implicitly at the end of the list.
This is justified since <tt>AES-256</tt> is mandatory to implement.
If <tt>AES-128</tt> is also implictly added to the list, it is added after <tt>AES-256</tt>.</t>
        <t>If the pair <tt>AES-256</tt> with <tt>OCB</tt> is not explicitly in the list
of the "Preferred AEAD Ciphersuites" subpacket,
and if the certificate contains a PQ/T key, it is implicitly at the end of the list.
This is justified since <tt>AES-256</tt> and <tt>OCB</tt> are mandatory to implement.
If the pair <tt>AES-128</tt> with <tt>OCB</tt> is also implictly added to the list,
it is added after the pair <tt>AES-256</tt> with <tt>OCB</tt>.</t>
      </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 RECOMMENDED to generate fresh secrets when generating PQ(/T) keys. Note
that reusing key material from existing ECC keys in PQ(/T) keys does not provide
backwards compatibility.</t>
        <t>An OpenPGP 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 certificate for compatibility and a v6 PQ(/T)
certificate, at a greater complexity in key distribution.</t>
          </li>
          <li>
            <t>Attach PQ(/T) encryption subkeys to an existing traditional OpenPGP certificate.
In the case of a v6 certificate, also PQ(/T) signature keys may be attached.
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="security-aspects-of-composite-signatures">
        <name>Security Aspects of Composite Signatures</name>
        <t>When multiple signatures are applied to a message, the question of the protocol's
resistance against signature stripping attacks naturally arises. In a signature
stripping attack, an adversary removes one or more of the transmitted signatures
such that only a subset of the signatures originally applied by the sender remain
in the message that reaches the recipient. This amounts to a downgrade attack
that potentially reduces the value of the signature. It should be noted that the
composite signature schemes specified in this draft are not subject to a
signature stripping vulnerability. This is due to the fact that in any OpenPGP
signature, the hashed meta data includes the signature algorithm ID, as specified
in <xref target="I-D.ietf-openpgp-crypto-refresh"/>, Section 5.2.4. As a consequence, a
component signature taken out of the context of a specific composite algorithm is
not a valid signature for any message.</t>
        <t>Furthermore, it is also not possible to craft a new signature for a message that
was signed twice with a composite algorithm by interchanging (i.e., remixing) the
component signatures, which would classify as a weak existential forgery. This is
due to the fact that each v6 signatures also includes a random salt at the start
of the hashed meta data, as also specified in the aforementioned reference.</t>
      </section>
      <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
unequivocally 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
unequivocally 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 anchor="symmetric-algorithms-for-seipd-packets-1">
        <name>Symmetric Algorithms for SEIPD Packets</name>
        <t>This specification mandates support for <tt>AES-256</tt> for two reasons.
First, <tt>AES-KeyWrap</tt> with <tt>AES-256</tt> is already part of the composite KEM construction.
Second, some of the PQ(/T) algorithms target the security level of <tt>AES-256</tt>.</t>
        <t>For the same reasons, this specification further recommends the use of <tt>AES-256</tt>
if it is supported by all recipients, regardless of what the implementation
would otherwise choose based on the recipients' preferences.
This recommendation should be understood as a clear and simple rule
for the selection of <tt>AES-256</tt> for encryption.
Implementations may also make more nuanced decisions.</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 is requested to add the following registries to the <tt>OpenPGP</tt>
registry group at https://www.iana.org/assignments/openpgp:</t>
      <ul spacing="normal">
        <li>
          <t>Registry name: <tt>OpenPGP SLH-DSA-SHA2 parameters</tt>  </t>
          <t>
Registration procedure: SPECIFICATION REQUIRED <xref target="RFC8126"/>  </t>
          <t>
The registry contains the values defined in <xref target="slhdsa-param-sha2"/> in this document.</t>
        </li>
        <li>
          <t>Registry name: <tt>OpenPGP SLH-DSA-SHAKE parameters</tt>  </t>
          <t>
Registration procedure: SPECIFICATION REQUIRED <xref target="RFC8126"/>  </t>
          <t>
The registry contains the values defined in <xref target="slhdsa-param-shake"/> in this document.</t>
        </li>
      </ul>
      <t>Furthermore, IANA is requested to add the algorithm IDs defined in <xref target="iana-pubkey-algos"/> to the existing registry <tt>OpenPGP Public Key Algorithms</tt>. The field specifications enclosed in brackets for the ML-KEM + ECDH composite algorithms denote fields that are only conditionally contained in the data structure.</t>
      <table anchor="iana-pubkey-algos">
        <name>IANA updates for registry 'OpenPGP Public Key Algorithms'</name>
        <thead>
          <tr>
            <th align="left">ID</th>
            <th align="left">Algorithm</th>
            <th align="right">Public Key Format</th>
            <th align="right">Secret Key Format</th>
            <th align="right">Signature Format</th>
            <th align="right">PKESK Format</th>
            <th align="right">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-KEM-768 + X25519</td>
            <td align="right">32 octets X25519 public key (<xref target="tab-ecdh-cfrg-artifacts"/>), 1184 octets ML-KEM-768 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">32 octets X25519 secret key (<xref target="tab-ecdh-cfrg-artifacts"/>), 2400 octets ML-KEM-768 secret-key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">32 octets X25519 ciphertext, 1088 octets ML-KEM-768 ciphertext [, 1 octet algorithm ID in case of v3 PKESK], 1 octet length field of value <tt>n</tt>, <tt>n</tt> octets wrapped session key (<xref target="ecc-mlkem-pkesk"/>)</td>
            <td align="right">
              <xref target="ecc-mlkem"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-KEM-1024 + X448</td>
            <td align="right">56 octets X448 public key (<xref target="tab-ecdh-cfrg-artifacts"/>), 1568  octets ML-KEM-1024 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">56 octets X448 secret key (<xref target="tab-ecdh-cfrg-artifacts"/>), 3168 octets ML-KEM-1024 secret-key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">56 octets X448 ciphertext, 1568 octets ML-KEM-1024 ciphertext [, 1 octet algorithm ID in case of v3 PKESK], 1 octet length field of value <tt>n</tt>, <tt>n</tt> octets wrapped session key (<xref target="ecc-mlkem-pkesk"/>)</td>
            <td align="right">
              <xref target="ecc-mlkem"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-DSA-65 + Ed25519</td>
            <td align="right">32 octets Ed25519 public key (<xref target="tab-eddsa-artifacts"/>), 1952 octets ML-DSA-65 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">32 octets Ed25519 secret key (<xref target="tab-eddsa-artifacts"/>), 4032  octets ML-DSA-65 secret (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">64 octets Ed25519 signature (<xref target="tab-eddsa-artifacts"/>), 3293 octets ML-DSA-65 signature (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="ecc-mldsa"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-DSA-87 + Ed448</td>
            <td align="right">57 octets Ed448 public key (<xref target="tab-eddsa-artifacts"/>),  2592 octets ML-DSA-87 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">57 octets Ed448 secret key (<xref target="tab-eddsa-artifacts"/>), 4896 octets ML-DSA-87 secret (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">114 octets Ed448 signature (<xref target="tab-eddsa-artifacts"/>), 4595 octets ML-DSA-87 signature (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="ecc-mldsa"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">SLH-DSA-SHA2</td>
            <td align="right">1 octet parameter ID, per parameter fixed-length octet string (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">per parameter fixed-length octet string (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">1 octet parameter ID, per parameter fixed-length octet string (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="slhdsa"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">SLH-DSA-SHAKE</td>
            <td align="right">1 octet parameter ID, per parameter fixed-length octet string (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">per parameter fixed-length octet string (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">1 octet parameter ID, per parameter fixed-length octet string (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="slhdsa"/></td>
          </tr>
        </tbody>
      </table>
    </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 anchor="draft-wussler-openpgp-pqc-04">
        <name>draft-wussler-openpgp-pqc-04</name>
        <ul spacing="normal">
          <li>
            <t>Added Johannes Roth as author</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ietf-openpgp-pqc-00">
        <name>draft-ietf-openpgp-pqc-00</name>
        <ul spacing="normal">
          <li>
            <t>Renamed draft</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ietf-openpgp-pqc-01">
        <name>draft-ietf-openpgp-pqc-01</name>
        <t>&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD
- Mandated <tt>AES-256</tt> as mandatory to implement.
- Added <tt>AES-256</tt> / <tt>AES-128</tt> with <tt>OCB</tt>
  implicitly to v1/v2 SEIPD preferences of "PQ(/T) certificates".
- Added a recommendation to use <tt>AES-256</tt> when possible.
- Swapped the optional v3 PKESK algorithm identifier with length octet
  in order to align with X25519 and X448.
- Fixed ML-DSA private key size
- Added test vectors
- correction and completion of IANA instructions</t>
      </section>
    </section>
    <section anchor="contributors">
      <name>Contributors</name>
      <t>Stephan Ehlen (BSI)<br/>
Carl-Daniel Hailfinger (BSI)<br/>
Andreas Huelsing (TU Eindhoven)</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="4" month="January" year="2024"/>
            <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-13"/>
        </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 1745?>

<section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>To help implementing this specification a set of non-normative examples follow here.
The test vectors are implemented using the Initial Public Draft (IPD) variant of the ML-DSA and ML-KEM schemes.</t>
      <section anchor="sample-v6-pqc-subkey-artifacts">
        <name>Sample v6 PQC Subkey Artifacts</name>
        <t>Here is a Private Key consisting of:</t>
        <ul spacing="normal">
          <li>
            <t>A v6 Ed25519 Private-Key packet</t>
          </li>
          <li>
            <t>A v6 direct key self-signature</t>
          </li>
          <li>
            <t>A User ID packet</t>
          </li>
          <li>
            <t>A v6 positive certification self-signature</t>
          </li>
          <li>
            <t>A v6 ML-KEM-ipd-768 + X25519 Private-Subkey packet</t>
          </li>
          <li>
            <t>A v6 subkey binding signature</t>
          </li>
        </ul>
        <t>The primary key has the fingerprint <tt>52343242345254050219ceff286e9c8e479ec88757f95354388984a02d7d0b59</tt>.</t>
        <t>The subkey has the fingerprint <tt>263e34b69938e753dc67ca8ee37652795135e0e16e48887103c11d7307df40ed</tt>.</t>
        <sourcecode type="application/pgp-keys" name="v6-eddsa-sample-sk.asc"><![CDATA[
-----BEGIN PGP PRIVATE KEY BLOCK-----

xUsGUdDGgBsAAAAgsJV1qyvdl+EenEB4IFvP5/7Ci5XJ1rk8Yh967qV1rb0A8q5N
oCO2TM6GoqWftH02oIwWpAr+kvA+4CH7N3cpPSrCrwYfGwoAAABABQJR0MaAIqEG
UjQyQjRSVAUCGc7/KG6cjkeeyIdX+VNUOImEoC19C1kCGwMCHgkDCwkHAxUKCAIW
AAUnCQIHAgAAAADhOyBW8CPDe5FreFmlonhfVhr2EPw3WFLyd6mKRhkQm3VBfw7Q
w7eermL9Cr5O7Ah0JxmIkT18jgKQr9AwWa3nm2mcbjSoib2WVzm5EiW3f3lgflfr
ySQFpSICzPl2QcAcrgjNLlBRQyB1c2VyIChUZXN0IEtleSkgPHBxYy10ZXN0LWtl
eUBleGFtcGxlLmNvbT7CmwYTGwoAAAAsBQJR0MaAIqEGUjQyQjRSVAUCGc7/KG6c
jkeeyIdX+VNUOImEoC19C1kCGQEAAAAAg2ogTEbKVVlbWsejQHkq7xo8ipM7dv6H
z2AekkJqupKVR+/oy+2j6ri+/B2K6k1v1y5quzirhs87fB5AxZC6ZoFDvC0kZOvo
14fPF07wCx0jwJVOWuRFVsVw7pQJHbNzgkIAx82LBlHQxoBpAAAEwLRbSSpvve2p
Ih3hHweqq2VdRo+7Zf7whYHyXM/UifsniwMKSrubvsmLgCyiEwMip3ZlTSxIFDaF
EMVtVvCSJ7XFZ0WslTJnZ/CENPgxbVgn6CC2b8UEb8olS3AxlSiqJSRP0OrOJdfP
WJI1A+p7Vmw1CZQq2oVPUlE96SVUrFxfk7XCYpcTpIQb+mFB4ULCesat5tud7Tau
UJpMKssUf0I74EUjahoR46pPReKzlSqfvhpgXSASZpBg8IZBY7VbgTnLInGTTnEr
rScVlDnAwcdYvuZMQYO5EjS6LOxn1aVfU+iH+Rir2AyFzsYl6ICHciPAsKKa+Sk7
UPFBrIRG1qgn7FF0n5epHeiFCRNb87wSqlp0h+d8L3jPmDq4zoQPKDViasoHYXLD
7KoJTIxP2eGzjMRlg3oD9ph3ZnyOTIsx/4SDtxW3q+JU8RFoI0dZEdURwaoIITWi
tldtPUmtBuJshceEDSWopuwLzBuVTnYDpTy94ZtDBKmgPnmSmPOKZ6THucmiJGUm
WmAKkyo7kWAwYRsE2ZYqLzIJFmZFzRLIThipiZhR/9h2GemQklMJqYs25cEGx6FW
zXRv8Palm7yOAicH/ldHUOtU3oFIXthOatwSrQApJ7HHvksx59ZtLFtBgHm5eRmY
YleJsJLGCPssa7pK2hIwgLlmCLSAavFqYjuocWIYKLmw5vNXXRWIjPBbTpVXbUO5
U9F/67gggSWBJXCZlfgcluO422aN22m8aONiTgZtmjcC2elci5yRKGBbeKmFTcVs
ZbpbY6ZCKFRyzbqmMGYe0mqN6lh7R5dNiBuJZQg04mYuSzWCF3mumlJTRtlN9Miy
6LyWApJSTQdgc3awS0mjUrgU1Ia0AjMFKcxJA6iHd6iAxWMbUqxOSoTOTUlMr3lt
paNGEMGpaHwMoQs99xSI1zG9pYmfeIl6LfZSwnI4LsBvNOBiUhNUC/aYIILEm7qj
Tpw5YdI+6jSl+palLlcMDzt0LgMN8rY6UlZJBGNFSAKSNSWXdFYMByKKGSCj91TD
WPlOLvWKntSLk5eLodhgmRGqx5GZECgWS4wDARY00rl17dV53GejXrUtJaYcnam5
pKoTSaPJTuY25Kyy+oB7aHpV0vA87JaeRCsqkjcS5IQKdtceUskXNRa2f7CTrfQR
hOGk0gSA4Jx8+Fw8uGWLGJx6m1lSyWcMX5HL7hJkFhEKebYjdALGXMV1wxNiUHCI
vxCjX/AkwHEDvAN6qhULrcZlmngSbeBysOFud2a8PIS2p7RCAatO+TpFgoR+1CgV
JIdiRpM0WrMfS9iBERhtYaLH1oUjBpcV7zpgNdkT4ClfbTpgu3oPnWBogDjMXKUe
pSfFx0l1tNGRLCCFVit8xxA4Q+phutInyXUAHJiEfHIR4jxTd/FwQ3pDoKxTesY+
XsGtVJxe9oMrXSlt6uymn6zKQlQsw8odvHhp5/NWqkCh9/xQvmIlERsVVjyJ0FNF
/+HNT9KrECCj6+cujDbEN6UmRlFvlMcxFzYaTnWa1cshSVCCa1aYZddWrDdxOwMf
ObUw8TukY7A2RqcdpmpA68SLoWwNAgtFG1xWV43yC/P3XTsqTmgHRUGboDkVs9K8
1+Byg4jhKWcAksr2fFDB4wkkaZcB3uUOXuQQ2etC1aCrboS5vTeMVJVS+ssLkxle
KLZ3kH9pazHbNTKQWclexAe48RImOk1PlmN9HHMgUwgJI5H8e3a7cQw8x7Yh5wce
yAdhuwRGcT99CqtaQb0aeTz9xxh642roMy46rCQp2A/g1QbZIqqVe6lb4qkJ8YdM
dG4SrE3UzD3tuAyu3L9Ql79qxxdB4Jt7wp+dPETaoZba+aMWZ68ZxDEjQJcgyrN9
XCBNcLcU+SpjBXPK13yeCdAVGUhA1c0qB4PKVY5/e07Kc8qGgyrlJCCb05OQQKWG
mmVcJnDDIZSLM4VPd3cAgWhv5rIk/BPWQ6CGps6njH1WNaI6sTr35wcfWlMahs0w
mUPkKMG0AWwT9VBCBU7huFN7Rw2DXBdQUlQDO8WzVLXFt6sZvF+XgZ840woQ8I29
BmW55qSY2hdtMsKqkU31Nbscxa5wRsu2KSirXF3JoZkTacU/taIRmmIwGXl0zBlM
8Hp9hJOdAZAAPAYwCj8FdmD4AyDiHHDkuJsLfL80CnKck2wYbBE/BoGRKwVul1Jr
gh4KC4DS+WfKZQYam5KLAytFMUJf8TDiYYNmVr9TOVNAoCj4XKs7BQ7KZ5MMnCWi
EEsH9im2mBrHDKXLCrFK8IY54B5ae8uDKWwOuhTtlHki5CTVHHRKaorYawvMqTZ4
HCO+6Jrj8rm7YFxhxwPihVHIl10SK2Q2tX8ygidCKc1yPBh4lKyvyryPwL6i5sM4
sU5glM9bZgPKfHosk4uNdqZQ5FyIaohJ8aocQpr0JVQv8rp0UjBEDBqDeIhepohd
cp5KhA1kND4vQbfjusdVtgUorAqyAw0YSoeDLAfC5syaJqo8K06CM8y7O3VqB8Rs
ZJb8Eb7mGYdH9U8m3MTjestO5LcTAyqoBJvC4TTgp6F9dJ55HJ3rzFx19wMqGhLV
Abcw/JWJagrvYqTGozbiEcLheFNmKik4eGoG9mS1Ebhwhbmg5LD6kZXFK7hJOnkb
cTdz0ynSqlPk1oJkh8Pa1gVG4IWgEJISZWEb036BmTASRc5EYVetuBujMYQKuWeI
RrumhH3GiZBw1RIyrDYYMk37OHf0MLhahBeldJsqRoLcErOSu0T9xwmeczWoIDtZ
Q8794LDkCoY6wpYFF5Scq64HgmQaS5kSQH9UtTIgbLoBmQiDUIyrx8LoBqhOdQPR
0y60NWjSXLbs0VjxrIVMZmdlxH//gknkDLlSgSqbbAkG+7T9clLS44lVYD22N03n
Mil8pHWju6yYW3eFaylzI7jLEVZ5cLw15bd1JHEvRpOBxV8Fdn+p4RKoRrUN4EQm
1olEK4TsWY+uV2RCV4PEBQpOQxGZZxhMRa/AKnD3I1LjSlNh9SLXNbVIp69bPK9N
qS8MGBGeWBzEARhXea9mBiUisSFSZrwneYALPBXH0h4xerZWV2GH9bu12gwBmJbB
k64rwZg/dqDiCM16/C0Np0Aza4oTVsOJ6BrdZh70xFZq+Dizeg85TMywkl9Ma1BT
AsMOZ45sAEwIBhUX6Colkae023ouMgj1pnFV5Rc8cTSRcGUM1ZHW8AeLAwpKu5u+
yYuALKITAyKndmVNLEgUNoUQxW1W8JIntcVnRayVMmdn8IQ0+DFtWCfoILZvxQRv
yiVLcDGVKKolJE/Q6s4l189YkjUD6ntWbDUJlCrahU9SUT3pJVSsXF+TtcJilxOk
hBv6YUHhQsJ6xq3m253tNq5QmkwqyxR/QjvgRSNqGhHjqk9F4rOVKp++GmBdIBJm
kGDwhkFjtVuBOcsicZNOcSutJxWUOcDBx1i+5kxBg7kSNLos7GfVpV9T6If5GKvY
DIXOxiXogIdyI8Cwopr5KTtQ8UGshEbWqCfsUXSfl6kd6IUJE1vzvBKqWnSH53wv
eM+YOrjOhA8oNWJqygdhcsPsqglMjE/Z4bOMxGWDegP2mHdmfI5MizH/hIO3Fber
4lTxEWgjR1kR1RHBqgghNaK2V209Sa0G4myFx4QNJaim7AvMG5VOdgOlPL3hm0ME
qaA+eZKY84pnpMe5yaIkZSZaYAqTKjuRYDBhGwTZliovMgkWZkXNEshOGKmJmFH/
2HYZ6ZCSUwmpizblwQbHoVbNdG/w9qWbvI4CJwf+V0dQ61TegUhe2E5q3BKtACkn
sce+SzHn1m0sW0GAebl5GZhiV4mwksYI+yxrukraEjCAuWYItIBq8WpiO6hxYhgo
ubDm81ddFYiM8FtOlVdtQ7lT0X/ruCCBJYElcJmV+ByW47jbZo3babxo42JOBm2a
NwLZ6VyLnJEoYFt4qYVNxWxlultjpkIoVHLNuqYwZh7Sao3qWHtHl02IG4llCDTi
Zi5LNYIXea6aUlNG2U30yLLovJYCklJNB2BzdrBLSaNSuBTUhrQCMwUpzEkDqId3
qIDFYxtSrE5KhM5NSUyveW2lo0YQwalofAyhCz33FIjXMb2liZ94iXot9lLCcjgu
wG804GJSE1QL9pgggsSbuqNOnDlh0j7qNKX6lqUuVwwPO3QuAw3ytjpSVkkEY0VI
ApI1JZd0VgwHIooZIKP3VMNY+U4u9Yqe1IuTl4uh2GCZEarHkZkQKBZLjAMBFjTS
uXXt1XncZ6NetS0lphydqbmkqhNJo8lO5jbkrLL6gHtoelXS8Dzslp5EKyqSNxLk
hAp21x5SyRc1FrZ/sJOt9BGE4aTSBIDgnHz4XDy4ZYsYnHqbWVLJZwxfkcvuEmQW
EQp5tiN0AsZcxXXDE2JQcIi/EKNf8CTAcQO8A3qqFQutxmWaeBJt4HKw4W53Zrw8
hLantEIBq075OkWChH7UKBUkh2JGkzRasx9L2IERGG1hosfWhSMGlxXvOmA12RPg
KV9tOmC7eg+dYGiAOMxcpR6lJ8XHSXW00ZEsIIVWK3zHEDhD6mG60ifJdQAcmIR8
chHiPFN38XBDekOgrFN6xj5ewa1UnF72gytdKW3q7KafrMpCVCzDyh28eGnn81aq
QKH3/FC+YiURGxVWPInQU0X/4c1P0qsQIKPr5y6MNsQ3pSZGUW+UxzEXNhpOdZrV
yyFJUIJrVphl11asN3E7Ax85tTDxO6RjsDZGpx2makDrxIuhbA0CC0UbXFZXjfIL
8/ddOypOaAdFQZugORWz0rzX4HKDiOEpZ7+6jJ8tjNCQrKgJg1wGCpAN0VnrtFrs
2l6Q0GteA6B+fwfjuRabwerw1ro7lcwOA5EiA6XO30P+pLG07ms2MCfCmwYYGwoA
AAAsBQJR0MaAIqEGUjQyQjRSVAUCGc7/KG6cjkeeyIdX+VNUOImEoC19C1kCGwwA
AAAA5kEgPwatbx3FHPIy9J9mGUEpUE03oRRPE8N4lJ2eAIMhciCEHp3BzYVGvW3O
aPYmjcu4JTREPJM6HP7yR+ZEg+Bld9lBSVmEdMJnOX2ZHOdEoRV4bm1U4aPuhrKL
/d8lkIgM
-----END PGP PRIVATE KEY BLOCK-----
]]></sourcecode>
        <t>Here is the corresponding Public Key consisting of:</t>
        <ul spacing="normal">
          <li>
            <t>A v6 Ed25519 Public-Key packet</t>
          </li>
          <li>
            <t>A v6 direct key self-signature</t>
          </li>
          <li>
            <t>A User ID packet</t>
          </li>
          <li>
            <t>A v6 positive certification self-signature</t>
          </li>
          <li>
            <t>A v6 ML-KEM-ipd-768 + X25519 Public-Subkey packet</t>
          </li>
          <li>
            <t>A v6 subkey binding signature</t>
          </li>
        </ul>
        <sourcecode type="application/pgp-keys" name="v6-eddsa-sample-pk.asc"><![CDATA[
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
-----END PGP PUBLIC KEY BLOCK-----
]]></sourcecode>
        <t>Here is an unsigned message "Testing\n" encrypted to this key:</t>
        <ul spacing="normal">
          <li>
            <t>A v6 PKESK</t>
          </li>
          <li>
            <t>A v2 SEIPD</t>
          </li>
        </ul>
        <t>The hex-encoded KMAC <tt>eccKeyShare</tt> input is <tt>4ec7dc0874ce4a3c257fec94f27f2d3c589764a5fbaf27a4b52836df53c86868</tt>.</t>
        <t>The hex-encoded KMAC <tt>mlkemKeyShare</tt> input is <tt>9a84cb01b6be6eecd16737fb558b5ca35899403076c7e9f0ee350195e7fbf6c4</tt>.</t>
        <t>The hex-encoded KMAC256 output is <tt>15a0f1eed1fb2a50a22f21e82dbce13ae91c45e3b76a9d2c61246c354a05f781</tt>.</t>
        <t>The hex-encoded session key is <tt>08f49fd5340b026e7ec751d82cea83a4b92d4837e785bfb66af71387f84156d0</tt>.</t>
        <sourcecode type="application/pgp-keys" name="v6-eddsa-sample-message.asc"><![CDATA[
-----BEGIN PGP MESSAGE-----

wcPtBiEGJj40tpk451PcZ8qO43ZSeVE14OFuSIhxA8EdcwffQO1pU4rRGXPhivmf
yaE7whd94FIPayIJxbUXuq6Ei6VifzlPu9BoxvQYZa/u+exaOVT2MLxbCAceHYMw
zSuUa0BoiugafZWAnVrn4ji+mI+298c93Ij83yUjkzvBsKyJuhesTevSpJAnjiMt
m9Mmwzc8Y9tB4N/Am8jR3p8UYLH+2aH9FyT6VdqsETYiPFcz5jZqkag7bAB88KUg
heJAHU/FgHXtz013tnPyQPtuVHeJrP8jcd3IENJh9CfSg9rkhAoW72GiSGYPm+Im
I7faHJ8LMCx4Sbur9rWsZM5Gl+sG2MyjM3SrykAfL8W6s5o3LVw+06h5XnmsLUFE
8nZf99LBm/5aUzkdmq1G8hgLY+dVhTAm1DZxbNz5nDbtCsuIbJ2knS2yqxlQV8qx
5eikfWlW29TfREHJf4von2xR668vYwOibA5sTa3utBpNk2YNalZ61p9MxPW54PvO
+EIRYVTlwhSbETanOBms+yDq0NLooO+OQerT3WA1VzeT7j5rzaQM0ULAK6x/KqKt
ARZmAIufbPktMfX26tczv5sKb5rx1MJexNUhnxvn/xGDkAvbf8HrU3BpxbqPPX6/
MWGpggb08U8YQU8qLCMzfPaFajTfyyhOKnoh5MBLNVDzbWyqKLzLGQTXl13WSvxQ
ib2U0YoGZtVmshmiVijCu4x1aX4A02sYKrzeYP2WpAl1sEynKz1tkWZQKS3Jt+RP
Y702QtUrRWWul23cBsqy0uKcQ+Zk/rCh5qyQ9mZtx8EmathdnHpi0qZLAH4wEYTA
HScy59zUR5CoYnJNBDNyRyEuh/B/pkTGEisLb+i1F9M0WhrgfgYSldEzUCZ7KJUD
Bt/d50OM+M8kmkYYBmiyWBfNqMMckJHhjFAp8kd0V0FP7lVwPGywK2hGKQBF+ylh
9O3qq1knDkjyCLNIoi7kJkl5KEOq1qLfwRnqfTbivGnhMdWh658WX7Q5QCUZf6vT
+aH2SXA+HNd4VAQguWbnmRNmjW33PTdte25T36qHQ6jlCdyG4VZU8f1yuqzhbHPx
FwAaChb/B6l5SIxK8zupbT3K5NDsSrD0wBV52P377GGVF1z1wI/+0ftNTxu/mgx5
aDjNyxUpupVsqWnws7a/6ixMUqyYAI8TlVWj2vBXgIg9gvt+yp/X7iMD3V4v3z/P
c8o2nH1c9uB6bXJx4HrtenjkDA4uQ89NH35yBII5OviL4NWTmMArWSN5scBOYOMJ
KxGDvFCkgcGjE5x6srj0gzntFg3TcYQiC4+onS485xTQlud53Z7Vc4JnSn7F2j9P
AJX5s+yUgT+ob7SYvYigbp30Oe5fg0NVZzH1fJ3eTJheClb+87vjrZS4X1tVU0MG
LNCdjF20Jff31fZu16mxin+hUZVyfVRlSycfVJU7qXzZftTpr3rsNZiLlY7z7BRe
1lXSx7uZFCfhyu96hyIPxMuaBIX7OHkduinurQ58Vj92fAe/8f5jviRVqtKwZ9Ao
lZfjSn8k/CgDxzFu2gWpbhWJ4GKvoXgmWDESk4o07UGqDbhm0YO5MDM0uoAmsGae
0lQCCQIMTzhupJq1yZ3vljrXBYF37QuWDi/MAvL54hMis5UXrTAh0+FobZAXCoO0
epU7H8CIs4ZCelIyD1W+K/kv3/E3Z65WQzDOYOhXSCAOqcpjiPc=
-----END PGP MESSAGE-----
]]></sourcecode>
      </section>
      <section anchor="v4-pqc-subkey-artifacts">
        <name>V4 PQC Subkey Artifacts</name>
        <t>Here is a Private Key consisting of:</t>
        <ul spacing="normal">
          <li>
            <t>A v4 Ed25519 Private-Key packet</t>
          </li>
          <li>
            <t>A User ID packet</t>
          </li>
          <li>
            <t>A v4 positive certification self-signature</t>
          </li>
          <li>
            <t>A v4 ECDH (Curve25519) Private-Subkey packet</t>
          </li>
          <li>
            <t>A v4 subkey binding signature</t>
          </li>
          <li>
            <t>A v4 ML-KEM-ipd-768 + X25519 Private-Subkey packet</t>
          </li>
          <li>
            <t>A v4 subkey binding signature</t>
          </li>
        </ul>
        <t>The primary key has the fingerprint <tt>b2e9b532d55bd6287ec79e17c62adc0ddd1edd73</tt>.</t>
        <t>The ECDH subkey has the fingerprint <tt>95bed3c63f295e7b980b6a2b93b3233faf28c9d2</tt>.</t>
        <t>The ML-KEM-ipd-768 + X25519 subkey has the fingerprint <tt>bd67d98388813e88bf3490f3e440cfbaffd6f357</tt>.</t>
        <sourcecode type="application/pgp-keys" name="v4-eddsa-sample-sk.asc"><![CDATA[
-----BEGIN PGP PRIVATE KEY BLOCK-----

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
0O22blDNAr/tDA==
=q5En
-----END PGP PRIVATE KEY BLOCK-----
]]></sourcecode>
        <t>Here is the corresponding Public Key consisting of:</t>
        <ul spacing="normal">
          <li>
            <t>A v4 Ed25519 Public-Key packet</t>
          </li>
          <li>
            <t>A User ID packet</t>
          </li>
          <li>
            <t>A v4 positive certification self-signature</t>
          </li>
          <li>
            <t>A v4 ECDH (Curve25519) Public-Subkey packet</t>
          </li>
          <li>
            <t>A v4 subkey binding signature</t>
          </li>
          <li>
            <t>A v4 ML-KEM-ipd-768 + X25519 Public-Subkey packet</t>
          </li>
          <li>
            <t>A v4 subkey binding signature</t>
          </li>
        </ul>
        <sourcecode type="application/pgp-keys" name="v4-eddsa-sample-pk.asc"><![CDATA[
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=dPFW
-----END PGP PUBLIC KEY BLOCK-----
]]></sourcecode>
        <t>Here is an SEIPDv1 unsigned message "Testing\n" encrypted to this key:</t>
        <ul spacing="normal">
          <li>
            <t>A v3 PKESK</t>
          </li>
          <li>
            <t>A v1 SEIPD</t>
          </li>
        </ul>
        <t>The hex-encoded KMAC <tt>eccKeyShare</tt> input is <tt>ba6634c5bab5756868dac8282054b0b30916d764e1f15841222392e5545a67c7</tt>.</t>
        <t>The hex-encoded KMAC <tt>mlkemKeyShare</tt> input is <tt>a6b263da0e367b39c2d44bf4c3f66015f410ee4fa674ddbba8d50cde2fc4094a</tt>.</t>
        <t>The hex-encoded KMAC256 output is <tt>504bc329627af248947117936bee9e87230d327d5c5f5b4db593c4b58b2d0339</tt>.</t>
        <t>The hex-encoded session key is <tt>b639d5feaae6c8eabcf04182322d576298193cfa9555d869cf911ffbbc5e52e7</tt>.</t>
        <sourcecode type="application/pgp-keys" name="v4-eddsa-sample-message-v1.asc"><![CDATA[
-----BEGIN PGP MESSAGE-----

wcPUA+RAz7r/1vNXafOEf/qo/UCjgP5MHXsUdzusv+Xtwa/q5/gtvWSKENMEm/ef
mwvHzlOW3jyHPr3wNkiRGNmZdEgHlRUxOF67AKfUqX1/H+RawlXrnu2O/7xDfn09
1DOeYQYsG+VQe5eDfPOh6EAqvhglNG29enkwukjQuWJ0U2+SywRlh0J49oG0lZZi
tEonE6BX+dKo7JFAAW27I4+I15zamWCm7C2qXtcjlMq+68U6isstfJYBgCFoJLRV
9ME/JlwVQ/3OA4eagh1Ysw/s0Kbl8dWc/U+pUVINfLFnZbr8UnRx5QVjo47HzV9y
IPQcl1ETnrQqg4jH5cUB0wVB/OGSHEH1l1q7OwO4TBx9seRKza3wzHgXQyQn4jJn
WxG4Uf0rWwa/dbXpoGdxye7Di0HhFJBp4aPaPEm9RwmeD06HPGyurgQS2heW+ICR
X9q6HjxKmbIToWau7sEUZQh1isRD923zmZO1Cceiefwvv8RDErBaYRRfhoDHnwlf
haUkGDH55GC/mFgMUst7XjYLTpjTtM32bHHVoYyx3edk3V4C32dRP4geZRlq8MKb
3eNvTyZHPBXVeVjB2XVenMkju2qQvjAvr7xkJk5QvqRGZ3qy5JKPHjupPKMKR6Wv
90WtP9OPf6geE4K8g8dc4yqhqEf84IpWfwyUjglPwc8G7QURyc14INSgnVKQ8nzJ
26Y0YSuBG599cwnBXIv7TLOsrmpcR+3O/OiqztEXwBSFalWqC6SScWr51+K4RHpi
0Dg3GYOdeu9V12ofWhh5eoXiQxiThsDc0cYD2LwwITb/sXJW6jisvTSQSszuDJsg
w4LJGVIgk94GwBeYCa4w+YbFD/6bC+nd9hze5iWyAt4jx2XuYWHvI95wUvRal4Y6
LcYKShZslef/9sZlrJ3O+oM8Tc+xjr7w860cw9bHBaRA3oZfDwVLRbJ63bh6dzLS
8Vj4UL0NiK9AlokOTlYTatKj2tkLaD6snZ5QaS916NniwvBiSozyCWKFPvKbIA5t
Fy7bWMk70wd7FJ5rOYsRvWOodcxxfYHLyOYCRikP5sOgelHJfIcqZZM/iMyKrUl5
QXTe5SUMFKuAAWkv1nFgJqaBGkkYUN+aL6um4ogKJKxBArhUXtz5jp1zLQe6w7Pf
XtJ3rtnLMNIGbaJjN6jlSqB1lF88ljU6yL8lsfNfGuq6eLsNz1QD9sFoZyNKGVF8
uGcX8KH07hyNCOPbn4jMZqnLfcEwT971KNeW0NNNLaVIjiYtYrEInYpnGP1fW0G7
4ic4/CGZ0Jsti39rTPdz76n14EV5+HGGNtO92nXr7HhRvlvehZO+pPN2pPvAOQgp
378jEDnhdcFIUnWjaSN4HLjxN9X3tWosa9stVatcOB5n01+QAqdstgbARXiYhzZI
QOy5bk7GzM/xaD+4iMlsMgmhdvI3EuMrvzRHx95YvU+tc8UBhVtMpcxgp5tiPtw7
wEFyPWYqTA6c+YGTZFzHNhqJ+DqLTlKP6+uYet4pCY6YLcu4z0JMG60Q4/MnuF2u
7pjPG7aRNGwr2/JFeaumSFbs5SrDPwDSOQGz9bQ6fbfGNm9Iw/Gq4EYrNx0raEVt
E1FD8+nRXcS1PribkWlu/qNd0yM+tXMXlryR6wAV3R4p9Q==
=h3Km
-----END PGP MESSAGE-----
]]></sourcecode>
        <t>Here is an SEIPDv2 unsigned message <tt>testing</tt> encrypted to this key:</t>
        <ul spacing="normal">
          <li>
            <t>A v6 PKESK</t>
          </li>
          <li>
            <t>A v2 SEIPD</t>
          </li>
        </ul>
        <t>The hex-encoded KMAC <tt>eccKeyShare</tt> input is <tt>50a74bfb94dc7677bc02f278eb4e7d5d2f1b04e34a2b5c7b8da0579f3e1e0825</tt>.</t>
        <t>The hex-encoded KMAC <tt>mlkemKeyShare</tt> input is <tt>161911216c93a5b7936f9a8876c446b0767c904c94786bfc79bcc505b45f5075</tt>.</t>
        <t>The hex-encoded KMAC256 output is <tt>ee4dacbc4efac509ad5f79640d5963af038baf512d55974c46ac71db6c1ed579</tt>.</t>
        <t>The hex-encoded session key is <tt>27e3c564fa7b8adb7ee1cfede3ee2cda79dd8f1a6d029ebeb7f3880c752185f6</tt>.</t>
        <sourcecode type="application/pgp-keys" name="v4-eddsa-sample-message-v2.asc"><![CDATA[
-----BEGIN PGP MESSAGE-----

wcPhBhUEvWfZg4iBPoi/NJDz5EDPuv/W81dp/h3ny6MDFKIjw8Jva/pK0mlJJMbX
RtJ2+idWKUL4/Evq2JBL2pky3VeCkhJIAnKdMXBvuucpNC4xVhCREpPquOsQcJE1
IyR5kdk0uOw/7T5i7i9zb3N8Mn4jObYNxem0PbD44xYfF4BcNZqWPhLSwdFp+uti
FDVcsAtaruQQnwcb0tE9KUxMHsH2QxuG6Xnm+a1v3fds/rp/DqrR1vTcwbeUBej9
AcrWhRI+KrE80WtMqqB0nvj74Jsx7xrYKyDqi7C50PG1LwTfFmO1kuIOGwEVh3AL
f9vesNee8+QWqJHMuSaqTsndts7Pq2EQ1fzdsrhYvseFEuiITj6OHnvmERjhkVRt
M36v3cA8GmcKI2YLa+fNvyagjgkoUycjNopK94/KQk8DY4JnKEbMHJ1BvUQ6mXkZ
ZeQXEt9gBHMZvTPE4ZPKSR14tki9YbjCvGcklEx1BEhONMo+03C07H/AHMtk5Ia1
BFDF3dRkOhyXLfJCNKhJL4Sq7Z07CqKYCCzEq6WgKQUlWmiJzEtZKmh61LX3FaVU
A8+iK56QBvYyFUv/T9mGIBvF6qM+1l9BUSDim81EEN3FVKuo5QJ+tEbuKOrDWMTQ
klx3iEmGFeW8/N0gxTMpDKQRqDbkhdwFoM1c1L61NeCfDvTiWWVQQg00Z/n38gGC
S4MC8szKWPPlmtPYsXbyITMLpErgbIfr3IPfwRkm1RWVPQ/T7dm0Iz8ufeVTAqv+
4+WgeILpQbFf/PmKHlZJnyj+munVaLaV9ed8g/0ncfZ0Vn9sMzGXifAjJ7vT8t/2
ojSqc1AQuhoNguI3xFUCaUEzmWzOl3ONZhgDr4WTJdvfW/8IHn2y0Kkn5buqLAO5
LOvrksFgkuy3N21OzgI+H5SeCqOGt5NKgyMAUGKEa5a6ApG/DSecXJ38yr4hTG6k
IGxfd9dlezcdByrohFsRHC93XUSlTnxTqdYmuhK8x4me6QblJFEJhoDTr3lrKTQE
gXC5ncdTLKLLINnZgFRc0oFABKGATf/708nt/vkuhyNroCY2NxGKoem3M8P5radp
vKJ7qRi+ePBmxwPhb5mWVf7G5y509GgVhKUFUWCzvyoyp1HLtekARKrxBAElXo4D
RINA468O/Sx9rWDFFkaShsXqQEhe06C3IhoG6vqagdB82LYcisCWEAKd/hZE99Ub
EWawnQor/jrHhGNQId1nZEwpEE2/cndU3Np0mhoGF/kkjyGah8wxjFRZhX2b+w3M
jmyFyOFGog6SDK1dK6+Vdki3fJFvBCx/uLmuLiNQo2MYeG3B4W30jNDlkxZ2DA14
1zPXL8S3t54ZCtqiqDO63SNW18o2SB9AJpmSYYF34LO29VJnWIK5/94tIsfwHbAg
P/JdfRmSXkUYDTwJcYR1SOp8IIWwhmybnYctHS/n1q+WnzMj0jJIe4SI9ifoJg6n
+ntRfsqR1B3fcTAKN0XK6pnNy+pJ1BCVDOYDz5RGsAa61wJdVK/mXEg7VyjMlf0t
EnPzSfwfotMPoZs9n+MuK/BO0AX8DqzY8SluBALG6Eu5OV+A0lQCCQIMeNuKCuzH
CoYERR8ds1jE9m+xLEGK7i1+zr5FSdzGowHh4xMo95Zk5JUubl5rYvcYbHgVVKKE
9mwM7/4Q5mXZ2xvsBftkujgamZM2UN9UYSA=
-----END PGP MESSAGE-----
]]></sourcecode>
      </section>
    </section>
    <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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
QXI9j9+GxoajHVVOSeA3C77zgVi8iM3j9Z1QKRGa3FgmF798v2lA95ipB1EB
9fIAu3mpEIJ4lDAhtQjQF6PttkATbMeFh+zGE7/LQfN38NgO6vIJ4m1cwgvw
viVmnsAOpJEHtADTHC1g3vLn+qj35d+nzv8rNRTHTDUVCxR4uasYJtBjdEoG
H9QsDQNs5O5GN0ls9+fxrdwyLG2BN0S/SMRCjVlqcMwxTnrCJo3VARe6uQ5A
guJ6LKAjSGpmWymLXjrZoteJXMRxmUeTxlqTuEpxb4j3xx8Bbwm5PEqiZxnk
zjjztlC0/QxA9UW8jcz8TkKNPXRBBc53jL+iN4JIYpWGPKK5p2pcw5Gkrk7L
6inyNTtOet+XRA/Tm0HEa0qSNXL9nX2aIvnCCO/kX2gGHjUFCd2cBamkyAe3
LuVL4TbEUYa7Fkr3k9QePmZGIGOthS3BfEpsheERWMotfoso6JRdqQtykfCS
9hSW4A2mBS3m8oV8rgD/FnPFQqaYyWWrqj6b5SolvapW9EK5qquVSrlYnlWL
+WIhX6lUKwUlk9PKWmZarD6xqG42jcQxcqW8ni9MS9VqvqKXi3lNLZVVpaLr
+XKpmCtXi9l8Uc/o2ZJeqMBQ2UxezWa1cj5T1maFDKb0Ji5B1944qo65zFNI
Kv/+aVtiCrFLACHlLtOKq376Jv33f/+3GMpyhqSTBOUTu3u91eldysR1OOxN
auOW3G89yPWLq0af5rSX9rdu51ZrduZ1twY/c/d8kn05bDXzpKVbrXqh195e
F8/KDaN4f551lpWHRbVUfplknWmmVnkpXkp24yo3HpQ69svdzOtmcnZvd7eu
OSfLbe2k0OiWL/Pq+nrkNJzdw6yzs2GMeq1+cz7MDJRa76XVkW6fbw43z8PR
pHbb6Kjls36npD4vdf3Q0+5PJpe3V71Vy25kq43sstHZDRrd+bLZ2C27tf1t
v1Hr3Um12q3VuOl1a3NcQXNxdajfVRrXTb3YdvT2yrStxWyycHKt613+rn1x
0Eqr/nCxvFnlJ/XZrnwj7cq67qwuqg2neFWuLTLn+1VvOc5Wnuf9G6da290p
eWuVW6nT55FtTHN3k9dVsWXc5Wd5cz4zZ450GN2016Ne4/XazN2oNdWZP19e
mPXhzaGeVXOTQ6+xuH28v8z0Wp6pj5bz6259/3DIZvDZxZ1nSvpt3dQ7bU/t
7M2L1eV2Oi43VruHMd2wmituWNJ+SUc37KZVI+eas+fj1rQ/mZjTO1d/vuku
X8p7u2KsB2VtW+pKr7mavlyev2zW/cnw5Mw+nOSeS45xclbP9UvL7DZ7KL5s
Xg1n4VbKs3qxtn9slB7tdnPbyCwfr7a2lC3MrtuZ8q6xzzzvzidXd5the+JO
duX1zXl3evk6X/Zq+0ruom52b/Z2fQ2Tau0uhtPRaL3d6rm11FvkF92d/vKS
m2hD+6T8OCvvFg/dw/3g7NaYuZaxG/RHzma6dVcX88bBaO0Gxjr/aI5H+167
qbSl1mDiTbaN0Xn5vv2YuXPN8bn1eNZoXV7P99PJ3Co1Grlp5bY1rdjmKF/b
myPj5Xw0vM5cOVfn2uxaujvvZWsn6/Jktcs2Hm9ecvbk+tZsVUujya3T3s+W
5fvGw1odr3s305NVu164vWjoruIVvY1WHisb6fZ8Pei77u0s0ysXWrfPysIe
Fkrr66HefzVHL7PtYj2/H9VGj+v6vNJ7rD+UJ9P52LroWZ3x2Go5kjNSJ2bT
qu1U7WG7eRzcPFwVW8+j0sXV3soqk9ntidE9GRpOrnZov7oPZqnX6KrGdc3t
95WT0bIs3V63605v2Mm+zK1yu52xivq6qxvtxvByWinvRi/mOrM40SoX+efr
VfOl8GrfXPebE0Nx7e7D/UVTKvft83Fvf53TO6/Pg6E5z9vN6nqRf7QOV+Oe
uz8rjJre/i7/cnJ+Wxm27V5Ge2xpt8OdYvd64ztD8kzNu75defXNubtQ9VZz
dGevN7uL1/pmMrYemuvxoVp49Jr1/mp+ba1Gq+ur/mNp3N2oK+O8c7uS7la1
/vJgl5d3td3D0G3lHh9eLl575+3VY/t1eNEbL4y18bgYnlUXuY6+ulmag/OX
BzdXVFudfal9J73eD7eVa8VclQ9XNUPtnpla9/bKu83b7d69t7hSvN3Iuamt
z8vd7nbp7ovVR++i7dXn3VVRH64epAdTP3fPLzqNa9dVyut+btHbzS/MVeNi
VFO27ZeH542t3vUe+herXXF7eX8/vOs9X9en4/Xkfnp7VZRuq+2zUnk+n4/u
6uf3jUdzNlfNzVUhl1Muc7lVRbm6NMbzR2/1rDZyuqkaxcOw36lP9f6qPVYn
rvQ4XU8fSo+Nfnt4eJ2+rAadBz2zerksmYvysKhdGrC7jzfzTGH1sBm93jXa
+dVmZZ6Ph555WR0YB6l0cbiDFY7GN9pczSu7UWb1fOvMb7M9JVN7HrT76v68
VjK6Wsmo7e8G09uX/dXIHl+Nb82Bkzc9aa1cdlqDzlrp7gb2jVut7ke97Gun
un5YzfSeWbqYPY52Vq9w4da3l1d143Zxeds4Ux56vYvWqvzyLI3Xu+KD1jsp
PY/Mk7ViXpjqoPnqZS7mg8uK81C6NR/P653L9qjWH12O7u619sOgfuj3O6PG
czU7bkp31+bVxfaub3mji2VRv7C1xXw17Lzsi53HVmN+NyrsmrXhQybjmNmy
NinmO/rzvXPrnSsPKjDNorTu2+ORcn0+3jzkiv3D4cSul5XuepLZ1irlc0Uf
NtyX5bM6KvZu+pqn6rfu8v5yqORm5cbYmd0MpcVVZ5mZj2qF833lpL2rbDp3
F53zfWmVNUeHO3VwX+xelBfny/ai1denD89a7aJzP5hkd/tL47bb6EnbfeP5
/qy23HVbzW3tsvSyuL1w1EdzZc1HU71+cK/aGy2nVK57o9y6PGzUFO/qZLxu
z+3hSbYxn0jnPc0YrgeZO2cwG1WNemu48B6Ui27Wvn2ur9VJ+XU9v9SW40LD
nAH4zTd5+9q6q9vz5vPgvn+rS+vRrL3PmFnvsjO8aDTaE8Or7Pe1ws3JerHx
etbh/rbWPTdas25vWHjej7Wz9u4mv27a/T1I0g8n0r3b8Sbne71qD5z7kemV
NoeVVXrt35g37q5ia9vuYl08u7x7WTYW1bP9zXbVM1tDdzJ5Ppxn2pdt6eyk
ezmu9h1Q9J9LJ+rmuTltXZZuV0OzvTUH6r79+qCMrTslq7qL0aTRULLKw6Om
3TlNbX+1G8ykq+ntrjLeLB/KtdzwRdXWq3WtVBld2He7y9rca3ey+7tJIX9o
nF3n78fuy3g17w5vO1O7uZy41X5Fyp7UD/PC86J/p9aWrpObtZv1wm65VB7V
en5ze3W/ubnJ6V4jqzScqT0qbsf6YHI+GZ247sVyb+pS/+Ixv+xW18orMLJx
/+ZONfV9DSS4YW91tcxem6vLarc7mN/u5ue9Yrei55WyerOr7MsPi+JO1aVD
TVtsdsOOOq5WGy+ecjPNKPr4tbrfL0qFnGMPDoWS07hZ52pn8+zN9LH38jLR
S+a08LI8rzxoA0nrFEZOK3/72sx7m9phk7+o3pjl6st+r9UL5155tz7Rrltj
xX6cKifK4O6xVHncN1vPN+fq/OBcVqX7Rv1SvVBvT0br5/r9dT+bP+gNrTbp
3C5qWTXzUi9c9ycPxTM9U+6rlZcOtDLPG41ppnh1c9O/60ir1UQ9t5rN3uPo
YlCYXGt5tTa/W2yLTm95Vr++uyk1Omu3ZD13s3eXSq/kjp08rH12Zw6UhZvZ
Savb62V/0MnU7nbj6qTeqN+WF5v2ZXm4yzXv69rNrXnTvKrcvU4u7tteyX3c
tk/u54+VQmZn31R6uapUX90Viy+jh9xC8wZu/2V5m89eTl11rxR3Q3eT648M
576dP7cfl2NFvT3zlN5wtertOvdm5rVuDqRKd11dnF9ptcda7br2sGs8V9ra
qlmoHZpGt9tcAsO6mF1UMg2rry5zu4dpvXVWtzvD/m6yMbPnjjRfFPqNQnN0
cjfrP948AI3pX9QOXntwez6rjJvGw8PlauJUx1eTy5rdeC7c991y/abcfywO
BlYDeGOr5XarBoiSdafb7N9fNJx2v9J7KBbqRUWvbJr9u93VZjH2zO7SKDbG
k2532Fds50HZbQcv48eC1G1cnZTOneeKsyo/tPeL/e7aWEy6PTObGfVzNznv
vnKYG1qjr2YP1/VFwewftgfncL27KBlFd1CQ3Nvi3BxUp4/z6/6sa7vLwuZS
e3m8KbYPPcVenFcUW71ZO5nzyc224qwzQGZazfpLU+8t9LW90CR1XewDyCwv
m4XtzXT2vHG1iTe/tZ3ay6G2yzyMbL15UZs1iu5BOX+xK/1MqTGoHMpX+clL
vTIE1nY+rbSm5VXnQetWbyur/GD8DMr0VfFCHdcOL3b9fNsojMfzdald1c6L
xe553nlt77PV3eCls7iYSLWpujs7vztX5s724WXcsV+nRku9WOjty1XfWBb0
jt2prkbZ1nSxW0xX8+JFs7R8vG/3gVRfWcuppI6118zBAlnoepm1z5cLEBay
80mn0Lubt857o8e71jSTL9VX49poqBZbDxPd29Q3z4OHm/7mTu9JQ2ezWnTz
HeOxvssOewen+fAwWObLV91ZZnCxUBZ13dTO3ZehfaG2nKvRJjOu7ncrXX29
s3tN71G6qZSrhYvmsmE/lHbrh3a7OFJfSoXufHWjjIrL0Q3sjDfuzacXdn11
YzRvYYx9Bf54WVxpN9dDKXMoZS7vnkf3F1M3M3neO73J4HGlmfvu2dl8aS2b
F+ZoPnqZTmvLzkl5XFXNi1GhYE4emrncZSZvSQPDrKy7d8+b0uHhLq+3lYP5
2is/X7Qmj0X1YpctTrXsebe1Ha6v6vsJ4Il1si4M+/bQub0stG5WUtY2W/3C
2L17ONlMcsPGpHDdqt+sr272ncfH/WIwVM5qfauZ72UvQAC4XFRHF/eX00lv
XapOr/vVS+llVBl06h39rv7aqg0X97pSXYEYYbij9ujR2Vn6Q+3iun7fzSwK
e915vJvkOt3qdJPNzXf11fm0Li1LBWf3OD/TXppGY5AtnTUyl+tM7VUp2OOJ
e3Veqjva46Kc2bcfX06axqs+rxTHg8NuaVYHSrY+lmru4OqxUHRBD+nVF7f3
pYZtLhU9k8vbm8H8Obu22pPiUK2oYwCDzu0g+9i9q9T0i9pu3d8UNyfS4WFT
u+j3AGz7lraaXF605reX9u3N/i57VznvWZ46sYbKYTJYaVald5M5aba9u8bM
7l08bvc3w610MCYXarMz6fdt87x1dlNyC2a2Un1YPt82S5Z3N23enpsNR1nc
Vke34/wamJJ73z4Ze+q5Ye6vltKivi093HYXN+55af+SX+WKee/ypXizWu5e
Dvvh2c3zdj4cXQLidJ9fltV2wbma9NcnJ51VXevVz1fSstPcLZbtZ2+yqV+p
rqE+Xl6po413vr+7vVKb9X3WOCku9/V5eTm6vLDdcmc2WU+q41JvVuz0tw9S
s3d/tTfu7XlPO/QqjZ29dor9sXdTue24i9b07qUxc2/vRzOztNRKvdvzVnb7
uq33X+6sUbeY320lfXDycOU8Xy1qFfvy7vzlMNcWqnvtvgCdem6dPRamV4N9
566pz69zq662mvWKA+O1e7boXeXbU92RCuZ437qbPw+zy2F22K2/zOeLS6Wf
m+Qy1ZGS6RRWh/a+cHN5rhircm076BQnV9r8yry+yC9WmUFLelFqJ/pj/6FS
WFvrgV48KL3l4+hReai9jPvPm+FDs77o7MaPpmFvB/Pl3SOIiS0XhMP+6nzV
7p5Jue7DIwjro9vdam28Ts3dzbRrT6aXWudsV325m257hcb5bnYyyWg3pexY
n98u9Fyr+JKv971aY2lJrqqfjF67VnaVce8ynZo+NUHIXRiTwmq3dB96J4e9
s1k6Suu5UdvcPfS8Xv2lcrc2rkqL/cNibkubaXNVyWogQxuDStu7Miead1M2
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
Q7n2OYubAQA=

-->

</rfc>
