<?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.17 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ehlen-openpgp-nist-bp-comp-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="NIST Brainpool PQC">PQ/T Composite Schemes for OpenPGP using NIST and Brainpool Elliptic Curve Domain Parameters</title>
    <seriesInfo name="Internet-Draft" value="draft-ehlen-openpgp-nist-bp-comp-00"/>
    <author initials="Q." surname="Dang" fullname="Quynh Dang">
      <organization>NIST</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>quynh.dang@nist.gov</email>
      </address>
    </author>
    <author initials="S." surname="Ehlen" fullname="Stephan Ehlen">
      <organization>BSI</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>stephan.ehlen@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>
    <date year="2024" month="July" day="08"/>
    <area>sec</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 323?>

<t>This document defines PQ/T composite schemes based on ML-KEM and ML-DSA combined with ECC algorithms using the NIST and Brainpool domain parameters for the OpenPGP protocol.</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-ehlen-openpgp-nist-bp-comp/"/>.
      </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-ehlen-openpgp-nist-bp-comp"/>.</t>
    </note>
  </front>
  <middle>
    <?line 327?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines PQ/T composite schemes based on ML-KEM and ML-DSA combined with ECDH and ECDSA using the NIST and Brainpool domain parameters for the OpenPGP protocol.
As such it extends <xref target="draft-ietf-openpgp-pqc-03"/>, which introduces post-quantum cryptography in OpenPGP.
The ML-KEM and ML-DSA composite schemes defined in that document are built with ECC algorithms using the Edwards Curves defined in <xref target="RFC8032"/> and <xref target="RFC7748"/>.
This document extends the set of algorithms given in <xref target="draft-ietf-openpgp-pqc-03"/> by further combinations of ML-KEM and ML-DSA with the NIST <xref target="SP800-186"/> and Brainpool <xref target="RFC5639"/> domain parameters.
The support of NIST and Brainpool domain parameters is required in various applications related to certain regulatory environments.</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.</t>
        <t>[Note to the reader: This specification refers to the NIST PQC draft standards FIPS 203 and FIPS 204 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>
      <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"/>.</t>
        <t>For interoperability this extension offers ML-* 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 anchor="applicable-specifications-for-the-use-of-pqc-algorithms-in-openpgp">
        <name>Applicable Specifications for the use of PQC Algorithms in OpenPGP</name>
        <t>This document is to be understood as an extension of <xref target="draft-ietf-openpgp-pqc-03"/>, which introduced PQC in OpenPGP, in that it defines further algorithm code points.
All general specifications in <xref target="draft-ietf-openpgp-pqc-03"/> that pertain to the ML-KEM and ML-DSA composite schemes or generally cryptographic schemes defined therein equally apply to the schemes specified in this document.</t>
      </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="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.
All of these schemes are fully specified via their algorithm ID, i.e., they are not parametrized.</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</td>
              <td align="left">ML-KEM-512+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-768+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-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</td>
              <td align="left">ML-DSA-44+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-65+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-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>
          </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>
    <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="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>
    <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-nist-artifacts"/> and <xref target="tab-ecdh-brainpool-artifacts"/> describe the ECC-KEM parameters and artifact lengths.</t>
          <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-512+ECDH-NIST-P-256)</td>
                <td align="left">TBD (ML-KEM-768+ECDH-NIST-P-384, 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-nist-artifacts"/> or <xref target="tab-ecdh-brainpool-artifacts"/>.</t>
          <section anchor="ecdh-kem">
            <name>ECDH-KEM</name>
            <t>The operation <tt>ecdhKem.Encaps()</tt> is defined as follows:
1. 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>
            <ol spacing="normal" type="1"><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-512</td>
                <td align="left">800</td>
                <td align="left">1632</td>
                <td align="left">768</td>
                <td align="left">32</td>
              </tr>
              <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 (ML-KEM-512+ECDH-NIST-P-256)</td>
              <td align="left">ML-KEM-512</td>
              <td align="left">ecdhKem</td>
              <td align="left">NIST P-256</td>
            </tr>
            <tr>
              <td align="right">TBD (ML-KEM-768+ECDH-NIST-P-384)</td>
              <td align="left">ML-KEM-768</td>
              <td align="left">ecdhKem</td>
              <td align="left">NIST P-384</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 an ML-KEM ciphertext together with an ML-KEM symmetric key share.</t>
          </li>
          <li>
            <t>The encapsulation algorithm of an 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 encrypted with the AES Key Wrap Algorithm <xref target="RFC3394"/> with AES-256 as the encryption algorithm and using the KEK as the encryption 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 fixed information, which is identical to one specified in <xref target="draft-ietf-openpgp-pqc-03"/>, MUST be used in the subsequently described key combiner <xref target="kem-key-combiner"/>.</t>
          <artwork><![CDATA[
//   Input:
//   algID - the algorithm ID encoded as octet
//
//   Constants:
//   domSeparation - the UTF-8 encoding of the string
//                   "OpenPGPCompositeKDFv1"

fixedInfo = algID || domSeparation
]]></artwork>
          <t>The value of <tt>domSeparation</tt> is the UTF-8 encoding of the string "OpenPGPCompositeKDFv1" 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
                 44 46 76 31
]]></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, which is identical to one described in <xref target="draft-ietf-openpgp-pqc-03"/>, 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 SHA3-256.
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>
          <t>[Note to the reader: the key combiner defined in the current version of this draft is not actually compliant to <xref target="SP800-56C"/>, since the NIST standard requires that the shared secret is fed to the KDF first whereas the combiner defined here feeds
the key shares of the two component schemes, which together form the shared secret, in two parts with public information in between.
The combiner will be reworked to fix this defect in conformance to the combiner defined in draft-ietf-openpgp-pqc.
The change is planned to be integrated into both drafts prior to IETF 121.]</t>
          <artwork><![CDATA[
//   multiKeyCombine(ecdhKeyShare, ecdhCipherText, ecdhPublicKey, mlkemKeyShare,
//                   mlkemCipherText, mlkemPublicKey, fixedInfo)
//
//   Input:
//   ecdhKeyShare    - the ECDH key share encoded as an octet string
//   ecdhCipherText  - the ECDH 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
//   ecdhPublicKey   - The ECDH public key of the recipient as an octet string
//   mlkemPublicKey  - The ML-KEM public key of the recipient as an octet string
//   fixedInfo       - the fixed information octet string
//
//   Constants:
//   counter - the 4 byte value 00 00 00 01

ecdhData = ecdhKeyShare || ecdhCipherText || ecdhPublicKey
mlkemData = mlkemKeyShare || mlkemCipherText || mlkemPublicKey

KEK = SHA3-256(counter || ecdhData || mlkemData || fixedInfo)
return KEK
]]></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>
        </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="SP800-186"/> or <xref target="RFC5639"/>, and encoding the outputs as fixed-length octet strings in the format specified in <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 an 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, eccPublicKey, mlkemKeyShare, mlkemCipherText, mlkemPublicKey, fixedInfo)</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 len(symAlgId, C) || (|| symAlgId) || C</tt>, where both <tt>symAlgId</tt> and <tt>len(C, symAlgId)</tt> are single octet fields, <tt>symAlgId</tt> denotes the symmetric algorithm ID used and is present only for a v3 PKESK, and <tt>len(C, symAlgId)</tt> denotes the combined octet length of the fields specified as the arguments.</t>
            </li>
          </ol>
        </section>
        <section anchor="decryption-procedure">
          <name>Decryption procedure</name>
          <t>The procedure to perform public-key decryption with an 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 || len(symAlgId, C) (|| symAlgId) || 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, eccPublicKey, mlkemKeyShare, mlkemCipherText, mlkemPublicKey, fixedInfo)</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+ECC 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="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>Here, the operation <tt>ECDSA.Sign()</tt> is defined as the algorithm in Section "6.4.1 ECDSA Signature Generation Algorithm" of <xref target="SP800-186-5"/>, however, excluding Step 1: <tt>H = Hash(M)</tt> in that algorithm specification, as in this specification the message digest <tt>H</tt> is a direct input to the operation <tt>ECDSA.Sign()</tt>. Equivalently, the operation <tt>ECDSA.Sign()</tt> can be understood as representing the algorithm under Section "4.2.1.1. Signature Algorithm" in <xref target="TR-03111"/>, again with the difference that in this specification the message digest <tt>H_Tau(M)</tt> appearing in Step 5 of the algorithm specification is the direct input to the operation <tt>ECDSA.Sign()</tt> and thus the hash computation is not carried out.
