<?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.11 (Ruby 3.2.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-openpgp-pqc-03" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="PQC in OpenPGP">Post-Quantum Cryptography in OpenPGP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-openpgp-pqc-03"/>
    <author initials="S." surname="Kousidis" fullname="Stavros Kousidis">
      <organization>BSI</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>stavros.kousidis@bsi.bund.de</email>
      </address>
    </author>
    <author initials="J." surname="Roth" fullname="Johannes Roth">
      <organization>MTG AG</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>johannes.roth@mtg.de</email>
      </address>
    </author>
    <author initials="F." surname="Strenzke" fullname="Falko Strenzke">
      <organization>MTG AG</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>falko.strenzke@mtg.de</email>
      </address>
    </author>
    <author initials="A." surname="Wussler" fullname="Aron Wussler">
      <organization>Proton AG</organization>
      <address>
        <postal>
          <country>Switzerland</country>
        </postal>
        <email>aron@wussler.it</email>
      </address>
    </author>
    <date year="2024" month="May" day="27"/>
    <area>sec</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 228?>

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>The OpenPGP protocol supports various traditional public-key algorithms based on the factoring or discrete logarithm problem.
As the security of algorithms based on these mathematical problems is endangered by the advent of quantum computers, there is a need to extend OpenPGP by algorithms that remain secure in the presence of quantum computers.</t>
      <t>Such cryptographic algorithms are referred to as post-quantum cryptography.
The algorithms defined in this extension were chosen for standardization by the National Institute of Standards and Technology (NIST) in mid 2022 <xref target="NISTIR-8413"/> as the result of the NIST Post-Quantum Cryptography Standardization process initiated in 2016 <xref target="NIST-PQC"/>.
Namely, these are ML-KEM <xref target="FIPS-203"/> as a Key Encapsulation Mechanism (KEM), a KEM being a modern building block for public-key encryption, and ML-DSA <xref target="FIPS-204"/> as well as SLH-DSA-SHAKE <xref target="FIPS-205"/> as signature schemes.</t>
      <t>For the two ML-* schemes, this document follows the conservative strategy to deploy post-quantum in combination with traditional schemes such that the security is retained even if all schemes but one in the combination are broken.
In contrast, the stateless hash-based signature scheme SLH-DSA-SHAKE is considered to be sufficiently well understood with respect to its security assumptions in order to be used standalone.
To this end, this document specifies the following new set: SLH-DSA-SHAKE standalone and the two ML-* as composite with ECC-based KEM and digital signature schemes.
Here, the term "composite" indicates that any data structure or algorithm pertaining to the combination of the two components appears as single data structure or algorithm from the protocol perspective.</t>
      <t>The document specifies the conventions for interoperability between compliant OpenPGP implementations that make use of this extension and the newly defined algorithms or algorithm combinations.</t>
      <section anchor="conventions-used-in-this-document">
        <name>Conventions used in this Document</name>
        <section anchor="terminology-for-multi-algorithm-schemes">
          <name>Terminology for Multi-Algorithm Schemes</name>
          <t>The terminology in this document is oriented towards the definitions in <xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/>.
Specifically, the terms "multi-algorithm", "composite" and "non-composite" are used in correspondence with the definitions therein.
The abbreviation "PQ" is used for post-quantum schemes.
To denote the combination of post-quantum and traditional schemes, the abbreviation "PQ/T" is used.
The short form "PQ(/T)" stands for PQ or PQ/T.</t>
        </section>
      </section>
      <section anchor="post-quantum-cryptography">
        <name>Post-Quantum Cryptography</name>
        <t>This section describes the individual post-quantum cryptographic schemes.
All schemes listed here are believed to provide security in the presence of a cryptographically relevant quantum computer.
However, the mathematical problems on which the two ML-* schemes and SLH-DSA-SHAKE are based, are fundamentally different, and accordingly the level of trust commonly placed in them as well as their performance characteristics vary.</t>
        <t>[Note to the reader: This specification refers to the NIST PQC draft standards FIPS 203, FIPS 204, and FIPS 205 as if they were a final specification.
This is a temporary solution until the final versions of these documents are available.
The goal is to provide a sufficiently precise specification of the algorithms already at the draft stage of this specification, so that it is possible for implementers to create interoperable implementations.
Furthermore, we want to point out that, depending on possible future changes to the draft standards by NIST, this specification may be updated as soon as corresponding information becomes available.]</t>
        <section anchor="mlkem-intro">
          <name>ML-KEM</name>
          <t>ML-KEM <xref target="FIPS-203"/> is based on the hardness of solving the learning-with-errors problem in module lattices (MLWE).
The scheme is believed to provide security against cryptanalytic attacks by classical as well as quantum computers.
This specification defines ML-KEM only in composite combination with 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 combination with EdDSA signature schemes.</t>
        </section>
        <section anchor="slh-dsa-shake">
          <name>SLH-DSA-SHAKE</name>
          <t>SLH-DSA-SHAKE <xref target="FIPS-205"/> is a stateless hash-based signature scheme.
Its security relies on the hardness of finding preimages for cryptographic hash functions.
This feature is generally considered to be a high security guarantee.
Therefore, this specification defines SLH-DSA-SHAKE as a standalone signature scheme.</t>
          <t>In deployments the performance characteristics of SLH-DSA-SHAKE should be taken into account.
We refer to <xref target="performance-considerations"/> for a discussion of the performance characteristics of this scheme.</t>
        </section>
      </section>
      <section anchor="elliptic-curve-cryptography">
        <name>Elliptic Curve Cryptography</name>
        <t>The ECDH encryption is defined here as a KEM.
Curve25519 and Curve448 are defined in <xref target="RFC7748"/> for use in a Diffie-Hellman key agreement scheme and defined in <xref target="RFC8032"/> for use in a digital signature scheme.</t>
      </section>
      <section anchor="multi-algo-schemes">
        <name>Standalone and Multi-Algorithm Schemes</name>
        <t>This section provides a categorization of the new algorithms and their combinations.</t>
        <section anchor="composite-multi-alg">
          <name>Standalone and Composite Multi-Algorithm Schemes</name>
          <t>This specification introduces new cryptographic schemes, which can be categorized as follows:</t>
          <ul spacing="normal">
            <li>
              <t>PQ/T multi-algorithm public-key encryption, namely a composite combination of ML-KEM with an ECDH KEM,</t>
            </li>
            <li>
              <t>PQ/T multi-algorithm digital signature, namely composite combinations of ML-DSA with EdDSA signature schemes,</t>
            </li>
            <li>
              <t>PQ digital signature, namely SLH-DSA-SHAKE as a standalone cryptographic algorithm.</t>
            </li>
          </ul>
          <t>For each of the composite schemes, this specification mandates that the recipient has to successfully perform the cryptographic algorithms for each of the component schemes used in a cryptographic message, in order for the message to be deciphered and considered as valid.
This means that all component signatures must be verified successfully in order to achieve a successful verification of the composite signature.
In the case of the composite public-key decryption, each of the component KEM decapsulation operations must succeed.</t>
        </section>
        <section anchor="non-composite-multi-alg">
          <name>Non-Composite Algorithm Combinations</name>
          <t>As the OpenPGP protocol <xref target="I-D.ietf-openpgp-crypto-refresh"/> allows for multiple signatures to be applied to a single message, it is also possible to realize non-composite combinations of signatures.
Furthermore, multiple OpenPGP signatures may be combined on the application layer.
These latter two cases realize non-composite combinations of signatures.
<xref target="multiple-signatures"/> specifies how implementations should handle the verification of such combinations of signatures.</t>
          <t>Furthermore, the OpenPGP protocol also allows for parallel encryption to different keys held by the same recipient.
Accordingly, if the sender makes use of this feature and sends an encrypted message with multiple PKESK packages for different encryption keys held by the same recipient, a non-composite multi-algorithm public-key encryption is realized where the recipient has to decrypt only one of the PKESK packages in order to decrypt the message.
See <xref target="no-pq-t-parallel-encryption"/> for restrictions on parallel encryption mandated by this specification.</t>
        </section>
      </section>
    </section>
    <section anchor="supported-public-key-algorithms">
      <name>Supported Public Key Algorithms</name>
      <t>This section specifies the composite ML-KEM + ECDH and ML-DSA + EdDSA schemes as well as the standalone SLH-DSA-SHAKE signature scheme.
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 (105 for testing)</td>
              <td align="left">ML-KEM-768+X25519</td>
              <td align="left">MUST</td>
              <td align="left">
                <xref target="ecc-mlkem"/></td>
            </tr>
            <tr>
              <td align="right">TBD (106 for testing)</td>
              <td align="left">ML-KEM-1024+X448</td>
              <td align="left">SHOULD</td>
              <td align="left">
                <xref target="ecc-mlkem"/></td>
            </tr>
          </tbody>
        </table>
        <t>For signatures, the following (composite) signature schemes are specified:</t>
        <table anchor="sig-alg-specs">
          <name>Signature algorithm specifications</name>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Algorithm</th>
              <th align="left">Requirement</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">TBD (107 for testing)</td>
              <td align="left">ML-DSA-65+Ed25519</td>
              <td align="left">MUST</td>
              <td align="left">
                <xref target="ecc-mldsa"/></td>
            </tr>
            <tr>
              <td align="right">TBD (108 for testing)</td>
              <td align="left">ML-DSA-87+Ed448</td>
              <td align="left">SHOULD</td>
              <td align="left">
                <xref target="ecc-mldsa"/></td>
            </tr>
            <tr>
              <td align="right">TBD</td>
              <td align="left">SLH-DSA-SHAKE-128s</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="slhdsa"/></td>
            </tr>
            <tr>
              <td align="right">TBD</td>
              <td align="left">SLH-DSA-SHAKE-128f</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="slhdsa"/></td>
            </tr>
            <tr>
              <td align="right">TBD</td>
              <td align="left">SLH-DSA-SHAKE-256s</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="slhdsa"/></td>
            </tr>
          </tbody>
        </table>
        <section anchor="experimental-codepoints-for-interop-testing">
          <name>Experimental Codepoints for Interop Testing</name>
          <t>[ Note: this section to be removed before publication ]</t>
          <t>Algorithms indicated as MAY are not assigned a codepoint in the current state of the draft in order to leave enough private/experimental code points available for other drafts.</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 an a priori non-separable manner.
This is achieved via KEM combination, i.e. both key encapsulations/decapsulations are performed in parallel, and the resulting key shares are fed into a key combiner to produce a single shared secret for message encryption.</t>
      </section>
      <section anchor="no-pq-t-parallel-encryption">
        <name>Parallel Public-Key Encryption</name>
        <t>As explained in <xref target="non-composite-multi-alg"/>, the OpenPGP protocol inherently supports parallel encryption to different keys of the same recipient.
Implementations MUST NOT encrypt a message with a purely traditional public-key encryption key of a recipient if it is encrypted with a PQ/T key of the same recipient.</t>
      </section>
      <section anchor="composite-signatures">
        <name>Composite Signatures</name>
        <t>The ML-DSA + EdDSA signature consists of independent ML-DSA and EdDSA signatures, and an implementation MUST successfully validate both signatures to state that the ML-DSA + EdDSA signature is valid.</t>
      </section>
      <section anchor="multiple-signatures">
        <name>Multiple Signatures</name>
        <t>The OpenPGP message format allows multiple signatures of a message, i.e. the attachment of multiple signature packets.</t>
        <t>An implementation MAY sign a message with a traditional key and a PQ(/T) key from the same sender.
This ensures backwards compatibility due to <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.5, since a legacy implementation without PQ(/T) support can fall back on the traditional signature.</t>
        <t>Newer implementations with PQ(/T) support MAY ignore the traditional signature(s) during validation.</t>
        <t>Implementations SHOULD consider the message correctly signed if at least one of the non-ignored signatures validates successfully.</t>
        <t>[Note to the reader: The last requirement, that one valid signature is sufficient to identify a message as correctly signed, is an interpretation of <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.5.]</t>
      </section>
      <section anchor="ecc-requirements">
        <name>ECC requirements</name>
        <t>Even though the zero point, also called the point at infinity, may occur as a result of arithmetic operations on points of an elliptic curve, it MUST NOT appear in any ECC data structure defined in this document.</t>
        <t>Furthermore, when performing the explicitly listed operations in <xref target="x25519-kem"/> or <xref target="x448-kem"/> it is REQUIRED to follow the specification and security advisory mandated from the respective elliptic curve specification.</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 KEMs</name>
          <t>In this section we define the encryption, decryption, and data formats for the ECDH component of the composite algorithms.</t>
          <t><xref target="tab-ecdh-cfrg-artifacts"/> describes the ECDH-KEM parameters and artifact lengths.
The artifacts in <xref target="tab-ecdh-cfrg-artifacts"/> follow the encodings described in <xref target="RFC7748"/>.</t>
          <table anchor="tab-ecdh-cfrg-artifacts">
            <name>Montgomery curves parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">X25519</th>
                <th align="left">X448</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">TBD (105 for testing)</td>
                <td align="left">TBD (106 for testing)</td>
              </tr>
              <tr>
                <td align="left">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">56 octets</td>
              </tr>
              <tr>
                <td align="left">ECDH-KEM</td>
                <td align="left">x25519Kem (<xref target="x25519-kem"/>)</td>
                <td align="left">x448Kem (<xref target="x448-kem"/>)</td>
              </tr>
              <tr>
                <td align="left">ECDH public key</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">ECDH secret key</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">ECDH ephemeral</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">ECDH share</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">Key share</td>
                <td align="left">32 octets</td>
                <td align="left">64 octets</td>
              </tr>
              <tr>
                <td align="left">Hash</td>
                <td align="left">SHA3-256</td>
                <td align="left">SHA3-512</td>
              </tr>
            </tbody>
          </table>
          <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(ecdhSecretKey, ecdhCipherText, ecdhPublicKey)
]]></artwork>
          <t>To instantiate <tt>ECDH-KEM</tt>, one must select a parameter set from <xref target="tab-ecdh-cfrg-artifacts"/>.</t>
          <section anchor="x25519-kem">
            <name>X25519-KEM</name>
            <t>The encapsulation and decapsulation operations of <tt>x25519kem</tt> are described using the function <tt>X25519()</tt> and encodings defined in <xref target="RFC7748"/>.
The <tt>ecdhSecretKey</tt> is denoted as <tt>r</tt>, the <tt>ecdhPublicKey</tt> as <tt>R</tt>, they are subject to the equation <tt>R = X25519(r, U(P))</tt>.
Here, <tt>U(P)</tt> denotes the u-coordinate of the base point of Curve25519.</t>
            <t>The operation <tt>x25519Kem.Encaps()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>
                <t>Generate an ephemeral key pair {<tt>v</tt>, <tt>V</tt>} via <tt>V = X25519(v,U(P))</tt> where <tt>v</tt> is a randomly generated octet string with a length of 32 octets</t>
              </li>
              <li>
                <t>Compute the shared coordinate <tt>X = X25519(v, R)</tt> where <tt>R</tt> is the recipient's public key <tt>ecdhPublicKey</tt></t>
              </li>
              <li>
                <t>Set the output <tt>ecdhCipherText</tt> to <tt>V</tt></t>
              </li>
              <li>
                <t>Set the output <tt>ecdhKeyShare</tt> to <tt>SHA3-256(X || ecdhCipherText || ecdhPublicKey)</tt></t>
              </li>
            </ol>
            <t>The operation <tt>x25519Kem.Decaps()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>
                <t>Compute the shared coordinate <tt>X = X25519(r, V)</tt>, where <tt>r</tt> is the <tt>ecdhSecretKey</tt> and <tt>V</tt> is the <tt>ecdhCipherText</tt></t>
              </li>
              <li>
                <t>Set the output <tt>ecdhKeyShare</tt> to <tt>SHA3-256(X || ecdhCipherText || ecdhPublicKey)</tt></t>
              </li>
            </ol>
          </section>
          <section anchor="x448-kem">
            <name>X448-KEM</name>
            <t>The encapsulation and decapsulation operations of <tt>x448kem</tt> are described using the function <tt>X448()</tt> and encodings defined in <xref target="RFC7748"/>.
