<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-openpgp-nist-bp-comp-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <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-ietf-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="S." surname="Kousidis" fullname="Stavros Kousidis">
      <organization>BSI</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>kousidis.ietf@gmail.com</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="2025" month="October" day="09"/>
    <area>sec</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 149?>

<t>This document defines PQ/T composite schemes based on ML-KEM and ML-DSA combined with ECDH and ECDSA 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-ietf-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 153?>

<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. It is an extension of <xref target="I-D.draft-ietf-openpgp-pqc"/>, which introduces post-quantum cryptography in OpenPGP using hybrid KEMs and digital signatures combining ML-KEM and ML-DSA with ECC algorithms based on the Edwards Curves defined in <xref target="RFC7748"/> and <xref target="RFC8032"/>.</t>
      <t>Due to their long-standing and wide deployment, there are well-tested, secure, and efficient implementations of ECDSA and ECDH with NIST-curves <xref target="SP800-186"/>. The same applies to Brainpool curves <xref target="RFC5639"/> which are recommended or required in certain regulatory domains, for instance in Germany <xref target="TR-03111"/>.  The purpose of this document is to support users who would like to or have to use such hybrid KEMs and/or signatures with OpenPGP.</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="RFC9794"/>.
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>
        <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 ECDH 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 combinaton with ECDSA signature schemes.</t>
        </section>
      </section>
      <section anchor="elliptic-curve-cryptography">
        <name>Elliptic Curve Cryptography</name>
        <t>The ECDH encryption is defined here as a KEM.</t>
        <t>All elliptic curves for the use in the composite combinations are taken from <xref target="RFC9580"/>.</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="I-D.draft-ietf-openpgp-pqc"/>, which introduced PQC in OpenPGP, in that it defines further algorithm code points.
All general specifications in <xref target="I-D.draft-ietf-openpgp-pqc"/> 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 + ECDH and ML-DSA + ECDSA schemes.
All of these schemes are fully specified via their algorithm ID, that is, 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>The algorithms in this draft 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 + ECDH public-key encryption involves both the ML-KEM and an ECDH KEM in a 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 + ECDSA signature consists of independent ML-DSA and ECDSA signatures, and an implementation MUST successfully validate both signatures to state that the ML-DSA + ECDSA signature is valid.</t>
      </section>
      <section anchor="key-version-binding">
        <name>Key Version Binding</name>
        <t>All PQ(/T) asymmetric algorithms are to be used only in v6 (and newer) keys and certificates, with the single exception of ML-KEM-768+X25519 (algorithm ID 35), which is also allowed in v4 encryption-capable subkeys.</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>ECDH KEM</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 ECDH 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">ECDH KEM</td>
                <td align="left">ECDH-KEM <xref target="ecdh-kem"/></td>
                <td align="left">ECDH-KEM <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 key share</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</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">ECDH KEM</td>
                <td align="left">ECDH-KEM <xref target="ecdh-kem"/></td>
                <td align="left">ECDH-KEM <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 key share</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</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 ECDH KEM are defined in the following subsections.
