<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ehlen-openpgp-nist-bp-comp-02" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="NIST Brainpool PQC">PQ/T Composite Schemes for OpenPGP using NIST and Brainpool Elliptic Curve Domain Parameters</title>
    <seriesInfo name="Internet-Draft" value="draft-ehlen-openpgp-nist-bp-comp-02"/>
    <author initials="Q." surname="Dang" fullname="Quynh Dang">
      <organization>NIST</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>quynh.dang@nist.gov</email>
      </address>
    </author>
    <author initials="S." surname="Ehlen" fullname="Stephan Ehlen">
      <organization>BSI</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>stephan.ehlen@bsi.bund.de</email>
      </address>
    </author>
    <author initials="S." surname="Kousidis" fullname="Stavros Kousidis">
      <organization>BSI</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>kousidis.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="J." surname="Roth" fullname="Johannes Roth">
      <organization>MTG AG</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>johannes.roth@mtg.de</email>
      </address>
    </author>
    <author initials="F." surname="Strenzke" fullname="Falko Strenzke">
      <organization>MTG AG</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>falko.strenzke@mtg.de</email>
      </address>
    </author>
    <date year="2025" month="July" day="07"/>
    <area>sec</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 149?>

<t>This document defines PQ/T composite schemes based on ML-KEM and ML-DSA combined with ECDH and ECDSA algorithms using the NIST and Brainpool domain parameters for the OpenPGP protocol.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ehlen-openpgp-nist-bp-comp/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WG Working Group mailing list (<eref target="mailto:openpgp@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/openpgp/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/openpgp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/openpgp-pqc/draft-ehlen-openpgp-nist-bp-comp"/>.</t>
    </note>
  </front>
  <middle>
    <?line 153?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines PQ/T composite schemes based on ML-KEM and ML-DSA combined with ECDH and ECDSA using the NIST and Brainpool domain parameters for the OpenPGP protocol. It is an extension of <xref target="I-D.draft-ietf-openpgp-pqc"/>, which introduces post-quantum cryptography in OpenPGP using hybrid KEMs and digital signatures combining ML-KEM and ML-DSA with ECC algorithms based on the Edwards Curves defined in <xref target="RFC7748"/> and <xref target="RFC8032"/>.</t>
      <t>Due to their long-standing and wide deployment, there are well-tested, secure, and efficient implementations of ECDSA and ECDH with NIST-curves <xref target="SP800-186"/>. The same applies to Brainpool curves <xref target="RFC5639"/> which are recommended or required in certain regulatory domains, for instance in Germany <xref target="TR-03111"/>.  The purpose of this document is to support users who would like to or have to use such hybrid KEMs and/or signatures with OpenPGP.</t>
      <section anchor="conventions-used-in-this-document">
        <name>Conventions used in this Document</name>
        <section anchor="terminology-for-multi-algorithm-schemes">
          <name>Terminology for Multi-Algorithm Schemes</name>
          <t>The terminology in this document is oriented towards the definitions in <xref target="RFC9794"/>.
Specifically, the terms "multi-algorithm", "composite" and "non-composite" are used in correspondence with the definitions therein.
The abbreviation "PQ" is used for post-quantum schemes.
To denote the combination of post-quantum and traditional schemes, the abbreviation "PQ/T" is used.
The short form "PQ(/T)" stands for PQ or PQ/T.</t>
        </section>
      </section>
      <section anchor="post-quantum-cryptography">
        <name>Post-Quantum Cryptography</name>
        <t>This section describes the individual post-quantum cryptographic schemes.
All schemes listed here are believed to provide security in the presence of a cryptographically relevant quantum computer.</t>
        <section anchor="mlkem-intro">
          <name>ML-KEM</name>
          <t>ML-KEM <xref target="FIPS-203"/> is based on the hardness of solving the Learning with Errors problem in module lattices (MLWE).
The scheme is believed to provide security against cryptanalytic attacks by classical as well as quantum computers.
This specification defines ML-KEM only in composite combination with ECDH encryption schemes in order to provide a pre-quantum security fallback.</t>
        </section>
        <section anchor="mldsa-intro">
          <name>ML-DSA</name>
          <t>ML-DSA <xref target="FIPS-204"/> is a signature scheme that, like ML-KEM, is based on the hardness of solving the Learning With Errors problem and a variant of the Short Integer Solution problem in module lattices (MLWE and SelfTargetMSIS).
Accordingly, this specification only defines ML-DSA in composite combinaton with ECDSA signature schemes.</t>
        </section>
      </section>
      <section anchor="elliptic-curve-cryptography">
        <name>Elliptic Curve Cryptography</name>
        <t>The ECDH encryption is defined here as a KEM.</t>
        <t>All elliptic curves for the use in the composite combinations are taken from <xref target="RFC9580"/>.</t>
        <t>For interoperability this extension offers ML-* in composite combinations with the NIST curves P-256, P-384 defined in <xref target="SP800-186"/> and the Brainpool curves brainpoolP256r1, brainpoolP384r1 defined in <xref target="RFC5639"/>.</t>
      </section>
      <section anchor="applicable-specifications-for-the-use-of-pqc-algorithms-in-openpgp">
        <name>Applicable Specifications for the use of PQC Algorithms in OpenPGP</name>
        <t>This document is to be understood as an extension of <xref target="I-D.draft-ietf-openpgp-pqc"/>, which introduced PQC in OpenPGP, in that it defines further algorithm code points.
All general specifications in <xref target="I-D.draft-ietf-openpgp-pqc"/> that pertain to the ML-KEM and ML-DSA composite schemes or generally cryptographic schemes defined therein equally apply to the schemes specified in this document.</t>
      </section>
    </section>
    <section anchor="preliminaries">
      <name>Preliminaries</name>
      <t>This section provides some preliminaries for the definitions in the subsequent sections.</t>
      <section anchor="elliptic-curves">
        <name>Elliptic curves</name>
        <section anchor="sec1-format">
          <name>SEC1 EC Point Wire Format</name>
          <t>Elliptic curve points of the generic prime curves are encoded using the SEC1 (uncompressed) format as the following octet string:</t>
          <artwork><![CDATA[
B = 04 || X || Y
]]></artwork>
          <t>where <tt>X</tt> and <tt>Y</tt> are coordinates of the elliptic curve point <tt>P = (X, Y)</tt>, and each coordinate is encoded in the big-endian format and zero-padded to the adjusted underlying field size.
The adjusted underlying field size is the underlying field size rounded up to the nearest 8-bit boundary, as noted in the "Field size" column in <xref target="tab-ecdh-nist-artifacts"/>, <xref target="tab-ecdh-brainpool-artifacts"/>, or <xref target="tab-ecdsa-artifacts"/>.
This encoding is compatible with the definition given in <xref target="SEC1"/>.</t>
        </section>
        <section anchor="measures-to-ensure-secure-implementations">
          <name>Measures to Ensure Secure Implementations</name>
          <t>In the following measures are described that ensure secure implementations according to existing best practices and standards defining the operations of Elliptic Curve Cryptography.</t>
          <t>Even though the zero point, also called the point at infinity, may occur as a result of arithmetic operations on points of an elliptic curve, it MUST NOT appear in any ECC data structure defined in this document.</t>
          <t>Furthermore, when performing the explicitly listed operations in <xref target="ecdh-kem"/> it is REQUIRED to follow the specification and security advisory mandated from the respective elliptic curve specification.</t>
        </section>
      </section>
    </section>
    <section anchor="supported-public-key-algorithms">
      <name>Supported Public Key Algorithms</name>
      <t>This section specifies the composite ML-KEM + ECDH and ML-DSA + ECDSA schemes.
All of these schemes are fully specified via their algorithm ID, that is, they are not parametrized.</t>
      <section anchor="algorithm-specifications">
        <name>Algorithm Specifications</name>
        <t>For encryption, the following composite KEM schemes are specified:</t>
        <table anchor="kem-alg-specs">
          <name>KEM algorithm specifications</name>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Algorithm</th>
              <th align="left">Requirement</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">TBD</td>
              <td align="left">ML-KEM-512+ECDH-NIST-P-256</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mlkem"/></td>
            </tr>
            <tr>
              <td align="right">TBD</td>
              <td align="left">ML-KEM-768+ECDH-NIST-P-384</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mlkem"/></td>
            </tr>
            <tr>
              <td align="right">TBD</td>
              <td align="left">ML-KEM-1024+ECDH-NIST-P-384</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mlkem"/></td>
            </tr>
            <tr>
              <td align="right">TBD</td>
              <td align="left">ML-KEM-768+ECDH-brainpoolP256r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mlkem"/></td>
            </tr>
            <tr>
              <td align="right">TBD</td>
              <td align="left">ML-KEM-1024+ECDH-brainpoolP384r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mlkem"/></td>
            </tr>
          </tbody>
        </table>
        <t>For signatures, the following (composite) signature schemes are specified:</t>
        <table anchor="sig-alg-specs">
          <name>Signature algorithm specifications</name>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Algorithm</th>
              <th align="left">Requirement</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">TBD</td>
              <td align="left">ML-DSA-44+ECDSA-NIST-P-256</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mldsa"/></td>
            </tr>
            <tr>
              <td align="right">TBD</td>
              <td align="left">ML-DSA-65+ECDSA-NIST-P-384</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mldsa"/></td>
            </tr>
            <tr>
              <td align="right">TBD</td>
              <td align="left">ML-DSA-87+ECDSA-NIST-P-384</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mldsa"/></td>
            </tr>
            <tr>
              <td align="right">TBD</td>
              <td align="left">ML-DSA-65+ECDSA-brainpoolP256r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mldsa"/></td>
            </tr>
            <tr>
              <td align="right">TBD</td>
              <td align="left">ML-DSA-87+ECDSA-brainpoolP384r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-mldsa"/></td>
            </tr>
          </tbody>
        </table>
        <section anchor="experimental-codepoints-for-interop-testing">
          <name>Experimental Codepoints for Interop Testing</name>
          <t>[ Note: this section to be removed before publication ]</t>
          <t>The algorithms in this draft are not assigned a codepoint in the current state of the draft since there are not enough private/experimental code points available to cover all newly introduced public-key algorithm identifiers.</t>
          <t>The use of private/experimental codepoints during development are intended to be used in non-released software only, for experimentation and interop testing purposes only.
An OpenPGP implementation MUST NOT produce a formal release using these experimental codepoints.
This draft will not be sent to IANA without every listed algorithm having a non-experimental codepoint.</t>
        </section>
      </section>
    </section>
    <section anchor="algorithm-combinations">
      <name>Algorithm Combinations</name>
      <section anchor="composite-kems">
        <name>Composite KEMs</name>
        <t>The ML-KEM + ECDH public-key encryption involves both the ML-KEM and an ECDH KEM in a non-separable manner.
This is achieved via KEM combination, i.e. both key encapsulations/decapsulations are performed in parallel, and the resulting key shares are fed into a key combiner to produce a single shared secret for message encryption.</t>
      </section>
      <section anchor="composite-signatures">
        <name>Composite Signatures</name>
        <t>The ML-DSA + ECDSA signature consists of independent ML-DSA and ECDSA signatures, and an implementation MUST successfully validate both signatures to state that the ML-DSA + ECDSA signature is valid.</t>
      </section>
      <section anchor="key-version-binding">
        <name>Key Version Binding</name>
        <t>All PQ(/T) asymmetric algorithms are to be used only in v6 (and newer) keys and certificates, with the single exception of ML-KEM-768+X25519 (algorithm ID 35), which is also allowed in v4 encryption-capable subkeys.</t>
      </section>
    </section>
    <section anchor="composite-kem-schemes">
      <name>Composite KEM Schemes</name>
      <section anchor="building-blocks">
        <name>Building Blocks</name>
        <section anchor="ecc-kem">
          <name>ECDH KEM</name>
          <t>In this section we define the encryption, decryption, and data formats for the ECDH component of the composite algorithms.</t>
          <t><xref target="tab-ecdh-nist-artifacts"/> and <xref target="tab-ecdh-brainpool-artifacts"/> describe the ECDH KEM parameters and artifact lengths.</t>
          <table anchor="tab-ecdh-nist-artifacts">
            <name>NIST curves parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">NIST P-256</th>
                <th align="left">NIST P-384</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">TBD (ML-KEM-512+ECDH-NIST-P-256)</td>
                <td align="left">TBD (ML-KEM-768+ECDH-NIST-P-384, ML-KEM-1024+ECDH-NIST-P-384, )</td>
              </tr>
              <tr>
                <td align="left">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="left">ECDH KEM</td>
                <td align="left">ECDH-KEM <xref target="ecdh-kem"/></td>
                <td align="left">ECDH-KEM <xref target="ecdh-kem"/></td>
              </tr>
              <tr>
                <td align="left">ECDH public key</td>
                <td align="left">65 octets of SEC1-encoded public point</td>
                <td align="left">97 octets of SEC1-encoded public point</td>
              </tr>
              <tr>
                <td align="left">ECDH secret key</td>
                <td align="left">32 octets big-endian encoded secret scalar</td>
                <td align="left">48 octets big-endian encoded secret scalar</td>
              </tr>
              <tr>
                <td align="left">ECDH ephemeral</td>
                <td align="left">65 octets of SEC1-encoded ephemeral point</td>
                <td align="left">97 octets of SEC1-encoded ephemeral point</td>
              </tr>
              <tr>
                <td align="left">ECDH key share</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
            </tbody>
          </table>
          <table anchor="tab-ecdh-brainpool-artifacts">
            <name>Brainpool curves parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">brainpoolP256r1</th>
                <th align="left">brainpoolP384r1</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">TBD (ML-KEM-768+ECDH-brainpoolP256r1)</td>
                <td align="left">TBD (ML-KEM-1024+ECDH-brainpoolP384r1)</td>
              </tr>
              <tr>
                <td align="left">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="left">ECDH KEM</td>
                <td align="left">ECDH-KEM <xref target="ecdh-kem"/></td>
                <td align="left">ECDH-KEM <xref target="ecdh-kem"/></td>
              </tr>
              <tr>
                <td align="left">ECDH public key</td>
                <td align="left">65 octets of SEC1-encoded public point</td>
                <td align="left">97 octets of SEC1-encoded public point</td>
              </tr>
              <tr>
                <td align="left">ECDH secret key</td>
                <td align="left">32 octets big-endian encoded secret scalar</td>
                <td align="left">48 octets big-endian encoded secret scalar</td>
              </tr>
              <tr>
                <td align="left">ECDH ephemeral</td>
                <td align="left">65 octets of SEC1-encoded ephemeral point</td>
                <td align="left">97 octets of SEC1-encoded ephemeral point</td>
              </tr>
              <tr>
                <td align="left">ECDH key share</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
            </tbody>
          </table>
          <t>The SEC1 format for point encoding is defined in <xref target="sec1-format"/>.</t>
          <t>The various procedures to perform the operations of an ECDH KEM are defined in the following subsections.
Specifically, each of these subsections defines the instances of the following operations:</t>
          <artwork><![CDATA[
(ecdhCipherText, ecdhKeyShare) <- ECDH-KEM.Encaps(ecdhPublicKey)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(ecdhKeyShare) <- ECDH-KEM.Decaps(ecdhCipherText, ecdhSecretKey)
]]></artwork>
          <t>To instantiate <tt>ECDH-KEM</tt>, one must select a parameter set from <xref target="tab-ecdh-nist-artifacts"/> or <xref target="tab-ecdh-brainpool-artifacts"/>.</t>
          <section anchor="ecdh-kem">
            <name>ECDH-KEM</name>
            <t>The operation <tt>ECDH-KEM.Encaps()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>
                <t>Generate an ephemeral key pair {<tt>v</tt>, <tt>V=vG</tt>} as defined in <xref target="SP800-186"/> or <xref target="RFC5639"/> where <tt>v</tt> is a random scalar with <tt>0 &lt; v &lt; n</tt>, <tt>n</tt> being the base point order of the elliptic curve domain parameters</t>
              </li>
              <li>
                <t>Compute the shared point <tt>S = vR</tt>, where <tt>R</tt> is the recipient's public key <tt>ecdhPublicKey</tt>, according to <xref target="SP800-186"/> or <xref target="RFC5639"/></t>
              </li>
              <li>
                <t>Extract the <tt>X</tt> coordinate from the SEC1 encoded point <tt>S = 04 || X || Y</tt> as defined in section <xref target="sec1-format"/></t>
              </li>
              <li>
                <t>Set the output <tt>ecdhCipherText</tt> to the SEC1 encoding of <tt>V</tt></t>
              </li>
              <li>
                <t>Set the output <tt>ecdhKeyShare</tt> to <tt>X</tt></t>
              </li>
            </ol>
            <t>The operation <tt>ECDH-KEM.Decaps()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>
                <t>Compute the shared Point <tt>S</tt> as <tt>rV</tt>, where <tt>r</tt> is the <tt>ecdhSecretKey</tt> and <tt>V</tt> is the <tt>ecdhCipherText</tt>, according to <xref target="SP800-186"/> or <xref target="RFC5639"/></t>
              </li>
              <li>
                <t>Extract the <tt>X</tt> coordinate from the SEC1 encoded point <tt>S = 04 || X || Y</tt> as defined in section <xref target="sec1-format"/></t>
              </li>
              <li>
                <t>Set the output <tt>ecdhKeyShare</tt> to <tt>X</tt></t>
              </li>
            </ol>
          </section>
        </section>
        <section anchor="mlkem-ops">
          <name>ML-KEM</name>
          <t>ML-KEM features the following operations:</t>
          <artwork><![CDATA[
(mlkemCipherText, mlkemKeyShare) <- ML-KEM.Encaps(mlkemPublicKey)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(mlkemKeyShare) <- ML-KEM.Decaps(mlkemCipherText, mlkemSecretKey)
]]></artwork>
          <t>The above are the operations <tt>ML-KEM.Encaps</tt> and <tt>ML-KEM.Decaps</tt> defined in <xref target="FIPS-203"/>.
Note that <tt>mlkemPublicKey</tt> is the encapsulation and <tt>mlkemSecretKey</tt> is the decapsulation key.</t>
          <t>ML-KEM has the parametrization with the corresponding artifact lengths in octets as given in <xref target="tab-mlkem-artifacts"/>.
All artifacts are encoded as defined in <xref target="FIPS-203"/>.</t>
          <table anchor="tab-mlkem-artifacts">
            <name>ML-KEM parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">ML-KEM-512</th>
                <th align="left">ML-KEM-768</th>
                <th align="left">ML-KEM-1024</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">TBD</td>
                <td align="left">TBD</td>
                <td align="left">TBD</td>
              </tr>
              <tr>
                <td align="left">Public key</td>
                <td align="left">800 octets</td>
                <td align="left">1184 octets</td>
                <td align="left">1568 octets</td>
              </tr>
              <tr>
                <td align="left">Secret key</td>
                <td align="left">64 octets</td>
                <td align="left">64 octets</td>
                <td align="left">64 octets</td>
              </tr>
              <tr>
                <td align="left">Ciphertext</td>
                <td align="left">768 octets</td>
                <td align="left">1088 octets</td>
                <td align="left">1568 octets</td>
              </tr>
              <tr>
                <td align="left">Key share</td>
                <td align="left">32 octets</td>
                <td align="left">32 octets</td>
                <td align="left">32 octets</td>
              </tr>
            </tbody>
          </table>
          <t>To instantiate <tt>ML-KEM</tt>, one must select a parameter set from the column "ML-KEM" of <xref target="tab-mlkem-artifacts"/>.</t>
        </section>
      </section>
      <section anchor="ecc-mlkem">
        <name>Composite Encryption Schemes with ML-KEM</name>
        <t><xref target="kem-alg-specs"/> specifies the following ML-KEM + ECDH composite public-key encryption schemes:</t>
        <table anchor="tab-mlkem-ecc-composite">
          <name>ML-KEM + ECDH composite schemes</name>
          <thead>
            <tr>
              <th align="right">Algorithm ID reference</th>
              <th align="left">ML-KEM</th>
              <th align="left">ECDH-KEM curve</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">TBD (ML-KEM-512+ECDH-NIST-P-256)</td>
              <td align="left">ML-KEM-512</td>
              <td align="left">NIST P-256</td>
            </tr>
            <tr>
              <td align="right">TBD (ML-KEM-768+ECDH-NIST-P-384)</td>
              <td align="left">ML-KEM-768</td>
              <td align="left">NIST P-384</td>
            </tr>
            <tr>
              <td align="right">TBD (ML-KEM-1024+ECDH-NIST-P-384)</td>
              <td align="left">ML-KEM-1024</td>
              <td align="left">NIST P-384</td>
            </tr>
            <tr>
              <td align="right">TBD (ML-KEM-768+ECDH-brainpoolP256r1)</td>
              <td align="left">ML-KEM-768</td>
              <td align="left">brainpoolP256r1</td>
            </tr>
            <tr>
              <td align="right">TBD (ML-KEM-1024+ECDH-brainpoolP384r1)</td>
              <td align="left">ML-KEM-1024</td>
              <td align="left">brainpoolP384r1</td>
            </tr>
          </tbody>
        </table>
        <t>The ML-KEM + ECDH composite public-key encryption schemes are built according to the following principal design:</t>
        <ul spacing="normal">
          <li>
            <t>The ML-KEM encapsulation algorithm is invoked to create an ML-KEM ciphertext together with an ML-KEM symmetric key share.</t>
          </li>
          <li>
            <t>The encapsulation algorithm of an ECDH KEM is invoked to create an ECDH ciphertext together with an ECDH symmetric key share.</t>
          </li>
          <li>
            <t>A Key-Encryption-Key (KEK) is computed as the output of a key combiner that receives as input both of the above created symmetric key shares, the ECDH ciphertext, the ECDH public key, and the protocol binding information.</t>
          </li>
          <li>
            <t>The session key for content encryption is then wrapped as described in <xref target="RFC3394"/> using AES-256 as algorithm and the KEK as key.</t>
          </li>
          <li>
            <t>The PKESK packet's algorithm-specific parts are made up of the ML-KEM ciphertext, the ECDH ciphertext, and the wrapped session key.</t>
          </li>
        </ul>
        <section anchor="kem-key-combiner">
          <name>Key Combiner</name>
          <t>For the composite KEM schemes defined in this document the procedure <tt>multiKeyCombine</tt> that is defined in <xref section="4.2.1" sectionFormat="of" target="I-D.draft-ietf-openpgp-pqc"/> MUST be used to compute the KEK that wraps a session key.</t>
        </section>
        <section anchor="ecc-mlkem-generation">
          <name>Key Generation Procedure</name>
          <t>The implementation MUST generate the ML-KEM and the ECDH component keys independently.
ML-KEM key generation follows the specification in <xref target="FIPS-203"/>, and the artifacts are encoded as fixed-length octet strings whose sizes are listed <xref target="mlkem-ops"/>.
ECDH key generation follows the specification in <xref target="SP800-186"/> or <xref target="RFC5639"/>, and the artifacts are encoded as fixed-length octet strings whose sizes and format are listed in <xref target="tab-ecdh-nist-artifacts"/> or <xref target="tab-ecdh-brainpool-artifacts"/>.</t>
        </section>
        <section anchor="ecc-mlkem-encryption">
          <name>Encryption Procedure</name>
          <t>The procedure to perform public-key encryption with an ML-KEM + ECDH composite scheme is as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Take the recipient's authenticated public-key packet <tt>pkComposite</tt> and <tt>sessionKey</tt> as input</t>
            </li>
            <li>
              <t>Parse the algorithm ID from <tt>pkComposite</tt> and set it as <tt>algId</tt></t>
            </li>
            <li>
              <t>Extract the <tt>ecdhPublicKey</tt> and <tt>mlkemPublicKey</tt> component from the algorithm specific data encoded in <tt>pkComposite</tt> with the format specified in <xref target="mlkem-ecc-key"/>.</t>
            </li>
            <li>
              <t>Instantiate the ECDH-KEM and the ML-KEM depending on the algorithm ID according to <xref target="tab-mlkem-ecc-composite"/></t>
            </li>
            <li>
              <t>Compute <tt>(ecdhCipherText, ecdhKeyShare) = ECDH-KEM.Encaps(ecdhPublicKey)</tt></t>
            </li>
            <li>
              <t>Compute <tt>(mlkemCipherText, mlkemKeyShare) = ML-KEM.Encaps(mlkemPublicKey)</tt></t>
            </li>
            <li>
              <t>Compute <tt>KEK = multiKeyCombine(mlkemKeyShare, ecdhKeyShare, ecdhCipherText, ecdhPublicKey, algId)</tt> as defined in <xref target="kem-key-combiner"/></t>
            </li>
            <li>
              <t>Compute <tt>C = AESKeyWrap(KEK, sessionKey)</tt> with AES-256 as per <xref target="RFC3394"/> that includes a 64 bit integrity check</t>
            </li>
            <li>
              <t>Output the algorithm specific part of the PKESK as <tt>ecdhCipherText || mlkemCipherText || len(C, symAlgId) (|| symAlgId) || C</tt>, where both <tt>symAlgId</tt> and <tt>len(C, symAlgId)</tt> are single octet fields, <tt>symAlgId</tt> denotes the symmetric algorithm ID used and is present only for a v3 PKESK, and <tt>len(C, symAlgId)</tt> denotes the combined octet length of the fields specified as the arguments.</t>
            </li>
          </ol>
        </section>
        <section anchor="decryption-procedure">
          <name>Decryption Procedure</name>
          <t>The procedure to perform public-key decryption with an ML-KEM + ECDH composite scheme is as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Take the matching PKESK and own secret key packet as input</t>
            </li>
            <li>
              <t>From the PKESK extract the algorithm ID as <tt>algId</tt> and the wrapped session key as <tt>encryptedKey</tt></t>
            </li>
            <li>
              <t>Check that the own and the extracted algorithm ID match</t>
            </li>
            <li>
              <t>Parse the <tt>ecdhSecretKey</tt> and <tt>mlkemSecretKey</tt> from the algorithm specific data of the own secret key encoded in the format specified in <xref target="mlkem-ecc-key"/></t>
            </li>
            <li>
              <t>Instantiate the ECDH-KEM and the ML-KEM depending on the algorithm ID according to <xref target="tab-mlkem-ecc-composite"/></t>
            </li>
            <li>
              <t>Parse <tt>ecdhCipherText</tt>, <tt>mlkemCipherText</tt>, and <tt>C</tt> from <tt>encryptedKey</tt> encoded as <tt>ecdhCipherText || mlkemCipherText || len(C, symAlgId) (|| symAlgId) || C</tt> as specified in <xref target="ecc-mlkem-pkesk"/>, where <tt>symAlgId</tt> is present only in the case of a v3 PKESK.</t>
            </li>
            <li>
              <t>Compute <tt>(ecdhKeyShare) = ECDH-KEM.Decaps(ecdhCipherText, ecdhSecretKey)</tt></t>
            </li>
            <li>
              <t>Compute <tt>(mlkemKeyShare) = ML-KEM.Decaps(mlkemCipherText, mlkemSecretKey)</tt></t>
            </li>
            <li>
              <t>Compute <tt>KEK = multiKeyCombine(mlkemKeyShare, ecdhKeyShare, ecdhCipherText, ecdhPublicKey, algId)</tt> as defined in <xref target="kem-key-combiner"/></t>
            </li>
            <li>
              <t>Compute <tt>sessionKey = AESKeyUnwrap(KEK, C)</tt> with AES-256 as per <xref target="RFC3394"/>, aborting if the 64 bit integrity check fails</t>
            </li>
            <li>
              <t>Output <tt>sessionKey</tt></t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="packet-specifications">
        <name>Packet Specifications</name>
        <section anchor="ecc-mlkem-pkesk">
          <name>Public-Key Encrypted Session Key Packets (Packet Type ID 1)</name>
          <t>The algorithm-specific fields consist of the output of the encryption procedure described in <xref target="ecc-mlkem-encryption"/>:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string representing an ECDH ephemeral public key in the format associated with the curve as specified in <xref target="ecc-kem"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string of the ML-KEM ciphertext, whose length depends on the algorithm ID as specified in <xref target="tab-mlkem-artifacts"/>.</t>
            </li>
            <li>
              <t>A one-octet size of the following fields.</t>
            </li>
            <li>
              <t>Only in the case of a v3 PKESK packet: a one-octet symmetric algorithm identifier.</t>
            </li>
            <li>
              <t>The wrapped session key represented as an octet string.</t>
            </li>
          </ul>
          <t>Note that like in the case of the algorithms X25519 and X448 specified in <xref target="RFC9580"/>, for the ML-KEM + ECDH composite schemes, in the case of a v3 PKESK packet, the symmetric algorithm identifier is not encrypted.
Instead, it is placed in plaintext after the <tt>mlkemCipherText</tt> and before the length octet preceding the wrapped session key.
In the case of v3 PKESK packets for ML-KEM composite schemes, the symmetric algorithm used MUST be AES-128, AES-192 or AES-256 (algorithm ID 7, 8 or 9).</t>
          <t>In the case of a v3 PKESK, a receiving implementation MUST check if the length of the unwrapped symmetric key matches the symmetric algorithm identifier, and abort if this is not the case.</t>
          <t>Implementations MUST NOT use the obsolete Symmetrically Encrypted Data packet (Packet Type ID 9) to encrypt data protected with the algorithms described in this document.</t>
        </section>
        <section anchor="mlkem-ecc-key">
          <name>Key Material Packets</name>
          <t>The composite ML-KEM + ECDH schemes defined in this specification MUST be used only with v6 keys, as defined in <xref target="RFC9580"/>, or newer versions defined by updates of that document.</t>
          <section anchor="public-key-packets-packet-type-ids-6-and-14">
            <name>Public Key Packets (Packet Type IDs 6 and 14)</name>
            <t>The algorithm-specific public key is this series of values:</t>
            <ul spacing="normal">
              <li>
                <t>A fixed-length octet string representing an ECC public key, in the point format associated with the curve specified in <xref target="ecc-kem"/>.</t>
              </li>
              <li>
                <t>A fixed-length octet string containing the ML-KEM public key, whose length depends on the algorithm ID as specified in <xref target="tab-mlkem-artifacts"/>.</t>
              </li>
            </ul>
          </section>
          <section anchor="secret-key-packets-packet-type-ids-5-and-7">
            <name>Secret Key Packets (Packet Type IDs 5 and 7)</name>
            <t>The algorithm-specific secret key is these two values:</t>
            <ul spacing="normal">
              <li>
                <t>A fixed-length octet string of the encoded ECDH secret key, whose encoding and length depend on the algorithm ID as specified in <xref target="ecc-kem"/>.</t>
              </li>
              <li>
                <t>A fixed-length octet string containing the ML-KEM secret key in seed format, whose length is 64 octets (compare <xref target="tab-mlkem-artifacts"/>).
The seed format is defined in accordance with Section 3.3 of <xref target="FIPS-203"/>.
Namely, the secret key is given by the concatenation of the values of <tt>d</tt> and <tt>z</tt>, generated in steps 1 and 2 of <tt>ML-KEM.KeyGen</tt> <xref target="FIPS-203"/>, each of a length of 32 octets.
Upon parsing the secret key format, or before using the secret key, for the expansion of the key, the function <tt>ML-KEM.KeyGen_internal</tt> <xref target="FIPS-203"/> has to be invoked with the parsed values of <tt>d</tt> and <tt>z</tt> as input.</t>
              </li>
            </ul>
          </section>
        </section>
      </section>
    </section>
    <section anchor="composite-signature-schemes">
      <name>Composite Signature Schemes</name>
      <section anchor="building-blocks-1">
        <name>Building Blocks</name>
        <section anchor="ecdsa-signature">
          <name>ECDSA-Based Signatures</name>
          <t>To sign and verify with ECDSA the following operations are defined:</t>
          <artwork><![CDATA[
(ecdsaSignatureR, ecdsaSignatureS) <- ECDSA.Sign(ecdsaSecretKey,
                                                 dataDigest)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(verified) <- ECDSA.Verify(ecdsaPublicKey, dataDigest,
                           ecdsaSignatureR, ecdsaSignatureS)
]]></artwork>
          <t>Here, the operation <tt>ECDSA.Sign()</tt> is defined as the algorithm in Section "6.4.1 ECDSA Signature Generation Algorithm" of <xref target="SP800-186-5"/>, however, excluding Step 1: <tt>H = Hash(M)</tt> in that algorithm specification, as in this specification the message digest <tt>H</tt> is a direct input to the operation <tt>ECDSA.Sign()</tt>. Equivalently, the operation <tt>ECDSA.Sign()</tt> can be understood as representing the algorithm under Section "4.2.1.1. Signature Algorithm" in <xref target="TR-03111"/>, again with the difference that in this specification the message digest <tt>H_Tau(M)</tt> appearing in Step 5 of the algorithm specification is the direct input to the operation <tt>ECDSA.Sign()</tt> and thus the hash computation is not carried out.
The same statement holds for the definition of the verification operation <tt>ECDSA.Verify()</tt>: it is given either through the algorithm defined in Section "6.4.2 ECDSA Signature Verification Algorithm" of <xref target="SP800-186-5"/> omitting the message digest computation in Step 2 or by the algorithm in Section "4.2.1.2. Verification Algorithm" of <xref target="TR-03111"/> omitting the message digest computation in Step 3.</t>
          <t>The public keys MUST be encoded in SEC1 format as defined in section <xref target="sec1-format"/>.
The secret key, as well as both values <tt>R</tt> and <tt>S</tt> of the signature MUST each be encoded as a big-endian integer in a fixed-length octet string of the specified size.</t>
          <t>The following table describes the ECDSA parameters and artifact lengths:</t>
          <table anchor="tab-ecdsa-artifacts">
            <name>ECDSA parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="right"> </th>
                <th align="left">NIST-P-256</th>
                <th align="left">NIST P-384</th>
                <th align="left">brainpoolP256r1</th>
                <th align="left">brainpoolP384r1</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">Algorithm ID reference</td>
                <td align="left">TBD (ML-DSA-44+ECDSA-NIST-P-256)</td>
                <td align="left">TBD (ML-DSA-65+ECDSA-NIST-P-384,ML-DSA-87+ECDSA-NIST-P-384</td>
                <td align="left">TBD (ML-DSA-65+ECDSA-brainpoolP256r1)</td>
                <td align="left">TBD (ML-DSA-87+ECDSA-brainpoolP384r1)</td>
              </tr>
              <tr>
                <td align="right">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="right">Public key</td>
                <td align="left">65 octets</td>
                <td align="left">97 octets</td>
                <td align="left">65 octets</td>
                <td align="left">97 octets</td>
              </tr>
              <tr>
                <td align="right">Secret key</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="right">Signature value R</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="right">Signature value S</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="mldsa-signature">
          <name>ML-DSA Signatures</name>
          <t>Throughout this specification ML-DSA refers to the default pure and hedged version of ML-DSA defined in <xref target="FIPS-204"/>.</t>
          <t>ML-DSA signature generation is performed using the default hedged version of the <tt>ML-DSA.Sign</tt> algorithm, as specified in <xref target="FIPS-204"/>, with an empty context string <tt>ctx</tt>.
That is, to sign with ML-DSA the following operation is defined:</t>
          <artwork><![CDATA[
(mldsaSignature) <- ML-DSA.Sign(mldsaSecretKey, dataDigest)
]]></artwork>
          <t>ML-DSA signature verification is performed using the <tt>ML-DSA.Verify</tt> algorithm, as specified in <xref target="FIPS-204"/>, with an empty context string <tt>ctx</tt>.
That is, to verify with ML-DSA the following operation is defined:</t>
          <artwork><![CDATA[
(verified) <- ML-DSA.Verify(mldsaPublicKey, dataDigest, mldsaSignature)
]]></artwork>
          <t>ML-DSA has the parametrization with the corresponding artifact lengths in octets as given in <xref target="tab-mldsa-artifacts"/>.
All artifacts are encoded as defined in <xref target="FIPS-204"/>.</t>
          <table anchor="tab-mldsa-artifacts">
            <name>ML-DSA parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">ML-DSA-44</th>
                <th align="left">ML-DSA-65</th>
                <th align="left">ML-DSA-87</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">TBD</td>
                <td align="left">TBD</td>
                <td align="left">TBD</td>
              </tr>
              <tr>
                <td align="left">Public key</td>
                <td align="left">1312 octets</td>
                <td align="left">1952 octets</td>
                <td align="left">2592 octets</td>
              </tr>
              <tr>
                <td align="left">Secret key</td>
                <td align="left">32 octets</td>
                <td align="left">32 octets</td>
                <td align="left">32 octets</td>
              </tr>
              <tr>
                <td align="left">Signature</td>
                <td align="left">2420 octets</td>
                <td align="left">3309 octets</td>
                <td align="left">4627 octets</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="ecc-mldsa">
        <name>Composite Signature Schemes with ML-DSA</name>
        <section anchor="ecc-mldsa-generation">
          <name>Key Generation Procedure</name>
          <t>The implementation MUST generate the ML-DSA and the ECDSA component keys independently.
ML-DSA key generation follows the specification in <xref target="FIPS-204"/> and the artifacts are encoded as fixed-length octet strings whose sizes are listed in <xref target="mldsa-signature"/>.
ECDSA key generation follows the specification in <xref target="SP800-186"/> or <xref target="RFC5639"/>, and the artifacts are encoded as fixed-length octet strings whose sizes are listed in <xref target="ecdsa-signature"/>.</t>
        </section>
        <section anchor="signature-generation">
          <name>Signature Generation</name>
          <t>To sign a message <tt>M</tt> with ML-DSA + ECDSA the following sequence of operations has to be performed:</t>
          <ol spacing="normal" type="1"><li>
              <t>Generate <tt>dataDigest</tt> according to <xref section="5.2.4" sectionFormat="of" target="RFC9580"/></t>
            </li>
            <li>
              <t>Create the ECDSA signature over <tt>dataDigest</tt> with <tt>ECDSA.Sign()</tt> from <xref target="ecdsa-signature"/></t>
            </li>
            <li>
              <t>Create the ML-DSA signature over <tt>dataDigest</tt> with <tt>ML-DSA.Sign()</tt> from <xref target="mldsa-signature"/></t>
            </li>
            <li>
              <t>Encode the ECDSA and ML-DSA signatures according to the packet structure given in <xref target="ecc-mldsa-sig-packet"/></t>
            </li>
          </ol>
        </section>
        <section anchor="signature-verification">
          <name>Signature Verification</name>
          <t>To verify an ML-DSA + ECDSA signature the following sequence of operations has to be performed:</t>
          <ol spacing="normal" type="1"><li>
              <t>Verify the ECDSA signature with <tt>ECDSA.Verify()</tt> from <xref target="ecdsa-signature"/></t>
            </li>
            <li>
              <t>Verify the ML-DSA signature with <tt>ML-DSA.Verify()</tt> from <xref target="mldsa-signature"/></t>
            </li>
          </ol>
          <t>As specified in <xref target="composite-signatures"/> an implementation MUST validate both signatures, that is, ECDSA and ML-DSA, successfully to state that a composite ML-DSA + ECDSA signature is valid.</t>
        </section>
      </section>
      <section anchor="packet-specifications-1">
        <name>Packet Specifications</name>
        <section anchor="ecc-mldsa-sig-packet">
          <name>Signature Packet (Packet Type ID 2)</name>
          <t>The composite ML-DSA + ECDSA schemes MUST be used only with v6 signatures, as defined in <xref target="RFC9580"/>, or newer versions defined by updates of that document.</t>
          <t>The algorithm-specific v6 signature parameters for ML-DSA + ECDSA signatures consist of:</t>
          <ul spacing="normal">
            <li>
              <t>A fixed-length octet string of the big-endian encoded ECDSA value <tt>R</tt>, whose length depends on the algorithm ID as specified in <xref target="tab-ecdsa-artifacts"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string of the big-endian encoded ECDSA value <tt>S</tt>, whose length depends on the algorithm ID as specified in <xref target="tab-ecdsa-artifacts"/>.</t>
            </li>
            <li>
              <t>A fixed-length octet string of the ML-DSA signature value, whose length depends on the algorithm ID as specified in <xref target="tab-mldsa-artifacts"/>.</t>
            </li>
          </ul>
          <t>A composite ML-DSA + ECDSA signature MUST use a hash algorithm with a digest size of at least 256 bits for the computation of the message digest.
A verifying implementation MUST reject any composite ML-DSA + ECDSA signature that uses a hash algorithm with a smaller digest size.</t>
        </section>
        <section anchor="key-material-packets">
          <name>Key Material Packets</name>
          <t>The composite ML-DSA + ECDSA schemes MUST be used only with v6 keys, as defined in <xref target="RFC9580"/>, or newer versions defined by updates of that document.</t>
          <section anchor="public-key-packets-packet-type-ids-6-and-14-1">
            <name>Public Key Packets (Packet Type IDs 6 and 14)</name>
            <t>The algorithm-specific public key for ML-DSA + ECDSA keys is this series of values:</t>
            <ul spacing="normal">
              <li>
                <t>A fixed-length octet string representing the ECDSA public key in SEC1 format, as specified in section <xref target="sec1-format"/>, whose length depends on the algorithm ID as specified in <xref target="tab-ecdsa-artifacts"/>.</t>
              </li>
              <li>
                <t>A fixed-length octet string containing the ML-DSA public key, whose length depends on the algorithm ID as specified in <xref target="tab-mldsa-artifacts"/>.</t>
              </li>
            </ul>
          </section>
          <section anchor="secret-key-packets-packet-type-ids-5-and-7-1">
            <name>Secret Key Packets (Packet Type IDs 5 and 7)</name>
            <t>The algorithm-specific secret key for ML-DSA + ECDSA keys is this series of values:</t>
            <ul spacing="normal">
              <li>
                <t>A fixed-length octet string representing the ECDSA secret key as a big-endian encoded integer, whose length depends on the algorithm ID as specified in <xref target="tab-ecdsa-artifacts"/>.</t>
              </li>
              <li>
                <t>A fixed-length octet string containing the ML-DSA secret key in seed format, whose length is 32 octets (compare <xref target="tab-mldsa-artifacts"/>).
The seed format is defined in accordance with Section 3.6.3 of <xref target="FIPS-204"/>.
Namely, the secret key is given by the value <tt>xi</tt> generated in step 1 of <tt>ML-DSA.KeyGen</tt> <xref target="FIPS-204"/>.
Upon parsing the secret key format, or before using the secret key, for the expansion of the key, the function <tt>ML-DSA.KeyGen_internal</tt> <xref target="FIPS-204"/> has to be invoked with the parsed value of <tt>xi</tt> as input.</t>
              </li>
            </ul>
          </section>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The following security considerations given in <xref target="I-D.draft-ietf-openpgp-pqc"/> equally apply to this document:</t>
      <ul spacing="normal">
        <li>
          <t>the security aspects of composite signatures (Section 9.1 in <xref target="I-D.draft-ietf-openpgp-pqc"/>),</t>
        </li>
        <li>
          <t>the arguments for the security features of the KEM combiner given in Section 9.2 of <xref target="I-D.draft-ietf-openpgp-pqc"/>, as also the NIST and Brainpool curves represent nominal groups according to <xref target="ABH_21"/>,</t>
        </li>
        <li>
          <t>the considerations regarding domain separation and context binding for the KEM combiner (Section 9.2.1 in <xref target="I-D.draft-ietf-openpgp-pqc"/>),</t>
        </li>
        <li>
          <t>the use of the hedged variant of ML-DSA (Section 9.3 in <xref target="I-D.draft-ietf-openpgp-pqc"/>),</t>
        </li>
        <li>
          <t>the minimum digest size for PQ/T signatures (Section 9.4 in <xref target="I-D.draft-ietf-openpgp-pqc"/>),</t>
        </li>
        <li>
          <t>the use of symmetric encryption in SEIPD packets (Section 9.5 in <xref target="I-D.draft-ietf-openpgp-pqc"/>),</t>
        </li>
        <li>
          <t>and key generation for composite schemes (Section 9.6 in <xref target="I-D.draft-ietf-openpgp-pqc"/>).</t>
        </li>
      </ul>
      <t>When implementing or using any of the algorithms defined in this specification, the above referenced security considerations should be noted.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to add the algorithm IDs defined in <xref target="iana-pubkey-algos"/> to the existing registry <tt>OpenPGP Public Key Algorithms</tt>.
The field specifications enclosed in brackets for the ML-KEM + ECDH composite algorithms denote fields that are only conditionally contained in the data structure.</t>
      <t>[Note: Once the working group has agreed on the actual algorithm choice, the following table with the requested IANA updates will be filled out.]</t>
      <table anchor="iana-pubkey-algos">
        <name>IANA updates for registry 'OpenPGP Public Key Algorithms'</name>
        <thead>
          <tr>
            <th align="left">ID</th>
            <th align="left">Algorithm</th>
            <th align="right">Public Key Format</th>
            <th align="right">Secret Key Format</th>
            <th align="right">Signature Format</th>
            <th align="right">PKESK Format</th>
            <th align="right">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-DSA-44+ECDSA-NIST-P-256</td>
            <td align="right">65 octets ECDSA public key (<xref target="tab-ecdsa-artifacts"/>), 1312 octets ML-DSA-44 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">32 octets ECDSA secret key (<xref target="tab-ecdsa-artifacts"/>), 32 octets ML-DSA-44 secret key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">64 octets ECDSA signature <xref target="tab-ecdsa-artifacts"/> , 2420 octets ML-DSA-44 signature (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="ecc-mldsa"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-DSA-65+ECDSA-NIST-P-384</td>
            <td align="right">97 octets ECDSA public key (<xref target="tab-ecdsa-artifacts"/>), 1952 octets ML-DSA-65 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">48 octets ECDSA secret key (<xref target="tab-ecdsa-artifacts"/>), 32 octets ML-DSA-65 secret key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">96 octets ECDSA signature <xref target="tab-ecdsa-artifacts"/> , 3309 octets ML-DSA-65 signature (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="ecc-mldsa"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-DSA-87+ECDSA-NIST-P-384</td>
            <td align="right">97 octets ECDSA public key (<xref target="tab-ecdsa-artifacts"/>), 2592 octets ML-DSA-87 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">48 octets ECDSA secret key (<xref target="tab-ecdsa-artifacts"/>), 32 octets ML-DSA-87 secret key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">96 octets ECDSA signature <xref target="tab-ecdsa-artifacts"/> , 4627 octets ML-DSA-87 signature (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="ecc-mldsa"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-DSA-65+ECDSA-brainpoolP256r1</td>
            <td align="right">65 octets ECDSA public key (<xref target="tab-ecdsa-artifacts"/>), 1952 octets ML-DSA-65 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">32 octets ECDSA secret key (<xref target="tab-ecdsa-artifacts"/>), 32 octets ML-DSA-65 secret key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">64 octets ECDSA signature <xref target="tab-ecdsa-artifacts"/> , 3309 octets ML-DSA-65 signature (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="ecc-mldsa"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-DSA-87+ECDSA-brainpoolP384r1</td>
            <td align="right">97 octets ECDSA public key (<xref target="tab-ecdsa-artifacts"/>), 2592 octets ML-DSA-87 public key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">48 octets ECDSA secret key (<xref target="tab-ecdsa-artifacts"/>), 32 octets ML-DSA-87 secret key (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">96 octets ECDSA signature <xref target="tab-ecdsa-artifacts"/> , 4627 octets ML-DSA-87 signature (<xref target="tab-mldsa-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">
              <xref target="ecc-mldsa"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-KEM-512+ECDH-NIST-P-256</td>
            <td align="right">65 octets ECDH public key (<xref target="tab-ecdsa-artifacts"/>), 800 octets ML-KEM-512 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">32 octets ECDH secret key (<xref target="tab-ecdsa-artifacts"/>), 64 octets ML-KEM-512 secret key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">65 octets ECDH ciphertext, 768 octets ML-KEM-512 ciphertext, 1 octet remaining length, [1 octet algorithm ID in case of v3 PKESK,] <tt>n</tt> octets wrapped session key (<xref target="ecc-mlkem-pkesk"/>)</td>
            <td align="right">
              <xref target="ecc-mlkem"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-KEM-768+ECDH-NIST-P-384</td>
            <td align="right">97 octets ECDH public key (<xref target="tab-ecdsa-artifacts"/>), 1184 octets ML-KEM-768 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">48 octets ECDH secret key (<xref target="tab-ecdsa-artifacts"/>), 64 octets ML-KEM-768 secret key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">97 octets ECDH ciphertext, 1088 octets ML-KEM-768 ciphertext, 1 octet remaining length, [1 octet algorithm ID in case of v3 PKESK,] <tt>n</tt> octets wrapped session key (<xref target="ecc-mlkem-pkesk"/>)</td>
            <td align="right">
              <xref target="ecc-mlkem"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-KEM-1024+ECDH-NIST-P-384</td>
            <td align="right">97 octets ECDH public key (<xref target="tab-ecdsa-artifacts"/>), 1568 octets ML-KEM-768 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">48 octets ECDH secret key (<xref target="tab-ecdsa-artifacts"/>), 64 octets ML-KEM-1024 secret key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">97 octets ECDH ciphertext, 1568 octets ML-KEM-1024 ciphertext, 1 octet remaining length, [1 octet algorithm ID in case of v3 PKESK,] <tt>n</tt> octets wrapped session key (<xref target="ecc-mlkem-pkesk"/>)</td>
            <td align="right">
              <xref target="ecc-mlkem"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-KEM-768+ECDH-brainpoolP256r1</td>
            <td align="right">65 octets ECDH public key (<xref target="tab-ecdsa-artifacts"/>), 1184 octets ML-KEM-768 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">32 octets ECDH secret key (<xref target="tab-ecdsa-artifacts"/>), 64 octets ML-KEM-768 secret key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">65 octets ECDH ciphertext, 1088 octets ML-KEM-768 ciphertext, 1 octet remaining length, [1 octet algorithm ID in case of v3 PKESK,] <tt>n</tt> octets wrapped session key (<xref target="ecc-mlkem-pkesk"/>)</td>
            <td align="right">
              <xref target="ecc-mlkem"/></td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">ML-KEM-1024+ECDH-brainpoolP384r1</td>
            <td align="right">97 octets ECDH public key (<xref target="tab-ecdsa-artifacts"/>), 1568 octets ML-KEM-768 public key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">48 octets ECDH secret key (<xref target="tab-ecdsa-artifacts"/>), 64 octets ML-KEM-1024 secret key (<xref target="tab-mlkem-artifacts"/>)</td>
            <td align="right">N/A</td>
            <td align="right">97 octets ECDH ciphertext, 1568 octets ML-KEM-1024 ciphertext, 1 octet remaining length, [1 octet algorithm ID in case of v3 PKESK,] <tt>n</tt> octets wrapped session key (<xref target="ecc-mlkem-pkesk"/>)</td>
            <td align="right">
              <xref target="ecc-mlkem"/></td>
          </tr>
        </tbody>
      </table>
      <t>IANA is asked to add the following note to this registry:</t>
      <ul empty="true">
        <li>
          <t>The field specifications enclosed in square brackets for PKESK Format represent fields that may or may not be present, depending on the PKESK version.</t>
        </li>
      </ul>
    </section>
    <section anchor="changelog">
      <name>Changelog</name>
      <t>This section gives the history of changes in the respective document versions. The order is newest first.</t>
      <section anchor="draft-ehlen-openpgp-nist-bp-comp-02">
        <name>draft-ehlen-openpgp-nist-bp-comp-02</name>
        <ul spacing="normal">
          <li>
            <t>Completed the IANA table.</t>
          </li>
          <li>
            <t>Added "Security Considerations" section.</t>
          </li>
          <li>
            <t>Alignment of various technical details to <xref target="I-D.draft-ietf-openpgp-pqc"/>.</t>
          </li>
          <li>
            <t>Various editorial alignments to <xref target="I-D.draft-ietf-openpgp-pqc"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ehlen-openpgp-nist-bp-comp-01">
        <name>draft-ehlen-openpgp-nist-bp-comp-01</name>
        <ul spacing="normal">
          <li>
            <t>Replaced the explicit description of the KEM combiner with a reference to <xref target="I-D.draft-ietf-openpgp-pqc"/>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="contributors">
      <name>Contributors</name>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9580">
          <front>
            <title>OpenPGP</title>
            <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters"/>
            <author fullname="D. Huigens" initials="D." surname="Huigens"/>
            <author fullname="J. Winter" initials="J." surname="Winter"/>
            <author fullname="Y. Niibe" initials="Y." surname="Niibe"/>
            <date month="July" year="2024"/>
            <abstract>
              <t>This document specifies the message formats used in OpenPGP. OpenPGP provides encryption with public key or symmetric cryptographic algorithms, digital signatures, compression, and key management.</t>
              <t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format. It is not a step-by-step cookbook for writing an application. It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network. It does not deal with storage and implementation questions. It does, however, discuss implementation issues necessary to avoid security flaws.</t>
              <t>This document obsoletes RFCs 4880 ("OpenPGP Message Format"), 5581 ("The Camellia Cipher in OpenPGP"), and 6637 ("Elliptic Curve Cryptography (ECC) in OpenPGP").</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9580"/>
          <seriesInfo name="DOI" value="10.17487/RFC9580"/>
        </reference>
        <reference anchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC3394">
          <front>
            <title>Advanced Encryption Standard (AES) Key Wrap Algorithm</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="September" year="2002"/>
          </front>
          <seriesInfo name="RFC" value="3394"/>
          <seriesInfo name="DOI" value="10.17487/RFC3394"/>
        </reference>
        <reference anchor="RFC5639">
          <front>
            <title>Elliptic Curve Cryptography (ECC) Brainpool Standard Curves and Curve Generation</title>
            <author fullname="M. Lochter" initials="M." surname="Lochter"/>
            <author fullname="J. Merkle" initials="J." surname="Merkle"/>
            <date month="March" year="2010"/>
            <abstract>
              <t>This memo proposes several elliptic curve domain parameters over finite prime fields for use in cryptographic applications. The domain parameters are consistent with the relevant international standards, and can be used in X.509 certificates and certificate revocation lists (CRLs), for Internet Key Exchange (IKE), Transport Layer Security (TLS), XML signatures, and all applications or protocols based on the cryptographic message syntax (CMS). This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5639"/>
          <seriesInfo name="DOI" value="10.17487/RFC5639"/>
        </reference>
        <reference anchor="I-D.draft-ietf-openpgp-pqc">
          <front>
            <title>Post-Quantum Cryptography in OpenPGP</title>
            <author fullname="Stavros Kousidis" initials="S." surname="Kousidis">
              <organization>BSI</organization>
            </author>
            <author fullname="Johannes Roth" initials="J." surname="Roth">
              <organization>MTG AG</organization>
            </author>
            <author fullname="Falko Strenzke" initials="F." surname="Strenzke">
              <organization>MTG AG</organization>
            </author>
            <author fullname="Aron Wussler" initials="A." surname="Wussler">
              <organization>Proton AG</organization>
            </author>
            <date day="17" month="June" year="2025"/>
            <abstract>
              <t>   This document defines a post-quantum public-key algorithm extension
   for the OpenPGP protocol.  Given the generally assumed threat of a
   cryptographically relevant quantum computer, this extension provides
   a basis for long-term secure OpenPGP signatures and ciphertexts.
   Specifically, it defines composite public-key encryption based on ML-
   KEM (formerly CRYSTALS-Kyber), composite public-key signatures based
   on ML-DSA (formerly CRYSTALS-Dilithium), both in combination with
   elliptic curve cryptography, and SLH-DSA (formerly SPHINCS+) as a
   standalone public key signature scheme.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-openpgp-pqc-12"/>
        </reference>
        <reference anchor="SEC1" target="https://secg.org/sec1-v2.pdf">
          <front>
            <title>Standards for Efficient Cryptography 1 (SEC 1)</title>
            <author>
              <organization>Standards for Efficient Cryptography Group</organization>
            </author>
            <date year="2009" month="May"/>
          </front>
        </reference>
        <reference anchor="FIPS-203" target="https://doi.org/10.6028/NIST.FIPS.203">
          <front>
            <title>Module-Lattice-Based Key-Encapsulation Mechanism Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2024" month="August"/>
          </front>
        </reference>
        <reference anchor="FIPS-204" target="https://doi.org/10.6028/NIST.FIPS.204">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2024" month="August"/>
          </front>
        </reference>
        <reference anchor="SP800-186" target="https://doi.org/10.6028/NIST.SP.800-186">
          <front>
            <title>Recommendations for Discrete Logarithm-Based Cryptography:  Elliptic Curve Domain Parameters</title>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="D." surname="Moody" fullname="Dustin Moody">
              <organization/>
            </author>
            <author initials="A." surname="Regenscheid" fullname="Andrew Regenscheid">
              <organization/>
            </author>
            <author initials="K." surname="Randall" fullname="Karen Randall">
              <organization/>
            </author>
            <date year="2023" month="February"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-186" value=""/>
        </reference>
        <reference anchor="SP800-186-5" target="https://doi.org/10.6028/NIST.FIPS.186-5">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization>Information Technology Laboratory, National Institute of Standards and Technology</organization>
            </author>
            <date year="2023" month="February"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-186" value=""/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="TR-03111" target="https://www.bsi.bund.de/DE/Themen/Unternehmen-und-Organisationen/Standards-und-Zertifizierung/Technische-Richtlinien/TR-nach-Thema-sortiert/tr03111/TR-03111_node.html">
          <front>
            <title>Technical Guideline BSI TR-03111 – Elliptic Curve Cryptography, Version 2.1</title>
            <author>
              <organization>Federal Office for Information Security, Germany</organization>
            </author>
            <date year="2018" month="June"/>
          </front>
        </reference>
        <reference anchor="ABH_21" target="https://doi.org/10.1007/978-3-030-77870-5_4">
          <front>
            <title>Analysing the HPKE Standard</title>
            <author initials="J." surname="Alwen" fullname="Joel Alwen">
              <organization/>
            </author>
            <author initials="B." surname="Blanchet" fullname="Bruno Blanchet">
              <organization/>
            </author>
            <author initials="E." surname="Hauck" fullname="Eduard Hauck">
              <organization/>
            </author>
            <author initials="E." surname="Kiltz" fullname="Eike Kiltz">
              <organization/>
            </author>
            <author initials="B." surname="Lipp" fullname="Benjamin Lipp">
              <organization/>
            </author>
            <author initials="D." surname="Riepel" fullname="Doreen Riepl">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="RFC9794">
          <front>
            <title>Terminology for Post-Quantum Traditional Hybrid Schemes</title>
            <author fullname="F. Driscoll" initials="F." surname="Driscoll"/>
            <author fullname="M. Parsons" initials="M." surname="Parsons"/>
            <author fullname="B. Hale" initials="B." surname="Hale"/>
            <date month="June" year="2025"/>
            <abstract>
              <t>One aspect of the transition to post-quantum algorithms in cryptographic protocols is the development of hybrid schemes that incorporate both post-quantum and traditional asymmetric algorithms. This document defines terminology for such schemes. It is intended to be used as a reference and, hopefully, to ensure consistency and clarity across different protocols, standards, and organisations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9794"/>
          <seriesInfo name="DOI" value="10.17487/RFC9794"/>
        </reference>
      </references>
    </references>
    <?line 690?>

<section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>TBD</t>
      <section anchor="sample-v6-pqc-subkey-artifacts">
        <name>Sample v6 PQC Subkey Artifacts</name>
        <t>TBD
## V4 PQC Subkey Artifacts</t>
        <t>TBD</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+196XIbR9LgfzxFBfXD5BoNEuAhkvFp1xRJSRwdpgRa9qzH
MWh0F4EeNrrhPkjRIiP2HfYN90k2M+vuAwQlStb4G06MDKDryKzMyruqPc/r
FFER8322cvp2/YwdprN5mkcFZ8Ngymc8Z+dpxn6c8+T0+Skr8yiZsDcnwzPm
JyF7mvlRMk/TmB3HcTQvooAdltklZ0fpDJ6wUz/zZ7zgWb7S8cfjjF/CNNTb
9Dx9e7jSCfyCT9Lsep9FyXna6YRpkEDPfRZm/nnh8WnMEy8FIOaTuZdEeeGN
514AoHobg05ejmdRnkdpUlzPoc/J8dmzDsy02fEz7u+znAedqzS7mGRpOd9n
b3iB39jP8A9i8xx/7lzwa/g1hN4JwJvwwjvCqTuXPCn5focx2fvn5/BZzOMO
wBigHO8zCeUPES/Oe2k2gQd+FkwB8WlRzPP99XVshz9Fl7ynWq3jD+vjLL3K
+bocYn0F+mZ8nlp9J1ExLcc9QF218ua/B+t3LdNKp+OXxTTNABMPRmWwzvk+
e9tjR34yoR/Eer8tr5Op+REg2ydy07cgLZMCifTT8IB+4ALl37FTL4ROP+Ck
vUl66Uwz7LFjBM2aZ1jw+dRPrN9pqqfDE3em5zyb+cm1PVsuuvYI2x/GedQb
l0nYC3l1zpcpsGsY5c60/mWW5u6jpWe+kL2Iaj9M8EekhDPv33rsXVpMrTn/
lgK0CWwk/TtN+PrsOTt4fuec/5K9exn0/mFWTKqIPusBVhlP/rjg1qTP/Pgi
dR/cZ9Zz7N7LZXc1bSdJoWUBfLvfgdbvnh3ube9uqM+PH2/tqs+7G5sD9Xlz
c29Lfd7e2dyjzyfeUU8wLa6lZ/EyPR4eH/b3CaDCzya82GdqA8BmntCGgQ99
73LQm4fnoqGUYkDiJPSzUAiu4/PzKIh4UrDD7HpepJPMn0+vWZ+twhSsv7ZC
ffXeoD9PLNVSA6m9z1gIIgzW179mg42NPUTi2cnp0BtsbKpxq6iEaUSY9Dd6
OxuD3XXcZz3s1INOqo/A6nUaljH3XvkFyFjuPfVzHrKX/No7TgJ/npcxUCVN
2GseALdE+UwDL4dxEdQovqFufgxCL4eZSpD66bmFOMr4MxgzSeN0ci17C0QP
ykmZF4DrYMvCdetTcN1aAtejCCQfADqMJolflBn/6hgOT3c3Nrz+7k4zXzYi
ODztyU42i373joPUmHEAAYET/HUU5UEGqpK9Sid+BlJ+JjG32W2f3alov2ti
aL0qJDFe9djhVEpdIzFeRfG1/Xul01EPCJOG15VeR7BEML/9qNLxAAQin/Ak
B3MiCivdD5Iw41cNDSqDvIRBkGRxXBngJaj4xHkmiPeMj7PSz3AzDsReynkW
8RzNC7UsZIgM5zyIgD9Oy3EcBWIbKZrZVPe270F3Ymzq5NC9nYnZ6tFwuLaY
dsTPJwA/yWAA0/Ate+WP08wvwILqfgrLu2vWZZuft2yRAlIqirN33sZmv99v
Ew5XV1c9S4+vHx2vn6Htmaz/JIyxKXz24KH3YzZB+UbzwWONFD383zwrovPo
j4hnZTJZJxwj5CrvXRRMizhKQH6vAzCJH0w9nMH38hT6QL/1IiMQ1xWs/0zS
kPemxUxxnCSiGDUA1J+XUchhUI62g8aR/b//83+rm9Tewl32HnYpLteg118s
u57xkGcw0Y+oejhJCZv8Qx6UIChgRFuBK2L+rQTABhv9XSTAwdMX3w9aFKrF
wP2Njcfre493vU3AZcN7/Hj38Ya3/c8tm4kPgLOuyQsoppy9OH157ErihZIH
jKOD+Komev6W8th5UOn2tMeexn4ClCwqPZ8CpdPqw0rv4x574ZfBRaXrcVji
xrMf1Tu+jOLij2rH6II7D+rQvorm8yqkPPmXPwNRaT2ri9h3EZ/zqow7SjOO
Qg6e2SIOtmi/0/E8j/ljsNT8oOh0zqZRzsB5KmdoqYT8PELDkxy7QDt2uXTs
xqRf0Gx45b08fk2CAT4eDQ+w8Ri6huwKNBE7Pjx6QU/hAzz0Y3DVUEPl0h9E
TmjwCUOhm+ZaNxELY2PlTs7BqE2DNO4JPGZRGMZgZj5CJywDMyBARv9KWD0U
KuykYBFKWcY/FKDVcKuC/P34sd3kvb3tsqspyCjgA4E34AFoFd7vpZ8U5YwF
ts0JgLj++PR6nEVgDx6/FtI9lHomV3oml6hj4/qyyNU4tAmrVxFxPA6vSHOQ
NMslAUKE4+NHafjf3tKI9B2N/9tboOlRyVmR4hBRxuI0mXg5igqEAhtfgfyE
weZxeo2E7WJD0Img0dkVj2Ov4ODqhV303wGHLvXh2gyPZvMYdUQhjShYY8me
gqQvBF5ITC8QgH/8qNU5wMdAA7Ac6Mn8+TwGJYewGpLrPtJtAQwFjRC+TFlw
uEgZfP29jDKxJAFoE+SVjE/QLAeVLLkn7xLTwAdYBJDn0EYKbphEqQ+EiwCb
lxlwAKnuwmH/iODMy/kcVBcwADLj1TRlV2kZhyxG4QTPYaKpf0kfoQk0B8Ar
bLIObSwOodWSfAW0e/SIHabJJcxIq1vmAjuC5UjCgq0egUbMQK4JOwQRfF3G
ReQdKF5ScSTcxgCP1VgNZ6MGfeATzFWkgueQ/4jhIgEIMd3/Qtfz8d4WchlZ
IueokeNrYiGaI2crM4JD8/RKl61oabFCXLKSpIln/waUVYgGaQarMk+BxEgs
Wp0qLMSvUdIjzER8KxK6eeX07QqiQ6Phoji7WYoq6JfCeEkK0guHFntUDABk
d7oguCDjw0jadnIIgXB16vUzPbmALZ8ir6DpgI9X18/WVhhtRSHHTt8y+nf9
TBD+FGd+K2e2jRcpimFD0lQhB58lGnNBpQh29mUEWjVulV1gEWncD2KNBXAt
7nSmt/8Y7Cp+SVyAgvUSBUUuzR3BNrBBgDxEGlgq350EWQH2X8wvAQKm4QBC
gzGc9QTbSjn48dEsvuAzjyTvbacjf/5VOe+/4Uo60nAKfAn6hyROnsaXSm28
4n5GElbI0yxLYWcC9GMQUwj0jPxaFgu/Nmerr1/9fLwmCUQLQVMtQt2foBwp
BLY+WmJoZMKAfnABXa9ZEPt5Ttapn5MQxf9WFwAZj8iodo4kplCrcgHSJL4W
+0ApWJs9jQIFEiAw+KOiJvRKMzBdbRR8pJfZAAqhcyDVGIA3NEEJjjQJc9+m
Cf6saLJFNPGN8FLLV0x90CIkAgUW3fsT7+cG4uHm89kluOXITySRwXWjPYXR
4gmgOkzjkhbhLoLTYEMen5+RHf56eDIEHjgIQN6gYhQyrEYcooZFIVyORuJY
tIEm1RXKxf5e4J4IKV2lbGSUvtijuPywvjAcbmOuxpM6U9lGqHnkbm1ko5w2
e+FfgHV7nqUzoWwxpkjmwzPSlsCwYCpl/jiKkWNocWzL6hwVICzJ/2jl1txI
bzLtJJSn3mB7pwv/2dzdcm0ay0oQghd61gyDsfrhFIbJ+l3rBxgw69fMJGFE
CAocoMUR+MApbGgT2l074LTTt4fswJhlxvSrWsXCLBhDR9BYWV6kaUhk+jwz
NCQAzKxdQU8f5jOG+HmZoSY05iMsPmz5eQrDSEE/4Qm5srmLLC3NIoDEXHNp
Uglbstmwr3gBsIpyTtg4jRpI00dqcQY2HLVGa/BazaUaS8AtI0itPBKUnYK2
icCw8TFYUtGSUgTCD+mM1JZpqaldsXBo5nKcA0hIWzlSdfcKRhSSEwPmsG1B
dcOigxCDffWMIgUgTClSLuIGIEzd7pJKSqjRmsGzeRYBrJLTcZOCMEjR2DVe
Es24Wia49qCKQcauMTEJ8h22OE/jOL3C9mlQcECjyOALRYQYe8qesI0tdnPD
fsF//t7pXJFoGf0yIsqO/j6iiYOUBCN4vBpI3oABG53CgKu/dNnf10bSVfCB
k0133CEKC7nE42jigQ0PUl1DDv3+AIHjzf0wFEqYDKzwXyVZKLS54mvECZgB
7O08+oNL+29hG9qfU97yMEtLciXKuZoxAX0E7g/b9caw08b4nCJzsLRoL2oU
Vp7pUVYA2bicJWJXFf7Y40E4FWlAHyNjflDkuMeth1pmuS2AK3Uj0MPWM2k6
0EIiEhG5lnPYzyjLGqxkNonAiUCYfkWO+U1peu7n5HYAvsdJTrFQcvPYievX
dTonSYWbZqov8oeyQUMhKrgYS7iMNR/RV2oWp+UfIoxdT0BowkLPMYBCahp5
INfRUoGJ5HlSRMbdbFejgOUxol1M03IilgTZSvAqUDHOU4ZmqhA/koVRqia0
bkDomX8N2wawEMoW0AV3hmxdErEc57XBSaydjELf2SNdFNevfwLd9+bHMxRw
wF1IEvQ90fEP/cLH7VkGZCxYmqsq6p4JWT9L0SGHHZugcMbNo5aIf0DNFhUg
QqVVb0FJnEmMByY3SPeI9Na747c/nbw7PkKiCCoLAehYQEQVbQeHl1GOnvUM
yYSTkPmAvdBpQ3F5WZMTzniACojtofCiUc1RHBtTapa6rQhypQPyikUj9dH3
JqIk1dL3ygyzfR4hxHKjWpCLz0vUPEbJgDMnwyZGqZ4cdaXqFW7fNfUEaaDC
UhkIgVDaF8b7djSuMKqMZdetbC2DFGJkQ6hhA/n9cV9Eg5+skB7Wc7nafYU9
QscKHnv4IL/tnByxpr8bC9zWvxv2TgRZyNq5YUdawmDosP63D20aHzh/bqOW
Lp2zp42A30jKe9v9wfdIe4+CTWRX2o0O/m59Q/4PPPI5b2/vHPnxzq4zMpqq
DzNyf2Ow1Tb0A8FcsZAfEuaqrX3XyMT2JthVZftVzfdrdZ9pAfubRN6CTQAD
/tU3AQg5b4tIAx/usQnAuLiD7DjgzrY78jKbYLmRdx9/qZE1zPfYBPeEub4H
7hiZDK/jD6COI7KJYnYI1rA0G0R2kZxtdsbJMOp0/vEre5Nirqmw9aDwM4EJ
U4xTjTl0xXi1SQT/4zcRRvAdx1WYEujoacWFwaoJWho+uYzCDFIRgzLLyPkp
/IIr0190Bx8k4Fa2AIfiCVla4LhcQvt1bqNpuaPMv8TqOzRWAY0AMEAVG4O9
fUXxLu33CnzATrm29ja4cQmmmCmGRihKN711WjlrWKLrA4bVJY/TOe1eBByj
G4n0M8Ym9oxhaQxfUuAqT8+LK2yMMSCRQrBm0baRDJSwQtBO5Q9y6gaWh8kZ
uUaxMQvnAnWgBTlDMZMgGJ8v56wFQekWCPJcRbigQJMxGuKAKmB3cvBGJJrS
EmgFq67NQ7O6U5/CcT7h3zwROdtGUB5aQR6ZsrDsF5lycM0zi652gCu5TGOK
6qTSg7GCDFimiF3xOxrNBF/O0epCPpphfV4mVwADk8FURHDRiMM+VigKDPEe
74lZJAimfCtfD7n9lVhEmteCMXBKcBrirg5LCb8Alw2Hy6e+8ovOqQesvE9P
ZOpTxWQloZGwMRfdyLzOOKUJwMXKc3/CrSXqVdZXqz6zyo7JqzVjAJgApckx
iYDZ58jxwBSyg0nA2upZLnsTq+ZlAF5aLizmSz+O0AEQK2plszBFRoKDLOZi
EYBAMhpGYIgegKrQeBpRslIEOUXeBETW9Yxs7cAWbxTHNHtYBc8vd9gqogLS
hWdrSAjhXgaiUgWrngFZ7TVLcvAPAZ+rLJBlVP0y2N7u78GIlkvANrfXdNQu
F46lj2aNYJjLLYuEHjAXcWxejhEU2kzOjjG5OliJp2UUk6/8NE6DCxln0hvh
4yNULWhdSQ/dUhBXyoUUHqHlbQCD68+UqUbHU8ReTDCM5iCLLOEm3m5cE7Pu
gMGCSIfMSC8OdugAgpka0bMy/cSLsgOLeTIppjixZQbaUeU7OoI92AZv56ZJ
7ytVTnO4VtVyf7qrbdzcd4xOux25lIn58F0d2A7sHZHxczAM0EJA5NGcWm33
09YWrJvdtcER6y5ypbpsTcJmAnS1CTYHIjKa35sebGv3E7uaMQA2ze71CQgf
2uh2wGYp2D65ax02oa1Jg1kT7Gwr5LGw8fiw76nArmwvDMkm2PYef2LXOmxS
XVZgMzS1ostqDtklD/zYz2qwGZres2sdNj5HOY4Zl+XWzbRvxH/Rut3RtQ6b
NlScCf7kvWBJ81qm7x4ivUnFLJbrDf7hsng3OIDLovvNifN7SPG2+FKjKHe7
tgaQmvp+g8L7G5TZ36Co/gYl9DcomL9BeXwjXEnKLMuErKidQ/DtlKNTWmGn
t29lWAZrddKSKngCHiqPUPrSDak828X3qxkwO1JMWXmVjXdLDynfbLI7pqEu
lBBVcqL8U2ezrSy5BknmyFdxKx5GQMfsjH8oYAr4Dg7qEKm1xv7L09u2J86B
UQeRyoJma50O6CtrqOauR1x3rc41JJYWQ52lEvYiQr96pPqPuuDucjbDs1I5
jwFnLPZSKhN+KlRtT7ujZuebW/w0StgpD9RTHqiUVILoev0McGpd1kY22/i5
XHVc6H6PPadKEfQsE2vX4L6Y+xGANroEJEfvn1w+H91i59ZiIcLDrhemiobL
kahXy4Aa6UwJCPL6Rxvsv9gl/D/BGZIRG3OVSMWyNcn6opquufqhVpkO9B70
yK0vZV2pDO/IOokhe8Iu3426Crp3I1WbkAE3z7H89rvcluYjh6mwuMLOoi9a
AABls8eOP9DhBJoCqzuskgydtaUtr8W7AdSuEBlVll5FGyoSACbd6rEhFxOm
ZQHrIHAw3D1SZRZmXtqA50DlEQyw3TyA2j/UHVBpZzu5pxawHes3EulU4k7I
jrL3hk6ZptPI2ZqyXOa9+9jC9X4EG/wZBNtcdr0bCnfTeW7Kds+5iv/dIVmp
ry3u6AdHQIohlQSh582itbWr5ILmuRzZSkXc6aVIZ1TU08gBRJLbmWFkr7Kp
XO513qQqAjpy4dfM4gSgxdAudLqlE5tGwdDTqz6VBV+mDsGqEhaxO1VMTwH+
igNFBcPCYICBdL2Q0AiCyI4iwGis/sGpTnP5zV4Jy7+TQC/n1VWnb3fm7GoA
JxleSWCj4dXmBtkO1KKs7CJ3SXg8Gig7nVj5BmOcNhjt1BAkhKLJDev3d7es
b9s72sDDMYYNVjaNsaM7uV+q32AMsTsK2B2VMR5bc7H+xu5uOxwvG+xYVjFl
Xbu28q1u4wiyLWvhCE6nEjzJZCui5LaFj92EyrHJRqmbV2j/aHFn6hkw6u2W
1txWipOM6HOzXyaI3pwHkyUP+w37pTaCbOtsFIRRt7jttHr0rbtHfzV2Htk5
zfUNDX/Vkgccym3RWT4k7OxpgsqE4Tt3hIebhiFpYA0DzTrN8YmmcVwxsmCY
xRGSOjSVZi0gNYVM6iBVWjWlYJdkQnESqIziwjVgXP6eZ1ECZivY6yHHnB4q
eI9Zk1Y0nMnl55T1vRDZdxBh0gGQ3QIjkYp0wqnAnfajaWIygdqF7unZ26at
OJttUIiFWgCDCHC0QXCgLgdRqT8Ujqsvj1+uqYrdshD60rK56CCVmyxG0wHc
Ah5RHTjCig0p2SrdEWG2CMDDJoBksVUFIetH42qYtLY6TcvGIgXLInPw3axx
zunWJ5oLAwVBivUUReXkSoFVqlcZVr1KC0FVDKuTGXhDDYhQUedwcDykLBuW
3WqqKbhgBfGBsH4kFKcvj4cvQR8EFxw9J93JU5VgqCukoTLzQ45V3nLxarzW
slZqeoWFhbisp0b6HiqyfaTCS3joKUrKCjg3j2qXeLaV/CpqiCgKGIdYbQCT
yblGqiK14hNLS3+rN+j1EdmFZzwora9S51SVY9wiXHCaAlGnQ1+NqEsPHh+c
amAtlelNdAMZLGgqLZioOEClAKQhKU2pfKucAWtsZA/kRjOdcvkaSpodE9UQ
udW0PY8+8NAT9qlzpIIOAGPMKfpDik1ZW/Pxo/GRwODQ4b5lwVvkKz4gwEmo
z18Y2BefYlgyZEQBIyMNmnnDiAvJG4bfraBhs66qqIQWI4niP1Xv/8y/4LW4
C16fgTVmAYlTa04hX9hofqFNRukKyh0hQgFSRAtH/tTPcjGFUzJCxmp9ILRj
Izq8M4LmJ+GoIXzjhoIsf9H60WwSbRXXq2NF5Yd1HseFR3uOki+c41eKq0UB
yjURGmM+J5bprrass4clkcSmpbhAUl+dSrCkzba9FWEiFcIZ3RGrfXJHqBYX
e8ce7q4AxZPF8Qkc77E1HsrRJ6wivd3IhQuy+FZFSE+AZ1iAR9aqMR7hmDiq
B1dq1wLlEAABJQuD/AwyHY2SLjM8vCaJb6nhOc8cPS1UThLEJZ6q89GZxENS
WAE5oeMhsOeCC5h1r8d+FKZNCxOiYla6WKhx5H4XcQxlVYiBP4FUWz3sosFz
QAvBVuFH8w2+HOrYHdlLI/VQbpvqAOK4mywBE8KSToiB/WR1FdcFSHFdr0RD
BiY1SiWhuTwkX4iCNDSRfHa5KVDttoFhT6FvTBEAKVEuMxcEnrU3pTnpZxOy
HXIpgI94XQAvJ2hNudiDCFqQJMEUd7akNeCfXiV2mlBKWVeMPlNiTHTjlkB0
JYeWnIsMNsFiQoPwECWmkLOHyLSmXBEBU6PIGZ1iWZiP0BGiz0j6xuBwNaR3
p2CWFK6sTuX45FKyWYjJry6ad9Sa1KPho8pulsdFR4dyXVzi2PbMw0kGHK2y
bsYemV/w/EIcxqbIv9n91R2tSuX9XF6DoTZ3ryL+V1u10VLZv1FFhFdD3k/u
GfEeCeH8rWin/oYFi1FFWk/9lFxpTXV4t4LqolOcUVF2JPZRs4Zi534UY76u
39eKyrbmxF0sQiJVj/GhXBXokmt/rFiWDaWkwV9F35ytykHOrucc91F/zbF/
Bb9VjmwY71WKeVnHrUWDjhm4Nb6WTK842o0G9+2+jFe0+gp4A7LgeXFvVLWO
wspUunLJz/M0iMiONokIypk2bz4qeendCU676y58GtlHSLK8WY7V5m+LEBMs
YEx7EgQsRKrVDQgCidY/LhQLUr/tw0/WoA1mhDnoYuIcTbpM04ar2ybstYK+
JgNF17JUIHNWJmeywB2l8S9bW7vuIv0qrwb5rasLxe+ITHfvXIhuqx1lFgCF
rjhgJLdYr4PajPthV55fnsd+IM9nxD7ucdAD/nnBBZA1dUP4yVNT2MBhsjlG
20JVA9AY7zlxkaqgJMroFXfWl6QNYbIaVSQGZVt/sNsVH/YG6G0reeceP3jc
Zbv4dG+t16lC5tiaMoxIQrEh9CIEohSXrplZJnoZnOgimT8LTGFDQnmeBIWy
mEIc1EGqKngR+splAfpgVClNq3ScpzFe0TtUs9F9IUb2HqHpJE3IqszdW6M7
B0RbYWRhkJMHjnyyNoMjPWs3jsi412sQbxndwyqJr7Liyv4SUr3trHpb9M8N
BDnxObI7CN7LHYqCdatZV7NPgS/o5Au7FAdqTLvxNSvnobnUA+SDi90j+0R+
ix7L2Q4Rtr+11qq8bO2Qq1MqdPUKbh0/LinZdW8NdOhErdWNZFQGcaf2+XTV
g/Ft39xGoRLZFiRfQAURMWSOdyExtokYj9tpYXkSIiyP++oqXZoMxtYgg7xS
4qmQ19U8CI2zEksuxGcTxMYT/SeuwpsV+sAimDw4HUHHCEALJUC+MiazHnrA
SuBd+Ee+vq9QheE3e5u4eHY9BIz1xp9xdWWiSxpRgjG+liGABIOR5l7Cguor
kWRUMKXiGX+AH6UC6KLcp+DznPXp6YCaSicBuOg5T0ZO8FsVT/qW8NfJeQL3
p3lKZW76AiILZrW8IHCkYi0bmhnDgX+Y+/pKLPyBnpJVVSZizVxg/0nHaxM/
tqEWdS906k/l8PRWR0DxCGjTOunwQuUAnnUt+BLH8IYH8oJ4cxJTlETmvqcP
N95STQN+pclBDkfn1/YNcW11UnYVrFWNmvt6tnfkc1k/DFVZ6fCghz/K9srp
63bYp/yhpjyKJjwvnJorwiTCO6f0nO8JOTGr5QmaAe6E4E4EO50XHJ1Pp0KL
yv4UzrWKP1fgRInelCs7va1eX5LBkN7KZOnqCVlGYt1Fj07mNL3Cg9RdPC8a
l8Qi+FYV1t9noxfgu77w8+nqawRIXtnWckdFV/Bjk+anoJk8ChzSGsLQspo1
jDKshBEZYZmWb1uTHjv+vYxgM1Cm7I71C0DD1u6xc1Swu6bU0Cwr5Rzhf9aa
WgtJEt5cttsVV2paF1dF56pKRYaZl16Xf575Ja23uF9JZK0FSbZrzk411yZr
7O6xpjJ0VoqeIIqmMnGqR0T7NvCzDDVbitKGtAdeeExHoym9O03jsOkaOi3o
aZ+pWyiroMgttzbal66Q0Bw8olKFYprp268M4pa+crbCoLYV3ttzL9wMLJ1F
hWaNCmWcVZEEIY9GKrjm3SnYaNBbDIXhpHuDsCmPKhjzLdeWthVotQ9DLFVO
K8lsaT3rKljKREilhJXfpJGGI0VtcyieICGlPHZSur598iWSl5/SpQh32m3G
zBKX5hGcRvcUdDTdvVJYcMQdlZpOsdpSPcyJPedyu7baTnGC2lt0+PqzDlkv
ewhw2RN/N59+GdBnHOFbvvPy7doKCM2pvpabh9YqTRquEOouuAOopXOtnM5t
13YzD7TrtBwkXOKc1Wedb132HNeyk9x0WiuGzRm21jnMWbV7/y0x/r0muem0
li3/u1HEKEwS7OzdXwWR4b8rIvZd5o53Jq41d7wzYSOlVKNQj7yJMUjw5cog
BBPAx7tA53TvXIJXcocTHqogm7w0Bvs1nIXY+q2n71M32t6qB4ty68oh40Wr
SetzUYxbjEim6cgYVN1adMWA0dUZfT6bY0YsFYFzaTOMguLDCE0Zdd+l9GJV
SfwC39VywMxpH9uPU0d0tDEtHmtH1fU5a4vlmMQty6UWRBjIX2xJbH/+3ovi
uNAOvGJBmn1oVllLvUBf9hBQ7Rri+x4C2qodAlreUKxOf8chIGGT2N9Adzk3
+JGUWOoU0MMcA/r0c0D9zb4WjvBtb9v6NtjeM98WHQRacOamcgLnxnL/KoMM
tgbWkaTNzY09821rZ/DYQNJyUVntWI141YS5IXHJcmLkhU8qJ1bXnRnP5s56
Ymz0KfXEW799iXJiWd/j6jBRV3xPOL9SYXEF9GpwVFUIN0XfrMCp9uZHr0cO
83zfGEQVt/aLF9NYAVUTLNYKQ9an6ePnIyNnR7VDu9Lb3+4Nels4tH5Thjzw
LY6OGN4yCosuuXTGFmfP3XCSPKRfWyNZnWaGrynEtvFtFWsmqPGPqGA7Jupa
8Fv3aFv3+tVOAsl0q7m83FIdZr/iHbyipboHtTnMRFSXWtVPqnQ2KH8mxYWa
bSSWTRodXltEnIEzXI04DilqAzYQ46CWENPZY9NQ3K7XKPXarmS0Li+vErjr
Xuro3t3ou9nrZe5wXFAzZch+2pynH6w5gt5inIZUesMl7wuy5c4Flw+dM2/J
udrTVl9f2Laadq3X0lnZhgtxxLDClxuJGyc+Kzvd8DKKBwJu+GcCV3cwEKgH
yOXXATpYZi8RA2PNiy+yCmYu4Z6ooLYqRsPaLu7jm7K3d7DM0aQT7LC3RNYN
jIMZL6VtW11Qxv9F562T62VAp01R5nQqoBn2fIYX6GY2DgvKaT57y/9bFcg0
yARhlj5M4YwV0HdKNq0MR907bkly/BnbtV7s4eLyRXbsF6m++WqEtuas5o5M
iotySN8OQe9RvWN811r1TgWYz6ve2XHrd7buVb8jVdyHaFQvz2F9VZeD1mG1
LkfO8ycU3hhoGgpvtpYuvCHkEHGn4Ea9Nx3fb5tHoTLXq/lI/bKhwGlm+xcL
TzU3vE7OquGELeWpVZLvNKL3FtGus8p2jU22qvhhr9e/e/q1rhxfH8bSNDAv
31SXJUlamLvqQSNpNM20g2VeIOjLS8hxwIYXacsrVbW8YEmKL8OL2SRLy3le
9XrFi+thXIlNhRYZn/iitbwGTdzKr+8yUhFUdYuAWgIHU2thB/da2tIUsauw
uHlFqJQm1uCb9xga1iSalTPH1DqX7+htYYqt+0NuqqadVyGARj45PdL15NYc
20vOgWtfCwdlDa9ptMbeWWJs2L8/420O2lIkMzqTQgeNxPqhgoW1zer9yXiH
hY6dhq17P5/SS7bHXLyEj8QJvdmiKkroxyinF4PTW8yRnf0wrGmzyvEk4B7f
m9P1/PTmavSzZaBDv64OmB4+ZddspN7o0fjyspEoBJFvGXTfuwlYxql82cg4
s84NWFWstVMVzprSS6vlySDhpss3lOCSqbdUi2+oY82hQfdVcz18x4x4xcyP
8p0u7CrNLhBPkggk6v1Jxrkp34We+IJj87bRaRoFvPpOJ1FPovWCoQTRRhnX
9K6SMaJCL+PDMil8e41JFDitz+ld73L5v1u4/N+tsEd1aqq3Py3xtqcbe1z5
Ls+v8HdjW5tfbVo77v81Jr2RZ2a+3ro+5B++BkzKKiz1YUyX9izupRNH+18L
Umfav/Kscr6vieID/ino1cvHlnipm12QU/PqV1t8srWuk1A0udJ637oL5WYL
aw7mgjk3G2as92ya0bmqsBptapmQdZ1cpTWl7tk+4w17s37w5zHCZ/61vMtu
iTf52XVb92InKyNtku3LspMp6PksdoIZl2anvZ37s5Od7Lam/G/PTu2vb/xU
drJLGky1xldmJ5jxi7KTXS1hTfnfnp3a39n5ycrus6TTAym7+0inT1F2/5FO
d0inWtX+f6TTf6RT7W8ROy1+yXhFOr1YkpusK76tW46buKl6FLkmnF4syUxG
vFgzNnFT04xfl7i1RbVverFuJbcQsVv0Zaop4zOZYhJpoy77x6/qmZPVipLa
jR7df/xG7wSRMzXdv7LacG/UmsNMzpvVl3ivfEU2LctM9hXx1vXSS3FTRTR9
MjPhhN8qM1UW1WEV61Z7C5Nvh5vuYqamW8s/j5m2a/vrqzMTXWi+FDd9W8xU
XzrC5JvhpqUl011G+NeRTA+j5r5lybRAzf2FJFPVBv+PZPoizPRXkkw6ievn
F24C1yQZKQ2qajtUZnC/0/mfbKnca/57SS+5sFOwTmLK1EnYudaZf41Zb/wP
3vGABeaiVbd+gaoYTtYXigtnpn4y4XE6wYoX663tE3rJA1UzABppRsn0gBrn
KnuLB7iwOb14Tr4hQNUu9ghn8a46vH2CX2HpwnmU5aJkkYm0Pp8CTXVen+51
H8/p9lZvY4BVMXh0B69ZE2tNRKBcbg+eHYRYM7bSUsKzonChpjG4jDP5Ann1
PsiCB9ME722DhSrw9k1RZrKo6ADHei+78zCChYko+yxHX2qE5bDvI/bvuLxO
UJZLgVyJCnktwtyupHVqWGR1qzn+tRRQuHxFFo1LQCrvUCpx7OPN2Y/YGdLu
PawmPQG5SjgMfSQNFraevj1kQ8psswMlckQ7aPZ+a8FzGPwguEjSq5iHE1rB
zsf9pJyNAfLwycq5H+d8BXbf/wfs3FU8mq4AAA==

-->

</rfc>