The same statement holds for the definition of the verification operation <tt>ECDSA.Verify()</tt>: it is given either through the algorithm defined in Section "6.4.2 ECDSA Signature Verification Algorithm" of <xref target="SP800-186-5"/> omitting the message digest computation in Step 2 or by the algorithm in Section "4.2.1.2. Verification Algorithm" of <xref target="TR-03111"/> omitting the message digest computation in Step 3.</t>
          <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-44+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-65+ECDSA-NIST-P-384,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-44</td>
                <td align="left">1312</td>
                <td align="left">2528</td>
                <td align="left">2420</td>
              </tr>
              <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 + ECDSA 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-44 IDs)</td>
                <td align="left">SHA3-256</td>
                <td align="left">12</td>
              </tr>
              <tr>
                <td align="right">TBD (ML-DSA-65 IDs)</td>
                <td align="left">SHA3-512</td>
                <td align="left">14</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="SP800-186"/> or <xref target="RFC5639"/>, and encoding the artifacts as specified in <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 + 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 an 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. 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 + ECDSA signatures consist 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 + 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="security-considerations">
      <name>Security Considerations</name>
      <t>TBD</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>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>
      <t>[Note: Once the working group has agreed on the actual algorithm choice, the following table with the requested IANA updates will be filled out.]</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-DSA-65+TBD</td>
            <td align="right">TBD octets TBD public key , TBD octets ML-DSA-65 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">TBD octets TBD secret key , TBD octets ML-DSA-65 secret (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">TBD octets TBD signature , TBD 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>
        </tbody>
      </table>
    </section>
    <section anchor="changelog">
      <name>Changelog</name>
    </section>
    <section anchor="contributors">
      <name>Contributors</name>
      <t>Stavros Kousidis</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>
        <reference anchor="draft-ietf-openpgp-pqc-03" target="https://www.ietf.org/archive/id/draft-ietf-openpgp-pqc-03.html">
          <front>
            <title>Post-Quantum Cryptography in OpenPGP (draft-ietf-openpgp-pqc-03)</title>
            <author initials="S." surname="Kousidis" fullname="Stavros Kousidis">
              <organization/>
            </author>
            <author initials="J." surname="Roth" fullname="Johannes Roth">
              <organization/>
            </author>
            <author initials="F." surname="Strenzke" fullname="Falko Strenzke">
              <organization/>
            </author>
            <author initials="A." surname="Wussler" fullname="Aron Wussler">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </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="SP800-186-5" target="https://doi.org/10.6028/NIST.FIPS.186-5">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization>Information Technology Laboratory, National Institute of Standards and Technology</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="TR-03111" target="https://www.bsi.bund.de/DE/Themen/Unternehmen-und-Organisationen/Standards-und-Zertifizierung/Technische-Richtlinien/TR-nach-Thema-sortiert/tr03111/TR-03111_node.html">
          <front>
            <title>Technical Guideline BSI TR-03111 – Elliptic Curve Cryptography, Version 2.1</title>
            <author>
              <organization>Federal Office for Information Security, Germany</organization>
            </author>
            <date year="2018" month="June"/>
          </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 906?>

<section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>TBD</t>
      <section anchor="sample-v6-pqc-subkey-artifacts">
        <name>Sample v6 PQC Subkey Artifacts</name>
        <t>TBD
## V4 PQC Subkey Artifacts</t>
        <t>TBD</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
    </section>
  </back>
  <!-- ##markdown-source:
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
X/rb2fhCrgAA

-->

</rfc>