Specifically, each of these subsections defines the instances of the following operations:</t>
          <artwork><![CDATA[
(ecdhCipherText, ecdhKeyShare) <- ECDH-KEM.Encaps(ecdhPublicKey)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(ecdhKeyShare) <- ECDH-KEM.Decaps(ecdhCipherText, ecdhSecretKey)
]]></artwork>
          <t>To instantiate <tt>ECDH-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>ECDH-KEM.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 recipient's public key <tt>ecdhPublicKey</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>ecdhCipherText</tt> to the SEC1 encoding of <tt>V</tt></t>
              </li>
              <li>
                <t>Set the output <tt>ecdhKeyShare</tt> to <tt>X</tt></t>
              </li>
            </ol>
            <t>The operation <tt>ECDH-KEM.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>ecdhSecretKey</tt> and <tt>V</tt> is the <tt>ecdhCipherText</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>ecdhKeyShare</tt> to <tt>X</tt></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 and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">ML-KEM-512</th>
                <th align="left">ML-KEM-768</th>
                <th align="left">ML-KEM-1024</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">TBD</td>
                <td align="left">TBD</td>
                <td align="left">TBD</td>
              </tr>
              <tr>
                <td align="left">Public key</td>
                <td align="left">800 octets</td>
                <td align="left">1184 octets</td>
                <td align="left">1568 octets</td>
              </tr>
              <tr>
                <td align="left">Secret key</td>
                <td align="left">64 octets</td>
                <td align="left">64 octets</td>
                <td align="left">64 octets</td>
              </tr>
              <tr>
                <td align="left">Ciphertext</td>
                <td align="left">768 octets</td>
                <td align="left">1088 octets</td>
                <td align="left">1568 octets</td>
              </tr>
              <tr>
                <td align="left">Key share</td>
                <td align="left">32 octets</td>
                <td align="left">32 octets</td>
                <td align="left">32 octets</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>
        </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 + ECDH composite public-key encryption schemes:</t>
        <table anchor="tab-mlkem-ecc-composite">
          <name>ML-KEM + ECDH composite schemes</name>
          <thead>
            <tr>
              <th align="right">Algorithm ID reference</th>
              <th align="left">ML-KEM</th>
              <th align="left">ECDH-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">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">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">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">brainpoolP256r1</td>
            </tr>
            <tr>
              <td align="right">TBD (ML-KEM-1024+ECDH-brainpoolP384r1)</td>
              <td align="left">ML-KEM-1024</td>
              <td align="left">brainpoolP384r1</td>
            </tr>
          </tbody>
        </table>
        <t>The ML-KEM + ECDH 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 ECDH ciphertext together with an ECDH 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, the ECDH ciphertext, the ECDH public key, 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 packet's algorithm-specific parts are made up of the ML-KEM ciphertext, the ECDH ciphertext, and the wrapped session key.</t>
          </li>
        </ul>
        <section anchor="kem-key-combiner">
          <name>Key Combiner</name>
          <t>For the composite KEM schemes defined in this document the procedure <tt>multiKeyCombine</tt> that is defined in <xref section="4.2.1" sectionFormat="of" target="I-D.draft-ietf-openpgp-pqc"/> MUST be used to compute the KEK that wraps a session key.</t>
        </section>
        <section anchor="ecc-mlkem-generation">
          <name>Key Generation Procedure</name>
          <t>The implementation MUST generate the ML-KEM and the ECDH component keys independently.