The <tt>ecdhSecretKey</tt> is denoted as <tt>r</tt>, the <tt>ecdhPublicKey</tt> as <tt>R</tt>, they are subject to the equation <tt>R = X25519(r, U(P))</tt>.
Here, <tt>U(P)</tt> denotes the u-coordinate of the base point of Curve448.</t>
            <t>The operation <tt>x448.Encaps()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>
                <t>Generate an ephemeral key pair {<tt>v</tt>, <tt>V</tt>} via <tt>V = X448(v,U(P))</tt> where <tt>v</tt> is a randomly generated octet string with a length of 56 octets</t>
              </li>
              <li>
                <t>Compute the shared coordinate <tt>X = X448(v, R)</tt> where <tt>R</tt> is the recipient's public key <tt>ecdhPublicKey</tt></t>
              </li>
              <li>
                <t>Set the output <tt>ecdhCipherText</tt> to <tt>V</tt></t>
              </li>
              <li>
                <t>Set the output <tt>ecdhKeyShare</tt> to <tt>SHA3-512(X || ecdhCipherText || ecdhPublicKey)</tt></t>
              </li>
            </ol>
            <t>The operation <tt>x448Kem.Decaps()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>
                <t>Compute the shared coordinate <tt>X = X448(r, V)</tt>, where <tt>r</tt> is the <tt>ecdhSecretKey</tt> and <tt>V</tt> is the <tt>ecdhCipherText</tt></t>
              </li>
              <li>
                <t>Set the output <tt>ecdhKeyShare</tt> to <tt>SHA3-512(X || ecdhCipherText || ecdhPublicKey)</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 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 (105 for testing)</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 (106 for testing)</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 + 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</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">TBD (105 for testing)</td>
              <td align="left">ML-KEM-768</td>
              <td align="left">x25519Kem</td>
            </tr>
            <tr>
              <td align="right">TBD (106 for testing)</td>
              <td align="left">ML-KEM-1024</td>
              <td align="left">x448Kem</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, namely X25519-KEM or X448-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 and the protocol binding information.</t>
          </li>
          <li>
            <t>The session key for content encryption is then wrapped as described in <xref target="RFC3394"/> using AES-256 as algorithm and the KEK as key.</t>
          </li>
          <li>
            <t>The PKESK package's algorithm-specific parts are made up of the ML-KEM ciphertext, the ECDH ciphertext, and the wrapped session key.</t>
          </li>
        </ul>
        <section anchor="kem-fixed-info">
          <name>Fixed information</name>
          <t>For the composite KEM schemes defined in <xref target="kem-alg-specs"/> the following procedure, justified in <xref target="sec-fixed-info"/>, MUST be used to derive a string to use as binding between the KEK and the communication parties.</t>
          <artwork><![CDATA[
//   Input:
//   algID - the algorithm ID encoded as octet
//
//   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 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>
          <artwork><![CDATA[
//   multiKeyCombine(ecdhKeyShare, ecdhCipherText, mlkemKeyShare,
//                   mlkemCipherText, 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
//   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>Note that the values <tt>ecdhKeyShare</tt> defined in <xref target="ecc-kem"/> and <tt>mlkemKeyShare</tt> defined in <xref target="mlkem-ops"/> already use the relative ciphertext in the derivation.
The ciphertext and public keys are by design included again in the key combiner to provide a robust security proof.</t>
          <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 ECDH 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 ECDH this is done following the relative specification in <xref target="RFC7748"/>, and encoding the outputs as fixed-length octet strings in the format specified in <xref target="tab-ecdh-cfrg-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></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>fixedInfo</tt> as specified in <xref target="kem-fixed-info"/></t>
            </li>
            <li>
              <t>Compute <tt>KEK := multiKeyCombine(ecdhKeyShare, ecdhCipherText, mlkemKeyShare, mlkemCipherText, fixedInfo, oBits=256)</tt> as defined in <xref target="kem-key-combiner"/></t>
            </li>
            <li>
              <t>Compute <tt>C := AESKeyWrap(KEK, sessionKey)</tt> with AES-256 as per <xref target="RFC3394"/> that includes a 64 bit integrity check</t>
            </li>
            <li>
              <t>Output the algorithm specific part of the PKESK as <tt>ecdhCipherText || mlkemCipherText (|| symAlgId) || len(C) || C</tt>, where both <tt>symAlgId</tt> and <tt>len(C)</tt> are single octet fields and <tt>symAlgId</tt> denotes the symmetric algorithm ID used and is present only for a v3 PKESK</t>
            </li>
          </ol>
        </section>
        <section anchor="decryption-procedure">
          <name>Decryption procedure</name>
          <t>The procedure to perform public-key decryption with 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 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>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 (|| symAlgId) || len(C) || C</tt> as specified in <xref target="ecc-mlkem-pkesk"/>, where <tt>symAlgId</tt> is present only in the case of a v3 PKESK.</t>
            </li>
            <li>
              <t>Compute <tt>(ecdhKeyShare) := ECDH-KEM.Decaps(ecdhCipherText, ecdhSecretKey, ecdhPublicKey)</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(ecdhKeyShare, ecdhCipherText, mlkemKeyShare, mlkemCipherText, fixedInfo, oBits=256)</tt> as defined in <xref target="kem-key-combiner"/></t>
            </li>
            <li>
              <t>Compute <tt>sessionKey := AESKeyUnwrap(KEK, C)</tt>  with AES-256 as per <xref target="RFC3394"/>, aborting if the 64 bit integrity check fails</t>
            </li>
            <li>
              <t>Output <tt>sessionKey</tt></t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="packet-specifications">
        <name>Packet specifications</name>
        <section anchor="ecc-mlkem-pkesk">
          <name>Public-Key Encrypted Session Key Packets (Tag 1)</name>
          <t>The algorithm-specific fields consists of the output of the encryption procedure described in <xref target="ecc-mlkem-encryption"/>:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string representing an 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="I-D.ietf-openpgp-crypto-refresh"/>, for the ML-KEM composite schemes, in the case of a v3 PKESK packet, the symmetric algorithm identifier is not encrypted.
Instead, it is placed in plaintext after the <tt>mlkemCipherText</tt> and before the length octet preceding the wrapped session key.
In the case of v3 PKESK packets for ML-KEM composite schemes, the symmetric algorithm used MUST be AES-128, AES-192 or AES-256 (algorithm ID 7, 8 or 9).</t>
          <t>In the case of a v3 PKESK, a receiving implementation MUST check if the length of the unwrapped symmetric key matches the symmetric algorithm identifier, and abort if this is not the case.</t>
          <t>Implementations MUST NOT use Symmetrically Encrypted Data packets (tag 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 algorithm-specific public key is this series of values:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string representing an EC point public key, in the point format associated with the curve specified in <xref target="ecc-kem"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string containing the ML-KEM public key, whose length depends on the algorithm ID as specified in <xref target="tab-mlkem-artifacts"/>.</t>
            </li>
          </ul>
          <t>The algorithm-specific secret key is these two values:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string of the encoded secret scalar, whose encoding and length depend on the algorithm ID as specified in <xref target="ecc-kem"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string containing the ML-KEM secret key, whose length depends on the algorithm ID as specified in <xref target="tab-mlkem-artifacts"/>.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="composite-signature-schemes">
      <name>Composite Signature Schemes</name>
      <section anchor="building-blocks-1">
        <name>Building blocks</name>
        <section anchor="eddsa-signature">
          <name>EdDSA-Based signatures</name>
          <t>To sign and verify with EdDSA the following operations are defined:</t>
          <artwork><![CDATA[
(eddsaSignature) <- EdDSA.Sign(eddsaSecretKey, dataDigest)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(verified) <- EdDSA.Verify(eddsaPublicKey, eddsaSignature, dataDigest)
]]></artwork>
          <t>The public and secret key, as well as the signature MUST be encoded according to <xref target="RFC8032"/> as fixed-length octet strings.
The following table describes the EdDSA parameters and artifact lengths:</t>
          <table anchor="tab-eddsa-artifacts">
            <name>EdDSA parameters and artifact lengths in octets</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Curve</th>
                <th align="left">Field size</th>
                <th align="left">Public key</th>
                <th align="left">Secret key</th>
                <th align="left">Signature</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">TBD (107 for testing)</td>
                <td align="left">Ed25519</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">64</td>
              </tr>
              <tr>
                <td align="right">TBD (108 for testing)</td>
                <td align="left">Ed448</td>
                <td align="left">57</td>
                <td align="left">57</td>
                <td align="left">57</td>
                <td align="left">114</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="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 (107 for testing)</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 (108 for testing)</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 + EdDSA 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 + EdDSA algorithm MUST also support the matching hash algorithm.</t>
          <table anchor="tab-mldsa-hash">
            <name>Binding between ML-DSA and signature data digest</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Hash function</th>
                <th align="left">Hash function ID reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">TBD (107 for testing)</td>
                <td align="left">SHA3-256</td>
                <td align="left">12</td>
              </tr>
              <tr>
                <td align="right">TBD (108 for testing)</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 EdDSA 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 EdDSA this is done following the relative specification in <xref target="RFC7748"/>, and encoding the artifacts as specified in <xref target="eddsa-signature"/> as fixed-length octet strings.</t>
        </section>
        <section anchor="signature-generation">
          <name>Signature Generation</name>
          <t>To sign a message <tt>M</tt> with ML-DSA + EdDSA the following sequence of operations has to be performed:</t>
          <ol spacing="normal" type="1"><li>
              <t>Generate <tt>dataDigest</tt> according to <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.4</t>
            </li>
            <li>
              <t>Create the EdDSA signature over <tt>dataDigest</tt> with <tt>EdDSA.Sign()</tt> from <xref target="eddsa-signature"/></t>
            </li>
            <li>
              <t>Create the ML-DSA signature over <tt>dataDigest</tt> with <tt>ML-DSA.Sign()</tt> from <xref target="mldsa-signature"/></t>
            </li>
            <li>
              <t>Encode the EdDSA and ML-DSA signatures according to the packet structure given in <xref target="ecc-mldsa-sig-packet"/>.</t>
            </li>
          </ol>
        </section>
        <section anchor="signature-verification">
          <name>Signature Verification</name>
          <t>To verify an ML-DSA + EdDSA signature the following sequence of operations has to be performed:</t>
          <ol spacing="normal" type="1"><li>
              <t>Verify the EdDSA signature with <tt>EdDSA.Verify()</tt> from <xref target="eddsa-signature"/></t>
            </li>
            <li>
              <t>Verify the ML-DSA signature with <tt>ML-DSA.Verify()</tt> from <xref target="mldsa-signature"/></t>
            </li>
          </ol>
          <t>As specified in <xref target="composite-signatures"/> an implementation MUST validate both signatures, i.e. EdDSA and ML-DSA, successfully to state that a composite ML-DSA + EdDSA 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 + EdDSA schemes MUST be used only with v6 signatures, as defined in <xref target="I-D.ietf-openpgp-crypto-refresh"/>.</t>
          <t>The algorithm-specific v6 signature parameters for ML-DSA + EdDSA signatures consists of:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string representing the EdDSA signature, whose length depends on the algorithm ID as specified in <xref target="tab-eddsa-artifacts"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string of the ML-DSA signature value, whose length depends on the algorithm ID as specified in <xref target="tab-mldsa-artifacts"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="key-material-packets">
          <name>Key Material Packets</name>
          <t>The composite ML-DSA + EdDSA schemes MUST be used only with v6 keys, as defined in <xref target="I-D.ietf-openpgp-crypto-refresh"/>.</t>
          <t>The algorithm-specific public key for ML-DSA + EdDSA keys is this series of values:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string representing the EdDSA public key, whose length depends on the algorithm ID as specified in <xref target="tab-eddsa-artifacts"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string containing the ML-DSA public key, whose length depends on the algorithm ID as specified in <xref target="tab-mldsa-artifacts"/>.</t>
            </li>
          </ul>
          <t>The algorithm-specific secret key for ML-DSA + EdDSA keys is this series of values:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string representing the EdDSA secret key, whose length depends on the algorithm ID as specified in <xref target="tab-eddsa-artifacts"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string containing the ML-DSA secret key, whose length depends on the algorithm ID as specified in <xref target="tab-mldsa-artifacts"/>.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="slh-dsa-shake-1">
      <name>SLH-DSA-SHAKE</name>
      <section anchor="slhdsa">
        <name>The SLH-DSA-SHAKE Algorithms</name>
        <t>The following table lists the group of algorithm code points for the SLH-DSA-SHAKE signature scheme and the corresponding artifact lengths.
This group of algorithms is henceforth referred to as "SLH-DSA-SHAKE code points".</t>
        <table anchor="slhdsa-artifact-lengths">
          <name>SLH-DSA-SHAKE algorithm code points and the corresponding artifact lengths in octets.</name>
          <thead>
            <tr>
              <th align="right">Algorithm ID reference</th>
              <th align="left">SLH-DSA-SHAKE public key</th>
              <th align="left">SLH-DSA-SHAKE secret key</th>
              <th align="left">SLH-DSA-SHAKE signature</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">TBD (SLH-DSA-SHAKE-128s)</td>
              <td align="left">32</td>
              <td align="left">64</td>
              <td align="left">7856</td>
            </tr>
            <tr>
              <td align="right">TBD (SLH-DSA-SHAKE-128f)</td>
              <td align="left">32</td>
              <td align="left">64</td>
              <td align="left">17088</td>
            </tr>
            <tr>
              <td align="right">TBD (SLH-DSA-SHAKE-256s)</td>
              <td align="left">64</td>
              <td align="left">128</td>
              <td align="left">29792</td>
            </tr>
          </tbody>
        </table>
        <section anchor="slhdsa-sig-data-digest">
          <name>Signature Data Digest</name>
          <t>Signature data (i.e. the data to be signed) is digested prior to signing operations, see <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.4.
SLH-DSA-SHAKE signatures MUST use the associated hash algorithm as specified in <xref target="tab-slhdsa-hash"/> for the signature data digest.
Signatures using other hash algorithms MUST be considered invalid.</t>
          <t>An implementation supporting a specific SLH-DSA-SHAKE algorithm code point MUST also support the matching hash algorithm.</t>
          <table anchor="tab-slhdsa-hash">
            <name>Binding between SLH-DSA-SHAKE algorithm code points and signature data hash algorithms</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 (SLH-DSA-SHAKE-128s)</td>
                <td align="left">SHA3-256</td>
                <td align="left">12</td>
              </tr>
              <tr>
                <td align="right">TBD (SLH-DSA-SHAKE-128f)</td>
                <td align="left">SHA3-256</td>
                <td align="left">12</td>
              </tr>
              <tr>
                <td align="right">TBD (SLH-DSA-SHAKE-256s)</td>
                <td align="left">SHA3-512</td>
                <td align="left">14</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="key-generation">
          <name>Key generation</name>
          <t>SLH-DSA-SHAKE key generation is performed via the algorithm <tt>SLH-DSA.KeyGen</tt> as specified in <xref target="FIPS-205"/>, and the artifacts are encoded as fixed-length octet strings as defined in <xref target="slhdsa"/>.</t>
        </section>
        <section anchor="signature-generation-1">
          <name>Signature Generation</name>
          <t>SLH-DSA-SHAKE signature generation is performed via the algorithm <tt>SLH-DSA.Sign</tt> as specified in <xref target="FIPS-205"/>.
The variable <tt>opt_rand</tt> is set to <tt>PK.seed</tt>.
See also <xref target="slhdsa-sec-cons"/>.</t>
        </section>
        <section anchor="signature-verification-1">
          <name>Signature Verification</name>
          <t>SLH-DSA-SHAKE signature verification is performed via the algorithm <tt>SLH-DSA.Verify</tt> as specified in <xref target="FIPS-205"/>.</t>
        </section>
      </section>
      <section anchor="packet-specifications-2">
        <name>Packet specifications</name>
        <section anchor="signature-packet-tag-2">
          <name>Signature Packet (Tag 2)</name>
          <t>The SLH-DSA-SHAKE algorithms MUST be used only with v6 signatures, as defined in <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.3.</t>
          <t>The algorithm-specific part of a signature packet for an SLH-DSA-SHAKE algorithm code point consists of:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string of the SLH-DSA-SHAKE signature value, whose length depends on the algorithm ID in the format specified in <xref target="slhdsa-artifact-lengths"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="key-material-packets-1">
          <name>Key Material Packets</name>
          <t>The SLH-DSA-SHAKE algorithms code points MUST be used only with v6 keys, as defined in <xref target="I-D.ietf-openpgp-crypto-refresh"/>.</t>
          <t>The algorithm-specific part of the public key consists of:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string containing the SLH-DSA-SHAKE public key, whose length depends on the algorithm ID as specified in <xref target="slhdsa-artifact-lengths"/>.</t>
            </li>
          </ul>
          <t>The algorithm-specific part of the secret key consists of:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string containing the SLH-DSA-SHAKE secret key, whose length depends on the algorithm ID as specified in <xref target="slhdsa-artifact-lengths"/>.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="notes-on-algorithms">
      <name>Notes on Algorithms</name>
      <section anchor="symmetric-algorithms-for-seipd-packets">
        <name>Symmetric Algorithms for SEIPD Packets</name>
        <t>Implementations MUST implement <tt>AES-256</tt>.
An implementation SHOULD use <tt>AES-256</tt> in the case of a v1 SEIPD packet, or <tt>AES-256</tt> with any available AEAD mode in the case of a v2 SEIPD packet, if all recipients indicate support for it (explicitly or implicitly).</t>
        <t>A v4 or v6 certificate that contains a PQ(/T) key SHOULD include <tt>AES-256</tt> in the "Preferred Symmetric Ciphers for v1 SEIPD" subpacket.
A v6 certificate that contains a PQ(/T) key SHOULD include the pair <tt>AES-256</tt> with <tt>OCB</tt> in the "Preferred AEAD Ciphersuites" subpacket.</t>
        <t>If <tt>AES-256</tt> is not explicitly in the list of the "Preferred Symmetric Ciphers for v1 SEIPD" subpacket, and if the certificate contains a PQ/T key, it is implicitly at the end of the list.
This is justified since <tt>AES-256</tt> is mandatory to implement.
If <tt>AES-128</tt> is also implicitly added to the list, it is added after <tt>AES-256</tt>.</t>
        <t>If the pair <tt>AES-256</tt> with <tt>OCB</tt> is not explicitly in the list of the "Preferred AEAD Ciphersuites" subpacket, and if the certificate contains a PQ/T key, it is implicitly at the end of the list.
This is justified since <tt>AES-256</tt> and <tt>OCB</tt> are mandatory to implement.
If the pair <tt>AES-128</tt> with <tt>OCB</tt> is also implicitly added to the list, it is added after the pair <tt>AES-256</tt> with <tt>OCB</tt>.</t>
      </section>
      <section anchor="hash-algorithms-for-key-binding-signatures">
        <name>Hash Algorithms for Key Binding Signatures</name>
        <t>Subkey binding signatures over algorithms described in this document and primary key binding signatures made by algorithms described in this document MUST NOT be made with <tt>MD5</tt>, <tt>SHA-1</tt>, or <tt>RIPEMD-160</tt>.
A receiving implementation MUST treat such a signature as invalid.</t>
      </section>
    </section>
    <section anchor="migration-considerations">
      <name>Migration Considerations</name>
      <t>The post-quantum KEM algorithms defined in <xref target="kem-alg-specs"/> and the signature algorithms defined in <xref target="sig-alg-specs"/> are a set of new public key algorithms that extend the algorithm selection of <xref target="I-D.ietf-openpgp-crypto-refresh"/>.
During the transition period, the post-quantum algorithms will not be supported by all clients.
Therefore various migration considerations must be taken into account, in particular backwards compatibility to existing implementations that have not yet been updated to support the post-quantum algorithms.</t>
      <section anchor="key-preference">
        <name>Key preference</name>
        <t>Implementations SHOULD prefer PQ(/T) keys when multiple options are available.</t>
        <t>For instance, if encrypting for a recipient for which both a valid PQ/T and a valid ECC certificate are available, the implementation SHOULD choose the PQ/T certificate.
In case a certificate has both a PQ/T and an ECC encryption-capable valid subkey, the PQ/T subkey SHOULD be preferred.</t>
        <t>An implementation MAY sign with both a PQ(/T) and an ECC key using multiple signatures over the same data as described in <xref target="multiple-signatures"/>.
Signing only with PQ(/T) key material is not backwards compatible.</t>
        <t>Note that the confidentiality of a message is not post-quantum secure when encrypting to multiple recipients if at least one recipient does not support PQ/T encryption schemes.
An implementation SHOULD NOT abort the encryption process in this case to allow for a smooth transition to post-quantum cryptography.</t>
      </section>
      <section anchor="key-generation-strategies">
        <name>Key generation strategies</name>
        <t>It is RECOMMENDED to generate fresh secrets when generating PQ(/T) keys.
Note that reusing key material from existing ECC keys in PQ(/T) keys does not provide backwards compatibility.</t>
        <t>An OpenPGP certificate is composed of a certification-capable primary key and one or more subkeys for signature, encryption, and authentication.
Two migration strategies are recommended:</t>
        <ol spacing="normal" type="1"><li>
            <t>Generate two independent certificates, one for PQ(/T)-capable implementations, and one for legacy implementations.
Implementations not understanding PQ(/T) certificates can use the legacy certificate, while PQ(/T)-capable implementations will prefer the newer certificate.
This allows having an older v4 or v6 certificate for compatibility and a v6 PQ(/T) certificate, at a greater complexity in key distribution.</t>
          </li>
          <li>
            <t>Attach PQ(/T) encryption subkeys to an existing traditional OpenPGP certificate.
In the case of a v6 certificate, also PQ(/T) signature keys may be attached.
Implementations understanding PQ(/T) will be able to parse and use the subkeys, while PQ(/T)-incapable implementations can gracefully ignore them.
This simplifies key distribution, as only one certificate needs to be communicated and verified, but leaves the primary key vulnerable to quantum computer attacks.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="security-aspects-of-composite-signatures">
        <name>Security Aspects of Composite Signatures</name>
        <t>When multiple signatures are applied to a message, the question of the protocol's resistance against signature stripping attacks naturally arises.
In a signature stripping attack, an adversary removes one or more of the transmitted signatures such that only a subset of the signatures originally applied by the sender remain in the message that reaches the recipient.
This amounts to a downgrade attack that potentially reduces the value of the signature.
It should be noted that the composite signature schemes specified in this draft are not subject to a signature stripping vulnerability.
This is due to the fact that in any OpenPGP signature, the hashed meta data includes the signature algorithm ID, as specified in <xref target="I-D.ietf-openpgp-crypto-refresh"/>, Section 5.2.4.
As a consequence, a component signature taken out of the context of a specific composite algorithm is not a valid signature for any message.</t>
        <t>Furthermore, it is also not possible to craft a new signature for a message that was signed twice with a composite algorithm by interchanging (i.e., remixing) the component signatures, which would classify as a weak existential forgery.
This is due to the fact that each v6 signatures also includes a random salt at the start of the hashed meta data, as also specified in the aforementioned reference.</t>
      </section>
      <section anchor="hashing-in-ecdh-kem">
        <name>Hashing in ECDH-KEM</name>
        <t>Our construction of the ECDH-KEMs, in particular the inclusion of <tt>ecdhCipherText</tt> in the final hashing step in encapsulation and decapsulation that produces the <tt>ecdhKeyShare</tt>, is standard and known as hashed ElGamal key encapsulation, a hashed variant of ElGamal encryption.
It ensures IND-CCA2 security in the random oracle model under some Diffie-Hellman intractability assumptions <xref target="CS03"/>.
The additional inclusion of <tt>ecdhPublicKey</tt> follows the security advice in Section 6.1 of <xref target="RFC7748"/>.</t>
      </section>
      <section anchor="sec-key-combiner">
        <name>Key combiner</name>
        <t>For the key combination in <xref target="kem-key-combiner"/> this specification limits itself to the use of SHA3-256.
The sponge construction used by SHA3-256 was proven to be indifferentiable from a random oracle <xref target="BDPA08"/>.
This means, that in contrast to SHA2, which uses a Merkle-Damgard construction, no HMAC-based construction is required for key combination.
It is therefore sufficient to simply process the concatenation of any number of key shares with a domain separation when using a sponge-based construction like SHA3-256.</t>
        <t>More precisely, for a given capacity <tt>c</tt> the indifferentiability proof shows that assuming there are no weaknesses found in the Keccak permutation, an attacker has to make an expected number of <tt>2^(c/2)</tt> calls to the permutation to tell SHA3-256 from a random oracle.
For a random oracle, a difference in only a single bit gives an unrelated, uniformly random output.
Hence, to be able to distinguish a key <tt>K</tt>, derived from shared keys <tt>K1</tt> and <tt>K2</tt> (with ciphertexts <tt>C1</tt> and <tt>C2</tt> and public keys <tt>P1</tt> and <tt>P2</tt>) as</t>
        <artwork><![CDATA[
K = SHA3-256(counter || K1 || C1 || P1 || K2 || C2 || P2 || fixedInfo)
]]></artwork>
        <t>from a random bit string, an adversary has to know (or correctly guess) both key shares <tt>K1</tt> and <tt>K2</tt>, entirely.</t>
        <t>The proposed construction in <xref target="kem-key-combiner"/> preserves IND-CCA2 of any of its ingredient KEMs, i.e. the newly formed combined KEM is IND-CCA2 secure as long as at least one of the ingredient KEMs is.
Indeed, the above stated indifferentiability from a random oracle qualifies Keccak as a split-key pseudorandom function as defined in <xref target="GHP18"/>.
That is, Keccak behaves like a random function if at least one input shared secret is picked uniformly at random.
Our construction can thus be seen as an instantiation of the IND-CCA2 preserving Example 3 in Figure 1 of <xref target="GHP18"/>, up to some reordering of input shared secrets and ciphertexts.
In the random oracle setting, the reordering does not influence the arguments in <xref target="GHP18"/>.</t>
      </section>
      <section anchor="sec-fixed-info">
        <name>Domain separation and binding</name>
        <t>The <tt>domSeparation</tt> information defined in <xref target="kem-fixed-info"/> provides the domain separation for the key combiner construction.
This ensures that the input keying material is used to generate a KEK for a specific purpose or context.</t>
        <t>The <tt>algID</tt> defined in <xref target="kem-fixed-info"/> binds the derived KEK to the chosen algorithm and communication parties.
The algorithm ID identifies unequivocally the algorithm, the parameters for its instantiation, and the length of all artifacts, including the derived key.</t>
        <t>This is in line with the Recommendation for ECC in section 5.5 of <xref target="SP800-56A"/>.
Other fields included in the recommendation are not relevant for the OpenPGP protocol, since the sender is not required to have a key of their own, there are no pre-shared secrets, and all the other parameters are unequivocally defined by the algorithm ID.</t>
      </section>
      <section anchor="slhdsa-sec-cons">
        <name>SLH-DSA-SHAKE Message Randomizer</name>
        <t>The specification of SLH-DSA-SHAKE <xref target="FIPS-205"/> prescribes an optional non-deterministic message randomizer.
This is not used in this specification, as OpenPGP v6 signatures already provide a salted signature data digest of the appropriate size.</t>
      </section>
      <section anchor="binding-hashes-in-signatures-with-signature-algorithms">
        <name>Binding hashes in signatures with signature algorithms</name>
        <t>In order not to extend the attack surface, we bind the hash algorithm used for signature data digestion to the hash algorithm used internally by the signature algorithm.</t>
        <t>ML-DSA internally uses a SHAKE256 digest, therefore we require SHA3 in the ML-DSA + EdDSA signature packet, see <xref target="mldsa-sig-data-digest"/>.
Note that we bind a NIST security category 2 hash function to a signature algorithm that falls into NIST security category 3.
This does not constitute a security bottleneck: because of the unpredictable random salt that is prepended to the digested data in v6 signatures, the hardness assumption is not collision resistance but second-preimage resistance.</t>
        <t>In the case of SLH-DSA-SHAKE the internal hash algorithm varies based on the algorithm ID, see <xref target="slhdsa-sig-data-digest"/>.</t>
      </section>
      <section anchor="symmetric-algorithms-for-seipd-packets-1">
        <name>Symmetric Algorithms for SEIPD Packets</name>
        <t>This specification mandates support for <tt>AES-256</tt> for two reasons.
First, <tt>AES-KeyWrap</tt> with <tt>AES-256</tt> is already part of the composite KEM construction.
Second, some of the PQ(/T) algorithms target the security level of <tt>AES-256</tt>.</t>
        <t>For the same reasons, this specification further recommends the use of <tt>AES-256</tt> if it is supported by all recipients, regardless of what the implementation would otherwise choose based on the recipients' preferences.
This recommendation should be understood as a clear and simple rule for the selection of <tt>AES-256</tt> for encryption.
Implementations may also make more nuanced decisions.</t>
      </section>
    </section>
    <section anchor="additional-considerations">
      <name>Additional considerations</name>
      <section anchor="performance-considerations">
        <name>Performance Considerations for SLH-DSA-SHAKE</name>
        <t>This specification introduces both ML-DSA + EdDSA as well as SLH-DSA-SHAKE as PQ(/T) signature schemes.</t>
        <t>Generally, it can be said that ML-DSA + EdDSA provides a performance in terms of execution time requirements that is close to that of traditional ECC signature schemes.
Regarding the size of signatures and public keys, though, ML-DSA has far greater requirements than traditional schemes like EC-based or even RSA signature schemes.</t>
        <t>Implementers may want to offer SLH-DSA-SHAKE for applications where the weaker security assumptions of a hash-based signature scheme are required – namely only the 2nd preimage resistance of a hash function – and thus a potentially higher degree of trust in the long-term security of signatures is achieved.
However, SLH-DSA-SHAKE has performance characteristics in terms of execution time of the signature generation as well as space requirements for the signature that are even greater than those of ML-DSA + EdDSA signature schemes.</t>
        <t>Pertaining to the execution time, the particularly costly operation in SLH-DSA-SHAKE is the signature generation.
Depending on the parameter set, it can range from approximately the one hundred fold to more than the two thousand fold of that of ML-DSA-87.
These number are based on the performance measurements published in the NIST submissions for SLH-DSA-SHAKE and ML-DSA.
In order to achieve fast signature generation times, the algorithm SLH-DSA-SHAKE-128f ("f" standing for "fast") should be chosen.
This comes at the expense of a larger signature size.
This choice can be relevant in applications where mass signing occurs or a small latency is required.</t>
        <t>In order to minimize the space requirements of an SLH-DSA-SHAKE signature, an algorithm ID with the name ending in "s" for "small" should be chosen.
This comes at the expense of a longer signature generation time.
In particular, SLH-DSA-SHAKE-128s achieves the smallest possible signature size, which is about the double size of an ML-DSA-87 signature.
Where a higher security level than 128 bit is needed, SLH-DSA-SHAKE-256s can be used.</t>
        <t>Unlike the signature generation time, the signature verification time of SLH-DSA-SHAKE is not that much larger than that of other PQC schemes.
Based on the performance measurements published in the NIST submissions for SLH-DSA-SHAKE and ML-DSA, the verification time of the SLH-DSA-SHAKE is, for the parameters covered by this specification, larger than that of ML-DSA-87 by a factor ranging from four (for -128s) over nine (for -256s) to twelve (for -128f).</t>
      </section>
    </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>
      <table anchor="iana-pubkey-algos">
        <name>IANA updates for registry 'OpenPGP Public Key Algorithms'</name>
        <thead>
          <tr>
            <th align="left">ID</th>
            <th align="left">Algorithm</th>
            <th align="right">Public Key Format</th>
            <th align="right">Secret Key Format</th>
            <th align="right">Signature Format</th>
            <th align="right">PKESK Format</th>
            <th align="right">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-KEM-768+X25519</td>
            <td align="right">32 octets X25519 public key (<xref target="tab-ecdh-cfrg-artifacts"/>), 1184 octets ML-KEM-768 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">32 octets X25519 secret key (<xref target="tab-ecdh-cfrg-artifacts"/>), 2400 octets ML-KEM-768 secret-key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">32 octets X25519 ciphertext, 1088 octets ML-KEM-768 ciphertext [, 1 octet algorithm ID in case of v3 PKESK], 1 octet length field of value <tt>n</tt>, <tt>n</tt> octets wrapped session key (<xref target="ecc-mlkem-pkesk"/>)</td>
            <td align="right">
              <xref target="ecc-mlkem"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-KEM-1024+X448</td>
            <td align="right">56 octets X448 public key (<xref target="tab-ecdh-cfrg-artifacts"/>), 1568  octets ML-KEM-1024 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">56 octets X448 secret key (<xref target="tab-ecdh-cfrg-artifacts"/>), 3168 octets ML-KEM-1024 secret-key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">56 octets X448 ciphertext, 1568 octets ML-KEM-1024 ciphertext [, 1 octet algorithm ID in case of v3 PKESK], 1 octet length field of value <tt>n</tt>, <tt>n</tt> octets wrapped session key (<xref target="ecc-mlkem-pkesk"/>)</td>
            <td align="right">
              <xref target="ecc-mlkem"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-DSA-65+Ed25519</td>
            <td align="right">32 octets Ed25519 public key (<xref target="tab-eddsa-artifacts"/>), 1952 octets ML-DSA-65 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">32 octets Ed25519 secret key (<xref target="tab-eddsa-artifacts"/>), 4032  octets ML-DSA-65 secret (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">64 octets Ed25519 signature (<xref target="tab-eddsa-artifacts"/>), 3293 octets ML-DSA-65 signature (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="ecc-mldsa"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-DSA-87+Ed448</td>
            <td align="right">57 octets Ed448 public key (<xref target="tab-eddsa-artifacts"/>),  2592 octets ML-DSA-87 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">57 octets Ed448 secret key (<xref target="tab-eddsa-artifacts"/>), 4896 octets ML-DSA-87 secret (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">114 octets Ed448 signature (<xref target="tab-eddsa-artifacts"/>), 4595 octets ML-DSA-87 signature (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="ecc-mldsa"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">SLH-DSA-SHAKE-128s</td>
            <td align="right">32 octets public key (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">64 octets secret key (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">7856 octets signature (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="slhdsa"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">SLH-DSA-SHAKE-128f</td>
            <td align="right">32 octets public key (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">64 octets secret key (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">17088 octets signature (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="slhdsa"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">SLH-DSA-SHAKE-256s</td>
            <td align="right">64 octets public key (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">128 octets secret key (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">29792 octets signature (<xref target="slhdsa-artifact-lengths"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="slhdsa"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="changelog">
      <name>Changelog</name>
      <section anchor="draft-wussler-openpgp-pqc-01">
        <name>draft-wussler-openpgp-pqc-01</name>
        <ul spacing="normal">
          <li>
            <t>Shifted the algorithm IDs by 4 to align with the crypto-refresh.</t>
          </li>
          <li>
            <t>Renamed v5 packets into v6 to align with the crypto-refresh.</t>
          </li>
          <li>
            <t>Defined IND-CCA2 security for KDF and key combination.</t>
          </li>
          <li>
            <t>Added explicit key generation procedures.</t>
          </li>
          <li>
            <t>Changed the key combination KMAC salt.</t>
          </li>
          <li>
            <t>Mandated Parameter ID check in SPHINCS+ signature verification.</t>
          </li>
          <li>
            <t>Fixed key share size for Kyber-768.</t>
          </li>
          <li>
            <t>Added "Preliminaries" section.</t>
          </li>
          <li>
            <t>Fixed IANA considerations.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-wussler-openpgp-pqc-02">
        <name>draft-wussler-openpgp-pqc-02</name>
        <ul spacing="normal">
          <li>
            <t>Added the ephemeral and public key in the ECC key derivation function.</t>
          </li>
          <li>
            <t>Removed public key hash from key combiner.</t>
          </li>
          <li>
            <t>Allowed v3 PKESKs and v4 keys with PQ algorithms, limiting them to AES
symmetric ciphers.
for encryption with SEIPDv1, in line with the crypto-refresh.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-wussler-openpgp-pqc-03">
        <name>draft-wussler-openpgp-pqc-03</name>
        <ul spacing="normal">
          <li>
            <t>Replaced round 3 submission with NIST PQC Draft Standards FIPS 203, 204, 205.</t>
          </li>
          <li>
            <t>Added consideration about security level for hashes.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-wussler-openpgp-pqc-04">
        <name>draft-wussler-openpgp-pqc-04</name>
        <ul spacing="normal">
          <li>
            <t>Added Johannes Roth as author</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ietf-openpgp-pqc-00">
        <name>draft-ietf-openpgp-pqc-00</name>
        <ul spacing="normal">
          <li>
            <t>Renamed draft</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ietf-openpgp-pqc-01">
        <name>draft-ietf-openpgp-pqc-01</name>
        <ul spacing="normal">
          <li>
            <t>Mandated <tt>AES-256</tt> as mandatory to implement.</t>
          </li>
          <li>
            <t>Added <tt>AES-256</tt> / <tt>AES-128</tt> with <tt>OCB</tt> implicitly to v1/v2 SEIPD preferences of "PQ(/T) certificates".</t>
          </li>
          <li>
            <t>Added a recommendation to use <tt>AES-256</tt> when possible.</t>
          </li>
          <li>
            <t>Swapped the optional v3 PKESK algorithm identifier with length octet in order to align with X25519 and X448.</t>
          </li>
          <li>
            <t>Fixed ML-DSA private key size.</t>
          </li>
          <li>
            <t>Added test vectors.</t>
          </li>
          <li>
            <t>Correction and completion of IANA instructions.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ietf-openpgp-pqc-02">
        <name>draft-ietf-openpgp-pqc-02</name>
        <ul spacing="normal">
          <li>
            <t>Removed git rebase artifact.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ietf-openpgp-pqc-03">
        <name>draft-ietf-openpgp-pqc-03</name>
        <ul spacing="normal">
          <li>
            <t>Updated SLH-DSA by removing parametrization and restricting to three SLH-DSA-SHAKE algorithm code points.</t>
          </li>
          <li>
            <t>Removed NIST and Brainpool curve hybrids, dropped ECDSA from the current specification.</t>
          </li>
          <li>
            <t>Updated KDF as proposed at IETF 119.</t>
          </li>
          <li>
            <t>Removed whitespaces from composite algorithm names.</t>
          </li>
          <li>
            <t>Explicitly disallowed SED (tag 9) and weak hashes when using PQ algorithms.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="contributors">
      <name>Contributors</name>
      <t>Stephan Ehlen (BSI)<br/>
Carl-Daniel Hailfinger (BSI)<br/>
Andreas Huelsing (TU Eindhoven)</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="I-D.ietf-openpgp-crypto-refresh">
          <front>
            <title>OpenPGP</title>
            <author fullname="Paul Wouters" initials="P." surname="Wouters">
              <organization>Aiven</organization>
            </author>
            <author fullname="Daniel Huigens" initials="D." surname="Huigens">
              <organization>Proton AG</organization>
            </author>
            <author fullname="Justus Winter" initials="J." surname="Winter">
              <organization>Sequoia-PGP</organization>
            </author>
            <author fullname="Niibe Yutaka" initials="N." surname="Yutaka">
              <organization>FSIJ</organization>
            </author>
            <date day="4" month="January" year="2024"/>
            <abstract>
              <t>   This document specifies the message formats used in OpenPGP.  OpenPGP
   provides encryption with public-key or symmetric cryptographic
   algorithms, digital signatures, compression and key management.

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-openpgp-crypto-refresh-13"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="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-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="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="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>
        <reference anchor="I-D.ietf-pquip-pqt-hybrid-terminology">
          <front>
            <title>Terminology for Post-Quantum Traditional Hybrid Schemes</title>
            <author fullname="Florence D" initials="F." surname="D">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <author fullname="Michael P" initials="M." surname="P">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <date day="9" month="May" year="2024"/>
            <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="Internet-Draft" value="draft-ietf-pquip-pqt-hybrid-terminology-03"/>
        </reference>
      </references>
    </references>
    <?line 1109?>

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

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

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
-----END PGP PUBLIC KEY BLOCK-----
]]></sourcecode>
        <t>Here is an unsigned message "Testing\n" encrypted to this key:</t>
        <ul spacing="normal">
          <li>
            <t>A v6 PKESK</t>
          </li>
          <li>
            <t>A v2 SEIPD</t>
          </li>
        </ul>
        <t>The hex-encoded SHA3-256 <tt>ecdhKeyShare</tt> input is <tt>c3bcf24924717f82614c331cc13eea1c333ab16c6d42a6f958cbeb48aa4260fb</tt>.</t>
        <t>The hex-encoded SHA3-256 <tt>mlkemKeyShare</tt> input is <tt>9e956c105e25da824d6f1fddbbd93b920dd33f2fd647cfcb859904966efff31a</tt>.</t>
        <t>The hex-encoded SHA3-256 output is <tt>99229561bcf5017d6b1dd34d8eb0441897968d5b140597756db705f1de67c078</tt>.</t>
        <t>The hex-encoded session key is <tt>0e7d04eb84f066d0943c7898db8d36959203bdecdfb3e17e5fd3a24a13641d7b</tt>.</t>
        <sourcecode type="application/pgp-keys" name="v6-eddsa-sample-message.asc"><![CDATA[
-----BEGIN PGP MESSAGE-----

wcPtBiEGJj40tpk451PcZ8qO43ZSeVE14OFuSIhxA8EdcwffQO1pvDRTpyIxERdP
Zf0JNCpG7uBqOXUty4vHAu/wCUmXFiutlBnRlG9O2jx2gaNp/HpAQeYmHwdDroFo
MGisG0RVOigKCVqjEgSCwmk0KLyGl6jFowNA9cMfi/pf6uU9PaweMGWmlgVyXDr0
2qf/jsjEx87yeL3t6yi2YIFXCitLc+vaqWjd3/8qBOcoTf/TpPXMNPmzmffh8xZx
bU25jlzB25dHXRLmwnFUlz3PU7voCQNhBtJiMSXmCzbb26BWrB+YVNvxStokvDBG
pnP+lGcUIJUJpPgSoJeZLp5CWSl/UPTiuz6blsddWpfYm8wa/7V/EzmZNKkvDZt4
7vdaXBaZDnPsMTE1Tn/FIc6/13CUe2rHDqcdLKIQ1bKRTpWH2BGqaX9a71XmxgR2
kdTZ067m4xeRRGidL7/A5qklIEMumL+IyjC4zDvgtHBaGyCeDD12nK7paGhfuTxj
Qn4SQQvDvswUnUlmfPQbdMV1H02+lWHk7i4QpK2vrnKOd6O7pOnWFQSMGg/L4lCx
pfztFSf5bUrYSrf/VoQJdfqLwTZ0cw8uQC7eoEOn419DcKOQA1G/cKNY/lSeYZMD
IAAMZZ6iIzXcSvwd5NZkISVuZO1uh/9rhg4ZTOb+rcI6RYb5GHQbEvFAw1RUNk28
4Vr1F2aYPuYw2rltNlE/D2jns6+9inJYnDmExbWX7hIItJVwwhGPqW0s0bbntFZD
zqlivMUoiCla49ZNQ6m7t5HwEv7IUZcNz5PvHvy5SPlFuzAJf82bKPYhAaCC1fE9
IBQEVLG9Kw+duKgS2HtKndNd9sN3Edgf24JpM6OzhjIfuO8hUUUSl88mh3YlBKmp
xbBHd01s6rr2WK/L4KifiL+Bi99k0QJjVRx4mgv5uKv6sdFKmBkcSIr6olNG5GHR
hWCKuNvIg0zL9WSB8Qeav4s6sCn4gEWgyLXZ33tF39OwJFGZJtk+F01hNrISCylW
cQ39tM58hK2vuqAFjvvyHmjwrQDnGMfOh+86yMipIrWF7AfzB+BVdWOkBynRMgws
45Ne2D4XyD6z8rgKqrQEKWspHdeYOxhmtLZFpg5uO06I6T944whwXWYTeGjBPsi2
YJuWlgH1nuZ+sw1FTE93XCfRHiLNQ6wBYCI9Usw9abAmW7Jhxd0/Kx72BbwLDmWm
vD1iXsgyCA1uyAfj89Xs5EIhPXFsxE6dfJ13dZGJVZl6mRJwjJgZStSEycvtsbtU
84tj9A+XpPfyCmk7wIte1d71vPE3s8Wx1WFYSiwPyVJS/AALSvPdEs4vhON7EQOa
xmhX1xITEesRXKhfKynhfMPpOUPgP1ctkpAbC8RGsRtEyhnALgHYqBYCULP+Pbmk
x34Z3pYlVXaWqiU0VJobuMwQJvnvax0ipFOPFYr6HBYvAuUlCdD17phL7ZFmLQjY
qstC0VS7E3mpvzbpo2uR1RDvWf6x6YFPAQoI9ltJ1S/lQdeLVh1+FOXuXh57qMcp
rD9h0SH7PihV9SRdvR2vvWyn7ygFNPajy/8PTH15eEv/5g6ZWxs5CKvpz0hTqf8C
0lQCCQIMslhjNg7KUOTtedOwUxvAoHK/lZf4fpMbG2GW7r6OHwShQ/zNruQmR8qV
qJsN7xv8+utysXtt6SUgMPnF3oUp9HzBnCwHb/m/di69xNsYQAE=
-----END PGP MESSAGE-----
]]></sourcecode>
      </section>
      <section anchor="v4-pqc-subkey-artifacts">
        <name>V4 PQC Subkey Artifacts</name>
        <t>Here is a Private Key consisting of:</t>
        <ul spacing="normal">
          <li>
            <t>A v4 Ed25519 Private-Key packet</t>
          </li>
          <li>
            <t>A User ID packet</t>
          </li>
          <li>
            <t>A v4 positive certification self-signature</t>
          </li>
          <li>
            <t>A v4 ECDH (Curve25519) Private-Subkey packet</t>
          </li>
          <li>
            <t>A v4 subkey binding signature</t>
          </li>
          <li>
            <t>A v4 ML-KEM-ipd-768+X25519 Private-Subkey packet</t>
          </li>
          <li>
            <t>A v4 subkey binding signature</t>
          </li>
        </ul>
        <t>The primary key has the fingerprint <tt>b2e9b532d55bd6287ec79e17c62adc0ddd1edd73</tt>.</t>
        <t>The ECDH subkey has the fingerprint <tt>95bed3c63f295e7b980b6a2b93b3233faf28c9d2</tt>.</t>
        <t>The ML-KEM-ipd-768+X25519 subkey has the fingerprint <tt>bd67d98388813e88bf3490f3e440cfbaffd6f357</tt>.</t>
        <sourcecode type="application/pgp-keys" name="v4-eddsa-sample-sk.asc"><![CDATA[
-----BEGIN PGP PRIVATE KEY BLOCK-----

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

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
=dPFW
-----END PGP PUBLIC KEY BLOCK-----
]]></sourcecode>
        <t>Here is an SEIPDv1 unsigned message "Testing\n" encrypted to this key:</t>
        <ul spacing="normal">
          <li>
            <t>A v3 PKESK</t>
          </li>
          <li>
            <t>A v1 SEIPD</t>
          </li>
        </ul>
        <t>The hex-encoded SHA3-256 <tt>ecdhKeyShare</tt> input is <tt>98782f4d20476dc2787ce8e264731e0d0cfeac0a35732cd88cc5518b57e634a0</tt>.</t>
        <t>The hex-encoded SHA3-256 <tt>mlkemKeyShare</tt> input is <tt>3e8813445ee2a4a6f1a503d14149304f0ea4f626b45ed871e9381b967fb19008</tt>.</t>
        <t>The hex-encoded SHA3-256 output is <tt>86ea88190089aae9256f04fdd09cd62e19f2c1d02cfb844aa1f99f7b17c49743</tt>.</t>
        <t>The hex-encoded session key is <tt>f3037ae17d83a40ed08d884e19dc66065eac82d96337e4b74b1d10e933535e4d</tt>.</t>
        <sourcecode type="application/pgp-keys" name="v4-eddsa-sample-message-v1.asc"><![CDATA[
-----BEGIN PGP MESSAGE-----

wcPUA+RAz7r/1vNXaUNGH8CAkSiFgunnUDqAiD9JSd3Sb7lMNUsWk6lzWiJicgky
S/vu0sSnRtxweWkoMr1y2ZaS45nXbEQyShiqHhZUKfVwtxbU+rGVH5oCgSvtTCrs
verZaFpqzqPWyZ8ApzJvjbGUDBuwns09dGIKvKoePT5DCrqXlsW4EA8gFJbiXeb3
E7nsyg3l2uMzbt6FHtYoa6qq9Q0PsUiGte52nXXWEnmBOGUfmCkVsgmHDmz63BLT
1xXuZ5YopZkhhpjTNtvWtXc6MIaqnh6XtAcg8ZoaH0iferpbHEp9+M4bv5YDjzji
vv83rBQN4cBaS1/TSmBkNJHmxcyT1AOOXY2ZbmxQBORhGOTrFz3w8R78MYkEvB6x
JAjoYirpsyNLJzdewpXEYrPQq4Ey8EG2+qDY47vQkQaYcSFFoxYQ8MpHXmmgJ2bp
D13g/lQlSHcdWX2L59Wa1dhKRVnUyeEtO5c06FKJ7QOrywNjPdVciPVCx6bBfVd2
6qiWLynSGnzGaKd1YyaviioCm48Ydu5q8Z+QbEANbKW1azVAWCuxuiomE3RBvf1O
8d30UvBnImEf+9ANDxzmjIG2lW39U591Jbv0pL00at3tIMQN2wwiduP1KZ1dilWa
gEkdPjl6Q68ov0vRCYMAZizj4pMZbsUdge2Jj9GieObnp+w25pJu9nBeI6iqYmwd
Ny1U3OuvzbEUsNfKcHoQd9Cem8EZn+5ICk7eqsTkZq69oYfIVRyzEEc/X9562nzh
6B+X4CHZY/C8UCWougQriG4KVszM4myOgekKg0kNVIWgE2y7Z//S9c2twdxRWT/a
8QC4p7QX7JRgzDD9erkj/9J3hKwHxDHShKB5jsVaGO+BxtFSCiiTmgeo7+SAnJwU
Mi/N0UiI2BbKdo4KmdDPUVDyobBjCjeXil7Kg7pTU0vewPZQDLl9X16CcXCB60HL
fkDGpcYbjkZYbmB449sQfaLvxRMHomP4TY4PEfANIXdWmk1mS0/+zNzMQ9+Xderc
8P/EdKDKF5yr7IzSNoxuLiIWpyWJj+5QmAwup9mVv5gkh5RPnUQ0fgQ1vU8K9PMz
OmYqlX2W4gPn29UovjkbGH+lEzazEzA7VZWHXG86NVN8WMXqdQvMJcmMRZhDmC3F
kCII5zc6dxFXjNUgaAqV8eBqvRBbgCqK+6HSwCMY7jNFhFIy+Nj/9BYU/ereax0t
Zlsk7XDK9lMZUidh5+VeEqbyMsLQ0YiyO7VJ5VdiPESXHjPkzxo42XZJELuBVC9D
ArAX2Qip+oV1RXzhu/SeJdRQufGSENeZpGiG4tW24dpROh40I5TgXmpd4ALhuh1S
PrepCNhXuFtKDIStKZEmCknPAGWAkLYZz5rAaMtztdGvzlektn+8CDtSo3d6FUww
dp68ZtSMMb5HGscAoiDoOTiB5KVPSd80s3EPXlsgQSfHuSUHTvmD8G6q4hqGXMeV
IUdwjwTvDMfW7CU5zqiV01SO6dXKsFyjLJrT57kpCbQ/2fhoMC+kNcXpzI+Z65yI
jCP6Sjv+cVh7tv55kTKAPHO5VE3MDxvSOQHpUQ0zora+lfzpLUahfv8uZ4Q4J3L6
mkHfXuplyv3LcunejQDog2bhakqbrb5lg3fZGYNagykZxw==
=2Xhi
-----END PGP MESSAGE-----
]]></sourcecode>
        <t>Here is an SEIPDv2 unsigned message <tt>Testing\n</tt> encrypted to this key:</t>
        <ul spacing="normal">
          <li>
            <t>A v6 PKESK</t>
          </li>
          <li>
            <t>A v2 SEIPD</t>
          </li>
        </ul>
        <t>The hex-encoded SHA3-256 <tt>ecdhKeyShare</tt> input is <tt>4a0b21ff26997b812f6e0381b7b4ff907ecc7abdec01f16ecbf60bdc3f633341</tt>.</t>
        <t>The hex-encoded SHA3-256 <tt>mlkemKeyShare</tt> input is <tt>4c0c441f23711ed5d44983e2cbfc06799295029b92f627b161cd57f072e0ebd0</tt>.</t>
        <t>The hex-encoded SHA3-256 output is <tt>76ea8fcc9a31a9fa672940b9ad578f6b8ecbea1b1d1175d01f1777364a8e2704</tt>.</t>
        <t>The hex-encoded session key is <tt>b5d810efc6b2b82e77f907813e114587aca2d0e33c9c74e90eb1638df030dcaf</tt>.</t>
        <sourcecode type="application/pgp-keys" name="v4-eddsa-sample-message-v2.asc"><![CDATA[
-----BEGIN PGP MESSAGE-----

wcPhBhUEvWfZg4iBPoi/NJDz5EDPuv/W81dpZ1Yz1yu1Dk/HK2JuEmE6RavqzhvT
i508AZhPxC08BxfNFar+uyZCNyMrUSrY0qY8H61GTtx1+O9VynXl8uXtS1nTDGJ9
vCR+EvH6rT/gOPQB8HUhX6Ps97Yqi/Iys1gfS8n961pScwIYpPJzUWfUUKjIT55W
htkh9aIB6unqzwUDi3p4oRZRm67j1ZP14SLyonAG2tXtCZyu1An62UHeOyNl1/6Z
CgC3egTf6lz26US15T8AP54AO77LOf9KwLpUYcwvSExqHGgmhS0Mil6WnFyuJUDB
7A2T2p/koW7TDaqoxhWsxY2isiH1SmAxNxzMnrGd7rNpPJ/k/r42bILfOuG0TRUN
zqC9ph6OdydSyhHkN5G4eOYQqqvk19/lfLuHWlNwfNcn/2PsgsxLxNj7ltVn90W0
qLubPWrujn/DhLl+hs2xXDOudpcztUqxcBnrsSaHlaebjQoDfttVAQj2jjdNXRjZ
uNRnRfcG9s3sO3b8d4ed6tk6U+nMrE2dZCBjTagqvD07Z1TpZDh7t86V3X16o/ps
jxW42s+YR589b88IZcieZRbKVtXt00pn2tn95kpvL3d8nAkaiPUhrowQUz0jpn8c
CDBNAn1j690qM3pD5XJlwverC2cmJH1Hjobnrhi6X1k2lQxweX28p+R9NQjSoX0h
ORuE0/Wpi15y0xmr2EzjcZ/6vPncy/IrYJCYmx9+aWQAjrKjizzNFTt73kf1xba5
t4tbZkj9xgdDJXq3bAqB0/JeeTb4aTCk+n4olVYzCnMtLgj+1fWPClMModACmFOG
1+bw5Q91/7euo363sw5UwgU1JhSQ/xcKNyJQsnklWkLMJNB1Yhj/C32lEmLntigv
UOO510+ehA7D5ftef8cMfEIm73HrBBiLfixvVTR8AQV4hiV/mzKP7weM7kxvAvbz
ir4jt3uSBOuhTjzq2is/S3D2K+O8FZqGIbkDhnKd98LbEA2cn9nTfsbV+TVXCmaS
lHNojVxPL2pUKxedV5skvfflRFciuP7UNsf8myHe7wdfPdSzMsbytDEwID3vcsme
fBqZdEZxqv/mNnn38TfHMSCF+yv5XbF9ham4DIcqNlkYud1ipEFFbcBZ0o9nUIWp
diSY7KGAtVF224dtcr3FTHGuBnayDq+Yk++VhF4Bb3uPVuwrkf7Bncp1aYEQfkhI
HwF3X6GnwC3y7kpbkU1rOq7yXv/0mRyGpVQlW/Yf3qT1buxcWt5BvXBmKzbBpVg/
0B9vpzrlFsT0Pb2GHuQ6U+9JoZ+ePnRMVdDz93RCGr1kQlyY15K1b+yILJiV6oOL
OxoxXHnr5soIumxCqv+6oAm4SdQVJLELQK72x1dVKJ90jUOgYCeOY61NsC9BFWHT
h0itUEnwWMjKg73z00bthndwfEXHBJLrHizkcv+pwD8M5wb/9H6HU4x8ELSr5Fyn
WjSoa2739wmJkoJY5ifaic3L8UXJeLuEZnVG9tUrl9ohHO8RNR3Vc/uHmyhImoYp
RL4rcc6YpuyextmYu9S9LkPR5Bzr+mFeJDeXbA7GJm9eofdw0lQCCQIMAGc2j84/
tfivyP5YrgQ8uBt9iwJN3IYRBy8qdr9JUyxkpkOEshV6XE4g3Orpbx0ZdrxbKmDS
7eJl5fSust3gb2KfaAoWkFQivVJP2KTl5gw=
-----END PGP MESSAGE-----
]]></sourcecode>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Daniel Huigens and Evangelos Karatsiolis for the early review and feedback on this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
aMcdSxEpIuiRO0klAgVIWGAAQ+HHJHaJviHJAjj+43EVO6TChD3IntJBhPId
EcdMgOfOlZ6uRyrgHGKlYUjxvVLGwA/nOVa87rAPC1i7OzOJPyoCVZv8nW1W
EG4+yA/3xOUDzXTDwTDTZAerLUTdY/QmFlQ2lcmMphKMUvigADiw0/MmhpSh
H99J6sbfv+AwhDdWYFvsL/wv4HVAr2PwAumRzQof8edXZrY3/vzKj+T9QbGI
WvwrX/G8whDlvv7z/Vc+8jnzhw98wkc34CalCv81Ec8QmS9D0vbmG/qYIEos
l83fPRHd/2rG3el44v/68UMWxRj2w/z86XabvdFtIp5M3z2BEXHd7bjRn3Yq
0d3izfU5aXhzv3q7++1aDXxjk/38uDe2GnX4v8VW5yL2BOg5m7mrSp/aaskW
/K3O3+g2n0PdRu30za32u41sw7KfWCKZt69nW1wwv378sNXtJ/tc/9F9JjPZ
T8wT64/VM1IvFeLzR0qjJGMXLRGrTeLk5ScE3OCX58Ex/51KDyoFiKKHMM0A
Z+QK+02o8CTKCvhRfRniRU2xRg+zc/kvOCQ3OBSIGCidiRcBP1hYwGMPkytM
iUuYlaGqLCAlXtaNw2aL1Bw4QSA/yuwaoWeeLtJz9eLlGqAskT5tGiulysrN
jmg/0gGn60gQETFMTHGCRZzkSPOR2PA3mixoHRDmIc4xY+2c4GNQFO6JfeWP
4rjhUupvdzEfgddCLAi7zdQLkob6jWAsoalefwI6H9jwENoAD4/K0ymgaVHP
Jvr3jQVSi4uA+6Qg0QvbtcKaHfbrN4s9Yh2Dax+CVBc3OOazuq1wJBkisP7o
gbAKEm3D0MAvI1Zp4Daoa9zQ2fSjoR4hrcKg8VDaCrtrfa8Btlt17IFW0Bzw
TG0Z1ALAEQ1OflpMFIiYjETFgNaMMk70CzIenYxv0tmPAQuPyAxqfhMUcbW3
ey9WTvKCAIA4TW0rWK6+g1tg8wreUMvG9ajTLaeGF24GqjaklBHDjarYPrBo
LNVVH6NzRsGgvK2RYqMS7bAquL420GCjDdCfNywTRd9ijR50OTef7mPWCeUN
YcOkGTKwPMKgnUHqEmtvCEBj4LW5kb0XtDRIONe3ApDlQ4xb35qhvWKfFG0R
Nc8gnns6g4/tAT3aUymwn8R28PIRg8VxNZgIbQBoFGpi37voH8UyAo4S7HYB
vovxOWjjE4bs+ZhuTlDxvDewwq5rzfkLdJ2mIUM5mGTpbhEJ27mma5T7AW+I
72kAasSWPkTAyEkl9MV1Q2yayVgAFK8hg4QVybEO4wqLJNj5jONAJGkBP/Ay
c/B+E4uYshJZt2mGrLgjuSVAKGhEmngjHWTi0n/HI4MswTEVyZmH5EPmHsge
k78qbwTxEl6Ny6/pLCmZYRcuBNvwfFwHSSCJw/d7cT35JFtXzgsMlFC3ADvU
0KAGc2SHX+1vriylKEcYUph2qUbn+gYDXkQc4BUx3yDKBGTWOaAY2A5riAND
IvORWLRxUd0OUMAbOQngI7Ihw9XTtu8JNcBYuLcgEfghfZw6B0SqrC8MRrlB
amYNODgp6EQLMCFx0HUCfRopaFAbUuDYOSP2UiUZ7VhzgiW+IoWDKEr3xE8E
CSoykUZENYOMAR2bFUhzAc+aISI1jTi2/TxWkrUsQ5SIcWXieD9WnuATPZTW
jV2DHocmOXBEOF/wzEM5cOF0XjfRIuwDO23REqmgdcO5IKfQfgCwqcrCzBKL
rjM2V2LYNoSMI/QEWRr0N+Hyo+pw2hxVK7ClxFAktB5wyBMvlxufl46KbSA9
yXPKeByCZlZCFmoo2f3aX1OOcjTgDS65CbglSMC1qbZPFR1gtmAGwRo44r1m
FPqTC1ECIMbLwfqvcTgN9oHwYtvz5+NBfI/2lT/cDyegJfz44QirmCxK25i4
tpDtayFyEEQHPKTBRC3oFitt1E0DCSmYzdIWiMT1jbO1aV6b2w/Zw9uDMNuF
VmoAyGxv5GDI8YG15ruG7mwMDVRdvDn2e/NCxv2tWXC/Rhh31GCL9ovc+jjS
BI7+mPv1lqF/88Xv/5hjXRfNCglY43y4X/loJ9GNlUa7fm6tlK8p4Ai2wXMf
7CeVRFzLQQL/I+DNZD/+MRrUw9hwP4SjtGWN/xpkL9crQB+jPXU/9fhO9FLd
QdkTLREr9WPoH1jp+x+7g1Kz4q8dVDaB5SG7gOnnz18p2FGhfv7MQduuyRfu
51PYm01/CnvhhG9kP+NGMQWupve7cT/OJJIf+Zio+u6pKXyYRXLNDDY6zaoR
64D9LoSVAdZvax9WVMJdHYljYrEQTvA/9HJ9SKowBChE2bMx/b79KeECRjz/
Ffg8OTM5kc9IhYLfaB/HsI3f+P8Z87jDAzlegxsQaxt99o3joBCT31V004rs
NR1j6kOfkaHCQ7M9Twy6FHxIiH92u3u+x0oriTLLKpzuEHypBscuiJLyhjgl
UelfqNSiaZMMhyNbHPCG0LycGyFvBOln0h41f6Yb7Apnz3XlZYDxz2Tkr9+e
cb+sSL/OISKqwnMAfM8kRwnS27GD8tl6Ji6K5wAYn/G70TMTQkJo80JPxGBt
Yn8gq3ke8X+nAPlq3fPTr4Nv357dcyXP8POZDkjQ7BATDRxDZTydkEnnZs+u
eT9XivopPYC5wEICw8Wrb89s1lUwGyfxwNdxghyoZTrDTIGJm4KClN3nI1rj
8+z5J3ZzPc/8tRzvyVJoGBR9SJIALQR4Q0P69IZ2LRG+Awo77Bc1mYlaBMvx
uBiaUfIB67QHeriAeqwYgDw/sTPgR/74Izx+IBr7N5sVhaEdRKOlHpB1RBwX
yBJGo5JvfOJ5ht1Eq0ffpqO/dQmTfOnyxq9P/K+/hgjRfeKT4vMbu0dJ+53d
+zisEObNvj3fu8CyPGCF0R/IBq048JoBCNmjPwEShG+AhkO5hqvs/DaegVp/
lGOgT/8b8Au0yghuAU//PEYBkP3D2ISnNH2cTZDx/y2ZBNKJfjOTIBbBH8gi
AE7/EgbxGShEHMUwTNs/iEGzicInRq9VM9yWVZDwg4CGRbp0KQO/j9bNbjal
mxM9lgfNbxw9hWccyRmykH77HJgIhX1ghOcAp/LOojxwxF0Jnsjn4Py9nbtm
qc/B2XlfBlktIpMHD+pbmrvjJ8+wJ6K3cujETdgrgqO3xCpBHW1wWQ3PY0M2
OaBeQt6P79sBiGGWTRD/BiRYr03nyoV0c0LUYROeBHfTgUE7p5bPwOcpv/Jj
3zb+lS2lwth20XkZocSMQNbFx37cSL4JZN/Ar0Qin/bMtmQ6Hvd+JOL5vPcj
lbyRdhPMu4FmmSzTLMH8CL5JXlskpKOP2iMEy9SDpvN0g78Q3/gNHMIk55mX
rHUZJDfKWa84alM/Gjs0y9/NSHxue4NCo2WUz2GfQzN4djPpKCr6VWB8OfYc
mGS4hX3RMBWLfpz5A/AKSKKb8AoMDMD5JK98Di/8U4sIxFUj6h9hhuXJFz8f
DHzUwQS8nzerEwSTEd6rrkPd9d8jGNRVD/TbAE+COXpf3ORLUV4ZllPxvqPy
Bgt6jyl9iN3cngZhQKxb9BaHeaMPzHN8b2lUbsgHt4Mcij4oquMfeXZ1dH+n
TaSjIupCGrCEy26Rsy3MoCHh6u0N5I5gepCY47SCfk2x6PVGxilJ7uGW29j9
4I1+a9igo8w7ksL4aRCkXevr/uYsCSDfmCPxj96aYdEtAUlhjvNKvrar7W+k
CgnWVCWXmqnuiCP5wdwWUlNIlJUjSSJWdPgQZye456GxRkUmLkVNyDtQ5eec
rJSrU8E+YG2ZnJTDwXw4hmhAdpcTSg13IMJ4siBiSTUSJpD04wcti444CDFE
i9Ux9qRCyNTbKndeCCzwgmhbdBaB9PG/Ma1ibmwQBCTVjDRBgjPQLkiuMOye
CdcxD93x3WUwK6eHTmrKGa/IPzz9A+cor+F5DJ7/9EvwROdCM6raNXsNkxqV
PPf8C9R7xmnduJ0ti+yYP+9JzNjNtcM59ZZCTvUQoxI9gpw+BFZ3s92yJh7E
6eqhnsFBd2O3AFQFH6oArvP4iP5qAs5993+jBSC+GyPYx7JiRkHFiiVt4rfE
pRGR7mMzvSHTeIwzz/DwpNfppBbLey4KL4HI8Qo/4pbhP19o7own/NqV2jHx
hawEQ6+JgIesQLIAZHkFxnad8uoBOxeeAy89ReWtqd2aATkYQDcsZLMRR4C8
P4AIo3ZbECTf/86na3wuzmczfLbKZ+J8Oof/TvHZGp+t4FfoA/SzwOfS8Fm6
xEXAh+fTaT6d5XNZpKQS/G6zzIagNkL+mPvoT0HuK9QVGbsdEBMzPaBJfG6Q
pcnJluR/ueU1iX8Fqc4x25FNnhw886ppe44vv5APzi7yanozKSPpe/9MvOvQ
g+Pb+GQ1ttXo2Rp/QR7qe0dCyToInkRkzj2jxT2T1bmlZ9B8YKHuIQ3agFa4
CnAjD+txJhfaN1q8NRAzuY6IBLTH+9u0c6WRevTy7YqKw/yAnQE8jPnc1hNC
LG8Q9ID/K9gR4xphO2Ik8Ud6Cirgbk9ULnxuUiHIBLv65LR8JkT+kL7WV0Im
ovXbTBQfjEckTDpMI2R1XFaGzFv6X4JgEUC5Auksfw/u3Pu+Kc7DFNo+CGb0
eRhY7iO/C9wHUPnfPTr76s6ejoc7d1u6P0L4iAylg6VDRxzHOIAcl4PbYUdc
gFO5GUE/GV/QjU9999tPr94MCFZitKqkhh6DBjQY67MhyrX8L2BI38SlWviF
ateovageMB5BXRO3u4iEZ1pCxDJWxGtA063QG2P9EJZlFMLPHu8Fl8KVqh8p
jNzNQWIoiEvBEbz9CY4RMCyIiGD1mAdfDFHnuOJWd8SigjFPY/4HNFASlc3L
ZAQzDvdwJnxE8hZsxQPHcAhmPmztxGCmG1MSx+33ps+OrNv18jMUboc8egGk
e8ASGE/Woen4EviK/F0LYGK4oAFRxSGmA0ojG/hhDA/7nel5CQY4Fdk/cfh2
whndW8YBEb2vgXz6mw6YaEs2ZDDecCZE+momULYv7HqCKs+Qp0pO7TBjkmRp
/tncebod9VFTMe1GvrCBRtw3A8GijCKgJWNPXqAj4rKqnnFB5+iQmsemmIc+
8nrOwevzdiRz0UVDtGPBJXjO6+jN9d0vCAh4SyHw02Q8mIGERZcG6HYEil5d
wSHEGm55exBS8Bk/uPP8Tr4JYlNv55sAtLNsf+/5NlGPb/s2UYc5pkOGEwp2
GKBhBoja5pm2IBjReL9Hx3tDlbvnjZLi2H9HMvfb8xXTuVL+YXIFZnJlmBoy
5NFQc6S0gjfjnvfR/xvFJsbUN8GqYHwBRPclEg409yzSVCCvGApGYemFyFXc
AX3GH/g+cYrcQGuwU4NHzQU7HKGL0ki+omf2RSsiE1D6Bh8gjve1jP9V9rzU
2L/y7H5GyY98SOLs9JgRYZNrSLm0KTfw2rCBa98rE6AAbALgQ282LZdIj9GT
qkXHFFkZ4aMV+ZqPfoxf+rnMfwi/RGxC3ALZUrDD/WYnnU2KpMwyyA1rLo8i
zWSG2wXZAuUhz96BImB2zDH2KHcN4aBlwB5fEYRZub3R4QLn9NBgeC2Eqfnc
OjIMHI4XvstyKW6GQMMw4g9zXcIA/3Kmm3VhEo57319HY4hq8VymcAnuHasE
/V4KjWCpviZh7mR7B3oOjTX5xBgmMCVYxsantYcQM/96W7owKYlhcRRKUQzK
ivyV8ImSNZ+IFBV+h/ABRvvvK30STFYHo2j5cmiqnzxJBLz5PQl0D+5yC58u
pSVbokUQvxYUFdJvEklPELGaHj06itmcHSqYAcz6+jCpDBUOCb+Cp6StzX+d
CBs+8S2gEBM05oKl/H23NxU37DnIYAyBZjxca90hH32kCv7zO41f3LQH4NZc
QkvYC6aH09OZFKMglxNs2xBJtX4/ZwIf94kmamyhP7w7ndtO/xPcbuDmVRG+
aEdzxavxbwXU8VzA4UinAOcsrnKkyQ6Rr/tvshsqKr9TLybtNEJboMfnFDhL
6YZIIuSgvzeRnqgH1leCa4Iq1/W8mCJoT36ZQnzgJgSkd0/k3XtHpdzduS7o
9h5s7m9qUD5MgL/DQX1P7EChMtuRBcktveXXasaHtYkjZu3QI5UR2QW6V+AB
PgjgHZQnlj0TOjJ4FCqTFloSOUF2GyS3Foz1Rde7Akwukczfk38UkhDWdBnf
1wB25+75PLwtfHvgwjPzwX1PjnXLCi5eEOVbIZyR8k0/WxF+HXQPDIEAJNav
3lCC/S2kZ7SBO5MhiK8DdtWdb8T5WO/kJLjkxu4AuAqqz3exC9GF/FcHMdzC
N3ybCz0Pj9U1iI3KYoA3Ba5RYThn+OSl68HqClBDFK6fomO5yXuuJneTpbMs
0+bpEUVLIecviD/zt7Blmhfr9+5RG3nxLl/+7UwZgsbuDRA++bMz+ROY8w3o
Muo3CeLZpGT8RwHri1SsxdLubIRmguWuw/OqARYHFvXBNf1u2Pqr/FNgG1mr
wb9Zgj2Hu2LP4UJxBHp9os1WQJAlqGbtPfqJU+O8a91wCcALW4Y05Kn2E0eZ
k1DeiSTo25skOUgEnTzAM/rW19CB/CvKRradQL6rW0mTaT7DsyIdeDo90ogD
w4U6xAY6QXt6LNrbpXBNOA+qLov37CbWaPOr+b7ptCVhB8ZLjCu7hA4aY8i+
c5o3kLT1oRZXiaVkrz+SWEqqK0N6E3OO9a0MUw/s7yaV/o6E0txV/qdb2Qsf
THT/vPUjm75R2At3Rg4z/8pnckyT2z8SiXSgNnyAsEiZeJawakTZCFYpYcIb
JF61FqCMwVaWNrLkXumAIzukKaadZz9vOVh43r3KBIe273G1FCBlN9PwDQJm
Mvr9rPUr8mXmQF/foN/ItQYKigZ5IO2YUPbHV8fyp0+vL8BZAhMga2NYi782
sKwDYPGuAPhz89KDlPsb8tLTV3npv4WFhCfyZm46DMC/nZnuizCsBXwgJT1Y
BvAm/3iHcXjFAYGMC5mkR9PpeMr/kUoWUrf5hVcJENLXMwWmj3wh6//IFDK3
aixdpQKTGyb8eoG01rr3PVaRJYyILIuJwfMYeY7ahL7/6tUiwj/pfWu4zgvO
giTtIM4GRchcphEU7xBgkD9d/CX9wDGF4W8UaqLWgxvMZ7RgfNUCk6Z4Q0kC
IMCntDBtUIYzEHvwAWPTdEhSgS84ju3JfaYUuKK7taSuizTRgkOk1pyn7YaW
y7A66B3Xt3ErFQW8+cHJBGi2FMogZEptRS44QLMYQrfJtcFea3H1m/34Q8dG
bpbrfI8wg2f9EXEmbxNg8Kg/+jb9wTQGgMcfkMbgAt/X4SLyGODxp/MY0n90
HkNQF3GzGahG/4enMzBzvjawQgbHz/f05xALrHtwZEwVr5bVc/c5wEzvIs0W
N7UG9CrGhKGVtFdMbcTwUdRnXxN4DgdxPskb6aFSkunuo5BPyQZSUIID4pU9
MzbUt2e3QMIVWGkozu/+Sh271T+r5PkDXOEQCddVMUIy82eKb7M3RIcPNtDY
pF9Si9F4fCIF2Ua+9PJYfEyYMeokxgWqDQr6TVnze/GA6qdRu8XuDdUi396d
ZKC7q90J7MVVhxG7UbwiNb/8ZeAegBsFGG/VXKS1DMO7ex+s2BgszMjen/LB
Ao00ihMuex7ccvoRjtYkvwX4OYMqHE1QvjUDqnQF8p9xOBLD/JgNlqwMatPv
XVJx2/3F9svq3WvfVIrQjZjw0iddjxFI+rs9UmEPwqfCQiFjEPT9P8BFdj2h
W37g340WINP/QIRgvM0ROIBzUv8gLzTjZPrjPL+/AReuPaZ/8Jyi0OF9b/Rf
Bv0/0Df8h0H/D/VXRxBj+D4/uCd5G75ugynW/uMXWi+ei/ScqpgZwoQ2lkGO
mrE3N/ul1l1T8O17PZjTV285Z2jh3OshMZJsQYdA4+FLypGVRG/8Q0D6Ehyd
md+XgGUXuqgrckEfm6nvsXmAyx0wKL0toWhx220DVlQIYmbAdxMEZsCTEw3n
W9YiHun6eaTVGPmQmIXX1ybAHQ2sz5f1/UY8zOUz2RtdrT/ZVSIXz+ej+oJb
EnBf0c2SVxU0f+WThVwhGdZ+cAC14np/6N7+e7t/bmDF7/T50KX/+zl93qfj
P9D981GmEYJLaOHUScSC9E3u8PsdRdek/wFf0Q1Cv+UuukHMH/vco9ePOZjC
d9SGvD2KzVy1QC+HYnbrmTZ+QJ3WZT0qX9C989b1tfxRbiH3YpY3fSy35Odv
WCEJXb21vgevICcW9s+G6fwvKNuFM0fpWannQfsBcSPpmdxVhknJXUsMDmiL
+MrZd9wFt5YViFF9dGHEPH9vae/kKt40c4kidIPa/yQzNsDHU2/YMDT9XwjY
tnj2OHn+I1zqczaue8X1rf37pFn5ZgL4LfXpfSvz5m6xzPmvszSZQxqMPvcp
uIesh1tK4u8yIt6C9weWxuijf9zS/iD76E1Uwpdc4Z7Ymw+Be3m5eoyFBIQ1
rjYHFR/lIvPxPI2Ff6YJic8PEZoMvdsCdDHvu4hs0AQd080GRZPwP6fnWS7M
BVfFarEC18xf5baivpKhvuDGDFX1TwD6V3Z5ShIsWkEskbk9wSD3gJBfkFNZ
5I9peIoISJQB0KQL7JGke2wHL0mha6dHoa7X/2XgGXT+VpD8VLIPLli+QHFN
spwHmMdvnQFxjStXsH3ul0tRs8JQphM6KA7Ua2ImwjXX7Jpocq4PQdof2NQu
Df2WFROthCaksusOLJncQuQmAvs7x9NjQjhHb+1NyL/2yq/BQq6XCayI3GYB
91rA5SYuZj94K0eq37N35y87qETvSXPH8y4Hxi9ITjJDN9DhO5vzSfC+tXX/
Moji40N4OaSez03gBmGBoRyExW8C+JsQJhoUtjdC3BDksGsdsRdYjQ8roDG3
8g57WRPEvj6UWEzqBFiKJiAw3OgN1z1aXT7YoZcsvaIVk2iop5KBI11I6sQS
z4S/jpqDarcSS2TjwLnfSQt3INRHLmlmtTF8+s+Ls/BdZUO19jI1dF0dFGdI
GrYT2x8E3TlofOCO2HdqzLhmCTPujZbB+0Z/YjwTsG6PUFWXT6yCwvSBWah8
hvsNQ+KWFGr8+PVED1yF3PgE3TjIurAVkiaA1DhDuqd52QwcmFkEriL0bi7G
O6/yooplF7ZhLHJmwb1aQPOgLgag7t0X7wg7HP3EF8PjUg/39Fo+RxEPqmDd
vKwLEujPCrmkMXwtFgbaFi6ohDlfZBgKDXMwyQVATtAHcWPRhOyAxEzftL91
Qxb5hBFwNrkDybv3zDD9dGFPWXggCYPudQdYIXDPQsE5HnwM17/rDn6TUj84
VCnQW68wQyT3oJEHcHETyzwDY5KNjtaFxK1hUNcU7pTpBJ8pwaqMEOgbYsZ0
Nv48dDwF/1RXTBRMrBzRa7owe7r3xyEP3FlA/NmVFm/fDocZiDc6Bj0zPnRJ
PF+R19YdKd/F98RhD9F1GbnIC+WJa42ccHVtF0az0VzDiArGawTGGx8sGoPI
Y00OowgYu9lL9dyOAniKC67IBMkYlEGo7S2WVStDV7P5OCUZMundpQi8IdfF
Gt/QoPHNYSuXmsIn/2zbkwQYfYDS8UVQBLttzcBXhfr8CA6RsyslfAzxEXN7
8WmSccMgawaBfKOA5GvSW8LK/W632quQi8K8/CXMCallQwnU7QfOk/vEyxZ1
tmSCRIG9xekIHv+h2IZXyrIAD7huvZwbzIxguXv1IktetFijgS3ldYD2WLpi
5TQ+EA/X71k8XMZGiYsoDExEnL1tDBONX3qEVA06GQz79mGMuQnCHwMpyXDn
LjIz2UQhONjCXovJLMYmVYZhHgRI3vRD/PveWwN8G3mnItohnufDzBhAfYAL
H/H99syesrPA9y66HnjaOfMeV1NT5XemSCQi5frQkY7vZwwwTDRBrHjSuzPd
a3mRvFbhLsVIm40UvGTlHGXs2Yil3PM45WSDc51IOxXhpIM1cFx5QQFLf3Wg
BTaTD3wR38rp9sWSOcUSIE/dx2z29sgI/CS7cGXnZkOzBJXYvaXSU5TwcHCZ
4cq9LBTYfcSuRu4ohj+0hM0BloFLBQCw3K2lKwrtp6Lf2lFAC4TuokwSe/wr
NDV/K22s2ON6xGH4YrcVFgiAuOye6rIsuYlVfrFLWnrDTca/51E35FZtmk7P
kPTxoAJ50aV6jJGcTLcI9HY2iTq7hbjCau4vzLsivvcQR/ajb8CdB3QXNp8N
VAkTwYCGev2LX2HO+wNkqRKNlKyBFHz9mw13LSpEyyGVxaBmmB+TRlA0TUwd
ZCk8foHPUSJN0gbx09QD6n24yT2+T1qCgyMANXJJuh1ghHRSWNRoiuMEj4Rh
A4LeJwrDksupfB8bozlYykbRyeQoKGhxRnLbLAzO1E5zpTgVJoJ3IJW5i5jw
CQ30X0KCSHScdISNEqUNWlbENByiI6iwRLhzmnTl1UELTBUXkLS3xkGFw8Q8
uTmFUTm8g7+h5ICQE8/xryR3L5BnblSJ3hQXY6l4cw1wesMu9jyT6iu4IA92
obnshZFR8B1E5tA8NBlCm6ClefV7bthdfLNyH+GI/MBh8VAMt2jjfD7dzZa8
d9P7cKIzk1uJbRjjwNzASQ54k/iA67GNuJfT1eyEq/trSRDh4iJP+H5V6kEA
vko1Q1uh3EEkG4VNylB/QVQ8AYzIzb3OSRG9G5aj5rm64AoVlrgV9A3s71dS
DgdhunLGaekeRgWBY7vFSU8YC0VVQDOFXFWA7UkWdkTUEKSGWW5k6z18wXfI
BcI81OniF3YiV94g1V51XKcQYj6+xzyMVPekMDQEp4OYj4AABi2ICYQZ6Kln
CvpeGVLJ2q/tzvUPVrBMLB3V/cIO27jYIoPZe4fewvfeuOEa4Dt49tgTA0Vn
Ff3dG5sI6yB31DNXyXgVJ3EVcixgkWqK2+90XLzIdgFVVeuCRi8hCowGNEG/
wdFLcg2S+zl72X3T8e7fbvYqsXK5mPSrRtLl0W0zkBRGyAxOdJVIf942kJFW
UdZoZ2INWVU1ckkz1FQSXEXJtg8atbL/UR7jC0lw8ETyNJhrGDPl7AKnE9jb
g0XsyneZQ/YhQRwu3kEA3yhhShlDQHYXXcrYL6bJHCu4rj9Dc/ACJxBUBQku
RBmOLatrlzIORO/yywZP8PkKQ9+EqhXjeNvq4mcDAAsA00TWqXoCLr41RnCH
RKKxnSOENubHj1JlUIznSdwanNGyoNv3HjcH/meBqYk6RWMlXR6Axgfi7MrW
DpnUFUHbAL6xU7xH7IxvdIvlGKmGHC62TC/SljA/C8HRLZfseF6o4A3gWHe7
eEYpZdSgieneLd/AcvWDtkJbiH7t/BL2lDciIIBkt/3q2NiIJAaiQIEeNXdc
7MTfIa4L84NCHki5gXsxCX8mZwFAQRUB+Z7FZ8oa2F0h2I7rrIJwP1F3F0Z/
6t6zZCqpMYvV0XJlsP8OusfV2rIoIuZrIoFycFxK1qmuQbKEsC8Biq5he8Ak
xSl84Dwn/6+v4mPy2zO+rtz2zjf4PeJHcMDcw7cobCJHckIPga24aybk5ypl
pPAdlEzakDsJEPR1fF4HdGikWkNEG7Qj2h2uSgR3umEBTrDcVaQlYuQcFEgM
oiWyn+9pKXt6Tzi9yAsbK8/tBI0UtJPP/FeME369H/S+7L4vJ5+v6uw+D9y3
g+TzN7RftBbxjUrE7QSuOIb/HuC/20n8BP89SIaKEnNB2AKASJQ3pBjTjQUG
z3/FxqaFsBCf8kLKu/2NuNMYzA8sGtwGDiJA9eJf7kOcE0FKvcHRcHIwvsLb
EwGU6ND/MGNDOq8sYYqlctLN4UPqDClMqOHBcJcSdtUrYYGCff+qARRpB91e
VA6HRkE9gHkhyTL1gpMrLfCxDimS+CK5IjLLqGlIiQvrODYyEBxSwtWWD5JB
23iJY+HcpHpjkKCMlR73pr2t5C22DTEn8cb2+gl7+MhFHRR7aSwf0noUEa4a
8ekEbBLc1cO12gIWsbM92KSYsqzTik7+BVKMbuNtAd1j7BY7C2Bj8ylYWk3Z
wNZQ4UmXeQ+3ZgBvBvFuyYYFtEeSXSIWQNL6GIrzCh0FdwKZbQ7GfGJleb16
7jhFX6vkABRJKdvgAJUd2gGQ6pUrho8rM9FQGBHzgcs4gCiurm5gSqtfRZPY
gniun5DeBXc19vpKg5CDW0blsatoebYeASZqhr3hjIPavQXAc5EKuDg69c36
JzYsoHLevY3l7FDyf8ZXWTy/syoAl3u9HWGt+JoFIjBEyC1hL9DBexx9J0gg
FwZnMbn1m8BLBLrB0SDVlwKhMhrbCh49IuyGwWQ/x9CvLSWwxQbuqYXhxtDc
xeCKW57JooCw12W//MHI9ZX6ewj+Yryzrr2ZgcH+4V4MUUSaax8n69Jae15R
dldPDnbpWuWIL8tHgQaK4DvXpHb9MPc07s34KqgF6ilWaFdw4IzIQ0LcigVl
RO+DmgWi81iQOqkfGYEM+ifZxoH7/+TQJrlYswrtF9pZQn3BjKQutV5HmNiV
V6Jnh/IfOar9slozKMeBntj8RMywaFEa8M2a1FbQDT0mwcyRUgV6guhZz5Y3
vm+oYs+zzfhLAjPA5qW7GWHLldT09yvqg9Eq3zjZ7tXIM0HwWrgYK9SoIeBy
UwGwQYYxkRkI42NUmBrXZMM8klQ7MwLhZuJ8QuwEkQD4xmVMzZ4RHa4OFwgy
sDN39cEb7bB3gfjUXF/a9VQfvJojzOfUqMAbCzqmRMuV+GbASXbRGytaLhHd
PJ/ppqKQ1P/oYhM/2QiRCxSB7zXHE994BNtiA1kkSbJmT1iH3GY+LHB3a6xP
45j4jf5SFPE8gYZlgOIcHJJTQL9HqpyDeJks7r4jES4KB7/I4kE3QQUSyeEi
1l3i3g+D3uMYjpe74p2XoF64cKYt2VpLAnODMcZd6kDsR1Ww7c24gsHnjaZr
6FIMjadomLy819flAoNkTCQbwYQwVoE3AgHHu1QnzGDc7b1xmoSK/4/mIU6u
TXWSQ4Qdy34mn5/eg1n0yQCHsI3DWTXFArTFX9AK524SEJv35fELxpsVvBsp
qA+MMXTviYbl1iunoXImywTpQPQeYQ97kCyRVWzpMdlgrg8DB83p3O+jPBVr
4q70RZXN+iqYJa2pM/MqrcQPX4OfEVwFKmAWan3y1JpgPJr4GLHgOSG72k1n
COCA3+vfmLwO96BbSLD6vnMagzIMUtaUR2qmYNFTJljHtQ6q7J/IYVNzgnse
cImFIlAQDMNOSGx245iFfgBCwA49TDwkyFP0XVridZhnQFL3MYEFo0AEdYOi
8BfT/zwW7O1nJGKD2426ErGtGC744leVCyWD29cxQC+5gCMBZFUlaX1geYDR
ISg0YBEaxNOTBZ6ZPubsSGBjJJHPCJEJt1U0TwIQPd/lcaJq2NTBLBBqYsKd
oKRFzHSEUdHVAd0CvKxED9r9QB3GYbO955l6WWuEPG7YNjwzPTALNyKDzb6q
6xcDRAJX0SgguHxoepgFiheg1YnePmaAKRvaGKzsQyBLdGPbWM+D5YH7CF8A
7LpDGR8rjm4A16Vzuj5iasm+Xvn//t//j3sVJnblQO9JnGF4xfb9nn2JCc2J
en7Am87EwbbKBhiNJCOAEhZnQXKZm4Rq6JsYIIW/iOB2AU8VtwoCp/TANYwT
+od1H4LQVrADeCYiOQfV/C2sGNpv4V04JscmrjCkYiOlI4Sk18f7iJ8Pjj3B
3rv4Q1AGZ+ijwW5qNT5yIP7gpf0T0R6cs2cu0fCECsamjTPP/apy4QMuSjge
56/zgauE7wQI3C3tUTxSQzauyxkU3LMCpipFFnBqbBEbJt5fFaslGonQC6RT
EKdAazYgCv4EA59Qtle0DFuRtux6MvHtV6yAYPdZQwLu4O4Hpmkc6aCoRZSz
w0pTcOXlKO7qlw158LVsnOuIMQ7xgUAcnC2KqHilmH215fp0H//1y/oL7yVH
wAy+QKdfvjHCi5jYVMQhASfbXqb0GW2Mm7ahghLAqu/EsiCttgbEQShf9gxN
CN1ecw4NsQn/MK2IyA6C5jjZCwQ7+Gp18cL68x+4AHjA5AIDi6DUNWmQO3Zv
HIUiDk/WS+CZ4sCAeNm9e5b/Yn8hEMPz+vIbIAbufuv2BuJN9wnp/noDPeZD
yQcmAnaeF9EN7oYbSQGmtTLo7TSScSBfElHklQGCCn1MLsCcWO8uvwzpeZiK
4Ej2iqhjkLQC/tDrE6IuEpCqlNxUx6LpJpPzOcqtgpiUTV7xE1J7G8Fdg9QM
ip2U2glREx/DYFj2uVvpL6BlspzIRcCL8EL8KvSMN0SE/FPX93HtL4harb+r
oCHjgDjq16IRecw218bB4r/CcPSoMM5y1cEfRZ6SI77A9pHkOcr+t+tvWLNs
FnvFq9Qh/JBSKzEBgYVJ4YT0ZiXky1YEXYiZOA0LUt8NfCmrK3FoghnS7CGJ
6sI/u/4RWjQT4qm+0fVM6wmTqryBU6SgUqsG9b2sLKbCPbXyI28aCqTpQ2aM
62vzhCxWU8B4oqoY+QWS00cbbAp7tbwQBJlj6xhqJOWcTMdb6t/eXOrfvvC/
XEOOQ3yMHMb2D6mzhROYrmrkTOdf8scra/ovGNhjJ3/RuL/SSxT+ymX+KX9+
5UdsrQKe/+4WIrj6kK1e8JfO8F8z7r9iYDrkX7zQP+GPuxBcWoKnlYIR843l
svm7J6ZgOS33TB8x556+vnGd57d7PpHIp93GftcRHVxdIPAtamDm2PQ7AyfT
8XjEwKSD2HsD9x6Lf/VGXK2VvZYoEc/nI1bDXBH8n/+4h0AtPiserhoQvlPm
P//L/5YGzoiUdsuG8c86nO/Tn90xo+4N+hpxjxrAjnn88+cVYiXiyfQdvhkI
StRnvTXDk0+gVQatPgQQ6PmjiBUa+ONolUpkwxuBx/0QXv1rECu01gBaZaJX
82+IV28iVgXXR78LXLFAR3CfReBWuCwd4BXUV/cBQvqNRKpw2ysqdgeOwK2I
gUkt96uRaeO3R+Vpma/wwJ6y9ca4UDY+Ythw04iR/wW4/Of88RELVxi6Qqx8
7i5w3YYH5hssKwLKpOZ+EMzIJvwwXkUM/EG0gvL+V+N+FKt4enNIaOSP4BVc
JRAx8Afw6r8BYkW4lAKsI4gXN8uxfHtvAh+cpc86gkj1pw8MBQ29oVnU+LNG
/t8KtdySaG/g1fq/J17h6pZ/JWL9t8Ir7FAObO9fjFfg8v4XIBatdPr/49Vv
+BPAK7gYEA6lyaqxwdkP+KBi7HSwbVW2vMN+5l6MxRMcF+PHW2VNzkGGfder
C58m5Qm82hI4uyZwTvABdTGSIZAk8ceMd60nztY6Zj/UvEJ95NfHoHBNn0qN
HMEKn26JQdoHauYWWgrX2/Sue7HhWwIUKfLAUbtbLONkL/iwS/KUJLhsncZk
mxX3rlWdHw8azV55fHcjegM91CDX1z8yQAJReCmXFdqCXDbvTx7qQMEhJh2n
Z31xU2D9brDXPJiG8vDeviY5r38cW/Cugg6mYrhOe7c2CM7fdbOVdG8eI3x0
ONCQ5CJAgIXNvMargjNjgArUaiXpH8c0LQFDSoMwwYZ7coSLpo9ogC/F6pjj
mdtpib2MCxwEE4ZIdzjz7Ji4v040DmPaO1BLcXix9GZiC58OSjExMNIxDoxB
hK2Cz5WO6SlBm4cMWj4ZT92jv9LwV8bf5cD+0UhlKN4ISyN5qu9ONO1vb8tA
aK3LNj/CRV9sXLXCsJgeAkd8cfM4x5As/ujNzzGT8IiCqRB2u+aaOzv/48cb
5cH8smDALhKPfkVAPxUNHBxfIupWfPEHEsKJaqi3YB1DfCzNDSJDw/GJOEdw
KoWb4+zdCx15qTWeeKBupMKmMPhsLnRNt0/M7kUHmM4IHyI5BR65Qqz7KEMg
k3AtchrJPWdBKlq4iXQkDOknNwYw53ojkwwtbxRIcV/h8kVUrL7dOIUaT2m5
KKqxgHzAZQWAeMOXHcJsEdUBATteYg3kI32gWDXLdDC5QWclS1B00zBUehXy
9rKyFAnxD8ky8EZWyzAnzJQw8R8sC5+8ZmOjD8wqsFyx/QNbgsM3q5MaMskL
7AROWyjJBykXNuk86jg40BKedtUv+icptkCZ4bha8e65hrXgc940KZ05Lxlg
jPSKX53U00DowHFjB3FyqOW0RUjIfy2Nm9/+58r6P7iyYKmxiqAriI00BEVF
0hRi5f4HRcgSQmttHGQVj/R1MuWrii5t4ajrNw4HvaAUD4w5ARScERTEtylt
ZdX0qZtw6qskSL9ym6HHdHK65whhbXziyaaHiXlIuSCRaxbTcXjZGwGOY9lu
PmFTV/BJeBrOJUz3K+IQ39jz1Uz6Os1KwDcwexlekLlMjl7hujFlnhYELLq+
EY5ryOQmIoEfUOps++VjyRGs75jvQheuF5B+GsNF0bDm434hKUC3hMJlde3X
y8IfTG2iVQTbYLQCqAVqGkW1Rx9Tj7JiSmw4yZ0QXV+wf/tGFUT35KJfX8W9
wpRgEnoDtWMzyVQ6lUyjvzPJTDqeiScTBVFer5P5rFwQ83I6V5DFfD6Xya0L
mVQmncrnC/m0EE9KOSm+yhSe6RkpOo3IMZLZlJxKr7KFQiov5zIpSczmRCEv
y6lcNpPMFTKJVEaOy4msnM6joRLxlJhISLlUPCet03FcCxwyDmzjYIkysJQY
kObfvxyz1JFmYzSI2bsHwRa//OT++c9/shlbj8DwQFUhNetL1Xqzx+PMhFFz
VpxU+XZ1wZc6/XKblKTnzlO7PpUq9U3JLqI/G7s1S+wvR0m9q8p6tZRu1o6D
zGOurGSeWglrl19sC9ncfpawVvFifp/pcUa5n5x0s3VjP187jXjSaJ7mZtG6
2x2Ld+lyI9dLieZgbJWt02JdPxlojFKxNGyN4l2h2NxX69z0ZXgZvozGs+K0
XBdzj+16VnzZyfKlKT3dzXrTflOrGuVEoZzYleunbrmx2VXKp12jeJ62y8Xm
nCsWp3p52GwUN7CCyrZ/Kc3z5UFFztQsuaaphr5dz7ZWsjo4pea1zkXKau3R
djfUUrPS+pQbcqecLFtap1C2Mv1ccRtvnbXmbpLIv2zaQ6tQPM2FlK4lNXH1
MjaUVXI+e9UyVWWeWqfUzVpdW9xlPKyZ42b5daAmh2JRtDYvvY5aGg0vpYSY
nF2a5e10+dSLN6uOKo93m0GjdF5cEnF41pk7KidPS6pcrzli/ax2tN5xNcmV
tdNiQgBWtFmARcGLuwmwYbWI9zVpbCbVVXs2U1dzW34ZNnb73NnIK2Y3Jx2z
De41WZR3u9b+YLZno7tH43KXfMlayt1jKdnO7hLHxCWzP7wq1tbO59alTPG8
LGeXRq1yLMd3y/7R4BLp9aAWz53K5/jLqTXrzw+j2syenXLmsNVY9V43u2bx
nE92SmpjeDZKJppU9dQZrcZj83iUkybX3Ka2jZO83ydn0si4yy3XudN20bg8
dR+nytrWlVO3PbYOq6OtdTbli1I9dRUztVQn43OzVhFqXLU7c2bH8riVe6ot
43NbnbT05WO52htszqvZRs+Wy8lVflpd5Q11nCqe1bGyb41Hg3jf6rek9YCb
t5qJ4p2Zm2mnRHk53CeN2WCqVgvZ8Wxq1c7rXe6pvDDFidkcru60Wik97ZRl
W3AyzkHKTYQDN22Z3bZtT9fxZi5dnb4IW2OUzpqDkdx+Vcf79XFrbp7GxfHS
LG3yzWVpkZutNhO909Trk4letThrLM7Uil48idLieFh2h4t+pvoyznb6Zz0h
zNbTO6VxN1KsZPFSe7UXarZZbojKoGi328LdeJfjpoNayWqO6on9Rs/VanE9
I5sNWamVR71VPnca71Uzvr2T8p3Uy0Cr7NOvxnDQrswUwTYai6dOhcu1jdak
eR4k5frrS3ekblJGpWBuU0v90p807fNjelxxzvPU/q41zY9qRjMuLavSdHQS
jGZzMlc4R5WcwVRzSoeWvRXlamU8N8zDqfNaOswm+qJiTi6F9NKplNraZqBr
Y23Qby+zk8ZB1JRWfapxc63Y3l2M3G5ePC1GdjW5XOw7r81WTVvWXked5mSr
mMpyO3osbJN1WRvu1G5rv7CTGbFaP2drc+71aXTMDwRVy136RUVsPKpSY9p3
pimj1nxytn3BOY2tYdFs5RqN484+ZwpLp1NzSpuGlpFH2oJbqHLLbnXq5YFt
Czmzndw2T5uOqpU746JwrO0XLwdDnDcX7Y52yhx7T0+jefNlUFpNzNnTatrP
cNNC7TGb22w243mp9VRequuNqB766WRS6CWTWl7o95TJZuloL2I5KauikrmM
2vXSSm5rtYk4s7nlylwtsstyuza6vK72Wre+kOPavpdVt7lRRuopCLrL4Sae
1haH8eu8XEtpB01tTUaO2it0lQuX7VzmaIXjyVDaiCnhNI5rL1NrM000hXjx
pVtri+dWMas0pKxSPM+7q+n+3B8bk/5kqnatlOpwptCrV7t1U2icusbQLhTO
42bitV4wF9pabqrZzno5PunNdMcuHXv9kjLd9qblR2HRbHaqWm7/wk3MU2Yh
Ne+yL2P1zhTUjip2K69OvLPp9vLWIjtVl61SvVcbF9vj3nj+JNUW3dKl3a6P
yy+FxKTCzQdqv3Oct3Vn3Nll5I4hbTfaqL4/Z+rLankzH6dPleJoEY9baiIn
zTKpuvzyZE2dlrAQkdDMcGbbmIyFQWtyWCQz7cvlzijlhIY5ix+L+VxLkEdl
e797EceZ5rAtOaI8tXdPvZGQXOfKE2s9HHHbfn0X34yL6dY5f1c75Q/1eafe
Ome1hDq+zMXuU6bRyW1bu9q22pZXixep2Kk/dWeJ07mnTBvlJnc8l1+eHou7
U6NaORZ72f122rHEparpm/FKLl3sfu0gJYX8oDlOmrlRuSg4/buJWdsYo7tE
eTPjWk1JGZnd+NzqrscFpVQdbZ2F0GkkjOlLyRRnuVdz05N2k3RZXSP02xxS
xkCfl4xN5aX71J7KnDle185xNeH06qNOuVybKU7+fC6mh3fm9uA09cvTtNho
KdV1ozlKv5wn0mPtNEyZFaN9Rnr04o57suvOrHWWC0bXehqrTvZw0fTsa3uo
Du1T3pCOja2ZeezN97vytvB4Hh61plod2bPZy6UVr/Vq3ONdozcptK1qufyS
vRMPL5VVtZedaiO1dlS74rn2uhAm+lxIiPZ2PCuXhYSwWErS3KpI5/6pu+b6
q+kpPznsFrlicrQXJVMzi9n8uGPMT73ixqnVE+f5LJ26lB8HqaeJvZ9om8Zo
Wl8Zld3MLrTzXOKudNmkX7btuVjc2VZyXauU0qfdTliKpdRh2n86DIdJ2Skn
hLK1MsaZ40Tuzlqz8Z1td3ZnVebanWVq1yiYwisSZJP2cC6q8rmINLhRU+vv
EgNV6xUaje5metq0mplGXk4JOXF4yp9zi23mJMrcpShtD6dRXZwUCuW9IwxX
cUGevBbO5202nbSM7iWdtcpDM1l83CSGq2Vzv5/JWXWV3u9a+YXU5aR6emxV
U9PXSso5FC+HVKcwVHOF/fksldItJ3cy76RBdSIYy5VwJ3Tny2x+ea5UX4Yt
cXOxegXuqVzqiR1xejc2X0pPg3YidZHLUnFWn26LCTG+L6UH7dki8yjHc20x
v6+jVmqrXF7FM/3hsD2vc5o2E1t6pdJcjjvd9GwgpcTiZr49Zqzm7rE0mA+z
5bppZ/WXRmLeE5pZe2Kl0NrXc7UrbO34idOmg127W48X56dJYVYql6a57aHW
y41OycpTSRpO1WGln5+/zjpPNSdrL4+1u6fNMp+On4xhvpkscCVtnsnsx4vk
VnK6dnu/m6YSvZUtnoXMaWQfku2xYj3VUi1juZsI4vTREZojTWue6k9q/LWk
drl8wyxsW32puCwWB8XFqfySr0laJV28VJRGo7JDAquz7uTjZb0t7pKnxapU
fSwZ9VH7NDuoiZbFbbbpdjldGd/N1+3lcIF4TLtTvDi17rS1zk8qymLR02ZW
YdKf9YpG+SX91LZzpWGuvcx0u3oZycZq1W4UFKRKlqxGpf3UKVu1dr65yKRL
GUHOHyrt+al/2E4ctbFTMuXJrNEYtQXDWginY3c/Waa5Rrl/l21ZL3lLyy1q
5+35NFC2s0ZTTcTH7eQw6TzlLxtFKrfFxGVQ2qbV9uV4sS6DUyerZOxumrOn
mY3aLayWm0F73TDsXfrQk/bLYaZ2aQrGtpUXDHFoWvHWbHjMW2YcsZlqpbSv
yM2tbBpbiRPNTBuhzK5XSR+Hq/XLwZZmzmZqWMX9pXiKL8aGXOkU1+WMfRFa
eyPfjmfL3fwl10/N9qX8CIm21ipfXeW0+kJqFKZ5LdWdvCBTup/piJPiZW+U
WsdyejLZmNlaQWplMo1WynqtnROFU3df33ZmXHElnh5b85awsY6L/aRuvK6U
qtjZyrWe1lZ2ablu1AvaOFFdbU/blbbJdCrZ3fKp1kasuq/vVpw4kV7jFx3p
QoNdwmjttkhZSGxm9XRzvqm2muPlvLqKp7IlbVIcj8RMdTGTnUPp8NJdDNuH
udzkRtZB2zZSdWVZOiVGzYtVWSy6u1Su31jHu52tsC3JqtSy9yOjI1at/vgQ
nxTOJ00WX+dGs+IsuWE+V0h3KruysciezEWtlhmL+2y6sdGGwjizGw8RZJxJ
c7PqGCVtqFSmaIxzHv3Yb/vScDDi4pdsvDd/GT91VnZ89nK2mrPuUpPUc+Px
cbPTd5WOOt6M96tVcVe/y00KotoZp9PqbFFJJnvxlM51FTVvNuYvh+xlMU/J
NeGivjZzL53qbJkRO6dEZiUlWo3qcWT2S+cZohP9zkyP2sbImvbS1aHGJQy1
2k5P7Pni7jBLjsqz9KBaGpr94bm+XJ633ZHwWGzrlVQz0UEKQG9bGHeeeqtZ
08wWVoN2ocftx/luvVSX56XXanG0fZKFgobUCMUe18ZL66TLi2JnUHpqxLfp
s2wt57NkvVFYHRLJzamktVYlbpdNW6fl5lHaV5RyN5F9LMd7Zrz4KqSNyczu
t7IlS1puc/Fzbbm/qyiv8iafmXQvp51a6AqJ0oQr2t3+Mp2xkR3SLG2nT9my
oe4EOZ5MGYfu5iVh6rVZZiTmxQlCg/q0m1g25vmi3CmezPYhc7jjLotDsdNu
IrRt65I263Wqm2nPmA7P88Q832rqjjjTR8Jl1tUkPd8cxu8qNWdeXhvNzvJ4
Ho6O3EWZdcRKfdZuG2qr+jjM2mk1kS8sdi/TSlZ35qvKtKWWLWE7LYynk5SJ
hJL9VLubOGJLUc/9HbctHbOLaWM7tFvZ8z6lJTMpp7fPDLXdaX85jx6HL8fN
aNxDhNN42e8KtbTVn7XNu7u6VpKapZbG7eqV03ZXe3Fmh1JftBVx2euL44PT
Os+nfbFSOieUu8zuXNrkduNex7Bz9fXMnBUm2eY6U28fF1yl+dQ/K0/Gpild
mvnyyTCtTHviDPPTur2trub78tqePo3XanYnZZvTVjVxfD2W2vu5Pm5kUqcj
J3fvFn3rpb8t5o3evLW/bKStaA/sPeJTL9XHZXrV757r84q8GSS1hqStm5mu
8tp43Db7qdpKtri0OjlX55uXUWI3Sowapf1ms+0J7eQsGS+MhXg9rV1q5/Sw
1xIULVc8duuZWV/a9NVBJ7XV4t0qtxeKd/KyvcinTd3sypmL0Nwtx0thUdxP
2i+H0aJS2tZPk6WqGMfuZjdfIjWxaiPlsK21tFrjkUs2FkukrI+nJ81UXlfq
abhqGLNVT6o/ngr7+erYTJdbp/XdLC4Ns4mJvJlu5WQ1s0+V2k6xvNM5W5Tv
xq8NPaHF7Xm8XpRXKlJyt8osrZ129qJ5dzlbh50lVF/KxcN80XSapX1+bir9
7Pa82G4M7rCqaPmEhHRopZuvOX11JjnDnDqJPz1ah3K51FpUVbGlzZAmNE/n
XlZLI7USVmcjnWz1S1pS4HqnzjI7u3T0VtVY1Jz0fjHrnedn9aA6L+auacwa
nd5hvzghghoLRmo/bzgNNZ5s1tOqWq5MFG6pZDq9RRORcVaYqr16cpqKXzod
49halHdqq1dKll4lq9QZC73xoTSZbq1huXuamq/VXWXflFLcvlmpLc4OUnOQ
gOlmeuPp5SjPk6oRXwxPgmqsi5dt+TWVqjVfnrqrpKosC2mEd05B7ZTFl82B
O9Xz8XS9Na4mhp2CiYwve7w67Ht9vaJu4y+5fa/9lFX308PsdBr0U8ND8ZS6
oMWNZ7tddRGfNbmi2Uy0llJ8tjk1moaxbLYHqVm3t7ibpg+FxV5ONA8TNX1A
Vmd5WRWsxm65G7ZLy85LsVuqvUzG3OHpyUk86eIy25OdcVw1txdpv9J2+22v
ZeTVfuZltbM6neym4Riy+jTOV15t1cxU25f9uHfuIHIumsnEOTO+jMREzVo+
2q2+UyjVq2lhMi41Kxu98Zp+qlzSy4W90Bv71XzWaS1P5/VOPB6q2nDOVYdm
xlF68aK9FM9PT5VqsjUUm8pjtd1b58uTojjs54up/b42PDhnbS7IpZaTbrRP
6XkmhZhuntt2BN2pIvSK5zL93by8beSm7dJ0t0226rvXkWCfC51kszqq1xNb
w17Pt+NuXT0/HftaMZEcDTZce1Zw+lo5J2/upEVdKSLiFc1RVm3lnxrjp3k8
vqzazeZs3k69IqNoW8lq9WxcWbekYVHUmqM8J24byqDWS+WfShV5199YtV72
/JKRT0Jiqtdyyc3Fkdrz1D7XFtZW1yzPyq+VyzaZl+u6nk8Ie27YbqQea+W7
hTId1c+z+aCpD6eIENJiYhDf20O0rVbmku32bGTojJf16fxuen6tPvW2Zl9a
WjPucqm1ps2WNTO3aiIh2L1UNVc85zPOpHLuZ0cvdmVZN89JTdhVrHPzsF0V
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

-->

</rfc>