ML-KEM key generation follows the specification in <xref target="FIPS-203"/>, and the artifacts are encoded as fixed-length octet strings whose sizes are listed <xref target="mlkem-ops"/>.
ECDH key generation follows the specification in <xref target="SP800-186"/> or <xref target="RFC5639"/>, and the artifacts are encoded as fixed-length octet strings whose sizes and format are listed 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 + ECDH 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> and set it as <tt>algId</tt></t>
            </li>
            <li>
              <t>Extract the <tt>ecdhPublicKey</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 ECDH-KEM and the ML-KEM depending on the algorithm ID according to <xref target="tab-mlkem-ecc-composite"/></t>
            </li>
            <li>
              <t>Compute <tt>(ecdhCipherText, ecdhKeyShare) = ECDH-KEM.Encaps(ecdhPublicKey)</tt></t>
            </li>
            <li>
              <t>Compute <tt>(mlkemCipherText, mlkemKeyShare) = ML-KEM.Encaps(mlkemPublicKey)</tt></t>
            </li>
            <li>
              <t>Compute <tt>KEK = multiKeyCombine(mlkemKeyShare, ecdhKeyShare, ecdhCipherText, ecdhPublicKey, algId)</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>ecdhCipherText || mlkemCipherText || len(C, symAlgId) (|| 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 + ECDH 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 as <tt>algId</tt> and the wrapped session key as <tt>encryptedKey</tt></t>
            </li>
            <li>
              <t>Check that the own and the extracted algorithm ID match</t>
            </li>
            <li>
              <t>Parse the <tt>ecdhSecretKey</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 ECDH-KEM and the ML-KEM depending on the algorithm ID according to <xref target="tab-mlkem-ecc-composite"/></t>
            </li>
            <li>
              <t>Parse <tt>ecdhCipherText</tt>, <tt>mlkemCipherText</tt>, and <tt>C</tt> from <tt>encryptedKey</tt> encoded as <tt>ecdhCipherText || mlkemCipherText || len(C, symAlgId) (|| 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>(ecdhKeyShare) = ECDH-KEM.Decaps(ecdhCipherText, ecdhSecretKey)</tt></t>
            </li>
            <li>
              <t>Compute <tt>(mlkemKeyShare) = ML-KEM.Decaps(mlkemCipherText, mlkemSecretKey)</tt></t>
            </li>
            <li>
              <t>Compute <tt>KEK = multiKeyCombine(mlkemKeyShare, ecdhKeyShare, ecdhCipherText, ecdhPublicKey, algId)</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 (Packet Type ID 1)</name>
          <t>The algorithm-specific fields consist 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 ECDH 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="RFC9580"/>, for the ML-KEM + ECDH 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>
          <t>Implementations MUST NOT use the obsolete Symmetrically Encrypted Data packet (Packet Type ID 9) to encrypt data protected with the algorithms described in this document.</t>
        </section>
        <section anchor="mlkem-ecc-key">
          <name>Key Material Packets</name>
          <t>The composite ML-KEM + ECDH schemes defined in this specification MUST be used only with v6 keys, as defined in <xref target="RFC9580"/>, or newer versions defined by updates of that document.</t>
          <section anchor="public-key-packets-packet-type-ids-6-and-14">
            <name>Public Key Packets (Packet Type IDs 6 and 14)</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 ECC 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>
          </section>
          <section anchor="secret-key-packets-packet-type-ids-5-and-7">
            <name>Secret Key Packets (Packet Type IDs 5 and 7)</name>
            <t>The algorithm-specific secret key is these two values:</t>
            <ul spacing="normal">
              <li>
                <t>A fixed-length octet string of the encoded ECDH secret key, 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 in seed format, whose length is 64 octets (compare <xref target="tab-mlkem-artifacts"/>).
The seed format is defined in accordance with Section 3.3 of <xref target="FIPS-203"/>.
Namely, the secret key is given by the concatenation of the values of <tt>d</tt> and <tt>z</tt>, generated in steps 1 and 2 of <tt>ML-KEM.KeyGen</tt> <xref target="FIPS-203"/>, each of a length of 32 octets.
Upon parsing the secret key format, or before using the secret key, for the expansion of the key, the function <tt>ML-KEM.KeyGen_internal</tt> <xref target="FIPS-203"/> has to be invoked with the parsed values of <tt>d</tt> and <tt>z</tt> as input.</t>
              </li>
            </ul>
          </section>
        </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, dataDigest,
                           ecdsaSignatureR, ecdsaSignatureS)
]]></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</name>
            <thead>
              <tr>
                <th align="right"> </th>
                <th align="left">NIST-P-256</th>
                <th align="left">NIST P-384</th>
                <th align="left">brainpoolP256r1</th>
                <th align="left">brainpoolP384r1</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">Algorithm ID reference</td>
                <td align="left">TBD (ML-DSA-44+ECDSA-NIST-P-256)</td>
                <td align="left">TBD (ML-DSA-65+ECDSA-NIST-P-384,ML-DSA-87+ECDSA-NIST-P-384</td>
                <td align="left">TBD (ML-DSA-65+ECDSA-brainpoolP256r1)</td>
                <td align="left">TBD (ML-DSA-87+ECDSA-brainpoolP384r1)</td>
              </tr>
              <tr>
                <td align="right">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="right">Public key</td>
                <td align="left">65 octets</td>
                <td align="left">97 octets</td>
                <td align="left">65 octets</td>
                <td align="left">97 octets</td>
              </tr>
              <tr>
                <td align="right">Secret key</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="right">Signature value R</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="right">Signature value S</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="mldsa-signature">
          <name>ML-DSA Signatures</name>
          <t>Throughout this specification ML-DSA refers to the default pure and hedged version of ML-DSA defined in <xref target="FIPS-204"/>.</t>
          <t>ML-DSA signature generation is performed using the default hedged version of the <tt>ML-DSA.Sign</tt> algorithm, as specified in <xref target="FIPS-204"/>, with an empty context string <tt>ctx</tt>.
That is, to sign with ML-DSA the following operation is defined:</t>
          <artwork><![CDATA[
(mldsaSignature) <- ML-DSA.Sign(mldsaSecretKey, dataDigest)
]]></artwork>
          <t>ML-DSA signature verification is performed using the <tt>ML-DSA.Verify</tt> algorithm, as specified in <xref target="FIPS-204"/>, with an empty context string <tt>ctx</tt>.
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</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">ML-DSA-44</th>
                <th align="left">ML-DSA-65</th>
                <th align="left">ML-DSA-87</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">TBD</td>
                <td align="left">TBD</td>
                <td align="left">TBD</td>
              </tr>
              <tr>
                <td align="left">Public key</td>
                <td align="left">1312 octets</td>
                <td align="left">1952 octets</td>
                <td align="left">2592 octets</td>
              </tr>
              <tr>
                <td align="left">Secret key</td>
                <td align="left">32 octets</td>
                <td align="left">32 octets</td>
                <td align="left">32 octets</td>
              </tr>
              <tr>
                <td align="left">Signature</td>
                <td align="left">2420 octets</td>
                <td align="left">3309 octets</td>
                <td align="left">4627 octets</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="ecc-mldsa">
        <name>Composite Signature Schemes with ML-DSA</name>
        <section anchor="ecc-mldsa-generation">
          <name>Key Generation Procedure</name>
          <t>The implementation MUST generate the ML-DSA and the ECDSA component keys independently.
ML-DSA key generation follows the specification in <xref target="FIPS-204"/> and the artifacts are encoded as fixed-length octet strings whose sizes are listed in <xref target="mldsa-signature"/>.
ECDSA key generation follows the specification in <xref target="SP800-186"/> or <xref target="RFC5639"/>, and the artifacts are encoded as fixed-length octet strings whose sizes are listed in <xref target="ecdsa-signature"/>.</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 section="5.2.4" sectionFormat="of" target="RFC9580"/></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, that is, ECDSA and ML-DSA, successfully to state that a composite ML-DSA + ECDSA signature is valid.</t>
        </section>
      </section>
      <section anchor="packet-specifications-1">
        <name>Packet Specifications</name>
        <section anchor="ecc-mldsa-sig-packet">
          <name>Signature Packet (Packet Type ID 2)</name>
          <t>The composite ML-DSA + ECDSA schemes MUST be used only with v6 signatures, as defined in <xref target="RFC9580"/>, or newer versions defined by updates of that document.</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>
          <t>A composite ML-DSA + ECDSA signature MUST use a hash algorithm with a digest size of at least 256 bits for the computation of the message digest.
A verifying implementation MUST reject any composite ML-DSA + ECDSA signature that uses a hash algorithm with a smaller digest size.</t>
        </section>
        <section anchor="key-material-packets">
          <name>Key Material Packets</name>
          <t>The composite ML-DSA + ECDSA schemes MUST be used only with v6 keys, as defined in <xref target="RFC9580"/>, or newer versions defined by updates of that document.</t>
          <section anchor="public-key-packets-packet-type-ids-6-and-14-1">
            <name>Public Key Packets (Packet Type IDs 6 and 14)</name>
            <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"/>, whose length depends on the algorithm ID as 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>
          </section>
          <section anchor="secret-key-packets-packet-type-ids-5-and-7-1">
            <name>Secret Key Packets (Packet Type IDs 5 and 7)</name>
            <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 ID as specified in <xref target="tab-ecdsa-artifacts"/>.</t>
              </li>
              <li>
                <t>A fixed-length octet string containing the ML-DSA secret key in seed format, whose length is 32 octets (compare <xref target="tab-mldsa-artifacts"/>).
The seed format is defined in accordance with Section 3.6.3 of <xref target="FIPS-204"/>.
Namely, the secret key is given by the value <tt>xi</tt> generated in step 1 of <tt>ML-DSA.KeyGen</tt> <xref target="FIPS-204"/>.
Upon parsing the secret key format, or before using the secret key, for the expansion of the key, the function <tt>ML-DSA.KeyGen_internal</tt> <xref target="FIPS-204"/> has to be invoked with the parsed value of <tt>xi</tt> as input.</t>
              </li>
            </ul>
          </section>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The following security considerations given in <xref target="I-D.draft-ietf-openpgp-pqc"/> equally apply to this document:</t>
      <ul spacing="normal">
        <li>
          <t>the security aspects of composite signatures (Section 9.1 in <xref target="I-D.draft-ietf-openpgp-pqc"/>),</t>
        </li>
        <li>
          <t>the arguments for the security features of the KEM combiner given in Section 9.2 of <xref target="I-D.draft-ietf-openpgp-pqc"/>, as also the NIST and Brainpool curves represent nominal groups according to <xref target="ABH_21"/>,</t>
        </li>
        <li>
          <t>the considerations regarding domain separation and context binding for the KEM combiner (Section 9.2.1 in <xref target="I-D.draft-ietf-openpgp-pqc"/>),</t>
        </li>
        <li>
          <t>the use of the hedged variant of ML-DSA (Section 9.3 in <xref target="I-D.draft-ietf-openpgp-pqc"/>),</t>
        </li>
        <li>
          <t>the minimum digest size for PQ/T signatures (Section 9.4 in <xref target="I-D.draft-ietf-openpgp-pqc"/>),</t>
        </li>
        <li>
          <t>the use of symmetric encryption in SEIPD packets (Section 9.5 in <xref target="I-D.draft-ietf-openpgp-pqc"/>),</t>
        </li>
        <li>
          <t>and key generation for composite schemes (Section 9.6 in <xref target="I-D.draft-ietf-openpgp-pqc"/>).</t>
        </li>
      </ul>
      <t>When implementing or using any of the algorithms defined in this specification, the above referenced security considerations should be noted.</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-44+ECDSA-NIST-P-256</td>
            <td align="right">65 octets ECDSA public key (<xref target="tab-ecdsa-artifacts"/>), 1312 octets ML-DSA-44 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">32 octets ECDSA secret key (<xref target="tab-ecdsa-artifacts"/>), 32 octets ML-DSA-44 secret key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">64 octets ECDSA signature <xref target="tab-ecdsa-artifacts"/> , 2420 octets ML-DSA-44 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-65+ECDSA-NIST-P-384</td>
            <td align="right">97 octets ECDSA public key (<xref target="tab-ecdsa-artifacts"/>), 1952 octets ML-DSA-65 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">48 octets ECDSA secret key (<xref target="tab-ecdsa-artifacts"/>), 32 octets ML-DSA-65 secret key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">96 octets ECDSA signature <xref target="tab-ecdsa-artifacts"/> , 3309 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+ECDSA-NIST-P-384</td>
            <td align="right">97 octets ECDSA public key (<xref target="tab-ecdsa-artifacts"/>), 2592 octets ML-DSA-87 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">48 octets ECDSA secret key (<xref target="tab-ecdsa-artifacts"/>), 32 octets ML-DSA-87 secret key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">96 octets ECDSA signature <xref target="tab-ecdsa-artifacts"/> , 4627 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">ML-DSA-65+ECDSA-brainpoolP256r1</td>
            <td align="right">65 octets ECDSA public key (<xref target="tab-ecdsa-artifacts"/>), 1952 octets ML-DSA-65 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">32 octets ECDSA secret key (<xref target="tab-ecdsa-artifacts"/>), 32 octets ML-DSA-65 secret key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">64 octets ECDSA signature <xref target="tab-ecdsa-artifacts"/> , 3309 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+ECDSA-brainpoolP384r1</td>
            <td align="right">97 octets ECDSA public key (<xref target="tab-ecdsa-artifacts"/>), 2592 octets ML-DSA-87 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">48 octets ECDSA secret key (<xref target="tab-ecdsa-artifacts"/>), 32 octets ML-DSA-87 secret key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">96 octets ECDSA signature <xref target="tab-ecdsa-artifacts"/> , 4627 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">ML-KEM-512+ECDH-NIST-P-256</td>
            <td align="right">65 octets ECDH public key (<xref target="tab-ecdsa-artifacts"/>), 800 octets ML-KEM-512 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">32 octets ECDH secret key (<xref target="tab-ecdsa-artifacts"/>), 64 octets ML-KEM-512 secret key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">65 octets ECDH ciphertext, 768 octets ML-KEM-512 ciphertext, 1 octet remaining length, [1 octet algorithm ID in case of v3 PKESK,] <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-768+ECDH-NIST-P-384</td>
            <td align="right">97 octets ECDH public key (<xref target="tab-ecdsa-artifacts"/>), 1184 octets ML-KEM-768 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">48 octets ECDH secret key (<xref target="tab-ecdsa-artifacts"/>), 64 octets ML-KEM-768 secret key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">97 octets ECDH ciphertext, 1088 octets ML-KEM-768 ciphertext, 1 octet remaining length, [1 octet algorithm ID in case of v3 PKESK,] <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+ECDH-NIST-P-384</td>
            <td align="right">97 octets ECDH public key (<xref target="tab-ecdsa-artifacts"/>), 1568 octets ML-KEM-768 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">48 octets ECDH secret key (<xref target="tab-ecdsa-artifacts"/>), 64 octets ML-KEM-1024 secret key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">97 octets ECDH ciphertext, 1568 octets ML-KEM-1024 ciphertext, 1 octet remaining length, [1 octet algorithm ID in case of v3 PKESK,] <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-768+ECDH-brainpoolP256r1</td>
            <td align="right">65 octets ECDH public key (<xref target="tab-ecdsa-artifacts"/>), 1184 octets ML-KEM-768 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">32 octets ECDH secret key (<xref target="tab-ecdsa-artifacts"/>), 64 octets ML-KEM-768 secret key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">65 octets ECDH ciphertext, 1088 octets ML-KEM-768 ciphertext, 1 octet remaining length, [1 octet algorithm ID in case of v3 PKESK,] <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+ECDH-brainpoolP384r1</td>
            <td align="right">97 octets ECDH public key (<xref target="tab-ecdsa-artifacts"/>), 1568 octets ML-KEM-768 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">48 octets ECDH secret key (<xref target="tab-ecdsa-artifacts"/>), 64 octets ML-KEM-1024 secret key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">97 octets ECDH ciphertext, 1568 octets ML-KEM-1024 ciphertext, 1 octet remaining length, [1 octet algorithm ID in case of v3 PKESK,] <tt>n</tt> octets wrapped session key (<xref target="ecc-mlkem-pkesk"/>)</td>
            <td align="right">
              <xref target="ecc-mlkem"/></td>
          </tr>
        </tbody>
      </table>
      <t>IANA is asked to add the following note to this registry:</t>
      <ul empty="true">
        <li>
          <t>The field specifications enclosed in square brackets for PKESK Format represent fields that may or may not be present, depending on the PKESK version.</t>
        </li>
      </ul>
    </section>
    <section anchor="changelog">
      <name>Changelog</name>
      <t>This section gives the history of changes in the respective document versions. The order is newest first.</t>
      <section anchor="draft-ehlen-openpgp-nist-bp-comp-02">
        <name>draft-ehlen-openpgp-nist-bp-comp-02</name>
        <ul spacing="normal">
          <li>
            <t>Completed the IANA table.</t>
          </li>
          <li>
            <t>Added "Security Considerations" section.</t>
          </li>
          <li>
            <t>Alignment of various technical details to <xref target="I-D.draft-ietf-openpgp-pqc"/>.</t>
          </li>
          <li>
            <t>Various editorial alignments to <xref target="I-D.draft-ietf-openpgp-pqc"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ehlen-openpgp-nist-bp-comp-01">
        <name>draft-ehlen-openpgp-nist-bp-comp-01</name>
        <ul spacing="normal">
          <li>
            <t>Replaced the explicit description of the KEM combiner with a reference to <xref target="I-D.draft-ietf-openpgp-pqc"/>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="contributors">
      <name>Contributors</name>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9580">
          <front>
            <title>OpenPGP</title>
            <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters"/>
            <author fullname="D. Huigens" initials="D." surname="Huigens"/>
            <author fullname="J. Winter" initials="J." surname="Winter"/>
            <author fullname="Y. Niibe" initials="Y." surname="Niibe"/>
            <date month="July" 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.</t>
              <t>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.</t>
              <t>This document obsoletes RFCs 4880 ("OpenPGP Message Format"), 5581 ("The Camellia Cipher in OpenPGP"), and 6637 ("Elliptic Curve Cryptography (ECC) in OpenPGP").</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9580"/>
          <seriesInfo name="DOI" value="10.17487/RFC9580"/>
        </reference>
        <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="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="I-D.draft-ietf-openpgp-pqc">
          <front>
            <title>Post-Quantum Cryptography in OpenPGP</title>
            <author fullname="Stavros Kousidis" initials="S." surname="Kousidis">
              <organization>BSI</organization>
            </author>
            <author fullname="Johannes Roth" initials="J." surname="Roth">
              <organization>MTG AG</organization>
            </author>
            <author fullname="Falko Strenzke" initials="F." surname="Strenzke">
              <organization>MTG AG</organization>
            </author>
            <author fullname="Aron Wussler" initials="A." surname="Wussler">
              <organization>Proton AG</organization>
            </author>
            <date day="17" month="June" year="2025"/>
            <abstract>
              <t>   This document defines a post-quantum public-key algorithm extension
   for the OpenPGP protocol.  Given the generally assumed threat of a
   cryptographically relevant quantum computer, this extension provides
   a basis for long-term secure OpenPGP signatures and ciphertexts.
   Specifically, it defines composite public-key encryption based on 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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-openpgp-pqc-12"/>
        </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">
          <front>
            <title>Module-Lattice-Based Key-Encapsulation Mechanism Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2024" month="August"/>
          </front>
        </reference>
        <reference anchor="FIPS-204" target="https://doi.org/10.6028/NIST.FIPS.204">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2024" month="August"/>
          </front>
        </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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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="ABH_21" target="https://doi.org/10.1007/978-3-030-77870-5_4">
          <front>
            <title>Analysing the HPKE Standard</title>
            <author initials="J." surname="Alwen" fullname="Joel Alwen">
              <organization/>
            </author>
            <author initials="B." surname="Blanchet" fullname="Bruno Blanchet">
              <organization/>
            </author>
            <author initials="E." surname="Hauck" fullname="Eduard Hauck">
              <organization/>
            </author>
            <author initials="E." surname="Kiltz" fullname="Eike Kiltz">
              <organization/>
            </author>
            <author initials="B." surname="Lipp" fullname="Benjamin Lipp">
              <organization/>
            </author>
            <author initials="D." surname="Riepel" fullname="Doreen Riepl">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="RFC9794">
          <front>
            <title>Terminology for Post-Quantum Traditional Hybrid Schemes</title>
            <author fullname="F. Driscoll" initials="F." surname="Driscoll"/>
            <author fullname="M. Parsons" initials="M." surname="Parsons"/>
            <author fullname="B. Hale" initials="B." surname="Hale"/>
            <date month="June" year="2025"/>
            <abstract>
              <t>One aspect of the transition to post-quantum algorithms in cryptographic protocols is the development of hybrid schemes that incorporate both post-quantum and traditional asymmetric algorithms. This document defines terminology for such schemes. It is intended to be used as a reference and, hopefully, to ensure consistency and clarity across different protocols, standards, and organisations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9794"/>
          <seriesInfo name="DOI" value="10.17487/RFC9794"/>
        </reference>
      </references>
    </references>
    <?line 690?>

<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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
HRY6dho07v1sSi/ZHnHxEj4SJ/Rmi7IooR/DjF4MTm8xR3b2gqCizUrHk4B7
vM6cruenN1ejny0DHfp1dcD08Cm9ZkP1Ro/al5cNRSGIfMug+95NwDJK5MtG
Rql1bsCqYq2cqnDWlF5aLU8GCTddvqEEl0y9pVp8Qx1rDg26r5rr4jtmxCtm
fpTvdGFXSXqJeJJEIFHvTVLOTfku9MQXHJu3jU6T0OfldzqJehKtFwwliDbK
uKZ3lYwQFXoZH5ZJ4dtrTKLAaT2md73L5f9u6fJ/t8YeVamp3v60wtuebuxx
5bs8v8LfjW1tfrVp7bj/15j0Rp6Z+Xrr+pB/+BowKauw1IcxXdqzvJdOHB1+
LUidaf/Ks8r5viaKD/inoFcvH1vhpW52QU7Fq19v8Mk22k5C0eRKq32rLpSb
Law4mEvm3K6ZsdqzbkbnqsJytKlhQtZ2cpXWlLpn84w37M3m0Z/HCJ/51/Au
uxXe5GfXbd2LnayMtEm2r8pOpqDns9gJZlyZnQ727s9OdrLbmvK/PTs1v77x
U9nJLmkw1RpfmZ1gxi/KTna1hDXlf3t2an5n5ycru8+STg+k7O4jnT5F2f1H
Ot0hnSpV+/+RTv+RTpW/Zey0/CXjJen0YkVusq74tm45ruOm8lHkinB6sSIz
GfFizVjHTXUzfl3iVhbVvunFupXcQsRu0ZOpppTPZIpJpI3a7B+/qmdOViuM
Kzd6tP/xG70TRM5Ud//Kes29URsOMzlvVl/hvfIl2bQqM9lXxFvXS6/ETSXR
9MnMhBN+q8xUWlSHVaxb7S1Mvh1uuouZ6m4t/zxm2q3sr6/OTHSh+Urc9G0x
U3XpCJNvhptWlkx3GeFfRzI9jJr7liXTEjX3F5JMZRv8P5LpizDTX0ky6SSu
l126CVyTZKQ0qKrtUJnBw1brf7KVcq/Z7wW95MJOwTqJKVMnYedaZ941Zr3x
P3jHAxaYi1bt6gWqYjhZXygunJl68YRHyQQrXqy3tk/oJQ9UzQBoJCkl031q
nKnsLR7gwub04jn5hgBVu9glnMW76vD2CX6FpQvjMM1EySITaX0+BZrqvD7d
6z6a0+2tna0+VsXg0R28Zk2sNRGBcrldeHYUYM3YWkMJz5rChZpG4DLO5Avk
1fsgc+5PY7y3DRYqx9s3RZnJsqIDHOu97M6DEBYmpOyzHH2lEVbDvofYv+Py
OkFZLgVyJczltQhzu5LWqWGR1a3m+NdKQOHy5Wk4KgCprEWpxJGHN2c/YhdI
u/ewmvQE5CrhMPCQNFjYev72mA0os82OlMgR7aDZ+50lz2HwI/8yTq4iHkxo
BVsfD+NiNgLIgydrYy/K+Brsvv8PA2SEfpmuAAA=

-->

</rfc>
